PYG5.4第八轮第二课教学测试 软件破解分析
【文章标题】: PhotoCompressor 破解分析【文章作者】: zhangyun173
【作者邮箱】: [email protected]
【软件名称】: PhotoCompressor 试用版
【加壳方式】: FSG 2.0 -> bart/xt
【下载地址】: http://www.onlinedown.net/soft/57925.htm
【使用工具】: OllyDbg, LordPE, PEid
【操作平台】: WinXP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! PS:只是菜鸟级分析!
哭·····找了几个月的工作了。都没找到自己合适的工作。我是学机械的想找计算机方面的也找不到,大多要工作经
验。看到PYG5.4第八轮第二课教学正式启动了也没参加成,感触比较大,于是想破解下看看自己能不能行.
拿到这个软件第一反应当然是查壳了 FSG 2.0 -> bart/xt 脱壳机脱了运行不了,自己单步跟,跟是跟到了OEP了但是修
复不来输入表。没**坛搜了下拿到一个脚本脱了 借助他的脚本完成了脱壳。运行就弹出两个框框,注意是两个。那么
肯定要动两个地方了。我第一想的当然是对话框断点。但是找了半天没找到关键位置。后来我发现他这个对话框是在程序
运行了一会才弹出来的。于是我想到了他是不是加了个时间控件然后弹出对话框,那么加不加时间控件就是关键了,这个
关键跳也肯定是在运行时间控件的前面。于是下好断点bp SetTimer 和 bp MessageBoxA(要根据对话框判断是那个时间控
件) 重载,F9了13次 出现timer 并且堆栈窗口 出现 “购买”二字 凭直觉感觉就是一处关键。再一次F9过后,等待了
3秒钟果不其然弹出试用版本的框子。嘿嘿 重载 到13处timer Alt+F9 返回 稍微分析了下 将以下两处改后没对话框了,
并且单个文件压缩正常。
00406B95 /7F 1E jg short 00406BB5 13次出timer 屁股后面跟了 购买
改为... 直接NOP掉 不用麻烦
0040C6BC /7F 1E jg short 0040C6DC 14次出timer 屁股后面跟了 购买
同上 直接NOP掉
0012E650 00406BC8/CALL 到 SetTimer 来自 1.00406BC2
0012E654 001304D6|hWnd = 001304D6 (class='#32770',parent=00220466)
0012E658 0000000A|TimerID = A (10.)
0012E65C 000007D0|Timeout = 2000. ms
0012E660 00000000\Timerproc = NULL
0012E664 315318E2
0012E668 0012F52C
0012E66C 0012F52C
0012E670 00B12700ASCII "购买"
0012E674 00B18E30ASCII "8314413038813958"
接下来就是试用次数了,这个不麻烦。改下文件名就又是30次了。不用脑袋想就是注册表问题,而且他又只有主程序和一
个ResourceChs.dll马上来到注册表放软件信息的位置果不其然 Software 下的 21ai 不就是它吗!21ai目录下就是文件
名了,删除过后同样又是30次,但是不想那么麻烦,想直接在它读注册表的时候做点文章
于是下bp RegOpenKeyA 找了半天什么也没发现,到后来才知道它是把注册表根目录坼开了的 。嘿嘿,这个比较龌龊哈!
上面没办法,于是想到开一次少一次那么肯定要修改注册表的 下好断点
bp RegSetValueExA 堆栈窗口 读的注册表是 Trial没根目录,所以说比较龌龊。
返回吧
004A2295 /74 30 je short 004A22C7修改为 JMP不让他修改注册表减少试用次数
无聊也找到了这个地方
0040A568 cmp eax, 1E eax是读出注册表现在可以试用的次数 1E是30 这是比较试用次是否比30大。大了就直接清空
0次
0040A56B jg short 0040A571可直接在上面 给eax赋值为9999次 改不改无所谓 当然改了要好看点9999次嘛
0040A56D test eax, eax 但是注意进制的转换你别哈起直接给它9999。
0040A56F jge short 0040A573
0040A571 xor eax, eax
接下来就是文件夹压缩的水印去除了,我的思路是这样的,这个水印肯定是在压缩文件的时候加上去的。(呵呵,傻瓜也
知道。)但是怎么来找压缩的那个CALL呢?先想的是他压缩完了会弹出个对话框,但是逆了半天没逆到关键位置放弃了。
查找字符串,撒子都没得!看来脱壳没脱好。接着 查找-->所有参考文本 嘿嘿有东东。就在最前面发现2个“.jpg”像素
.大小等等信息。 不用想就知道一个是单文件,一个是文件夹的压缩。并且第二个的.jpg 上面有ALL Files 信息直接就
来到第二个.jpg处,跟了一会
00407447|.E8 C4EC0000 call CxImage::DrawStringEx 这个CALL 就是加水印的了
在其上面有个跳转
00407414 /75 36 jnz short 0040744C JMP一下 水印去除多跳跳有益身体健康
(半年没打篮球了,前天被同学叫去打篮球接下来的时间,脚一直是酸痛的。悲哀!)
做到这一步基本上是收工了。如果你不想要已完成多少图片的对话框可以直接将
00499311|. /75 04 jnz short 00499317 处NOP 掉
当然你要像我这样添点东西的话可以在数据窗口处 ctrl+G 来到 004D5B4A 用文本ASCII显示 二进制也用ASCII编辑 修改
信息就可以了
http://p4.images22.51img1.com/6000/zhangyun173/46ca7006ce66425e677998d1d8f5efcc.jpg
另外上传自己破解了的文件:
把脱壳的脚本也贴出来吧
var OEP
var pIAT
Start:
sto
sto
add ebx,c
mov OEP,
sub ebx,c
mov pIAT,ebp
bphws OEP,"x"
run //gooooto oep
//来到oep,修复输入表
@nextdll:
mov eax, pIAT
mov eax,
cmp eax,0
je@over
@nextfunc:
cmp ,7FFFFFFF
je @equ_7FFFFFFF
cmp ,FFFFFFFF
je @equ_FFFFFFFF
add eax,4
jmp @nextfunc
@equ_7FFFFFFF:
@equ_FFFFFFFF:
mov ,0
add pIAT,8
jmp @nextdll
@over:
bphwc OEP
ret
///dpe "c:\fsg_dumped.exe",OEP
//本来想用脚本直接dump到文件中,可是用脚本dump出的文件不能运行,只好运行到OEP再手动Dump了....
//最后到达OEP时若代码很乱,就取消分析
第一次写教程有什么不对的地方希望大家谅解!目的只是想和大家分享下。如果不好以后不会在发了。
[ 本帖最后由 zhangyun173 于 2009-4-2 17:47 编辑 ] 哈哈,占了个沙发,我只能分析到前两步,去水印的方法网上还没有找到教程,所以没有办法,只好等你们这些老大的分析,受教了。 其实脱壳也没有那么麻烦,我手脱修复的时候,把大小改成1000就OK了。 00404C80/$83EC 24 sub esp,24
00404C83|.51 push ecx
00404C84|.8D4424 04 lea eax,dword ptr ss:
00404C88|.50 push eax
00404C89|.E8 62F40A00 call dumped_.004B40F0
00404C8E|.83C4 08 add esp,8
00404C91|.85C0 test eax,eax
00404C93|.75 0D jnz short dumped_.00404CA2
00404C95|.8B4424 14 mov eax,dword ptr ss:
00404C99 05 6C070000 add eax,76C ;这句改为:mov eax,7D8 就可以去掉过期提示
00404C9E|.83C4 24 add esp,24
00404CA1|.C3 retn
00404CA2|>33C0 xor eax,eax
00404CA4|.83C4 24 add esp,24
00404CA7\.C3 retn 另外发现:
00404C99 05 6C070000 add eax,76C;改为:mov eax,7D8 生成的图像不带水印
但是 不论是这样修改还是搂主的修改 将使用次数调制 0 此时,还将出现过期窗口。 终于看见 谢谢诶啊 感谢分享 向高手学习 学习中!/:L 学习了,谢谢楼主分享。
页:
[1]
2