吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10698|回复: 7
收起左侧

[转贴] 白盒分析+破解 飘零网络验证V4.0多线程版

  [复制链接]
浩哥霸天下 发表于 2015-3-7 17:26
调试环境:虚拟机(Windows XP)+  飘零网络验证V4.0多线程版(无壳无VM)
只是感兴趣,没有其他用意
飘零多数被用为易语言的网络验证,因此,我们就要利用易语言PUSH窗口的特性。




何为PUSH窗口?
      易语言会为每一个窗口分配一个ID,在载入窗口时,就会PUSH 对应的窗口ID。因此,我们可以直接跳过登录窗口,减少了爆破带来的麻烦~


如何PUSH窗口?

      首先使用OD载入程序,跳转到00401000这个位置,如图
192FV329-0.png
这时,我们按“Ctrl+B”,会弹出一个窗口,然后输入特征码:68 ?? ?? ?? 52,如图
192FVO4-1.png
然后点击确定,接着不断地重复“Ctrl + L”,会一个一个向下查找。
        我们需要记录下其中出现过的PUSH的值:
        0x52010001
        0x52010201

        接着,我们再次回到00401000,然后二进制搜索:FF25
        我们就会看到这样的代码片段


  • 00417C20  |.  E8 C0E7FFFF   CALL    飘零网络.004163E5
  • 00417C25  |.  E8 F6FCFFFF   CALL    飘零网络.00417920
  • 00417C2A      68 01000152   PUSH    0x52010001
  • 00417C2F  |.  E8 11000000   CALL    飘零网络.00417C45
  • 00417C34  |.  83C4 04       ADD     ESP, 0x4
  • 00417C37  |.  E8 03000000   CALL    飘零网络.00417C3F
  • 00417C3C  |.  33C0          XOR     EAX, EAX
  • 00417C3E  \.  C3            RETN
  • 00417C3F   [        DISCUZ_CODE_391        ]nbsp; FF25 BCF34900 JMP     NEAR DWORD PTR DS:[0x49F3BC]     ;  飘零网络.0043B090
  • 00417C45   [        DISCUZ_CODE_391        ]nbsp; FF25 C0F34900 JMP     NEAR DWORD PTR DS:[0x49F3C0]     ;  飘零网络.0043B0C0
  • 00417C4B   [        DISCUZ_CODE_391        ]nbsp; FF25 C4F34900 JMP     NEAR DWORD PTR DS:[0x49F3C4]     ;  飘零网络.0043AC70
  • 00417C51   [        DISCUZ_CODE_391        ]nbsp; FF25 B4F34900 JMP     NEAR DWORD PTR DS:[0x49F3B4]     ;  飘零网络.0043B230
  • 00417C57   [        DISCUZ_CODE_391        ]nbsp; FF25 A0F34900 JMP     NEAR DWORD PTR DS:[0x49F3A0]     ;  飘零网络.0043ACF0
  • 00417C5D   [        DISCUZ_CODE_391        ]nbsp; FF25 ACF34900 JMP     NEAR DWORD PTR DS:[0x49F3AC]     ;  飘零网络.0043B100
  • 00417C63   [        DISCUZ_CODE_391        ]nbsp; FF25 A8F34900 JMP     NEAR DWORD PTR DS:[0x49F3A8]     ;  飘零网络.0043B060
  • 00417C69   [        DISCUZ_CODE_391        ]nbsp; FF25 A4F34900 JMP     NEAR DWORD PTR DS:[0x49F3A4]     ;  飘零网络.0043B040
  • 00417C6F   [        DISCUZ_CODE_391        ]nbsp; FF25 B8F34900 JMP     NEAR DWORD PTR DS:[0x49F3B8]     ;  飘零网络.0043B150

复制代码注意这行代码:
  • 00417C2A      68 01000152   PUSH    0x52010001

[color=rgb(51, 102, 153) !important]复制代码

        是不是感觉很脸熟,没错,这就是易语言启动窗口的ID。
        我们把窗口ID改为0x52010201
        就像这样:
  • 00417C2A 68 01000152 PUSH 0x52010201

[color=rgb(51, 102, 153) !important]复制代码

       这样修改之后,在程序启动时,就会载入窗口ID为0x52010201的窗口

