Code:
import re
import binascii
addresses = [
("ADDRESS_BASE", 'A1(.{8})5332DB8B48.{2}'),
("ADDRESS_SENDPACKET", '6AFF68.{8}64A100000000506489250000000083EC185356578BF96A07'),
("ADDRESS_AUTOPATH", '6AFF68.{8}64A100000000506489250000000083EC2053568BF18D4C2408E8.{8}8B4C243C8B542440'),
("ADDRESS_ACTION1", '64A1.{8}6AFF68.{8}508B442410648925.{8}5683F8138BF1'),
("ADDRESS_ACTION2", '83EC2453558B6C243056578B7C243C8BF133DB896E2C8B07894620'),
("ADDRESS_ACTION3", '5355568B74241485F6578BD975095F5E5D32C05BC20C00'),
("ADDRESS_GATHER", '5355578BF98B87.{8}C1E807A8010F85.{8}E8.{8}84C00F85.{8}8B6C2410'),
("ADDRESS_CASTSKILL", '535556578BF16A04E8.{8}8B8E.{8}83C40485C974076A02'),
("ADDRESS_REGATTACK", '53558B6C240C56578BF985ED0F84.{8}3BAF.{8}0F84.{8}A1.{8}'),
("PARTYINV_ADDRESS", '9068.{8}68.{8}6A066A1068(.{8})E8.{8}C390', 0x20),
("ADDRESS_INSTANCE_BASE", '5F5E5B8BE55DC21000E8....FFFF8B0D(.{8})898D....FFFFE8....FFFF84C07525'),
("MACRO_ADDRESS_BASE ", '81C4.{8}C21000A0(.{8})8BB424.{8}8B3D.{8}84C074056A0656FFD76A0056FFD781C5', 0x1E),
("OFFSET_ACTIONBASE ", '8B40..8B0D.{8}3BC1740B837E..027C05C64424..018B8F(.{8})6A006A016A02C64424..00E8.{8}85C0'),
("GameRun", "5f5e5b8be55dc21000e8....ffff8b0d(.{8})898d....ffffe8....ffff84c075")
]
def retrieveAddresses(file, addresses):
for address in addresses:
pattern = address[1]
match = re.search(pattern.lower(), ascii)
if match:
value = hex(match.start()/2 + 0x400000)
if len(match.groups()) > 0:
#print match.groups(0)[0]
value = revHex(match.groups(0)[0])
offset = address[2] if len(address) > 2 else 0
value = hex(int(value, 16)+offset)
print "Global $"+address[0],"=", value
else:
print "; Not found: $"+address[0]
def revHex(string):
return ''.join([str(string[x:x+2]) for x in range(len(string)-2, -2, -2)])
f = open("C:\Games\PWI_en\element\elementclient.exe", 'rb')
data = f.read()
ascii = binascii.hexlify(data)
retrieveAddresses(ascii, addresses)