首页
社区
课程
招聘
我的还原经历
发表于: 2004-8-24 15:49 7145

我的还原经历

2004-8-24 15:49
7145

题目:我的还原经历

由于曾经用自己未完全破解(当然在一个偶然才发现)的 EasyCHM 编译了一本定名为abc.chm,并将相关的源文件痛快地删除了,后来发现后,就顺便把 EasyCHM 破解完全!可惜该abc.chm文件内的所有文件都被附加 Unregistered 的东西(“加料料理”,我不太接受),它特征为:每个文件尾部都加上 F1h 长度的固定16进制串。因为释放文件数量比较大,如果人工用16进制工具进行还原,天啊,所以需要批量处理释放文件,于是到 bbs.pediy.com 求助,谁知不久后论坛就给人攻击了,无奈只好亲自就从反编译功能方面着手调试跟踪。反编译当然是释放文件啦,那么就是要写文件,跟踪发现程序(功能已破解完全,不然反编译还会“加料料理”)反编译中会对每一个被释放文件以每次1000h的长度划分到缓冲区(待写),不足1000h就认为是该文件的最后一次写操作。

下面跟踪到写文件必经地方(具体地址已忽略):

00333314   jmp dword ptr ds:[<&kernel32.WriteFile>]; // 可从这修改到指定代码实行的地方,如:999900
0033331C   push ebp
0033331D   mov ebp,esp
0033331F   push ecx
00333320   push ebx
00333321   push esi
00333322   push edi
00333323   mov esi,ecx
00333325   mov edi,edx
00333327   mov ebx,eax
00333329   mov eax,dword ptr ss:[ebp+10]
0033332C   movzx edx,word ptr ds:[ebx+4]
00333330   and edx,eax
00333332   cmp eax,edx
00333334   jnz short EasyCHM.0033338E
00333336   push 0                              ; // lpOverlapped 倘若在指定FILE_FLAG_OVERLAPPED的前提下打开文件,这个参数就必须引用一个特殊的结构。那个结构定义了一次异步写操作。否则,该参数应置为空
00333338   lea eax,dword ptr ss:[ebp-4]
0033333B   push eax                            ; // lpNumberOfBytesWritten 实际写入文件的字节数量
0033333C   mov eax,dword ptr ds:[ebx+8]
0033333F   imul esi
00333341   push eax                            ; // nNumberOfBytesToWrite 要写入数据的字节数量。
00333342   push edi                            ; // lpBuffer 要写入的一个数据缓冲区
00333343   mov eax,dword ptr ds:[ebx]
00333345   push eax                            ; // hFile 文件的句柄
00333346   call dword ptr ss:[ebp+C]           ; // 实际是 Call 00333314 ; kernel32.WriteFile
00333349   test eax,eax			       ; // 写文件成功则返回 1
0033334B   jnz short EasyCHM.0033335E
0033334D   call <jmp.&kernel32.GetLastError>
0081E760    00333349  /CALL 到 WriteFile 来自 EASYCHM.00333346
0081E764    000000C8  |hFile = 000000C8 (region)
0081E768    0081E7E8  |Buffer = 0081E7E8
0081E76C    00001000  |nBytesToWrite = 1000 (4096.)
0081E770    0081E784  |pBytesWritten = 0081E784
0081E774    00000000  \pOverlapped = NULL
0081E778    01281D0C  ASCII "<br><hr><br> This file is decompiled from a .CHM file <br>by an UNREGIST>......"

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
GOOD
2004-8-25 13:09
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
3
排版糟糕!:p
2004-8-25 14:32
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
askformore大侠!EasyCHM你是怎么搞定的?教教我!
2004-8-25 16:42
0
雪    币: 98745
活跃值: (201039)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
good post
2004-8-25 16:53
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
6
最初由 hswanfang 发布
askformore大侠!EasyCHM你是怎么搞定的?教教我!


其实没什么本事,就跟踪它 WriteFile ,你发现它为你“加料”,就想法让它住手就 OK ,如 Nop 或 JMP。
2004-8-27 10:42
0
游客
登录 | 注册 方可回帖
返回
//