【标 题】超级无敌菜菜菜鸟的第一次学破解遇到了困惑,哪位大哥可以给
我一点提示!!!!!!!!
【日 期】2005-4-26
【使用工具】H-W32Dasm Hiew
【平 台】WinXP sp1
【目标程序】Windows设置大师2005
【作者声明】只是感兴趣,没有其他目的。第一次学破解,就拿它来练一练。
但是就是它也让我很困惑,各位大侠看了不要笑,毕竟我还只是
一只超级无敌菜菜菜鸟!
正文:
小弟是破解的一个门外汉,对加密与解密很感兴趣,也很想学它。所以就把我们看雪论坛里的精华1-6有关初学者的东西给大致看了看,也看了论坛里写给新手们的文章。近日小弟自己觉得应该找个东西来练练手了,所以就拿《Windows设置大师2005》开刀了。在练手的过程中遇到了问题,想让大家帮我看看,然后给我点提示,谢谢~~~~~~!!
首先我用HA_PEiD0.93汉化版看它是否加了壳,好家伙果然加了,这样更好,又可以把学习和实践结合起来了。是ASPack 2.12 -> Alexey Solodovnikov 我用Quick Unpack 0.7汉化版去掉其壳,再用H-W32Dasm分析脱壳后的文件,找到“您输入的注册码不正确,请重新输入或者与软件作者联系!”并顺着向上可以看到这样一个跳转:
00507C52 752C jne 00507C80
在H-W32Dasm下可以看到它的offset是00107052,我再用Hiew打开它,并找到00107052,我尝试把jne给改成je,保存并退出。重新启动Windows设置大师2005在输入激活码的地方,注册姓名输入yejun125,激活密码输入123321。点注册码验证,程序跳出这样一个提示信息:注册成功!感谢你对我们的支持!请重新启动软件以验证注册码!点确定,程序自动关闭,再打开Windows设置大师2005,依然是试用版,刚刚的修改并没有成功。看来还有其他地方没有修改到。
再用H-W32Dasm找到“感谢你对我们的支持!请重新启动软件以验证注册码!”可以看到如下代码:
* Possible StringData Ref from Code Obj ->"注册成功! 注册信息为: 用户姓名:"
|
:00507C80 68687D5000 push 00507D68
:00507C85 8BB320030000 mov esi, dword ptr [ebx+00000320]
:00507C8B FF7648 push [esi+48]
:00507C8E 68947D5000 push 00507D94
* Possible StringData Ref from Code Obj ->"公 司:"
|
:00507C93 68A07D5000 push 00507DA0
:00507C98 FF7654 push [esi+54]
:00507C9B 68947D5000 push 00507D94
* Possible StringData Ref from Code Obj ->"授权密码:"
|
:00507CA0 68B47D5000 push 00507DB4
:00507CA5 FF765C push [esi+5C]
:00507CA8 68947D5000 push 00507D94
* Possible StringData Ref from Code Obj ->"感谢您对我们的支持!请重新启动软件以验证注册码"
->"。"
|
:00507CAD 68C87D5000 push 00507DC8
:00507CB2 8D45FC lea eax, dword ptr [ebp-04]
:00507CB5 BA0A000000 mov edx, 0000000A
:00507CBA E851D0EFFF call 00404D10
:00507CBF 6A40 push 00000040
:00507CC1 8B45FC mov eax, dword ptr [ebp-04]
:00507CC4 E87FD1EFFF call 00404E48
:00507CC9 8BD0 mov edx, eax
我认为要想破了它就应该是上面两个CALL有问题,不知道我的想法对不对。
来到第一个call 00404D10处可以看到如下代码:
:00404D10 53 push ebx //压入S
:00404D11 56 push esi //压入V
:00404D12 57 push edi //压入W
:00404D13 52 push edx //压入R
:00404D14 50 push eax //压入P
:00404D15 89D3 mov ebx, edx //把ebx给改为R,它为什么要改呢?
:00404D17 31FF xor edi, edi //这是个异或,不知道具体是什么意思和怎么回事,汗~~!是 查验edi是否一样吗?如果是一样,它会怎么处理,不一样呢?
:00404D19 8B4C9414 mov ecx, dword ptr [esp+4*edx+14] // 这里我也看不懂,它到底要传一个什么值啊?。
:00404D1D 85C9 test ecx, ecx //测试ecx是否相等,等就跳到00404d72
:00404D1F 7406 je 00404D27
:00404D21 3908 cmp dword ptr [eax], ecx //比较dword ptr [eax], ecx,不等就跳00404d27
:00404D23 7502 jne 00404D27
:00404D25 89C7 mov edi, eax //再把eax传给edi
汇编没有学好,现在还搞忘了很多,如果我阅读程序有误,请一定帮忙指正,谢谢~~!
再来到第二个call,看到如下代码:
:00404E48 85C0 test eax, eax
:00404E4A 7402 je 00404E4E
:00404E4C C3 ret //这是返回一个什么值?
:00404E4D 00 BYTE 0 // 看不懂。是置0就没有注册成功吗?但是我把它给改为1还是 不行。
当我尝试把
:00404E4A 7402 je 00404E4E
给改为 :00404E4A 7402 jne 00404E4E
保存后再运行程序时系统弹出一个发送错误报告,点击不发送,又弹出一个Error:Runtime error 217 at 0041c361。
说明这个方法行不同,可是我到这里已经无法再干下去了。我个人觉得:第一个call,就是真正的注册码所在,但是我有些看不懂,也就无法把真注册码给找出来。第二个call,主要是测试输入的注册码和真注册码是否一样!请大家帮我看看,我下一步应该怎么办,还有我目前所掌握的知识肯定不够,我应该恶补哪些知识呢?不要怕打击我,该怎么说就怎么说,我承受得起!就让暴风雨来得更猛烈些吧~~~~!
不知道我的理解是否正确,我自己感觉某些地方理解得有误,可能在大家眼里我这个人真是无愧于超级无敌菜菜菜鸟的称号!但是我还是有信心,每一个菜菜菜鸟,菜菜鸟,菜鸟,老鸟,老老鸟到超级无敌老老鸟都是这样走过来的。路都是这样走过来的,努力就会成功,对吧!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课