在shellcode中手动解析时如何找到函数哈希?

逆向工程 外壳代码
2021-07-07 16:14:25

我正在反汇编一个shellcode,我发现它使用散列手动解析某些函数的地址以在kernel32.dll中查找函数。例子 :

call findKernel32Base
....
push 0EC0E4E8Eh
call findSymbolByHash
mov [ebp-4], eax

对于此示例,解析的函数是 LoadLibraryA,我通过在 google 上搜索哈希找到它,但是如果我在 google 上找不到它怎么办?如何在不调试 shellcode 的情况下找到与哈希值相关的函数(当我调试它时,一些手动解析失败,因此它崩溃)?

谢谢 !

1个回答

iirc 你不能从常量散列到名称,但散列导出的名称将生成的散列与常量进行比较

你可以在这里看到讨论和实现

使用以下讨论的翻录 python 实现

:\>cat foo.py
def rol32(val, amt):
        return ( (val << amt) & 0xffffffff ) | ( ( val >> (32 - amt) ) & 0xffffffff )

def ror32(val, amt):
        return ( (val >> amt) & 0xffffffff ) | ( ( val << (32 - amt) ) & 0xffffffff )

def add32(val, amt):
        return (val + amt) & 0xffffffff

def hash_export(name):
    result = 0
    index = 0
    while(index < len(name)):
        result  = add32(ror32(result, 13), ord(name[index]) & 0xff)
        index += 1
    return result

print hex(hash_export("LoadLibraryA"))
:\>python foo.py
0xec0e4e8eL