好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 wonderzdh 于 2013-7-16 10:33 编辑
【文章标题】: 飘零商业3.5破解笔记
【文章作者】: wonderzdh
【作者主页】: http://hi.baidu.com/chicken
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
本套教程至少得更新到10课,由于没有事先安排,内容可能会比较乱,但是每字每句都是心得。
为什么我要把这些心得发出来,而不自己藏着。因为我发的东西本身就是我对学习逆向的一个梳理和总结。
赠人玫瑰,手有余香。至于你们回不回复,评不评分,我一点所谓也没有。
后续课程不会继续在【逆缘论坛】首发,【吾爱破解】转帖的形式存在,而是两个站同时更新。
也希望我的帖子在吾爱不是归类转帖,而是属于原创,本人可是吾爱未来的“原创精英”+“论坛大牛”呀。
如果想求破,可直接来逆缘免费求破,网址什么的就不发了,自己百度一下。
【前言】
大家好!我是【wonderzdh】,一个正在努力学习电脑技术的男人。
此系列文章一到四篇在吾爱首发,以后我会将我的学习笔记在【逆缘论坛】与大家分享。
还请各位大牛赐教,当然也希望那些初入门的同学能和我一同进步,有问必答!
【正文】
由于是自己搭建服务器研究一下,所以先打开“WEB服务器.exe”配置服务器。
然后OD载入“客户端.exe”,F9直接运行。
【处理飘零按钮事件断点】
飘零有循环调用子程序,以便干扰我们在按钮事件出下断,处理方法有二。
一、
OD载入F9运行后,打开“XueTr.exe”,选择客户端进程-右键-查看...-查看进程定时器。
会出现两个,我们选中-右键-移除即可。
如果你一个都没出现,请检查你的客户端是否已经运行,没运行时钟是不会被创建,自然也就没有定时器。
二、
OD载入后-Ctrl+N-输入SetTimer-在上边的跳转直接修改为JMP,然后再F9运行。
此处不能下断然后修改,因为飘零有检测时间,断下时间过长就会退出。
---------------------------------------------------------
0042FB5F /75 19 jnz short 客户端.0042FB7A
修改为:
0042FB5F /EB 19 jmp short 客户端.0042FB7A
---------------------------------------------------------
0042F9AA /7E 1F jle short 客户端.0042F9CB
修改为:
0042F9AA /EB 1F jmp short 客户端.0042F9CB
---------------------------------------------------------
当然,我们还可以直接处理这个退出事件,因为到后边暂停时间过程一样要退出。
当程序退出后,我们查看堆寨窗口,找到第一个返回到程序领空的代码-右键-反汇编窗口跟随-段首改retn。
对于这个程序,这样修改非常不好,估计是一些事件已经被触发,程序会变卡,还会蓝屏,应该再到上边几层的CALL里去修改。
---------------------------------------------------------
00442F50 55 push ebp
修改为:
00442F50 C3 retn
---------------------------------------------------------
【分析登录按钮事件】
现在我们在CPU窗口按下Ctrl+G-输入“00401000”(来到程序领空代码段最上方)-然后按Ctrl+B搜索二进制-“FF55FC5F5E”(易语言事件特征码)
00442B6D |> \FF55 FC call [local.1]
此处下断,然后回到窗口点击登录。
OD成功断下,F7跟进。
004177A1 /. 55 push ebp
来到此代码段,即登录按钮的按钮事件代码段。
我们一直向下翻,会找到一个易语言窗口创建的代码:
00417AFD |. 68 02000080 push 0x80000002
00417B02 |. 6A 00 push 0x0
00417B04 |. 68 00000000 push 0x0
00417B09 |. 6A 00 push 0x0
00417B0B |. 6A 00 push 0x0
00417B0D |. 6A 00 push 0x0
00417B0F |. 68 01000100 push 0x10001
00417B14 |. 68 00020106 push 0x6010200
00417B19 |. 68 01020152 push 0x52010201 ;窗体ID,可疑理解为在此程序中各个窗体的标记。
00417B1E |. 68 03000000 push 0x3
00417B23 |. BB A0034200 mov ebx,客户端.004203A0
00417B28 |. E8 25850000 call 客户端.00420052
00417B2D |. 83C4 28 add esp,0x28
--------------------------------------------------------------------
004177B8 |. /EB 10 jmp short 客户端.004177CA
004177BA |. |56 4D 50 72 6F 74>ascii "VMProtect begin",0
此处有一个VMP的加壳标记,在这两段代码之间的代码会被VM掉,也就是虚化变异,代码会非常长且不易懂。
所以VMP保护非常强大,他能把十行汇编变成一百行,这个效果大家应该就懂了。
00417C36 |. /EB 0E jmp short 客户端.00417C46
00417C38 |. |56 4D 50 72 6F 74>ascii "VMProtect end",0
此时我们在
004177B8 |. /EB 10 jmp short 客户端.004177CA
修改为:
004177B8 /E9 40030000 jmp 客户端.00417AFD
作用:直接无视这些验证,按钮一按下,我们就来到创建窗口的代码。
那么接下去就是要搞定目标窗口创建完毕的事件咯,我们F8一直走。
00417B28 |. E8 25850000 call 客户端.00420052
这里必须得跟进,因为这个CALL包含了我们需要的目标窗口创建完毕的事件代码,步过的话一些暗装都已经执行了。
00442ADF . FFD3 call ebx ; 客户端.004203A0
我跟进遇到这个CALL时点一下F8就停下,程序会再次来到易语言事件代码的断点处,我们F7跟进。
【分析目标窗口创建完毕事件】
0041FD6C /. 55 push ebp
这个代码段就是目标窗口创建完毕的事件代码段,我们分析一下。
--------------------------------------------------------------------
汇编:
0041FD87 |> \FF35 EC085000 push dword ptr ds:[0x5008EC]
0041FD8D |. E8 96EAFEFF call 客户端.0040E828
源码:
飘零关闭驱动句柄 (防OD线程驱动句柄)
修改方法:
这两句直接nop,或者在上边的跳转直接跳到下边,也可以跟进这个CALL,段首retn。
--------------------------------------------------------------------
汇编:
0041FD92 |. FF35 14095000 push dword ptr ds:[0x500914]
0041FD98 |. 68 AA1E4C00 push 客户端.004C1EAA
0041FD9D |. B9 02000000 mov ecx,0x2
0041FDA2 |. E8 0914FEFF call 客户端.004011B0
0041FDA7 |. 83C4 08 add esp,0x8
源码:
标签_到期时间.标题 = “到期时间为:” + 到期时间
无需修改。
--------------------------------------------------------------------
汇编:
0041FDD5 |. 83C4 04 add esp,0x4
0041FDD8 |> 6A 00 push 0x0
0041FDDA |. 68 C0D40100 push 0x1D4C0 ;(1D4C0)16=(1000 × 60 × 2)10
0041FDDF |. 6A FF push -0x1
0041FDE1 |. 6A 08 push 0x8
0041FDE3 |. 68 837A0116 push 0x16017A83
0041FDE8 |. 68 01020152 push 0x52010201
0041FDED |. E8 5A020000 call 客户端.0042004C
0041FDF2 |. 83C4 18 add esp,0x18
0041FDF5 |. 6A 00 push 0x0
0041FDF7 |. 68 E0930400 push 0x493E0 ;(493E0)16=(1000 × 60 × 5)10
0041FDFC |. 6A FF push -0x1
0041FDFE |. 6A 08 push 0x8
0041FE00 |. 68 25B80116 push 0x1601B825
0041FE05 |. 68 01020152 push 0x52010201
0041FE0A |. E8 3D020000 call 客户端.0042004C
0041FE0F |. 83C4 18 add esp,0x18
源码:
登陆检测时钟.时钟周期 = 1000 × 60 × 2
时钟_验证动态.时钟周期 = 1000 × 60 × 5
修改方法:
0041FDDA |. 68 C0D40100 push 0x1D4C0
修改为:
0041FDDA 6A 00 push 0x0
--------------------------------------------------------------------
0041FDF7 |. 68 E0930400 push 0x493E0
修改为:
0041FDF7 6A 00 push 0x0
或者可以直接跳过这段代码。
--------------------------------------------------------------------
汇编:
0041FE12 |. 833D F0085000 04 cmp dword ptr ds:[0x5008F0],0x4
0041FE19 |. 0F84 05000000 je 客户端.0041FE24
0041FE1F |. E8 C92BFFFF call 客户端.004129ED
源码:
.如果真 (非法了吗 ≠ 4)
飘零蓝屏 ()
错误的修改方法:
0041FE19 |. /0F84 05000000 je 客户端.0041FE24
修改为:
0041FE19 /EB 09 jmp short 客户端.0041FE24
这种方法不保险,因为蓝屏事件多次调用,所以我们要跟进这个CALL,段首retn。
正确的修改方法:
004129ED /$ 55 push ebp
修改为:
004129ED C3 retn
局部调用来自 0041299F, 00415B02, 0041AC41, 0041FE1F
这样就不怕啦!及时其他地方调用了,也不蓝屏了。
--------------------------------------------------------------------
【补充】
我们在登录按钮事件代码段还未处理完毕,需做如下处理:
00417B30 8945 F0 mov dword ptr ss:[ebp-0x10],eax
修改为:
00417B30 /E9 11010000 jmp 客户端.00417C46
汇编:
00417B28 |. E8 25850000 call 客户端.00420052
00417B2D |. 83C4 28 add esp,0x28
00417B30 |. 8945 F0 mov [local.4],eax
00417B33 |. 837D F0 01 cmp [local.4],0x1
00417B37 0F85 36000000 jnz 客户端.00417B73
源码:
.判断开始 (载入 (窗口1, , 假) = 真)
否载入 = 假
销毁 ()
【总结】
1.要善用堆寨,查看第一个返回到程序的代码,这里是程序最后执行的地方,然后进行猜测分析,有必要可以在出一层CALL。
2.不要滥用JMP,某些可恶的代码,比如蓝屏、格盘,这些会多出调用,要么每一处都跳过,要么直接段首retn。
第一篇-【某培训】学前测试-程序多开
第二篇-吾爱扣扣的一个CM
第三篇 - CM大赛作品 - BambooQJ
第四篇 - CC网络验证 - 分析并爆破CC
cracked.zip
(535.9 KB, 下载次数: 82)
客户端.zip
(535.81 KB, 下载次数: 137)
飘零商业 3.5.zip
(1.98 MB, 下载次数: 404)
--------------------------------------------------------------------------------
【版权声明】: 本文原创于【wonderzdh】,转载请注明作者并保持文章的完整,谢谢!
2013年07月14日 0:01:32
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|