热带鱼水族箱屏幕保护程序V3.0 爆破解步骤
本帖最后由 ACracker 于 2012-10-11 16:39 编辑【文章名称】:热带鱼水族箱屏幕保护程序V3.0 爆破解步骤 超详细
【使用工具】:PEID,OD,PE Explorer1.99 R5
【软件地址】:http://www.duote.com/soft/252.html
【原文链接】:http://pleasereverse.me/thread-85-1-1.html
本来是原创的,但是先发到朋友论坛上面去了,就当转的吧。
PEID 查壳
比较简单的壳。
ESP定律后,修复一下就好了。
再次查壳:Microsoft Visual C++ 6.0OD运行程序,出现:
这时后会发现后面黑色部分挡住了OD窗体,不能进行调试,首先要解决这个问题。
下断:BP CreateWindowExAF9运行,断下,堆栈窗口如下:
第一行回车,即:反汇编窗口跟随。
出现如下代码:
004066A4 |. 56 |push esi ; /lParam
004066A5 |. 55 |push ebp ; |hInst
004066A6 |. 8B11 |mov edx,dword ptr ds: ; |
004066A8 |. 8BAE F0D30000 |mov ebp,dword ptr ds: ; |
004066AE |. 6A 00 |push 0x0 ; |hMenu = NULL
004066B0 |. 55 |push ebp ; |hParent
004066B1 |. 8B79 04 |mov edi,dword ptr ds: ; |
004066B4 |. 895424 24 |mov dword ptr ss:,edx ; |
004066B8 |. 897C24 28 |mov dword ptr ss:,edi ; |
004066BC |. 8B41 08 |mov eax,dword ptr ds: ; |
004066BF |. 894424 2C |mov dword ptr ss:,eax ; |
004066C3 |. 2BC2 |sub eax,edx ; |
004066C5 |. 8B49 0C |mov ecx,dword ptr ds: ; |
004066C8 |. 894C24 30 |mov dword ptr ss:,ecx ; |
004066CC |. 2BCF |sub ecx,edi ; |
004066CE |. 51 |push ecx ; |Height
004066CF |. 50 |push eax ; |Width
004066D0 |. 57 |push edi ; |Y
004066D1 |. 8B3D CC824900 |mov edi,dword ptr ds:[<&user32.CreateWi>; |USER32.CreateWindowExA
004066D7 |. 52 |push edx ; |X
004066D8 |. 68 00000090 |push 0x90000000 ; |Style = WS_POPUP|WS_VISIBLE
004066DD |. 68 8C604D00 |push Unpack_0.004D608C ; |WindowName = "SereneScreen Marine Aquarium 3"
004066E2 |. 68 784C4C00 |push Unpack_0.004C4C78 ; |Class = "D3DSaverWndClass"
004066E7 |. 6A 08 |push 0x8 ; |ExtStyle = WS_EX_TOPMOST
004066E9 |. FFD7 |call edi ; \CreateWindowExA
可以看到窗体的宽和高分别为eax,和ecx,可能新手朋友会说直接 两个push 0,但是改了后长度就不对了,push 0 占了两个字节,就会覆盖下面的代码,我这里改的是蓝色的两句,程序运行到蓝色的部分时,edi edx都为0所以那两句貌似没有什么用,我就改成了xor eax,eax 和xor ecx,ecx。保存运行就没有黑色的部分了,这个破解后记得改回来。
破解正式开始。
既然是爆破就直接掉过软件注册窗口吧。
用资源工具 PE Explorer 可以找到注册窗口的资源。
可以看到资源ID为:124 即0x80,那么我们下断:BP DialogBoxParamA==0x80
F9运行,断下,堆栈窗口第一行回车,即:反汇编窗口跟随。
来到如下代码:
这个应该就是 创建注册窗口的代码,那么我跳过这段代码就可以了。可以看到一共4个地方调用了。
在“本地调用来自.....” 右键 转到40D526 ,来到如下代码:
可以看到上面有一个跳转跳过了这个CALL,那么将jge 改为jmp 即可。当然也可以找到上面比较条件,盘根问底找到最完美的方法。
依葫芦画瓢,将其他3个也改了,不过第4个调用 ,是来自switch case,可以将这个case 直接跳到default case里面去,或者直接ret。我就不截图了,怎么改了。
4个地方改完后,保存运行一下,果然没有出现 软件注册这个窗口了,直接进入屏保效果了。
貌似可以用了,再看看有没有什么功能限制。
右击SCR文件 配置 鱼类设置,出现下图:
过软还是有功能限制。
可以看出右上角那些鱼是图片,那我们还是去资源文件中找找,看看有没有什么线索。
果然在资源文件 中找到了,ID为124,0x7c。
还有一样图片中没有英语的图片,ID 为121,0x79,这张图片是注册之后使用的。
OD 中 CTRL+F 输入 push 0x79回车
来到
0040CD2A |. 833D A0A95500 02 cmp dword ptr ds:,0x2
0040CD31 |. 7D 0B jge Xcracked_.0040CD3E可以看到jge 如果不跳 就是失败的图片,跳就是成功图片,那么我们将jge 改为jmp,保存运行,看看效果。
运行后,发现图片倒是换了,但是上面的鱼可以点击,下面的鱼不行。
看来还有其他地方对ds:中值进行比较。
那么对0x55A9A0下硬件访问断点 BYTE 的。
F9运行程序,断下0041E7AF |. C705 A0A95500 00000000 mov dword ptr ds:,0x0
0041E7B9 |. E8 7B970600 call Unpack.00487F39可以看到这里是初始化0x55A9A0这个全局变量。
前面图片那里是与2比较,那么将它的初始值改为2 ,试试。
运行,一切正常,所有功能都可以用。
既然他是全局变量,那前面注册窗口的判断条件也可能是他。
将脱壳后的文件0041E7AF 直接改0041E7AF |. C705 A0A95500 00000000 mov dword ptr ds:,0x2果然还是正常运行,没有功能限制。
后记:做共享软件,不要将注册与否的标志全局储存,最好将注册码存放多个地方,需要进行注册判断的时候在不同的地方拉取注册码进行判断。
小菜学破解,不对的地方,还请指出。
贴顶有原版软件地址,有兴趣的自己试试。
这个是什么东西 我来看看 以前用过一次 非常漂亮 zm1989 发表于 2012-10-11 14:50 static/image/common/back.gif
以前用过一次 非常漂亮
的确不错,是很漂亮。 整体上很详细,
欢迎继续讨论分析。 支持下。。 楼主说的很详细很精彩 哈哈 先顶贴标记 待会下班回来操作一下 不过第4个调用 ,是来自switch case,可以将这个case 直接跳到default case里面去,或者直接ret
都进入case了,直接retn 怕是会堆栈不平衡吧。 果然不错 谢谢了