使用IDAPython解密被加密函数名

最近分析一款病毒,输入表是空的,并且搜字符串,搜不到函数名,函数名被加密了。
就写了个脚本把函数名都解密起来,并加注释,方便在IDA中查看。
完整脚本如下:

def get_string(addr):
    out = ""
    sourceString = "amNFHufoTRn0P3vI8xBS4t6jM9CqXeibUDEpQ1ZGYywJzAg7sk2lc5WLOrKdhV.?"
    destString   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.?"
    while True:
        if Byte(addr) != 0:
            idx=sourceString.find(GetString(addr, 1,ASCSTR_C))
            if idx != -1:
                out += destString[idx]
        else:
            break
        addr += 1
    return out

def get_string_addr(addr):
    while True:
        addr = PrevHead(addr)
        if GetMnem(addr) == "mov" and "edx" == GetOpnd(addr,0):
            return addr
    return ""            

def decrypt_function_name():
    base_addr_arry = [0x404D44, 0x404488]
    for base_addr in base_addr_arry:
        cross_refs=CodeRefsTo(int(base_addr),0)
        for code_addr in cross_refs:
            stringStartAddr = DataRefsFrom(get_string_addr(code_addr))
            for addr in stringStartAddr:
                str = get_string(addr)
                MakeComm(code_addr, str)
decrypt_function_name()

解密前

解密后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值