######################分割一下############################
        当然,飘零作者早就为我们想到了易语言本身的缺陷~早就给我们准备好校验了。
        我们来看一下源码:
  • .版本 2
  • .子程序 _窗口1_创建完毕
  • 置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 })  ' VMP过程加密开始
  • 飘零关闭驱动句柄 (防OD线程驱动句柄)
  • 标签_到期时间.标题 = “到期时间为:” + 到文本 (到期时间)
  • 登陆检测时钟.时钟周期 = 1000 × 60 × 2
  • 时钟_验证动态.时钟周期 = 1000 × 60 × 5
  • ' 飘零写通讯数据 (“piaolook”, 静态数据)  ' 在DLL用  飘零读通讯数据 (“piaolook”) 取到该防破数据或基址
  • ' 调试输出 (静态数据)
  • 置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 })  ' VMP过程加密结束

[color=rgb(51, 102, 153) !important]复制代码

      可以看到,在载入窗口后,设置了两个时钟,我们再来看一看这两个时钟:
  • .版本 2
  • .支持库 EThread
  • .子程序 _登陆检测时钟_周期事件
  • 置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 })  ' VMP过程加密开始
  • 启动线程 (&登陆检测线程, , )
  • 置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 })  ' VMP过程加密结束
  • .子程序 登陆检测线程
  • 置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 })  ' VMP过程加密开始
  • .判断开始 (飘零商业效验引擎 (登陆账号) = 1)
  •     登陆检测时钟.时钟周期 = 0
  • .默认
  •     结束 ()
  •     置入代码 ({ 204 })
  • .判断结束
  • 置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 })  ' VMP过程加密结束
  • .版本 2
  • .子程序 _时钟_验证动态_周期事件
  • .局部变量 防止重复, 逻辑型, 静态
  • 置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 })  ' VMP过程加密开始
  • .如果真 (防止重复 = 真)
  •     返回 ()
  • .如果真结束
  • .如果真 (飘零是否与互联网连接 () = 假)
  •     可视 = 假
  •     载入 (窗口_重新连接, , 真)
  • .如果真结束
  • 防止重复 = 假
  • 置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 })  ' VMP过程加密结束

[color=rgb(51, 102, 153) !important]复制代码

       这里一堆代码就是检测你的账号有没有登录,现在还好,没登录就给你关闭,以前的版本直接蓝屏了。               说一下我以前是怎样破的,以前的版本很单纯,检测到了就给你蓝屏,那就只需要把蓝屏CALL给和谐掉。
        但是现在,虽然没有蓝屏了,感觉还要比以前难搞
        想了下,决定修改时钟时间。
        我们看这段代码
  • 标签_到期时间.标题 = “到期时间为:” + 到文本 (到期时间)
  • 登陆检测时钟.时钟周期 = 1000 × 60 × 2
  • 时钟_验证动态.时钟周期 = 1000 × 60 × 5

[color=rgb(51, 102, 153) !important]复制代码


        如何定位这段代码呢?玩过免杀的朋友肯定首先想到用MAP文件,但是易语言没有MAP文件。
        这行代码可以给我们提示
  • 标签_到期时间.标题 = “到期时间为:” + 到文本 (到期时间)

