知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

曲折实践---再谈水印破解

发布时间:2011-04-04 11:51:42作者:知识屋

 作者:冷夜

时间过得真快,高三大半时间过去了。上次爆破日记里提到利用函数爆破掉拍照软件的思路,这次的破解的主角依旧是水印,只是思路完全不同。这次软件是图章制作系统,程序MakeSign.exe,下面就一起体验一下我的爆破历程。
    一、查看软件注册方式。
    这不就不需要多说了,破解都需要的,呵呵,第一次打开未注册会有弹窗提示,进入程序界面后,我们可以清楚的看到公章下的水印,如图一

 

注册时软件给出了注册ID,要求输入用户ID,如图二。

 

应该说是种比较熟悉的注册方式吧。看完了注册方法,我们进入破解下一环节,查壳。
    二、查壳脱壳。
    用PEID查了一下,壳是ASPack 2.12,用ESP定律来搞定吧。首先用Ollyice打开软件,弹出的“压缩代码”对话框选择“否”,这时进入Ollyice后按F8单步跟踪一次,看到寄存器(FPU)里ESP后变成一串红色数字0012FFA4,我们要的就是它,在Ollyice左下角COMMAND处输入hr 0012FFA4(即在该处下一个硬件断点,硬件断点简单地说就是用Ollyice重新载入程序后依旧保留的断点)并按回车键,如图三

 

此时按Ctrl+F2重新载入,弹出对话框依旧选“否”,并按F9运行,Ollyice自动停在断点处,这时按F8单步跟踪,走了几步看到push  ebp地址为00556424,这里就可以跳出壳了,打开OD插件--OLLYDUMP(如图四)

 

保存为unpack.exe。再用PEID查下,已经无壳了,程序是用Delphi编写的。
    三、破掉保护代码。
    满怀欣喜的打开脱壳后的软件,程序却很不给力的却给我来了一句“请联系作者使用特别版1”,接着自动退出软件并自删除。无奈,只能再脱一遍壳了,脱完后载入Ollyice,查找字符串“请联系作者使用特别版”,看来RP还可以,找到了那句提示,双击进入下面区域:[!--empirenews.page--]分页标题[/!--empirenews.page--]

00546AFE |. E8 8561F3FF call 0047CC88
00546B03 |. 8B45 EC mov eax, dword ptr [ebp-14]
00546B06 |. E8 6113FFFF call 00537E6C
00546B0B |. 3D 00701700 cmp eax, 177000
00546B10 |. 7E 35 jle short 00546B47
00546B12 |. 6A 00 push 0
00546B14 |. 68 5C6D5400 push 00546D5C ; 友情提示
00546B19 |. 68 686D5400 push 00546D68 ; 请联系作者使用特别版1!
00546B1E |. 8BC3 mov eax, ebx
00546B20 |. E8 2FC3F1FF call 00462E54
00546B25 |. 50 push eax ; |hOwner
00546B26 |. E8 D90CECFF call <jmp.&user32.MessageBoxA>; MessageBoxA
00546B2B |. 8D55 E8 lea edx, dword ptr [ebp-18]
00546B2E |. A1 78295600 mov eax, dword ptr [562978]
00546B33 |. 8B00 mov eax, dword ptr [eax]
00546B35 |. E8 4E61F3FF call 0047CC88
00546B3A |. 8B45 E8 mov eax, dword ptr [ebp-18]
00546B3D |. E8 EE13FFFF call 00537F30
00546B42 |. E8 85D9EBFF call 004044CC
00546B47 |> E8 8816FFFF call 005381D4
00546B4C |. 84C0 test al, al
00546B4E |. 74 35 je short 00546B85
00546B50 |. 6A 00 push 0
00546B52 |. 68 5C6D5400 push 00546D5C ; 友情提示
00546B57 |. 68 806D5400 push 00546D80 ; 请联系作者使用特别版2!
00546B5C |. 8BC3 mov eax, ebx
00546B5E |. E8 F1C2F1FF call 00462E54
00546B63 |. 50 push eax ; |hOwner
00546B64 |. E8 9B0CECFF call <jmp.&user32.MessageBoxA>; MessageBoxA
00546B69 |. 8D55 E4 lea edx, dword ptr [ebp-1C]
00546B6C |. A1 78295600 mov eax, dword ptr [562978]
00546B71 |. 8B00 mov eax, dword ptr [eax]
00546B73 |. E8 1061F3FF call 0047CC88
00546B78 |. 8B45 E4 mov eax, dword ptr [ebp-1C]
00546B7B |. E8 B013FFFF call 00537F30
00546B80 |. E8 47D9EBFF call 004044CC
00546B85 |> 8BC3 mov eax, ebx
00546B87 |. E8 C8C2F1FF call 00462E54
00546B8C |. 8BC8 mov ecx, eax

