我正在处理一个混淆的二进制文件。我认识到一些模式用于混淆反汇编器,一些用于混淆函数调用,一些用于条件跳转等等。
这个想法是沿着二进制搜索这些模式。问题是这种模式经常与无条件跳转交织在一起。
例如,此代码用于替换简单的条件跳转:
push offset loc_123456
push ebx
push eax
mov ebx, [esp+8]
mov eax, offset loc_654321
cmovz ebx, eax
mov [esp+8], ebx
pop eax
pop ebx
retn
问题是这个模式经常被分割成两部分或更多部分(因为整个代码被分割成几个块,散布在二进制中的任何地方,然后用无条件跳转连接),当然我不能用简单的字节找到它模式搜索。
有没有办法寻找满足模式的所有代码段,即使它们被分成 2 个(或更多)段并与无条件跳转连接?