import struct, sys, io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') data = open('HAVOC_NOCD.EXE','rb').read() FO2VA = lambda fo: fo + 0x400C00 VA2FO = lambda va: va - 0x400C00 # The strings: SETUP=0x46BEC4, DRIVE=0x46BECC, D:\=0x46BED4, HAVOC=0x46BED8 setup_va = 0x46bec4 drive_va = 0x46becc dcol_va = 0x46bed4 havoc_va = 0x46bed8 # Search for any instruction that loads these addresses (LEA, MOV, PUSH, etc.) targets = {setup_va: 'SETUP', drive_va: 'DRIVE', dcol_va: 'D:\\\\', havoc_va: 'HAVOC'} # Also look for GetPrivateProfileString / GetPrivateProfileInt in the IAT # These are Windows API calls print("=== Searching for IAT calls to GetPrivateProfile* ===") for fo in range(0x400, len(data)-5): if data[fo] == 0xff and data[fo+1] == 0x15: # CALL [IAT_addr] iat_addr = struct.unpack_from('