稍加分析就知道,此处有00546B10的JLE和0546B4E的JE两处跳转,要跳过“自杀代码”我们就要修改的这两处,一是将00546B10的JLE改为JMP,二是将00546B4E的JE改为JMP,这样就可以跳过自杀部分的Call,此时单击右键--复制到可执行文件--所有修改,保存文件为unpack1.exe。现在打开看看,“自杀”现象已不存在了。
    三、巧除水印。
    既然是加了水印,自然要朝水印想去,软件是在印章下加了一个“版权所有:一生中最爱”,既然没有调用什么(这个我们可以事先查看下,此处不多讲),那么我们就从程序文件入手。
    将unpack1.exe载入C32asm,选择十六进制模式,这次水印的破解就从“搜索”功能入手吧,类型选择ANSI字符串,搜索内容就输入“一生中最爱”,如图五

 

C32找到了,同时我们也能看到“版权所有”几个字,选择他们,右键点填充,用十六进制00填充,OK,保存文件,打开看看,水印已经没了,如图6。
 

四、爆破注册模块
    至此,软件功能已基本无碍,剩下的就是练手了,软件注册模块很好找,通过Ollyice查找字符串功能很容易找到,我就不啰嗦了,通过字符串,进入下面代码区域:

00538F73 . E8 C0FDFFFF call 00538D38
00538F78 . 84C0 test al, al
00538F7A . 75 64 jnz short 00538FE0
00538F7C . 6A 00 push 0
00538F7E . 68 40905300 push 00539040 ; 警告
00538F83 . 68 48905300 push 00539048 ; 注册失败!n注册码错误[!--empirenews.page--]分页标题[/!--empirenews.page--]
00538F88 . A1 78295600 mov eax, dword ptr [562978]
00538F8D . 8B00 mov eax, dword ptr [eax]
00538F8F . 8B40 44 mov eax, dword ptr [eax+44]

我只保留跳转部分,可以看到“00538F78   .  84C0          test    al, al”这句判断注册码是否正确,00538F7A决定了注册跳转方向,若注册码正确,则跳向00538FE0,显然,我们没有正确的注册码,要想实现跳转就得把它改为JMP。保存运行后,注册到时提示注册成功,可软件还有红色字写着“未注册”让人看得很不爽,再次载入Ollyice,字符串参考输入“未注册”,找到如下部分:

00546ED6 |. E8 7556F1FF call 0045C550
00546EDB |. BA B06F5400 mov edx, 00546FB0 ; hsjmakesign
00546EE0 |. 8B83 640B0000 mov eax, dword ptr [ebx+B64]
00546EE6 |. E8 711FFFFF call 00538E5C
00546EEB |. 84C0 test al, al
00546EED |. 74 2B je short 00546F1A
00546EEF |. 8D55 FC lea edx, dword ptr [ebp-4]
00546EF2 |. 8B06 mov eax, dword ptr [esi]
00546EF4 |. 8B98 1C030000 mov ebx, dword ptr [eax+31C]
00546EFA |. 8BC3 mov eax, ebx
00546EFC |. E8 1F56F1FF call 0045C520
00546F01 |. 8D45 FC lea eax, dword ptr [ebp-4]
00546F04 |. BA C46F5400 mov edx, 00546FC4 ; :已注册
00546F09 |. E8 12DAEBFF call 00404920
00546F0E |. 8B55 FC mov edx, dword ptr [ebp-4]
00546F11 |. 8BC3 mov eax, ebx
00546F13 |. E8 3856F1FF call 0045C550
00546F18 |. EB 29 jmp short 00546F43
00546F1A |> 8D55 F8 lea edx, dword ptr [ebp-8]
00546F1D |. 8B06 mov eax, dword ptr [esi]
00546F1F |. 8B98 1C030000 mov ebx, dword ptr [eax+31C]
00546F25 |. 8BC3 mov eax, ebx
00546F27 |. E8 F455F1FF call 0045C520
00546F2C |. 8D45 F8 lea eax, dword ptr [ebp-8]
00546F2F |. BA D46F5400 mov edx, 00546FD4 ; :未注册
00546F34 |. E8 E7D9EBFF call 00404920

00547052 |. E8 051EFFFF call 00538E5C
00547057 |. 84C0 test al, al
00547059 |. 74 10 je short 0054706B
0054705B |. BA D4725400 mov edx, 005472D4 ; 已注册
00547060 |. 8B83 2C0B0000 mov eax, dword ptr [ebx+B2C]
00547066 |. E8 E554F1FF call 0045C550
0054706B |> 8B83 68030000 mov eax, dword ptr [ebx+368]

00546EEB经过比较得到注册是否正确,在00546EED跳到未注册,00547057处也是如此,这样思路就明了了,将00546EEDJE和00547059处修改为JNE即可。现在再次保存所有修改,运行程序并注册,显示的就全是“已注册”了。
    五、总结。
    这次破解没什么高深的技术含量,只是给大家破解此类软件提供一种可行思路。其实这款软件还有一些地方值得挖掘,我就不提了,大家可以自行尝试。

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