對ljtt《金天地MH型軟體狗 "時間間隔檢測保護"的一點分析》一文的一點補充 (1千字)

看雪資料發表於2000-12-29

我看了ljtt的那篇文章,於是跟著作了,但卻不成功,於是我也跟蹤了一下,
發現程式在015F:00408A2F處有一call走過之後就會推出,於是用F8跟進

0040782F 55              push    ebp
00407830 8BEC            mov    ebp, esp
00407832 83EC4C          sub    esp, 4Ch
00407835 53              push    ebx
00407836 56              push    esi
00407837 57              push    edi
00407838 C745C800000000  mov    dword ptr [ebp-38h], 0
0040783F 833D7C30410000  cmp    ds:dword_41307C, 0      <-判斷此處是否為0
00407846 0F843B010000    jz      loc_407987              <-跳就完了
0040784C C745D0724102CF  mov    [ebp+var_30], 0CF024172h
00407853 8175D035247683  xor    [ebp+var_30], 83762435h

由於後面的程式還會判斷41307C是否為0,所以我把0040783F處的程式碼改為

0040783F C6057C30410001  mov      ds:dword_41307C, 1

正好也是7個位元組,這樣就可以對付以後的判斷了。另外

004079FD  C705183041004C9B4000  MOV DWORD PTR [00413018],00409B4C

的程式碼和

00408F28  C705183041004C9B4000  MOV DWORD PTR [00413018],00409B4C

一樣於是我把它也改為

C705BE324100D3000000  MOV DWORD PTR [004132BE],000000D3

否則照樣無法執行。

被mh-dog加殼的程式的那個用來還原程式資料的“密匙”
放.data的某處(在notepadmh.exe中為123FFh處),只要
一個位元組即可,而源程式的oep,放在.gdata的+18h處的4
個位元組(dj-dog加的殼的oep在.gdata的+10h處)。
我還沒找出好方法來判斷那個“密匙”存放的地方。

最後,我要感謝ljtt的無私奉獻!
ps:ljtt,你能把如何反推出“密匙”的方法詳細的講一下嗎?
我比較笨,怎麼跟都看不懂演算法。

相關文章