[color=rgb(51, 102, 153) !important]复制代码

      也就是说,我们只需要找到“到期时间为”这个字符串,就可以找到设置时钟的代码。       找到的汇编代码:
  • 004177D0  |.  FF75 FC       PUSH    [LOCAL.1]
  • 004177D3  |.  68 99FB4B00   PUSH    飘零网络.004BFB99                    ;  到期时间为:
  • 004177D8  |.  B9 02000000   MOV     ECX, 0x2
  • 004177DD  |.  E8 B49CFEFF   CALL    飘零网络.00401496
  • 004177E2  |.  83C4 08       ADD     ESP, 0x8
  • 004177E5  |.  8945 F8       MOV     [LOCAL.2], EAX
  • 004177E8  |.  8B5D FC       MOV     EBX, [LOCAL.1]
  • 004177EB  |.  85DB          TEST    EBX, EBX
  • 004177ED  |.  74 09         JE      SHORT 飘零网络.004177F8
  • 004177EF  |.  53            PUSH    EBX
  • 004177F0  |.  E8 5C040000   CALL    飘零网络.00417C51
  • 004177F5  |.  83C4 04       ADD     ESP, 0x4
  • 004177F8  |>  6A 00         PUSH    0x0
  • 004177FA  |.  FF75 F8       PUSH    [LOCAL.2]
  • 004177FD  |.  6A FF         PUSH    -0x1
  • 004177FF  |.  6A 08         PUSH    0x8
  • 00417801  |.  68 72AA0116   PUSH    0x1601AA72
  • 00417806  |.  68 01020152   PUSH    0x52010201
  • 0041780B  |.  E8 53040000   CALL    飘零网络.00417C63
  • 00417810  |.  83C4 18       ADD     ESP, 0x18
  • 00417813  |.  8B5D F8       MOV     EBX, [LOCAL.2]
  • 00417816  |.  85DB          TEST    EBX, EBX
  • 00417818  |.  74 09         JE      SHORT 飘零网络.00417823
  • 0041781A  |.  53            PUSH    EBX
  • 0041781B  |.  E8 31040000   CALL    飘零网络.00417C51
  • 00417820  |.  83C4 04       ADD     ESP, 0x4
  • 00417823  |>  6A 00         PUSH    0x0
  • 00417825      68 C0D40100   PUSH    0x1D4C0
  • 0041782A  |.  6A FF         PUSH    -0x1
  • 0041782C  |.  6A 08         PUSH    0x8
  • 0041782E  |.  68 837A0116   PUSH    0x16017A83
  • 00417833  |.  68 01020152   PUSH    0x52010201
  • 00417838  |.  E8 26040000   CALL    飘零网络.00417C63
  • 0041783D  |.  83C4 18       ADD     ESP, 0x18
  • 00417840  |.  6A 00         PUSH    0x0
  • 00417842      68 E0930400   PUSH    0x493E0
  • 00417847  |.  6A FF         PUSH    -0x1
  • 00417849  |.  6A 08         PUSH    0x8
  • 0041784B  |.  68 25B80116   PUSH    0x1601B825
  • 00417850  |.  68 01020152   PUSH    0x52010201
  • 00417855  |.  E8 09040000   CALL    飘零网络.00417C63
  • 0041785A  |.  83C4 18       ADD     ESP, 0x18
  • 0041785D  |.  EB 0E         JMP     SHORT 飘零网络.0041786D
  • 0041785F  |.  56 4D 50 72 6>ASCII   "VMProtect end",0

[color=rgb(51, 102, 153) !important]复制代码

      注意这两句:
  • 00417825      68 C0D40100   PUSH    0x1D4C0

[color=rgb(51, 102, 153) !important]复制代码

  • 00417842      68 E0930400   PUSH    0x493E0

[color=rgb(51, 102, 153) !important]复制代码

      将0x1D4C0和0x493E0由十六进制转变为十进制,就会发现刚好与1000 × 60 × 2、1000 × 60 × 5这俩个式子的值相同



      然后就只需要把他替换为0了,像这样:
  • 00417825 68 C0D40100 PUSH 0x0
  • 00417842 68 E0930400 PUSH 0x0

[color=rgb(51, 102, 153) !important]复制代码

     这时,我们就算搞定了校验,运行看看: 192FR5N-2.jpg







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

零点 发表于 2015-3-7 17:32
大牛 前排 我徒弟是B牛
yinn456 发表于 2015-3-7 17:47
 楼主| 浩哥霸天下 发表于 2015-3-7 19:12
月光下の魔术师 发表于 2015-3-7 19:09
提示lz:易语言可以有map文件的,方法是在link.ini中加上extra_args=/FIXED:NO /MAP

恩的。的确!
月光下の魔术师 发表于 2015-3-7 19:09
提示lz:易语言可以有map文件的,方法是在link.ini中加上extra_args=/FIXED:NO /MAP
青稚 发表于 2015-3-7 19:52
菜鸟看看就好。。
hzh491944995 发表于 2015-3-16 17:03
不错 支持
xmp12345 发表于 2015-3-18 19:56
今天又长见识了,楼主辛苦了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 10:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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