吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14340|回复: 29
收起左侧

[原创] 【wonderzdh】-逆向学习笔记第四篇 -CC网络验证-分析并爆破CC

  [复制链接]
wonderzdh 发表于 2013-7-10 11:18
本帖最后由 wonderzdh 于 2013-7-16 10:35 编辑

【文章标题】: CC网络验证-分析并爆破CC
【文章作者】: wonderzdh
【作者主页】:http://hi.baidu.com/chicken
软件名称】: BambooQJ
【下载地址】: 见附件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
本套教程至少得更新到10课,由于没有事先安排,内容可能会比较乱,但是每字每句都是心得。

为什么我要把这些心得发出来,而不自己藏着。因为我发的东西本身就是我对学习逆向的一个梳理和总结。

赠人玫瑰,手有余香。至于你们回不回复,评不评分,我一点所谓也没有。

后续课程不会继续在【逆缘论坛】首发,【吾爱破解】转帖的形式存在,而是两个站同时更新。

也希望我的帖子在吾爱不是归类转帖,而是属于原创,本人可是吾爱未来的“原创精英”+“论坛大牛”呀。

如果想求破,可直接来逆缘免费求破,网址什么的就不发了,自己百度一下。  
【第一步】

CC防格盘,因为CC网络验证有格盘暗桩,所以我们要事先做好准备,二进制搜索:

85 DB 74 09 53 E8 ?? ?? ?? ?? 83 C4 04 8B E5 5D C2 04 00

0040651E  /$  55            push ebp

在此处段首retn 4,为什么是retn 4 呢?我们到断尾查看,断尾就是retn 4 所以我们要保持一致。

【第二步】

下易语言按钮事件断点,其实只要是调用易语言的子程序都会被断下来,比如启动窗口创建完毕、自建的子程序等,并不只是按钮事件。

易语言事件代码:

0042A48A  |. /EB 09         jmp short 客户端.0042A495
0042A48C  |> |8B4D EC       /mov ecx,[local.5]
0042A48F  |. |83E9 01       |sub ecx,0x1
0042A492  |. |894D EC       |mov [local.5],ecx
0042A495  |> \837D EC 00     cmp [local.5],0x0
0042A499  |.  7C 12         |jl short 客户端.0042A4AD
0042A49B  |.  8B55 EC       |mov edx,[local.5]
0042A49E  |.  8B45 08       |mov eax,[arg.1]
0042A4A1  |.  8B4C90 10     |mov ecx,dword ptr ds:[eax+edx*4+0x10]
0042A4A5  |.  894D F0       |mov [local.4],ecx
0042A4A8  |.  FF75 F0       |push [local.4]
0042A4AB  |.^ EB DF         \jmp short 客户端.0042A48C
0042A4AD >|>  FF55 FC       call [local.1]
0042A4B0  |.  5F            pop edi
0042A4B1  |.  5E            pop esi

易语言事件死码:

0042A4AD >|>  FF55 FC       call [local.1]
0042A4B0  |.  5F            pop edi
0042A4B1  |.  5E            pop esi

Ctel+G 来到00401000处,Ctel+B搜索二进制字符串“FF55FC5F5E”,这个断点非常有用,绝大多数作者不会把此处VM掉,而且VM此处的代价很大,会导致程序不稳定、运行缓慢。

但是一回到CC界面,鼠标一移动到按钮上,还没单击呢,就被断下来了,应该是发生了其他易语言事件,怎么办呢?

此时应该在这句上下条件断点,当条件符合的时候,断点才生效,拦截下来。我们不知道我们要找的地址,但是知道现在被断下将要去的地址。

那我们就排除掉这个地址,具体步骤是,右键-断点-条件-输入“[local.1]!=00406dc6”。

对照代码:0042A4AD >|>  FF55 FC       call [local.1]

[local.1]处储存的就是要去的地址,也是这个CALL内的段首地址,!=就是不等于返回真,==就是等于返回真,后边就是我们移到按钮后的事件段首地址,这不是我们要的地址,所以我们pass掉。

按B到断点窗口查看:

Breakpoints, 项目 0
地址=0042A4AD
模块=客户端
活动=当 [local.1]!=00406dc6
反汇编=call dword ptr ss:[ebp-0x4]

