修补PECompact v1.41b1使之可以反复加壳的方法----这是SE??什么方法的吧?别写错了。不然文化局的同志就来了。 (2千字)
修补PECompact v1.41b1使之可以反复加壳的方法----这是SE??什么方法的吧?别写错了。不然文化局的同志就来了。写作
【前言】
昨天,找到了PECompact v1.41b1判断其加壳标志的地方。今天继续追踪。
从前文中知道只要改变跳转方向可以使PECompact v1.41b1反复加壳。
:00403871 817E0C5045434F cmp dword ptr [esi+0C], 4F434550 <--判断是否是 'PECO',这是PECompact加壳的标志
:00403878 0F841C010000 je 0040399A <--就是要改这里
不巧的是,在分析其他软件的过程中改动了日期,这次分析时PECompact跳出框框来说俺使用过期了。哈!真是没事找事,正好一起作手术!我偷懒没有去分析注册的方法。(其实不偷懒也未必找得到,现在俺的破解功夫早已成了花架子了)只是简单地让他不过期就行了。找到以下一处代码:(至于其他判断过期的地方,我就没有去管了,刚看了Predator做内科手术的方法,我也想试试这种Patch的方法。)
:00405262 6883A24000 push 0040A283
* Reference To: KERNEL32.GetLocalTime, Ord:00F5h
|
:00405267 E80F270000 Call 0040797B
:0040526C 66813D83A24000D007 cmp word ptr [0040A283], 07D0
:00405275 750A jne 00405281
:00405277 66833D85A2400007 cmp word ptr [0040A285], 0007
:0040527F 761C jbe 0040529D <--我要改这里的跳转方向,不跳就Game Over了。
先找到脱壳后可以让我加入Patch代码的地方。找到340处,这里宽敞明亮,适合居住。
然后,来找找芝麻开门的地方。
00008090 6A00FFD0 FFA59A21 4000619D 68007041 j......!@.a.h.pA
000080A0 00C30000 40000080 41000000 00100000 ....@...A.......
这里的809D - 80A0的字节为 00704100,对应长整数为00417000,正好是脱壳第四层的入口点。三层壳过后代码已经还原,好!这里可以设计大门,让他到我家坐坐再走。
把00704100改为40034000。
现在再来设计我们的居室 (Patch代码)
C7057838400090909090 mov dword ptr [00403878],90909090
66C7057C3840009090 mov word ptr [0040387C],9090
C6057F524000EB mov byte ptr [0040527F],EB
6800704100 push 00417000
C3 ret
把此处十六进制代码加入340处。(注:此方法是对未脱壳的PECompact而言,什么?你拿脱壳后的PECompact.EXE来做手术,完了!病人死定了。)
测试,OK!怎么PECompact.EXE没判断CRC的地方。
【后记】
这种动内科手术的方法确实高效。几行代码就搞定了,不用又去启动C++Builder了,让我的老老爷机也轻松了一把。
