|
发表于 2009-8-21 10:03:12
|
显示全部楼层
/:001 /:001 /:001
注:以下修改针对的是主程序脱壳后的PE文件(没脱壳的主程序怎么改LZ自个发挥)
在PE文件偏移235267位置的值
改成
将以下二进制代码
C6 05 A2 D1 45 00 E9 C6 05 A3 D1 45 00 B1 C6 05 A4 D1 45 00 05 C6 05 A5 D1 45 00 00 C6 05 A6 D1
45 00 00 E9 E3 FC FF FF C6 05 E8 4B 40 00 EB 68 00 80 00 00 E9 3E FA FF FF 90
复制到PE文件偏移2353D8位置即可去掉(导出EXE)的水印(注:2353D8位置是精心确定过的,是个空白位置且不会被改写的位置)
至于原理就不多说了,给你以下提示吧!
一、主程序中存在导出EXE文件压缩后的代码。具体位置和大小的确定,你可以下bp CreateFileA断点,然后再导出EXE这样就可以断下了。接下来你可以自已跟踪发挥吧!(我这的位置是60AEA8,对应PE文件的位置就是20AEA8).
二、再逆下导出的EXE文件看水印是怎么生成的.将关键位置的地址记下!(后面要PATCH要用到,由于导出EXE文件的代码是主程序导出的,所以可以要了解导出EXE文件产生水印的具体位置)
004037E1 |. 8D4E 7C lea ecx, dword ptr [esi+7C]
004037E4 |. E8 972B0000 call 00406380
004037E9 |. 8B4E 30 mov ecx, dword ptr [esi+30]
004037EC |. 890D B89E4400 mov dword ptr [449EB8], ecx
004037F2 |. B9 889E4400 mov ecx, 00449E88
004037F7 E8 540C0000 call 00404450 ;导出EXE文件产生水印的关键CALL在这里(可以进去找地方改跳转,有个地方1字节搞定)
004037FC |. 8B4E 30 mov ecx, dword ptr [esi+30]
004037FF |. 8B11 mov edx, dword ptr [ecx]
00403801 |. FF52 24 call dword ptr [edx+24]
00403804 |> B0 01 mov al, 1
00403806 |. 5E pop esi
00403807 |. 83C4 10 add esp, 10
0040380A \. C2 0400 retn 4
上面的关键CALL我是怎么找到的,嘿嘿,其实主程序里就有线索的!主程序预览水印是如何产生的。那导出EXE的水印也就大同小异了!
关键断点bp SetROP2 (SetROP2 API的说明可以自已搜)剩下你自已发挥吧!
注:导出的EXE文件加了压缩壳的,你带壳调试也可以,如果要脱壳的话,要注意的是导出EXE脱壳后要校验附加数据的位置(附加数据的内容就是你在主程序中创建文件的二进制代码和后缀是exelan语言文件的二进制代码(好像是加过密的))导出EXE没有脱壳前。附加数据的起始位置是在2BA00。而这个值就存在附加数据里。自已可以搜索定位一下!在导出EXE脱壳文件的相应位置将值改成其脱壳后附加数据所在的位置即可去掉校验!
PS:嘿嘿,时间有限。就先说这些吧。也不知说明白了没!
[ 本帖最后由 hflywolf 于 2009-8-21 10:28 编辑 ] |
|