0

落入这样的任务手中。有两个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. 在这里,我承认以上所有内容都没有帮助我。接下来,我认为既然有这样的调用 call qword ptr [rax+18h] (在分析的函数中有8个),那么这些很可能是对对象(s)的方法的调用。您可能可以找到一个 vftable 并了解这些方法属于哪个类,并且已经创建了一组类。在我的函数中调用的方法。接下来,在 new.dll 中搜索调用相应类的此类方法序列的位置。
  7. 您可能可以尝试在我的函数中查找对象的创建位置以及它的来源。接下来,在 new.dll 中寻找类似的踪迹。不确定是否可以在不调试此 dll 的情况下应用此方法。不清楚如何运行dll,因为只有三个导出函数: DllGetLCID PPMain 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, [rsp+280h+pperrinfo]
mov     rdx, 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
4

0 回答 0