標 題:易語言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 ebp, ecx
.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 eax, eax
.text:004BDD64 jnz short loc_4BDDC5 ; IsBadReadPtr返回不為0直接返回
.text:004BDD66 mov eax, [edi+3Ch] ; DOS Stub -> EAX
.text:004BDD69 xor ecx, ecx
.text:004BDD6B add eax, edi ; PE Header -> EAX
.text:004BDD6D mov ebx, dword_533C88 ; 預設校驗和 -> EBX
.text:004BDD73 xor esi, esi
.text:004BDD75 mov cx, [eax+14h] ; File Header -> CX
.text:004BDD79 lea edx, [ecx+eax+18h] ; Section Name -> EDX
.text:004BDD7D xor ecx, ecx
.text:004BDD7F mov cx, [eax+6] ; NumberOfSections -> CX
.text:004BDD83 test ecx, ecx
.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 esi, ecx ; 沒有取完節迴圈
.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 ecx, edi
.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