IDA Script, Get Nom de la fonction qui a des caractères aléatoires impliqués dans le nom


4

J'essayais de comprendre s'il y avait une façon dont je peux obtenir l'adresse pour un nom de fonction qui a des caractères aléatoires. Par exemple le nom de la fonction est "Player_GetStats_m29275" ici "m292755" est des caractères aléatoires. Donc, je veux rechercher le nom de la fonction par juste "Player_GetStats" alors il me donne l'adresse de la fonction.

get_name_ea n'est pas bon pour ce faire. Je peux rechercher la fonction avec find_text mais c'est trop lent et prend beaucoup de temps même si je mentionne le segment.

S'il vous plaît aider, je serais reconnaissant. Merci

2

Autant que je sache, IDA n'a pas de function_name_to_address() qui reçoit un motif et retourne une adresse. Vous pouvez parcourir toutes les fonctions et vérifier si leur nom correspond à celui que vous voulez. Cela ne devrait pas prendre trop de temps.

from idautils import * 
from idaapi import * 
from idc import * 

ea = BeginEA() 
for funcAddr in Functions(SegStart(ea), SegEnd(ea)): 
  funcName = GetFunctionName(funcAddr) 
  # Check if the function name starts with "Player_GetStats" 
  if funcName.startswith("Player_GetStats"): 
   print "Function %s is at 0x%x" % (funcName, funcAddr) 

Vous pouvez également utiliser regular expression pour correspondre au nom que vous voulez:

import re 

funcName = "Player_GetStats_m29275" 
re.compile("^Player_GetStats_\w\d{5} $") 
if pattern.match(funcName): 
  "%s match the pattern" % funcName 

Explication:

  • ^ est pour "commence par"
  • \w correspond à un mot caractère ("m" dans ce cas)
  • \d correspond à un chiffre
  • {5} vérifie que l'expression précédente (\d) répète 5 fois
  • $ est de "fin de ligne"