在新版本的二进制文件中查找相似代码的方法

问题描述

掌握了这样的任务。有两个dll。由于向我解释了第二个文件 (new.dll),这是第一个文件 (old.dll) 的新版本。 这两个文件都是为 x64 编译的。 我需要在 new.dll 中找到一些函数变成了 old.dll。以下是其中一项功能的示例。 请表达您对我寻找新版本代码方法的看法: 我首先使用 rdare2 查找 old.dll 中的所有函数(超过 4 万个),创建一个带有签名的文件并将其设置在一个文件中。最后,什么也没找到。我的结论是这些变化不仅仅是表面上的。 接下来,我决定搜索如下:

  1. 搜索函数代码的片段。我在调用函数之前先看序言,然后在 new.dll 中查找这个字节序列。
  2. 我尝试查找出现在函数中的常量、字符串和其他幻数,并在 new.dll 中查找它们。
  3. 我分析了所有调用所需函数函数,并尝试在 new.dll 中找到一组类似的调用函数
  4. 我尝试确定直到第一个(顶部)函数调用顺序,并在新文件中找到类似的调用顺序。
  5. 我分析了从所需函数调用的所有函数,并尝试在 new.dll 中找到一组相似的调用函数
  6. 在此我承认上述所有内容都没有帮助我。接下来我想,既然有这样的调用调用qword ptr [rax+18h](分析的函数中有8个),那么这些大概就是对对象的方法调用了。您可能会找到一个 vftable 并了解这些方法属于哪个类,并且已经创建了一组类。在我的函数调用方法。接下来,在 new.dll 中搜索来自相应类的方法序列被调用的位置。
  7. 您可能可以尝试在我的函数中找到对象的创建位置以及它的来源。接下来,在 new.dll 中查找类似的跟踪。不确定是否可以在不调试此 dll 的情况下应用此方法。由于只有三个导出函数,所以不清楚如何运行dll: 获取LCID 主程序 DllEntryPoint

列出的搜索方法中哪些是乌托邦,哪些不是?也许有更多经过验证的选择? 功能之一的示例:

.text:00000001806FFB30                               f1              proc near               ; CODE XREF: sub_1806F3630+172↑p
.text:00000001806FFB30                                                                       ; sub_1806FFC70+27↓p ...
.text:00000001806FFB30
pperrinfo        = qword ptr -260h
perrinfo          = qword ptr -258h
var_250         = qword ptr -250h
var_248         = dword ptr -248h
var_244         = qword ptr -244h
var_23C         = word ptr -23Ch
var_30          = qword ptr -30h
; __unwind { // __GSHandlerCheck
push    rbp
push    rbx
push    rsi
push    rdi
push    r14
lea      rbp,[rsp-160h] ; Load Effective Address
sub     rsp,260h       ; Integer Subtraction
mov    rax,cs:__security_cookie
xor     rax,rsp        ; Logical Exclusive OR
mov    [rbp+180h+var_30],rax
mov    rbx,rcx
mov    esi,r8d
lea      rcx,[rsp+280h+pperrinfo] ; pperrinfo
mov    rdi,rdx
call     cs:CreateErrorInfo ; Indirect Call Near Procedure
xor     r14d,r14d      ; Logical Exclusive OR
test    eax,eax        ; Logical Compare
jns     short loc_1806FFB80 ; Jump if Not Sign (SF=0)
mov   ecx,8B843h
call     Mso20Win32Client_1159 ; Call Procedure
jmp    loc_1806FFC52   ; Jump
; ---------------------------------------------------------------------------
loc_1806FFB80:                          ; CODE XREF: f1+3F↑j
mov   rdx,cs:qword_181031910
test    rdx,rdx        ; Logical Compare
jz       short loc_1806FFB9D ; Jump if Zero (ZF=1)
mov   rcx,[rsp+280h+pperrinfo]
mov   rdx,[rdx]
mov   rax,[rcx]
mov   rdx,[rdx]
call    qword ptr [rax+18h] ; Indirect Call Near Procedure
loc_1806FFB9D:                          ; CODE XREF: f1+5A↑j
mov     rcx,[rsp+280h+pperrinfo]
mov     rdx,rdi
mov     rax,[rcx]
call      qword ptr [rax+30h] ; Indirect Call Near Procedure
mov     rcx,[rsp+280h+pperrinfo]
mov     edx,esi
mov     rax,[rcx]
call      qword ptr [rax+38h] ; Indirect Call Near Procedure
mov     rcx,cs:qword_181038800
lea       rax,[rsp+280h+var_23C] ; Load Effective Address
mov     r9d,100h
mov     [rsp+280h+var_250],rax
lea       r8,[rsp+280h+var_23C] ; Load Effective Address
mov     [rsp+280h+var_244],r9
mov     edx,61850043h
mov     [rsp+280h+var_248],1
mov     [rsp+280h+var_23C],r14w
call      Mso30Win32Client_27 ; Call Procedure
mov     rcx,[rsp+280h+pperrinfo]
add      eax,eax        ; Add
mov     rdx,[rsp+280h+var_250]
mov     dword ptr [rsp+280h+var_244+4],eax
mov     rax,[rcx]
call      qword ptr [rax+20h] ; Indirect Call Near Procedure
mov     rcx,rbx
mov     rax,[rcx]
call      qword ptr [rax+28h] ; Indirect Call Near Procedure
mov     rcx,[rsp+280h+pperrinfo]
lea       r8,[rsp+280h+perrinfo] ; Load Effective Address
lea       rdx,unk_180C909A8 ; Load Effective Address
mov     rax,[rcx]
call      qword ptr [rax] ; Indirect Call Near Procedure
test      eax,eax        ; Logical Compare
js         short loc_1806FFC47 ; Jump if Sign (SF=1)
mov     rdx,[rsp+280h+perrinfo] ; perrinfo
xor      ecx,ecx        ; dwReserved
call      cs:SetErrorInfo ; Indirect Call Near Procedure
mov     rcx,[rsp+280h+perrinfo]
mov     rax,[rcx]
call      qword ptr [rax+10h] ; Indirect Call Near Procedure
loc_1806FFC47:                          ; CODE XREF: f1+FD↑j
mov     rcx,[rsp+280h+pperrinfo]
mov     rax,[rcx]
call      qword ptr [rax+10h] ; Indirect Call Near Procedure
loc_1806FFC52:                          ; CODE XREF: f1+4B↑j
mov     rcx,[rbp+150h]
xor      rcx,rsp        ; Logical Exclusive OR
call      sub_1801BFAE0   ; Call Procedure
add     rsp,260h       ; Add
pop     r14
pop     rdi
pop     rsi
pop     rbx
pop     rbp
retn                    ; Return Near from Procedure
; } // starts at 1806FFB30
f1              endp

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)