此时我们鼠标移动到按钮上,OD就不断下了,意味着刚才那个调用被我们排除了。

当我们点击按钮时,程序顺利被断下,F7跟进:

00404D70  /.  55            push ebp

这里就是按钮事件的代码段,从源码上来看,就是“_会员_登录_被单击”这个子程序的所有代码。

按钮事件前边几句代码是固定存在的,不做修改:

00404D70  /.  55            push ebp
00404D71  |.  8BEC          mov ebp,esp
00404D73  |.  81EC 3C000000 sub esp,0x3C
00404D79  |.  C745 FC 00000>mov [local.1],0x0
00404D80  |.  C745 F8 00000>mov [local.2],0x0
00404D87  |.  E8 C2CDFFFF   call 客户端.00401B4E

后边就是一个VMP的开始标记:

00404D8E  |.  56 4D 50 72 6>ascii "VMProtect begin",0

像这种长长的代码段,我们不要轻易运行或者F8跟,更不要F7跟进去。

我们应当从段首看到断尾,看一些可疑的跳转,一些可疑的CALL我们跟进看看。

记住,仅限于看看,不要让程序走起来,这样防止我们跟错又要从新来,也对我们理解代码有帮助。

这段代码我们对照源码来看就更清晰了,一字一句都是一模一样的,大家要尝试多对比理解。

我们一路看到段尾:

00405736  |.  56 4D 50 72 6>ascii "VMProtect end",0

00405767  \.  C3            retn

把我们发现的可疑的地址记录一下:

【可疑的跳转】

1.

004056FE  |> \68 04000080   push 0x80000004

来自上方一个很长的跳转。

2.

004056BB  |> \68 04000080   push 0x80000004

来自上方一个很长的跳转。

3.

004056AC  |> \6A 00         push 0x0

来自上方一个很长的跳转。

【可疑的代码】

00405398  |> \837D F0 00    cmp [local.4],0x0
0040539C  |.  0F84 0A030000 je 客户端.004056AC
004053A2  |.  68 02000080   push 0x80000002
004053A7  |.  6A 00         push 0x0
004053A9  |.  68 00000000   push 0x0
004053AE  |.  6A 00         push 0x0
004053B0  |.  6A 00         push 0x0
004053B2  |.  6A 00         push 0x0
004053B4  |.  68 01000100   push 0x10001
004053B9  |.  68 4B000106   push 0x601004B
004053BE  |.  68 4C000152   push 0x5201004C
004053C3  |.  68 03000000   push 0x3
004053C8  |.  BB 90B14000   mov ebx,客户端.0040B190
004053CD  |.  E8 18580000   call 客户端.0040ABEA
004053D2  |.  83C4 28       add esp,0x28

为什么说这段代码可疑呢?第一:push很多,第二:上边就是一个判断跳转。

这段代码往上是处于验证的代码,这点可以从字符串参考和源码对比看出。

那意味着,这就更可疑了,验证代码的下边,一个判断一个跳转一堆push一个CALL,典型的关键。

2.

004056BB  |> \68 04000080   push 0x80000004
004056C0  |.  6A 00         push 0x0
004056C2  |.  68 B34F4900   push 客户端.00494FB3
004056C7  |.  68 01030080   push 0x80000301
004056CC  |.  6A 00         push 0x0
004056CE  |.  68 40000000   push 0x40
004056D3  |.  68 04000080   push 0x80000004
004056D8  |.  6A 00         push 0x0
004056DA  |.  8B45 FC       mov eax,[local.1]
004056DD  |.  85C0          test eax,eax
004056DF  |.  75 05         jnz short 客户端.004056E6

004056BB  跳转来自 00405014


3.

004056FE  |> \68 04000080   push 0x80000004
00405703  |.  6A 00         push 0x0
00405705  |.  68 B84F4900   push 客户端.00494FB8
0040570A  |.  68 01030080   push 0x80000301
0040570F  |.  6A 00         push 0x0
00405711  |.  68 40000000   push 0x40
00405716  |.  68 04000080   push 0x80000004
0040571B  |.  6A 00         push 0x0
0040571D  |.  68 BF4F4900   push 客户端.00494FBF
00405722  |.  68 03000000   push 0x3
00405727  |.  BB 80C74000   mov ebx,客户端.0040C780
0040572C  |.  E8 B9540000   call 客户端.0040ABEA
00405731  |.  83C4 28       add esp,0x28

