我看了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,你能把如何反推出“密匙”的方法详细的讲一下吗?
我比较笨,怎么跟都看不懂算法。
- 标 题:对ljtt《金天地MH型软件狗 "时间间隔检测保护"的一点分析》一文的一点补充 (1千字)
- 作 者:真.hp
- 时 间:2000-12-29 22:28:52
- 链 接:http://bbs.pediy.com