飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 23781|回复: 50

[原创] 双色球霸主7.0(入门注册码+7Bytes优雅爆破+解方程式算法分析)

  [复制链接]
  • TA的每日心情
    开心
    2019-3-17 22:44
  • 签到天数: 132 天

    [LV.7]常住居民III

    发表于 2014-10-5 07:21:53 | 显示全部楼层 |阅读模式
    本帖最后由 tree_fly 于 2014-11-28 12:03 编辑

    【破文标题】双色球霸主7.0(入门注册码+7Bytes优雅爆破+解方程式算法分析)
    【破文作者】tree_fly
    【作者邮箱】
    【作者主页】
    破解工具】PYG_ODBG;Excel
    【破解平台】XPSp3 x86
    【软件名称】SSQBZ.exe
    【软件大小】452K
    【原版下载】http://www.cpbz.com/
    【保护方式】未加壳;Microsoft Visual C++ 6.0
    【软件简介】略
    【破解声明】支持国软;请勿商用;本文仅做研究所用。
    ------------------------------------------------------------------------


    这款软件的注册验证很有特点,吸引了我,特开帖与大家分享,如有不足还请指点。
    在进一步阅读下面文章之前,希望各位可以先亲自动手尝试破解。
    好了,我们进入主题,今天我们来一起分析这款有趣的软件,在这国庆65周年之际,与大家共同进步。

    0x01 基础篇 **********************************************************************************
    1.软件没有加壳,编程语言是MS VC++。
    图片1.png

    2.启动软件,点击软件注册按钮,输入假注册码:1234-5678-9012,提示“输入的注册码不正确”。
    我们从查询关键词切入。

    图片2.png

    很容易来到这里:
    图片3.png

    3.向上分析,我们来到这里:
    00404DFB   .  6A 01         PUSH    1
    00404DFD   .  8BCD          MOV     ECX, EBP
    00404DFF   .  E8 8F1D0400   CALL    SSQBZ.00446B93
    00404E04   .  8B85 B4000000 MOV     EAX, DWORD PTR SS:[EBP+B4]
    00404E0A   .  8D9D B4000000 LEA     EBX, DWORD PTR SS:[EBP+B4]
    00404E10   .  8378 F8 04    CMP     DWORD PTR DS:[EAX-8], 4
    00404E14   .  0F8C C2010000 JL      SSQBZ.00404FDC
    00404E1A   .  8B8D B8000000 MOV     ECX, DWORD PTR SS:[EBP+B8]
    00404E20   .  8DB5 B8000000 LEA     ESI, DWORD PTR SS:[EBP+B8]
    00404E26   .  B8 04000000   MOV     EAX, 4
    00404E2B   .  3941 F8       CMP     DWORD PTR DS:[ECX-8], EAX
    00404E2E   .  0F8C A8010000 JL      SSQBZ.00404FDC
    00404E34   .  8B95 BC000000 MOV     EDX, DWORD PTR SS:[EBP+BC]
    00404E3A   .  3942 F8       CMP     DWORD PTR DS:[EDX-8], EAX
    00404E3D   .  0F8C 99010000 JL      SSQBZ.00404FDC
    00404E43   .  33FF          XOR     EDI, EDI
    00404E45   >  6A 00         PUSH    0
    00404E47   .  8BCB          MOV     ECX, EBX
    00404E49   .  E8 86330400   CALL    SSQBZ.004481D4
    00404E4E   .  8A0438        MOV     AL, BYTE PTR DS:[EAX+EDI]
    00404E51   .  8887 34494600 MOV     BYTE PTR DS:[EDI+464934], AL     ;  111111111111
    00404E57   .  47            INC     EDI
    00404E58   .  83FF 04       CMP     EDI, 4
    00404E5B   .^ 7C E8         JL      SHORT SSQBZ.00404E45
    00404E5D   .  33DB          XOR     EBX, EBX
    00404E5F   .  33FF          XOR     EDI, EDI
    00404E61   >  53            PUSH    EBX
    00404E62   .  8BCE          MOV     ECX, ESI
    00404E64   .  E8 6B330400   CALL    SSQBZ.004481D4
    00404E69   .  8A0C38        MOV     CL, BYTE PTR DS:[EAX+EDI]
    00404E6C   .  888F 38494600 MOV     BYTE PTR DS:[EDI+464938], CL     ;  11111111
    00404E72   .  47            INC     EDI
    00404E73   .  83FF 04       CMP     EDI, 4
    00404E76   .^ 7C E9         JL      SHORT SSQBZ.00404E61
    00404E78   .  33FF          XOR     EDI, EDI
    00404E7A   >  53            PUSH    EBX
    00404E7B   .  8D8D BC000000 LEA     ECX, DWORD PTR SS:[EBP+BC]
    00404E81   .  E8 4E330400   CALL    SSQBZ.004481D4
    00404E86   .  8A1438        MOV     DL, BYTE PTR DS:[EAX+EDI]
    00404E89   .  8897 3C494600 MOV     BYTE PTR DS:[EDI+46493C], DL     ;  1111
    00404E8F   .  47            INC     EDI
    00404E90   .  83FF 04       CMP     EDI, 4
    00404E93   .^ 7C E5         JL      SHORT SSQBZ.00404E7A


    4.软件开始对注册码进行处理了,注意这里:
    00404E95   .  803D 34494600>CMP     BYTE PTR DS:[464934], 38
    00404E9C   .  75 5C         JNZ     SHORT SSQBZ.00404EFA
    图片4.png
    DS:[464934],这里正是注册码的首位,与0x38比较,提示注册码首位必须为8,否则跳转失败。
    至此,正确的注册码第一个条件:首位数字为8。


    5.我们继续向下看:
    00404E9E   .  33C0          XOR     EAX, EAX
    00404EA0   .  B9 02000000   MOV     ECX, 2
    00404EA5   >  0FBE91 354946>MOVSX   EDX, BYTE PTR DS:[ECX+464935]    ;  11111111111
    00404EAC   .  83EA 30       SUB     EDX, 30
    00404EAF   .  0FAFD1        IMUL    EDX, ECX
    00404EB2   .  03C2          ADD     EAX, EDX                         ;  
    00404EB4   .  41            INC     ECX
    00404EB5   .  83F9 0A       CMP     ECX, 0A
    00404EB8   .^ 7E EB         JLE     SHORT SSQBZ.00404EA5
    00404EBA   .  99            CDQ
    图片5.png
    翻译如下:
    1.取第4位注册码,乘2,累加
    2.取第5位注册码,乘3,累加
    ......
    9.取第12位注册码,乘10,累加
    最终获得一个总的累加值EAX



    6.下面继续:
    00404EBB   .  B9 64000000   MOV     ECX, 64
    00404EC0   .  F7F9          IDIV    ECX
    00404EC2   .  B8 67666666   MOV     EAX, 66666667
    00404EC7   .  8BCA          MOV     ECX, EDX                         ;   
    00404EC9   .  F7E9          IMUL    ECX
    00404ECB   .  C1FA 02       SAR     EDX, 2
    00404ECE   .  8BC2          MOV     EAX, EDX                         ;   
    00404ED0   .  C1E8 1F       SHR     EAX, 1F
    00404ED3   .  8D5402 30     LEA     EDX, DWORD PTR DS:[EDX+EAX+30]
    00404ED7   .  0FBE05 354946>MOVSX   EAX, BYTE PTR DS:[464935]        ;  11111111111
    00404EDE   .  3BC2          CMP     EAX, EDX                         ;  ntdll.KiFastSystemCallRet
    00404EE0   .  75 18         JNZ     SHORT SSQBZ.00404EFA
    翻译如下:
    1.EAX / 0x64 ,取余数
    2.0x66666667 * 余数 = EDX*0x10000 0000 + EAX
    3.EDX / 4 ;EAX =0
    4.比较第2位注册码 =?EDX



    7.继续向下,相信大家应该很容易读懂下面的汇编代码,这里是判断注册码第3位是否正确:
    00404EE2   .  8BC1          MOV     EAX, ECX
    00404EE4   .  B9 0A000000   MOV     ECX, 0A
    00404EE9   .  99            CDQ
    00404EEA   .  F7F9          IDIV    ECX
    00404EEC   .  0FBE05 364946>MOVSX   EAX, BYTE PTR DS:[464936]        ;  1111111111
    00404EF3   .  83C2 30       ADD     EDX, 30
    00404EF6   .  3BC2          CMP     EAX, EDX                         ;
    00404EF8   .  74 2B         JE      SHORT SSQBZ.00404F25
    走到这里,已经提示“注册码初步检测通过,后续还会有进一步的检测”。

    8.下面我们为了加快注册码实现速度,我们用Excel来模拟生成注册码,Excel附件已提供。
    图片6.png

    这样,我们就成功生成了一个入门注册码:8301-2345-6789
    之所以我说是入门注册码,因为下面程序还会进一步对注册码反复多次验证,验证失败即复原未注册状态。


    0x02 解方程式篇 **********************************************************************************
    1.进入缩水过滤功能模块,选择合适的红球、蓝球后,点击“中6保5缩水”,投注结果列表框内即显示了对应的彩票缩水结果,
    可是当我们向下翻页时,提示“您尚未注册 可继续使用”。

    图片7.png
    我们依然从查找关键词文本切入,发现有多个类似提示,很容易定位到中6保5缩水功能块内,如图:
    图片8.png
    我们发现,在这里至少有5处跳转,用来判断注册状态!
    在接下来的分析中,我们会发现无处不在的注册状态判断,几乎大部分重要功能算法后均会跟上一连串的判断,简单点说“暗荘遍野”!
    应该有个想法:抓主干,堵源头!

    2.所以我们尝试着来分析跳转组里的第一处跳转,看看是否有规律可循。
    0040D84E  |> \A1 70BE4600   MOV     EAX, DWORD PTR DS:[46BE70]               
    0040D853  |.  85C0          TEST    EAX, EAX
    0040D855  |.  74 1F         JE      SHORT SSQBZ.0040D876
    0040D857  |.  6A 04         PUSH    4
    0040D859  |.  8BCE          MOV     ECX, ESI
    0040D85B  |.  E8 80800100   CALL    SSQBZ.004258E0                    
    0040D860  |.  8BF8          MOV     EDI, EAX
    0040D862  |.  6A 05         PUSH    5
    0040D864  |.  8BCE          MOV     ECX, ESI
    0040D866  |.  83C7 03       ADD     EDI, 3
    0040D869  |.  E8 72800100   CALL    SSQBZ.004258E0                  
    0040D86E  |.  3BF8          CMP     EDI, EAX
    0040D870  |.  0F84 F5000000 JE      SSQBZ.0040D96B
    0040D876  |>  A1 B0BF4600   MOV     EAX, DWORD PTR DS:[46BFB0]
    0040D87B  |.  85C0          TEST    EAX, EAX
    注意这里读取全局变量[46BE70],应该对其进一步分析,右键选择该地址,查找参考->查看地址常量。
    好家伙!满屏的比较和赋值!

    图片21.png

    3.不要感到恐惧,仔细把每条语句读完,你会惊喜发现,只有一条语句为该地址赋值为1,似乎看到了成功的丝丝曙光。
    双击该语句,来到这里:
    00425850  /$  68 34494600   PUSH    SSQBZ.00464934                   ;  830123456789
    00425855  |.  C705 70BE4600>MOV     DWORD PTR DS:[46BE70], 0         ;  
    0042585F  |.  E8 BDE80000   CALL    SSQBZ.00434121
    00425864  |.  83C4 04       ADD     ESP, 4
    00425867  |.  85C0          TEST    EAX, EAX
    00425869  |.  74 66         JE      SHORT SSQBZ.004258D1
    0042586B  |.  33C0          XOR     EAX, EAX
    0042586D  |.  B9 02000000   MOV     ECX, 2
    00425872  |>  0FBE91 354946>/MOVSX   EDX, BYTE PTR DS:[ECX+464935]   ;  30123456789
    00425879  |.  83EA 30       |SUB     EDX, 30
    0042587C  |.  0FAFD1        |IMUL    EDX, ECX
    0042587F  |.  03C2          |ADD     EAX, EDX                        ;  SSQBZ.0046EF28
    00425881  |.  41            |INC     ECX
    00425882  |.  83F9 0A       |CMP     ECX, 0A
    00425885  |.^ 7E EB         \JLE     SHORT SSQBZ.00425872
    00425887  |.  99            CDQ
    00425888  |.  B9 64000000   MOV     ECX, 64
    0042588D  |.  F7F9          IDIV    ECX
    0042588F  |.  B8 67666666   MOV     EAX, 66666667
    00425894  |.  8BCA          MOV     ECX, EDX                         ;  SSQBZ.0046EF28
    00425896  |.  F7E9          IMUL    ECX
    00425898  |.  C1FA 02       SAR     EDX, 2
    0042589B  |.  8BC2          MOV     EAX, EDX                         ;  SSQBZ.0046EF28
    0042589D  |.  C1E8 1F       SHR     EAX, 1F
    004258A0  |.  8D5402 30     LEA     EDX, DWORD PTR DS:[EDX+EAX+30]
    004258A4  |.  0FBE05 354946>MOVSX   EAX, BYTE PTR DS:[464935]        ;  30123456789
    004258AB  |.  3BC2          CMP     EAX, EDX                         ;  SSQBZ.0046EF28
    004258AD  |.  75 22         JNZ     SHORT SSQBZ.004258D1
    004258AF  |.  8BC1          MOV     EAX, ECX
    004258B1  |.  B9 0A000000   MOV     ECX, 0A
    004258B6  |.  99            CDQ
    004258B7  |.  F7F9          IDIV    ECX
    004258B9  |.  0FBE05 364946>MOVSX   EAX, BYTE PTR DS:[464936]        ;  0123456789
    004258C0  |.  83C2 30       ADD     EDX, 30
    004258C3  |.  3BC2          CMP     EAX, EDX                         ;  SSQBZ.0046EF28
    004258C5  |.  75 0A         JNZ     SHORT SSQBZ.004258D1
    004258C7  |.  C705 70BE4600>MOV     DWORD PTR DS:[46BE70], 1         ;  全局变量[46be70]=1
    004258D1  \>  C3            RETN
    看来程序又对注册码进行了验证,验证成功后全局变量[46BE70]即等于1,否则赋0值。
    所以我们有理由相信,全局变量[46BE70]是我们要找的主干之一,应该时刻关注他的值,并保持为1。
    同时,这里应该也是一个爆破点。我们做个标记提醒一下吧。

    4.我们继续回到刚才的跳转组,
    0040D84E  |> \A1 70BE4600   MOV     EAX, DWORD PTR DS:[46BE70]               
    0040D853  |.  85C0          TEST    EAX, EAX
    0040D855  |.  74 1F         JE      SHORT SSQBZ.0040D876
    0040D857  |.  6A 04         PUSH    4
    0040D859  |.  8BCE          MOV     ECX, ESI
    0040D85B  |.  E8 80800100   CALL    SSQBZ.004258E0                    
    0040D860  |.  8BF8          MOV     EDI, EAX
    0040D862  |.  6A 05         PUSH    5
    0040D864  |.  8BCE          MOV     ECX, ESI
    0040D866  |.  83C7 03       ADD     EDI, 3
    0040D869  |.  E8 72800100   CALL    SSQBZ.004258E0                    
    0040D86E  |.  3BF8          CMP     EDI, EAX
    0040D870  |.  0F84 F5000000 JE      SSQBZ.0040D96B                     ;  
    0040D876  |>  A1 B0BF4600   MOV     EAX, DWORD PTR DS:[46BFB0]
    0040D87B  |.  85C0          TEST    EAX, EAX
    注意这里PUSH 4,PUSH 5后分别CALL了一个函数,我们用F来定义这个函数SSQBZ.4258E0。
    成功跳转的条件是:
    F(4) + 3 = F(5)

    5.我们应该对这个F函数进一步了解,右键点击该函数地址,选择查找参考->调用目的地址。
    好家伙!又是满屏的调用!
    图片9.png

    这个函数的调用如下:
    本地调用来自 0040D589, 0040D597, 0040D85B, 0040D869, 0040DA8E, 0040DA9C,
    0040E3A1, 0040E3B6, 00412228, 004149FE, 00414A10, 00414FBF, 00415D15,
    00415D27, 004163C1, 004163CC, 004163D9, 0041CCED, 0041CD02, 0041D386,
    0041D394, 0041E7F5, 0041E800……

    6.不要放弃,对每一处函数调用下断点,逐条分析。我们惊喜的发现一些规律。

    如下代码,分析后应满足:
    条件1:F(1) + 1 = F(3)
    00415D12  |.  50            PUSH    EAX
    00415D13  |.  8BCE          MOV     ECX, ESI
    00415D15  |.  E8 C6FB0000   CALL    SSQBZ.004258E0                   ;  调用 4258E0
    00415D1A  |.  8B0D ACBF4600 MOV     ECX, DWORD PTR DS:[46BFAC]       ;   
    00415D20  |.  6A 03         PUSH    3
    00415D22  |.  8D3C08        LEA     EDI, DWORD PTR DS:[EAX+ECX]
    00415D25  |.  8BCE          MOV     ECX, ESI
    00415D27  |.  E8 B4FB0000   CALL    SSQBZ.004258E0
    00415D2C  |.  3BF8          CMP     EDI, EAX
    00415D2E      74 1B         JE      SHORT SSQBZ.00415D4B
    00415D30  |.  8BCE          MOV     ECX, ESI
    00415D32  |.  C705 B0D34600>MOV     DWORD PTR DS:[46D3B0], 0
    00415D3C  |.  E8 BFFA0000   CALL    SSQBZ.00425800                   ;  
    00415D41  |.  C705 70BE4600>MOV     DWORD PTR DS:[46BE70], 0         ; 失败,[46BE70]清零
    00415D4B  |>  5F            POP     EDI
    00415D4C  |.  5E            POP     ESI
    00415D4D  |.  59            POP     ECX
    00415D4E  \.  C3            RETN

    条件2:F(4) + 3 = F(5)
    0040D84E  |> \A1 70BE4600   MOV     EAX, DWORD PTR DS:[46BE70]
    0040D853  |.  85C0          TEST    EAX, EAX
    0040D855  |.  74 1F         JE      SHORT SSQBZ.0040D876
    0040D857  |.  6A 04         PUSH    4
    0040D859  |.  8BCE          MOV     ECX, ESI
    0040D85B  |.  E8 80800100   CALL    SSQBZ.004258E0
    0040D860  |.  8BF8          MOV     EDI, EAX
    0040D862  |.  6A 05         PUSH    5
    0040D864  |.  8BCE          MOV     ECX, ESI
    0040D866  |.  83C7 03       ADD     EDI, 3
    0040D869  |.  E8 72800100   CALL    SSQBZ.004258E0
    0040D86E      3BF8          CMP     EDI, EAX
    0040D870      0F84 F5000000 JE      SSQBZ.0040D96B                    
    0040D876  |>  A1 B0BF4600   MOV     EAX, DWORD PTR DS:[46BFB0]

    条件3:F(2) + F(1) + 1 = F(4)
    004163B9  |.  85C0          TEST    EAX, EAX
    004163BB  |.  74 25         JE      SHORT SSQBZ.004163E2
    004163BD  |.  6A 02         PUSH    2
    004163BF  |.  8BCE          MOV     ECX, ESI
    004163C1  |.  E8 1AF50000   CALL    SSQBZ.004258E0
    004163C6  |.  6A 01         PUSH    1
    004163C8  |.  8BCE          MOV     ECX, ESI
    004163CA  |.  8BF8          MOV     EDI, EAX                         ;  edi=f2
    004163CC  |.  E8 0FF50000   CALL    SSQBZ.004258E0
    004163D1  |.  6A 04         PUSH    4
    004163D3  |.  8BCE          MOV     ECX, ESI
    004163D5  |.  8D7C07 01     LEA     EDI, DWORD PTR DS:[EDI+EAX+1]    ;  f(2)+f(1)+1=f(4)
    004163D9  |.  E8 02F50000   CALL    SSQBZ.004258E0
    004163DE  |.  3BF8          CMP     EDI, EAX

    条件4: F(3) + 3 = F(4)
    0041CCE9   .  6A 03         PUSH    3
    0041CCEB   .  8BCD          MOV     ECX, EBP
    0041CCED   .  E8 EE8B0000   CALL    SSQBZ.004258E0
    0041CCF2   .  8BF8          MOV     EDI, EAX
    0041CCF4   .  A1 ACBF4600   MOV     EAX, DWORD PTR DS:[46BFAC]       ;  1
    0041CCF9   .  6A 04         PUSH    4
    0041CCFB   .  8D0C40        LEA     ECX, DWORD PTR DS:[EAX+EAX*2]    ;  3
    0041CCFE   .  03F9          ADD     EDI, ECX                         ;  f(3)+3
    0041CD00   .  8BCD          MOV     ECX, EBP
    0041CD02   .  E8 D98B0000   CALL    SSQBZ.004258E0                   ;  f(4)=f(3)+3
    0041CD07   .  3BC7          CMP     EAX, EDI
    0041CD09   .  74 17         JE      SHORT SSQBZ.0041CD22

    条件5:F(1) + 2 = F(2)
    0041D37A   > \391D 70BE4600 CMP     DWORD PTR DS:[46BE70], EBX
    0041D380   .  74 1B         JE      SHORT SSQBZ.0041D39D
    0041D382   .  6A 01         PUSH    1
    0041D384   .  8BCD          MOV     ECX, EBP
    0041D386   .  E8 55850000   CALL    SSQBZ.004258E0                   ;  f(1)+2=f(2)
    0041D38B   .  8BF0          MOV     ESI, EAX
    0041D38D   .  6A 02         PUSH    2
    0041D38F   .  8BCD          MOV     ECX, EBP
    0041D391   .  83C6 02       ADD     ESI, 2
    0041D394   .  E8 47850000   CALL    SSQBZ.004258E0
    0041D399   .  3BF0          CMP     ESI, EAX
    0041D39B   .  74 3D         JE      SHORT SSQBZ.0041D3DA

    条件6: F(3) + F(4) = 7
    0041E7F1   .  6A 04         PUSH    4
    0041E7F3   .  8BCD          MOV     ECX, EBP
    0041E7F5   .  E8 E6700000   CALL    SSQBZ.004258E0                   ;  f(3)+f(4)=7
    0041E7FA   .  6A 03         PUSH    3
    0041E7FC   .  8BCD          MOV     ECX, EBP
    0041E7FE   .  8BF0          MOV     ESI, EAX
    0041E800   .  E8 DB700000   CALL    SSQBZ.004258E0                   ;  f(3)+f(4)=7
    0041E805   .  03F0          ADD     ESI, EAX
    0041E807   .  83FE 07       CMP     ESI, 7
    0041E80A   .  74 7F         JE      SHORT SSQBZ.0041E88B

    条件7: F(2) + F(3) = F(4)
    0041F67E  |.  6A 03         |PUSH    3
    0041F680  |.  8BCE          |MOV     ECX, ESI
    0041F682  |.  E8 59620000   |CALL    SSQBZ.004258E0                  ;  f(3)+f(2)=f(4)
    0041F687  |.  6A 02         |PUSH    2
    0041F689  |.  8BCE          |MOV     ECX, ESI
    0041F68B  |.  8BF8          |MOV     EDI, EAX
    0041F68D  |.  E8 4E620000   |CALL    SSQBZ.004258E0                  ;  f(3)+f(2)=f(4)
    0041F692  |.  6A 04         |PUSH    4
    0041F694  |.  8BCE          |MOV     ECX, ESI
    0041F696  |.  03F8          |ADD     EDI, EAX
    0041F698  |.  E8 43620000   |CALL    SSQBZ.004258E0                  ;  f(3)+f(2)=f(4)
    0041F69D  |.  3BF8          |CMP     EDI, EAX
    0041F69F  |.  75 13         |JNZ     SHORT SSQBZ.0041F6B4

    条件8: F(2) + F(3) = 5
    00421D0E  |.  6A 03         PUSH    3
    00421D10  |.  8BCE          MOV     ECX, ESI
    00421D12  |.  E8 C93B0000   CALL    SSQBZ.004258E0                   ;  f3+f2=5
    00421D17  |.  6A 02         PUSH    2
    00421D19  |.  8BCE          MOV     ECX, ESI
    00421D1B  |.  8BD8          MOV     EBX, EAX
    00421D1D  |.  E8 BE3B0000   CALL    SSQBZ.004258E0                   ;  f2+f3=5
    00421D22  |.  03D8          ADD     EBX, EAX
    00421D24  |.  83FB 05       CMP     EBX, 5
    00421D27  |.  74 4C         JE      SHORT SSQBZ.00421D75

    条件9: F(2) + F(3) + 3 = F(5)
    004220B4  |> \393D 70BE4600 CMP     DWORD PTR DS:[46BE70], EDI
    004220BA  |.  74 26         JE      SHORT SSQBZ.004220E2
    004220BC  |.  6A 03         PUSH    3
    004220BE  |.  8BCE          MOV     ECX, ESI
    004220C0  |.  E8 1B380000   CALL    SSQBZ.004258E0                   ;  f3+f2+3=f5
    004220C5  |.  6A 02         PUSH    2
    004220C7  |.  8BCE          MOV     ECX, ESI
    004220C9  |.  8BD8          MOV     EBX, EAX
    004220CB  |.  E8 10380000   CALL    SSQBZ.004258E0                   ;  f3+f2+3=f5
    004220D0  |.  6A 05         PUSH    5
    004220D2  |.  8BCE          MOV     ECX, ESI
    004220D4  |.  03D8          ADD     EBX, EAX
    004220D6  |.  E8 05380000   CALL    SSQBZ.004258E0                   ;  f3+f2+3=f5
    004220DB  |.  83E8 03       SUB     EAX, 3
    004220DE  |.  3BD8          CMP     EBX, EAX
    004220E0  |.  74 4C         JE      SHORT SSQBZ.0042212E

    7.为了便于分析,我们汇总一下:
    条件1: F(1) + 1 = F(3)
    条件2: F(4) + 3 = F(5)
    条件3: F(2) + F(1) + 1 = F(4)
    条件4: F(3) + 3 = F(4)
    条件5: F(1) + 2 = F(2)
    条件6: F(3) + F(4) = 7
    条件7: F(2) + F(3) = F(4)
    条件8: F(2) + F(3) = 5
    条件9: F(2) + F(3) + 3 = F(5)


    这可是初中时期大家就应该掌握的数学题吧,各位自然不在话下:
    F(1)   F(2)    F(3)    F(4)    F(5)
    1       3       2       5       8  

    8.至此,我们似乎找到了一些非常关键的内容!

    9.是开始分析函数F的时候了。
    F函数如下:
    004258E0  /$  8B4C24 04     MOV     ECX, DWORD PTR SS:[ESP+4]       ;  F函数
    004258E4  |.  A1 B0D34600   MOV     EAX, DWORD PTR DS:[46D3B0]
    004258E9  |.  83F9 01       CMP     ECX, 1                          ;  Switch (cases 1..5)
    004258EC  |.  75 09         JNZ     SHORT SSQBZ.004258F7
    004258EE  |.  C1E8 10       SHR     EAX, 10                         ;  Case 1 of switch 004258E9
    004258F1  |.  83E0 0F       AND     EAX, 0F
    004258F4  |.  C2 0400       RETN    4
    004258F7  |>  83F9 02       CMP     ECX, 2
    004258FA  |.  75 09         JNZ     SHORT SSQBZ.00425905
    004258FC  |.  C1E8 0C       SHR     EAX, 0C                         ;  Case 2 of switch 004258E9
    004258FF  |.  83E0 0F       AND     EAX, 0F
    00425902  |.  C2 0400       RETN    4
    00425905  |>  83F9 03       CMP     ECX, 3
    00425908  |.  75 09         JNZ     SHORT SSQBZ.00425913
    0042590A  |.  C1E8 08       SHR     EAX, 8                          ;  Case 3 of switch 004258E9
    0042590D  |.  83E0 0F       AND     EAX, 0F
    00425910  |.  C2 0400       RETN    4
    00425913  |>  83F9 04       CMP     ECX, 4
    00425916  |.  75 09         JNZ     SHORT SSQBZ.00425921
    00425918  |.  C1E8 04       SHR     EAX, 4                          ;  Case 4 of switch 004258E9
    0042591B  |.  83E0 0F       AND     EAX, 0F
    0042591E  |.  C2 0400       RETN    4
    00425921  |>  83F9 05       CMP     ECX, 5
    00425924  |.  75 03         JNZ     SHORT SSQBZ.00425929
    00425926  |.  83E0 0F       AND     EAX, 0F                         ;  Case 5 of switch 004258E9
    00425929  \>  C2 0400       RETN    4                               ;  Default case of switch 004258E9

    翻译如下:
    x <- [46D3B0]   ,全局变量
    F(n)=
    switch(n)
    1:x/2^10 mod F
    2:x/2^C  mod F
    3:x/2^8  mod F
    4:x/2^4  mod F
    5:x         mod F

    10.看来程序在对全局变量[46D3B0]的16位进制值进行每一位读取判断,显然这个全局变量的值应该是:
    根据我们分析的结果
    F(1)   F(2)    F(3)    F(4)    F(5)
    1       3       2       5       8  
    推导全局变量的值[46D3B0]=00013258


    0x03 优雅爆破篇 **********************************************************************************
    1.我们尝试如下方式修改4字节内容:
    004258E4      A1 B0D34600   MOV     EAX, DWORD PTR DS:[46D3B0]
    修改为:
    004258E4      B8 58320100   MOV     EAX, 13258

    2.继续运行程序,看来解除了很多功能,可是当我们进行多组胆拖过滤时,注册状态再次被重置。似乎还有些问题要处理。
    这里决定对全局变量[46BE70]再次分析,查找所有地址参考,我们对每一处下断点并跟进分析,
    发现几乎大部分均是访问F函数失败后重新赋0值,唯有1处不是,看这里:
    00427237  |> \833D 70BE4600>CMP     DWORD PTR DS:[46BE70], 1
    0042723E  |.  75 42         JNZ     SHORT SSQBZ.00427282
    00427240  |.  8B0D B4D34600 MOV     ECX, DWORD PTR DS:[46D3B4]
    00427246  |.  8D41 E8       LEA     EAX, DWORD PTR DS:[ECX-18]
    00427249  |.  B9 38000000   MOV     ECX, 38
    0042724E  |>  2D 78050000   /SUB     EAX, 578
    00427253  |.  49            |DEC     ECX
    00427254  |.^ 75 F8         \JNZ     SHORT SSQBZ.0042724E
    00427256  |.  33D2          XOR     EDX, EDX
    00427258  |.  B9 E8030000   MOV     ECX, 3E8
    0042725D  |.  F7F1          DIV     ECX
    0042725F  |.  3B15 A8D34600 CMP     EDX, DWORD PTR DS:[46D3A8]       ;  暗荘
    00427265  |.  74 1B         JE      SHORT SSQBZ.00427282
    00427267  |.  8BCE          MOV     ECX, ESI                         ;  SSQBZ.0046B388
    00427269  |.  C705 B0D34600>MOV     DWORD PTR DS:[46D3B0], 0
    00427273  |.  E8 88E5FFFF   CALL    SSQBZ.00425800
    00427278  |.  C705 70BE4600>MOV     DWORD PTR DS:[46BE70], 0
    00427282  |>  5F            POP     EDI                              ;  USER32.77D191BE
    00427283  |.  5E            POP     ESI                              ;  USER32.77D191BE
    00427284  |.  59            POP     ECX                              ;  USER32.77D191BE
    00427285  \.  C3            RETN

    我们决定对这里进行1字节爆破:
    00427265      74 1B         JE      SHORT SSQBZ.00427282
    修改为:
    00427265      EB 1B         JMP     SHORT SSQBZ.00427282

    3.我们再次对入门注册码验证函数进行2字节爆破:
    00425850      68 34494600   PUSH    SSQBZ.00464934                    
    修改为:
    00425850      EB 75         JMP     SHORT SSQBZ.004258C7              

    4.至此,这款程序的爆破思路已完成。

    5.爆破实现。 不要Patch主程序,程序会检测完整性并报错。
    DLL劫持和Loader是个不错主意。
    完美爆破需要修改7字节数据。

    图片10.png
       图片11.png    

    图片12.png


    0x04 总结篇 **********************************************************************************
    1.不得不说,软件作者在反破解方面下了很多功夫。主程序修改检测,注册码分阶段验证,注册功能复杂化,暗荘遍野!
    2.但是百密总有一疏,我们必须要不断分析,并找到这里的不足,然后提高自己。
    3.文章没有对机器码、真实注册码进一步分析,有兴趣的读者可以尝试。
    4.希望国软更加强大。希望论坛更加红火!

    国庆快乐
    tree_fly
    2014-10-04



    附件:lpk.dll+Loader+Excel
    Crack.zip (88.87 KB, 下载次数: 295, 售价: 1 枚飘云币)
    避开杀软的打过VMP的Loader:
    DUP2Loader-双色球霸主.7.0.vmp.zip (693.66 KB, 下载次数: 156, 售价: 1 枚飘云币)









    评分

    参与人数 8威望 +108 飘云币 +141 收起 理由
    tgq4492 + 1 求大佬更新双色球霸主8.3,中奖了不会忘记.
    lj147741 + 4 请楼主破解双色球霸主7.3版的啊
    NoNameX2016 + 8 + 8 赞一个!
    阳光宅男 + 4 + 4 数据下载,一直提示网络连接尚未就绪....?
    万分感谢论坛 + 4 很给力!
    飞天 + 8 + 8 赞一个!
    Nisy + 40 + 80 神马都是浮云
    GGLHY + 40 + 40 强!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2014-10-5 08:06:10 | 显示全部楼层
    好强大!

    前排学习!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-5 08:53
  • 签到天数: 87 天

    [LV.6]常住居民II

    发表于 2014-10-5 08:11:58 | 显示全部楼层
    支持分析的很好。{:soso_e189:}
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-2-17 10:46
  • 签到天数: 927 天

    [LV.10]以坛为家III

    发表于 2014-10-5 08:55:35 | 显示全部楼层
    厉害中,谢谢高人!我什么时候能到的!1{:soso_e113:}
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 498 天

    [LV.9]以坛为家II

    发表于 2014-10-5 09:12:28 | 显示全部楼层
    谢谢分享这么精彩的分析!
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 1541 天

    [LV.Master]伴坛终老

    发表于 2014-10-5 09:50:02 | 显示全部楼层
    此軟能算出工作人员定几号球?呵呵(为么上论坛不挂代理上不来?)
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2014-10-5 10:58:40 | 显示全部楼层
    赞 不仅搞定了算法 还利用全局变量快速定位到了暗桩
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-11-11 17:26
  • 签到天数: 449 天

    [LV.9]以坛为家II

    发表于 2014-10-5 11:57:31 | 显示全部楼层
    精彩,感谢楼主提供学习机会
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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