LONG lDistanceToMove, //要移动的距离,这个是低32位
PLONG lpDistanceToMoveHigh, //要移动的距离,这是高32位,要注意这是一个指向数据的指针
DWORD dwMoveMethod //表示指针开始的位置
);
winhex里,未脱壳的尾部数据:
000d264dh: 4E 3E 4E 3E 0A 4E 3E 4E 3E 00 00 00 00 09 00 00 ; N>N>.N>N>.......
000d265dh: 00 2E 5C 66 73 62 2E 49 50 44 00 24 0C 00 5A 26 ; ..\fsb.IPD.$..Z&
000d266dh: 0D 00 20 20 20 20 46 53 4A 4D 20 49 50 44 20 57 ; .. FSJM IPD W
000d267dh: 33 32 ; 32
000C2400就对应:DWORD dwMoveMethod
000D265A就是指向长度的偏移地址
所以修复的两个要点就是overlay的长度和overlay的开始地址!
要做的就是选中整个overlay的数据段,copy到脱壳文件里。
选000C2400为段开始,选000D267E为段结束,这就是整个overlay的数据段,编辑-》复制选块-》正常。
winhex打开脱壳后文件,不需要费心找空白的地方,直接在最后一字节后paste,因为winhex可以自动扩展文件长度。
paste后文件尾部地址和数据情况:
00259a4dh: 4E 3E 4E 3E 0A 4E 3E 4E 3E 00 00 00 00 09 00 00 ; N>N>.N>N>.......
00259a5dh: 00 2E 5C 66 73 62 2E 49 50 44 00 24 0C 00 5A 26 ; ..\fsb.IPD.$..Z&
00259a6dh: 0D 00 20 20 20 20 46 53 4A 4D 20 49 50 44 20 57 ; .. FSJM IPD W
00259a7dh: 33 32
; 32
查看长度地址09的偏移量为00259A5A
所以修改000D265A为00259A5A
修改overlay数据开始地址,修改000C2400为00249800
修改后数据情况:
00259a4dh: 4E 3E 4E 3E 0A 4E 3E 4E 3E 00 00 00 00 09 00 00 ; N>N>.N>N>.......
00259a5dh: 00 2E 5C 66 73 62 2E 49 50 44 00 98 24 00 5A 9A ; ..\fsb.IPD.?.Z?
0259a6dh: 25 00 20 20 20 20 46 53 4A 4D 20 49 50 44 20 57 ; %. FSJM IPD W
00259a7dh: 33 32 ; 32
保存就ok了:)
--------------------------------------------------------------------------------
【破解总结】
这类overlay问题和《浅谈脱壳中的附加数据问题(overlay)》所提到的overkay问题好象
是同属一个问题的两个类型。本文提到的overlay的处理时,是不能运用《浅谈》一文里爆
句的方法,因为这里的数据虽然是附加数据,但是文件数据的主体的一部分,缺少这部分数
据,文件虽然能运行,但却是没有意义的!所以只能手动修正尾部的overlay数据。
这种数据产生的原因大概是dephi对附加资源的保存过程中产生的,具体流程不太了解:(
以下给出这类dephi的overlay数据手动处理的快捷方法,无须使用ollydbg,有点机械,如有
错误望指出。
1)脱掉主文件的壳,修复错误的输入表
2)16进制编辑器打开原文件,查找文本“f2000”把所得的偏移量减去5就是原文件里overlay
数据的开始地址,copy至文件尾部。
3)打开脱壳后文件,从文件最后一字节,开始粘贴,并记起始地址为A.
4)再查找文本“FSJM IPD W32”,所得的偏移量减去C就是存放起始地址的地方,用地址A代替
(注意数据的保存方式)
5)最后用存放起始地址的地方前最近的“00 00 00 00”后一个字节的偏移量替换存放起始地
址后的4字节的内容,保存就ok!
其实最好就是把外挂省下的钱给点xikug,forgot,老罗...写个工具出来,“他们那个都是编程
强人,说了少了,他不干,俺啊俺啊...”:)
上一页 [1] [2] [3]