004056FE  跳转来自 00404E61


处理完会员登录的按钮事件后会来到目标窗口创建完毕的子程序,里边也有要修改的地方。

目标窗口创建完毕的子程序入口:

0040604F  /.  55            push ebp


【从源码解读汇编代码】

汇编标志:

0040606B  |.  83F8 00       cmp eax,0x0
0040606E  |.  0F85 F0000000 jnz 客户端.00406164
00406074  |.  68 3C4F4900   push 客户端.00494F3C                        ;  ersgegy

源码:

    .如果真 (二次登录验证参数 = “ersgegy”)
        窗口1.可视 = 真
        按钮1.可视 = 假
        二次免费登录验证 ()

对应的汇编代码:

0040608A  |. /0F85 3F000000 jnz 客户端.004060CF     ;.如果真 (二次登录验证参数 = “ersgegy”)
00406090  |. |6A 00         push 0x0
00406092  |. |68 01000000   push 0x1
00406097  |. |6A FF         push -0x1
00406099  |. |6A 05         push 0x5
0040609B  |. |68 4B000106   push 0x601004B
004060A0  |. |68 4C000152   push 0x5201004C
004060A5  |. |E8 3A4B0000   call 客户端.0040ABE4    ;窗口1.可视 = 真
004060AA  |. |83C4 18       add esp,0x18
004060AD  |. |6A 00         push 0x0
004060AF  |. |68 00000000   push 0x0
004060B4  |. |6A FF         push -0x1
004060B6  |. |6A 05         push 0x5
004060B8  |. |68 A1020116   push 0x160102A1
004060BD  |. |68 4C000152   push 0x5201004C
004060C2  |. |E8 1D4B0000   call 客户端.0040ABE4    ;按钮1.可视 = 假
004060C7  |. |83C4 18       add esp,0x18
004060CA  |. |E8 70010000   call 客户端.0040623F    ;二次免费登录验证 ()

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

易语言源码:

.版本 2

    .如果真 (二次登录验证参数 = “sdgbbeyy”)
        二次会员登录验证 ()
        窗口1.可视 = 真
        按钮1.可视 = 真
        网络状态.时钟周期 = 150000  
        登录时钟.时钟周期 = 300000  


对应的汇编代码:

004060E2  |.  83F8 00       cmp eax,0x0
004060E5  |.  0F85 79000000 jnz 客户端.00406164      ;如果真 (二次登录验证参数 = “sdgbbeyy”)
004060EB  |.  E8 9C080000   call 客户端.0040698C     ;二次会员登录验证 ()
004060F0  |.  6A 00         push 0x0
004060F2  |.  68 01000000   push 0x1
004060F7  |.  6A FF         push -0x1
004060F9  |.  6A 05         push 0x5
004060FB  |.  68 4B000106   push 0x601004B
00406100  |.  68 4C000152   push 0x5201004C
00406105  |.  E8 DA4A0000   call 客户端.0040ABE4      ;窗口1.可视 = 真
0040610A  |.  83C4 18       add esp,0x18
0040610D  |.  6A 00         push 0x0
0040610F  |.  68 01000000   push 0x1
00406114  |.  6A FF         push -0x1
00406116  |.  6A 05         push 0x5
00406118  |.  68 A1020116   push 0x160102A1
0040611D  |.  68 4C000152   push 0x5201004C
00406122  |.  E8 BD4A0000   call 客户端.0040ABE4      ;按钮1.可视 = 真
00406127  |.  83C4 18       add esp,0x18
0040612A  |.  6A 00         push 0x0
0040612C  |.  68 F0490200   push 0x249F0              ;时钟周期-(249F0)16=(150000)10
00406131  |.  6A FF         push -0x1
00406133  |.  6A 08         push 0x8
00406135  |.  68 A4040116   push 0x160104A4
0040613A  |.  68 4C000152   push 0x5201004C
0040613F  |.  E8 A04A0000   call 客户端.0040ABE4      ;网络状态.时钟周期 = 150000  
00406144  |.  83C4 18       add esp,0x18
00406147  |.  6A 00         push 0x0
00406149  |.  68 E0930400   push 0x493E0              ;时钟周期-(493E0)16=(300000)10
0040614E  |.  6A FF         push -0x1
00406150  |.  6A 08         push 0x8
00406152  |.  68 8B020116   push 0x1601028B
00406157  |.  68 4C000152   push 0x5201004C
0040615C  |.  E8 834A0000   call 客户端.0040ABE4      ;登录时钟.时钟周期 = 300000  
00406161  |.  83C4 18       add esp,0x18


