易語言3.5很暗的暗樁分析:)

看雪資料發表於2015-11-15

標 題:易語言3.5很暗的暗樁分析:)

發信人:linson

時 間:2003年11月08日 10:36 

詳細資訊: 


這個程式很多人破解不成功其實是因為它發現你修改了他 :lol: 
作者的方法是檢測程式執行後程式碼段校驗和是否為作者預先設定好的,不是就無聲無息的編譯垃圾出來:twisted:這個是他的發現你修改它程式碼的程式碼(有點繞口),可以透過構造資料(CRC)或者爆破掉這個樁子。
同時很佩服作者呀 :wink: 
.text:004BDD50 ; 記憶體程式碼段校驗
.text:004BDD50 
.text:004BDD50 MemoryCodeCheck proc near               ; CODE XREF: .text:00454AA6p
.text:004BDD50                 push    ebx
.text:004BDD51                 push    ebp
.text:004BDD52                 mov     ebpecx
.text:004BDD54                 push    esi
.text:004BDD55                 push    edi
.text:004BDD56                 push    4               ; DataSize = 0x4(DWORD)
.text:004BDD58                 mov     edi, [ebp+68h]  ; ImageBase -> EDI
.text:004BDD5B                 push    edi             ; DataAddress = 0x00400000
.text:004BDD5C                 call    ds:IsBadReadPtr ; IsBadReadPtr
.text:004BDD62                 test    eaxeax
.text:004BDD64                 jnz     short loc_4BDDC5 ; IsBadReadPtr返回不為0直接返回
.text:004BDD66                 mov     eax, [edi+3Ch]  ; DOS Stub -> EAX
.text:004BDD69                 xor     ecxecx
.text:004BDD6B                 add     eaxedi        ; PE Header -> EAX
.text:004BDD6D                 mov     ebx, dword_533C88 ; 預設校驗和 -> EBX
.text:004BDD73                 xor     esiesi
.text:004BDD75                 mov     cx, [eax+14h]   ; File Header -> CX
.text:004BDD79                 lea     edx, [ecx+eax+18h] ; Section Name -> EDX
.text:004BDD7D                 xor     ecxecx
.text:004BDD7F                 mov     cx, [eax+6]     ; NumberOfSections -> CX
.text:004BDD83                 test    ecxecx
.text:004BDD85                 jle     short loc_4BDDC5 ; NumberOfSections不大於0直接返回
.text:004BDD87                 mov     eax, 20000000h  ; 0x20000000 -> EAX
.text:004BDD8C 
.text:004BDD8C loc_4BDD8C:                             ; CODE XREF: MemoryCodeCheck+47j
.text:004BDD8C                 test    [edx+24h], eax
.text:004BDD8F                 jnz     short loc_4BDD9E ; Characteristics不為0x20000000則為程式碼段
.text:004BDD8F                                         ; 跳到校驗部分
.text:004BDD91                 add     edx, 28h
.text:004BDD94                 inc     esi             ; 計數器自加
.text:004BDD95                 cmp     esiecx        ; 沒有取完節迴圈
.text:004BDD97                 jl      short loc_4BDD8C
.text:004BDD99                 pop     edi             ; 沒有找到程式碼段返回
.text:004BDD9A                 pop     esi
.text:004BDD9B                 pop     ebp
.text:004BDD9C                 pop     ebx
.text:004BDD9D                 retn
.text:004BDD9E ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:004BDD9E 
.text:004BDD9E loc_4BDD9E:                             ; CODE XREF: MemoryCodeCheck+3Fj
.text:004BDD9E                 mov     ecx, [edx+0Ch]
.text:004BDDA1                 mov     eax, [edx+8]
.text:004BDDA4                 add     ecxedi
.text:004BDDA6                 push    eax
.text:004BDDA7                 push    ecx
.text:004BDDA8                 call    CRC32_hash      ; 進行迴圈冗餘校驗
.text:004BDDAD                 mov     edx, [ebp+674h]
.text:004BDDB3                 add     esp, 8          ; 清理堆疊
.text:004BDDB6                 cmp     eax, [ebx+edx*4] ; 比較記憶體程式碼校驗和與預設的是否符合
.text:004BDDB9                 jz      short loc_4BDDC5 ; 勝利
.text:004BDDBB                 or      dword ptr [ebp+77Ch], 938Fh ; 往下就不好玩了:(
.text:004BDDC5 
.text:004BDDC5 loc_4BDDC5:                             ; CODE XREF: MemoryCodeCheck+14j
.text:004BDDC5                                         ; MemoryCodeCheck+35j ...
.text:004BDDC5                 pop     edi
.text:004BDDC6                 pop     esi
.text:004BDDC7                 pop     ebp
.text:004BDDC8                 pop     ebx
.text:004BDDC9                 retn
.text:004BDDC9 MemoryCodeCheck endp
---
written by linson

相關文章