Created by
Alexander Hanel
| # UIWIX string decoder for IDAPython
import idautils
from string import maketrans
def backtrace(addr):
encoded_push_addr = idc.PrevHead(addr)
if idc.GetMnem(encoded_push_addr) == 'mov' and idc.GetOpnd(encoded_push_addr,0) == "edx":
return (True, idc.GetOperandValue(encoded_push_addr, 1))
else:
return (False, encoded_push_addr)
def decode(encoded_string,trantab):
return str(encoded_string).translate(trantab)
func_addr = 0xABA6FA8
intable = 'amNFHufoTRn0P3vI8xBS4t6jM9CqXeibUDEpQ1ZGYywJzAg7sk2lc5WLOrKdhV'
outtable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
trantab = maketrans(intable, outtable)
for addr in idautils.CodeRefsTo(func_addr, 0):
temp_addr = addr
for ii in range(0,5):
found, temp_addr = backtrace(temp_addr)
if found:
encode_data_offset = temp_addr
break
if found:
encoded_string = idc.GetString(encode_data_offset)
decoded = decode(encoded_string,trantab)
idc.MakeComm(addr, decoded)
|
API Renamer