后边的代码我就不一一对比了,从源码可以看出,后边都不是什么好鸟,我们执行完上边的有用的代码就直接在“0040612A”处retn,把后边的代码pass掉。


【其中一种修改方法爆破CC】

1.
0040651E      55            push ebp

修改为:

0040651E      C2 0400       retn 0x4

作用:作废格盘暗装代码

2.
00404D8C  |. /EB 10         jmp short 客户端.00404D9E

修改为:

00404D8C     /E9 11060000   jmp 客户端.004053A2

作用:直接跳过按下会员登录后的验证部分,来到创建窗口的代码。

3.
004060E5   . /0F85 79000000 jnz 破解后.00406164

用NOP填充

作用:执行我们需要的限制登录模式。

4.
004060EB   .  E8 9C080000   call 3.0040698C

直接NOP填充,或者跟进直接retn。

作用:作废“二次会员登录验证 ()”这个我们不喜欢的子程序。

5.
0040612A  |.  6A 00         push 0x0

修改为:

0040612A      C3            retn
0040612B      90            nop

作用:直接返回,跳过后边的验证。


【总结】

1.首先要利用断点找到突破口,来到关键的代码段。

2.然后要仔细分析代码段的内容,找出可疑的代码(跳转和CALL)。

3.巧用“JMP大法”,在不破坏必须执行的代码的前提下,尽可能多的跳过那些验证的代码。

CC就是一个很好的学习例子,两个子程序中的大部分验证都被我们跳过了。而例如目标窗口创建完毕中的代码:窗口显示为真,按钮禁止为假等应该被执行的代码一个都不能跳过。

CC网络验证3.4修复爆破版 破解版.rar (1.37 MB, 下载次数: 408)


第一篇-【某培训】学前测试-程序多开

第二篇-吾爱扣扣的一个CM

第三篇 - CM大赛作品 - BambooQJ


--------------------------------------------------------------------------------
【版权声明】: 本文原创于【wonderzdh】,转载请注明作者并保持文章的完整,谢谢!

                                                       2013-7-10 11:18




免费评分

参与人数 4热心值 +4 收起 理由
逍遥枷锁 + 1 希望大师多出一些验证的教程。
苏紫方璇 + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.
Chief + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.
小雨细无声 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xjun 发表于 2013-7-10 11:22
被VM了怎么办?  
小雨细无声 发表于 2013-7-10 11:22
 楼主| wonderzdh 发表于 2013-7-10 11:23
xjun 发表于 2013-7-10 11:22
被VM了怎么办?

这是我接下来要学习的。
wuaixuexi 发表于 2013-7-10 11:30
学习了 、谢谢楼主 分享经验  支持你
苏紫方璇 发表于 2013-7-10 11:53
感谢楼主的分析,我还没玩过CC呢
逍遥枷锁 发表于 2013-7-10 11:55
向大师学习,CC验证玩不起,膜拜下
1354669803 发表于 2013-7-10 11:58
对于CC3.5 你这样修改全部无效
 楼主| wonderzdh 发表于 2013-7-10 12:13
1354669803 发表于 2013-7-10 11:58
对于CC3.5 你这样修改全部无效

有没有3.5的源码给我学习一下?
601541027 发表于 2013-7-10 14:35
看了下源码   格式化硬盘的代码是写在关机后的,如果用ODretn掉了关机退出的代码,就会被格式化硬盘,用xuetre来禁止关机然后再来跟踪格式化的代码   纯属自己琢磨不知道这思路有问题没
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 13:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表