JZL 发表于 2016-1-30 02:15:54

某驾考软件 算法分析

【破文标题】某驾考软件算法分析
【破文作者】JZL
【破解工具】OD
【破解平台】XP SP3
【软件名称】某驾考软件
【保护方式】有壳
【破解声明】破解在于交流思路和过程,请不要用于非法用途;
------------------------------------------------------------------------
【破解过程】注册错误提示:

---------------------------
错误
---------------------------
注册码不正确,请重新输入!
---------------------------
确定   
---------------------------

OD载入后,直接运行起来。
在可执行模块中,选择
路径=C:\Documents and Settings\Administrator\桌面\*****.exe//我隐藏了软件名称



搜索字符串: 注册码不正确


0074AA72    5D            POP   EBP
0074AA73    C3            RETN
0074AA74    55            PUSH    EBP                                          ; 1、在提示 注册错误的段首下断点
0074AA75    8BEC            MOV   EBP, ESP
0074AA77    83C4 F0         ADD   ESP, -0x10
0074AA7A    33C9            XOR   ECX, ECX
0074AA7C    894D F4         MOV   DWORD PTR SS:, ECX
0074AA7F    894D F0         MOV   DWORD PTR SS:, ECX
0074AA82    8955 F8         MOV   DWORD PTR SS:, EDX
0074AA85    8945 FC         MOV   DWORD PTR SS:, EAX
0074AA88    33C0            XOR   EAX, EAX
0074AA8A    55            PUSH    EBP
0074AA8B    68 32AB7400   PUSH    0074AB32
0074AA90    64:FF30         PUSH    DWORD PTR FS:
0074AA93    64:8920         MOV   DWORD PTR FS:, ESP

……
0074AAC5    E8 DEFEFFFF   CALL    0074A9A8                                     ; 跟过以后,才知道这个CALL是验证的CALL
0074AACA    8B45 FC         MOV   EAX, DWORD PTR SS:
0074AACD    8B90 F8030000   MOV   EDX, DWORD PTR DS:
0074AAD3    8B45 FC         MOV   EAX, DWORD PTR SS:
0074AAD6    8B80 F4030000   MOV   EAX, DWORD PTR DS:
0074AADC    E8 5FEDFFFF   CALL    00749840                                     ; 2、这可能是验证的call
                00749840    55            PUSH    EBP
                00749841    8BEC            MOV   EBP, ESP
                00749843    33C9            XOR   ECX, ECX
                00749845    51            PUSH    ECX
                00749846    51            PUSH    ECX
                00749847    51            PUSH    ECX
                00749848    51            PUSH    ECX
                00749849    51            PUSH    ECX
                0074984A    51            PUSH    ECX
                0074984B    51            PUSH    ECX
                0074984C    51            PUSH    ECX
                0074984D    8955 F8         MOV   DWORD PTR SS:, EDX
                00749850    8945 FC         MOV   DWORD PTR SS:, EAX
                00749853    8B45 F8         MOV   EAX, DWORD PTR SS:
                00749856    E8 D1DECBFF   CALL    0040772C
                0074985B    33C0            XOR   EAX, EAX
                0074985D    55            PUSH    EBP
                0074985E    68 12997400   PUSH    00749912
                00749863    64:FF30         PUSH    DWORD PTR FS:
                00749866    64:8920         MOV   DWORD PTR FS:, ESP
                00749869    C645 F7 00      MOV   BYTE PTR SS:, 0x0
                0074986D    A0 20997400   MOV   AL, BYTE PTR DS:
                00749872    50            PUSH    EAX
                00749873    8D45 F0         LEA   EAX, DWORD PTR SS:
                00749876    50            PUSH    EAX
                00749877    33C9            XOR   ECX, ECX
                00749879    BA 30997400   MOV   EDX, 00749930                              ; -
                0074987E    8B45 F8         MOV   EAX, DWORD PTR SS:
                00749881    E8 22F7CDFF   CALL    00428FA8
                00749886    A0 20997400   MOV   AL, BYTE PTR DS:
                0074988B    50            PUSH    EAX
                0074988C    8D45 EC         LEA   EAX, DWORD PTR SS:
                0074988F    50            PUSH    EAX
                00749890    8D55 E8         LEA   EDX, DWORD PTR SS:
                00749893    8B45 FC         MOV   EAX, DWORD PTR SS:
                00749896    E8 F9FDFFFF   CALL    00749694                                     ; 3、此CALL产生了真码
                                00749694    55            PUSH    EBP
                                00749695    8BEC            MOV   EBP, ESP
                                00749697    83C4 EC         ADD   ESP, -0x14
                                0074969A    33C9            XOR   ECX, ECX
                                0074969C    894D EC         MOV   DWORD PTR SS:, ECX
                                0074969F    894D F4         MOV   DWORD PTR SS:, ECX
                                007496A2    8955 F8         MOV   DWORD PTR SS:, EDX
                                007496A5    8945 FC         MOV   DWORD PTR SS:, EAX
                                007496A8    33C0            XOR   EAX, EAX
                                007496AA    55            PUSH    EBP
                                007496AB    68 32977400   PUSH    00749732
                                007496B0    64:FF30         PUSH    DWORD PTR FS:
                                007496B3    64:8920         MOV   DWORD PTR FS:, ESP
                                007496B6    A0 40977400   MOV   AL, BYTE PTR DS:
                                007496BB    50            PUSH    EAX
                                007496BC    8D45 F4         LEA   EAX, DWORD PTR SS:
                                007496BF    50            PUSH    EAX
                                007496C0    8D55 EC         LEA   EDX, DWORD PTR SS:
                                007496C3    8B45 FC         MOV   EAX, DWORD PTR SS:
                                007496C6    E8 91F9FFFF   CALL    0074905C
                                007496CB    8B45 EC         MOV   EAX, DWORD PTR SS:               ; 机器码给EAX
                                007496CE    33C9            XOR   ECX, ECX
                                007496D0    BA 50977400   MOV   EDX, 00749750                              ; -
                                007496D5    E8 CEF8CDFF   CALL    00428FA8
                                007496DA    8B45 F4         MOV   EAX, DWORD PTR SS:
                                007496DD    8945 F0         MOV   DWORD PTR SS:, EAX
                                007496E0    837D F0 00      CMP   DWORD PTR SS:, 0x0
                                007496E4    74 0B         JE      SHORT 007496F1
                                007496E6    8B45 F0         MOV   EAX, DWORD PTR SS:
                                007496E9    83E8 04         SUB   EAX, 0x4
                                007496EC    8B00            MOV   EAX, DWORD PTR DS:
                                007496EE    8945 F0         MOV   DWORD PTR SS:, EAX
                                007496F1    837D F0 10      CMP   DWORD PTR SS:, 0x10                ; 检查机器码位数 要求是16位
                                007496F5    75 10         JNZ   SHORT 00749707
                                007496F7    8B4D F8         MOV   ECX, DWORD PTR SS:
                                007496FA    8B55 F4         MOV   EDX, DWORD PTR SS:
                                007496FD    8B45 FC         MOV   EAX, DWORD PTR SS:
                                00749700    E8 9BFDFFFF   CALL    007494A0                                     ; 4、上面是检查机器码是否合法,又把机器码作为参数传进来,这个CALL必定和真码有关
                                                007494A0    55            PUSH    EBP
                                                007494A1    8BEC            MOV   EBP, ESP
                                                007494A3    51            PUSH    ECX
                                                007494A4    B9 08000000   MOV   ECX, 0x8
                                                007494A9    6A 00         PUSH    0x0
                                                007494AB    6A 00         PUSH    0x0
                                                007494AD    49            DEC   ECX
                                                007494AE^ 75 F9         JNZ   SHORT 007494A9
                                                007494B0    51            PUSH    ECX
                                                007494B1    874D FC         XCHG    DWORD PTR SS:, ECX
                                                007494B4    53            PUSH    EBX
                                                007494B5    894D F4         MOV   DWORD PTR SS:, ECX
                                                007494B8    8955 F8         MOV   DWORD PTR SS:, EDX
                                                007494BB    8945 FC         MOV   DWORD PTR SS:, EAX
                                                007494BE    8B45 F8         MOV   EAX, DWORD PTR SS:
                                                007494C1    E8 66E2CBFF   CALL    0040772C
                                                007494C6    33C0            XOR   EAX, EAX
                                                007494C8    55            PUSH    EBP
                                                007494C9    68 74967400   PUSH    00749674
                                                007494CE    64:FF30         PUSH    DWORD PTR FS:
                                                007494D1    64:8920         MOV   DWORD PTR FS:, ESP
                                                007494D4    A0 80967400   MOV   AL, BYTE PTR DS:
                                                007494D9    50            PUSH    EAX
                                                007494DA    8D45 BC         LEA   EAX, DWORD PTR SS:
                                                007494DD    50            PUSH    EAX
                                                007494DE    33C9            XOR   ECX, ECX
                                                007494E0    BA 90967400   MOV   EDX, 00749690                              ; -
                                                007494E5    8B45 F8         MOV   EAX, DWORD PTR SS:
                                                007494E8    E8 BBFACDFF   CALL    00428FA8
                                                007494ED    8B55 BC         MOV   EDX, DWORD PTR SS:
                                                007494F0    8D45 F8         LEA   EAX, DWORD PTR SS:
                                                007494F3    E8 78E5CBFF   CALL    00407A70
                                                007494F8    8B45 F8         MOV   EAX, DWORD PTR SS:
                                                007494FB    8945 C0         MOV   DWORD PTR SS:, EAX
                                                007494FE    837D C0 00      CMP   DWORD PTR SS:, 0x0
                                                00749502    74 0B         JE      SHORT 0074950F
                                                00749504    8B45 C0         MOV   EAX, DWORD PTR SS:
                                                00749507    83E8 04         SUB   EAX, 0x4                                     ; EAX=01CD8B7C, (UNICODE "2203450100000001")
                                                0074950A    8B00            MOV   EAX, DWORD PTR DS:
                                                0074950C    8945 C0         MOV   DWORD PTR SS:, EAX
                                                0074950F    8B45 C0         MOV   EAX, DWORD PTR SS:
                                                00749512    85C0            TEST    EAX, EAX
                                                00749514    7E 42         JLE   SHORT 00749558
                                                00749516    8945 C4         MOV   DWORD PTR SS:, EAX
                                                00749519    C745 F0 0100000>MOV   DWORD PTR SS:, 0x1
                                                00749520    8B45 F8         MOV   EAX, DWORD PTR SS:
                                                00749523    8B55 F0         MOV   EDX, DWORD PTR SS:
                                                00749526    66:8B4450 FE    MOV   AX, WORD PTR DS:
                                                0074952B    66:8945 EA      MOV   WORD PTR SS:, AX                   ; AX=0032 机器码第一个字符:2 的ASCII码 32
                                                0074952F    66:8B55 EA      MOV   DX, WORD PTR SS:
                                                00749533    8B45 FC         MOV   EAX, DWORD PTR SS:                  ; 堆栈 SS:=01CAC5F0
                                                00749536    E8 D9FEFFFF   CALL    00749414                                     ; 5、算法CALL
                                                                00749414    55            PUSH    EBP                                          ; 6、真正的算法段首
                                                                00749415    8BEC            MOV   EBP, ESP
                                                                00749417    83C4 F4         ADD   ESP, -0xC
                                                                0074941A    66:8955 FA      MOV   WORD PTR SS:, DX
                                                                0074941E    8945 FC         MOV   DWORD PTR SS:, EAX
                                                                00749421    0FB745 FA       MOVZX   EAX, WORD PTR SS:
                                                                00749425    8945 F4         MOV   DWORD PTR SS:, EAX
                                                                00749428    8B45 F4         MOV   EAX, DWORD PTR SS:
                                                                0074942B    83C0 D0         ADD   EAX, -0x30
                                                                0074942E    83E8 0A         SUB   EAX, 0xA
                                                                00749431    72 12         JB      SHORT 00749445
                                                                00749433    83C0 F9         ADD   EAX, -0x7
                                                                00749436    83E8 1A         SUB   EAX, 0x1A
                                                                00749439    72 23         JB      SHORT 0074945E
                                                                0074943B    83C0 FA         ADD   EAX, -0x6
                                                                0074943E    83E8 1A         SUB   EAX, 0x1A
                                                                00749441    72 34         JB      SHORT 00749477
                                                                00749443    EB 49         JMP   SHORT 0074948E
                                                                00749445    8B45 F4         MOV   EAX, DWORD PTR SS:                  ; 计算开始
                                                                00749448    8B55 FC         MOV   EDX, DWORD PTR SS:                  ; 逐位取机器码
                                                                0074944B    8B4482 04       MOV   EAX, DWORD PTR DS:            ; 查询密码表,每个0到9的数字都有一个对应的值
                                                                0074944F    0145 F4         ADD   DWORD PTR SS:, EAX                  ; 0x32 + 0x9 =0x3B数字的ASCII值 加上 对应的密码表值
                                                                00749452    837D F4 39      CMP   DWORD PTR SS:, 0x39
                                                                00749456    7E 36         JLE   SHORT 0074948E                               ; 如果结果小于0x39就跳转实现
                                                                00749458    836D F4 0A      SUB   DWORD PTR SS:, 0xA                  ; 0000003B-0xA=0x31如果结果大于0x39 那么减0xA
                                                                0074945C    EB 30         JMP   SHORT 0074948E
                                                                0074945E    8B45 F4         MOV   EAX, DWORD PTR SS:
                                                                00749461    8B55 FC         MOV   EDX, DWORD PTR SS:
                                                                00749464    8B4482 04       MOV   EAX, DWORD PTR DS:
                                                                00749468    0145 F4         ADD   DWORD PTR SS:, EAX
                                                                0074946B    837D F4 5A      CMP   DWORD PTR SS:, 0x5A
                                                                0074946F    7E 1D         JLE   SHORT 0074948E
                                                                00749471    836D F4 1A      SUB   DWORD PTR SS:, 0x1A
                                                                00749475    EB 17         JMP   SHORT 0074948E
                                                                00749477    8B45 F4         MOV   EAX, DWORD PTR SS:
                                                                0074947A    8B55 FC         MOV   EDX, DWORD PTR SS:
                                                                0074947D    8B4482 04       MOV   EAX, DWORD PTR DS:
                                                                00749481    0145 F4         ADD   DWORD PTR SS:, EAX
                                                                00749484    837D F4 7A      CMP   DWORD PTR SS:, 0x7A
                                                                00749488    7E 04         JLE   SHORT 0074948E
                                                                0074948A    836D F4 1A      SUB   DWORD PTR SS:, 0x1A
                                                                0074948E    66:8B45 F4      MOV   AX, WORD PTR SS:                  ; 接下来就是把ASCII转换成十进制的数字
                                                                00749492    66:8945 F8      MOV   WORD PTR SS:, AX
                                                                00749496    66:8B45 F8      MOV   AX, WORD PTR SS:
                                                                0074949A    8BE5            MOV   ESP, EBP
                                                                0074949C    5D            POP   EBP
                                                                0074949D    C3            RETN
                                                ……
                                                00749608    FF75 D8         PUSH    DWORD PTR SS:                      ; 查完表后,还要重新排列下顺序,
                                                0074960B    FF75 CC         PUSH    DWORD PTR SS:                      ; 具体来说就是两个数字为一组,共ABCDEFGH 8组
                                                0074960E    68 90967400   PUSH    00749690                                     ; -
                                                00749613    FF75 D4         PUSH    DWORD PTR SS:                      ; 最后的顺序:DG-EB-FH-AC
                                                00749616    FF75 E0         PUSH    DWORD PTR SS:
                                                00749619    68 90967400   PUSH    00749690                                     ; -
                                                0074961E    FF75 D0         PUSH    DWORD PTR SS:
                                                00749621    FF75 C8         PUSH    DWORD PTR SS:
                                                00749624    68 90967400   PUSH    00749690                                     ; -
                                                00749629    FF75 E4         PUSH    DWORD PTR SS:
                                                0074962C    FF75 DC         PUSH    DWORD PTR SS:
                                                0074962F    8B45 F4         MOV   EAX, DWORD PTR SS:
                                                00749632    BA 0B000000   MOV   EDX, 0xB
                                                00749637    E8 7CF0CBFF   CALL    004086B8
                                                ……
                                ……

                0074989B    8B45 E8         MOV   EAX, DWORD PTR SS:               ; 堆栈 SS:=012DB6CC, (UNICODE "2522-2222-2225-1198")
                0074989E    33C9            XOR   ECX, ECX
                007498A0    BA 30997400   MOV   EDX, 00749930                              ; -
                ……

0074AAE1    84C0            TEST    AL, AL
0074AAE3    74 25         JE      SHORT 0074AB0A
0074AAE5    8B45 FC         MOV   EAX, DWORD PTR SS:
0074AAE8    8B90 F8030000   MOV   EDX, DWORD PTR DS:
0074AAEE    8B45 FC         MOV   EAX, DWORD PTR SS:
0074AAF1    8B80 F4030000   MOV   EAX, DWORD PTR DS:
0074AAF7    E8 38EEFFFF   CALL    00749934
0074AAFC    84C0            TEST    AL, AL
0074AAFE    74 14         JE      SHORT 0074AB14
0074AB00    8B45 FC         MOV   EAX, DWORD PTR SS:
0074AB03    E8 C88AE7FF   CALL    005C35D0
0074AB08    EB 0A         JMP   SHORT 0074AB14
0074AB0A    B8 4CAB7400   MOV   EAX, 0074AB4C                              ; 注册码不正确,请重新输入!
0074AB0F    E8 9CF8FFFF   CALL    0074A3B0
0074AB14    33C0            XOR   EAX, EAX

…………






对应的密码表
0        1        2        3        4        5        6        7        8        9       
2        4        9        9        5        3        2        8        3        0


实际上可以计算出一份最终的密码表,省去了计算过程,直接查询就能得到注册码

0        1        2        3        4        5        6        7        8        9       
2        5        1        2        9        8        8        5        1        9
以我的机器码为例
2                2                0                3                4                5                0                1                0                0                0                0                0                0                0                1
A                                B                                C                                D                                E                                F                                G                                H
1                1                2                2                9                8                2                5                2                2                2                2                2                2                2                5       
               
最终的注册码如下:
2                5                2                2                2                2                2                2                2                2                2                5                1                1                9                8               

2522-2222-2225-1198       



------------------------------------------------------------------------
【破解总结】
                作者给软件加了壳,我也没查是什么壳。代码也是加了密的。但是算法太简单,完全凭一个密码表就可以查出来。查出来还要调整下顺序。
                步骤繁琐了点,但是没有难度。好歹也应该有个特殊位置的校验啊。
------------------------------------------------------------------------
【版权声明】
本文原创于JZL/P.Y.G,转载请注明作者及论坛并保存文章的完整!

ZMLoveLH 发表于 2016-1-30 02:53:26

我是菜鸟,我看不懂

GGLHY 发表于 2016-1-30 08:19:04

赞!
前排学习!

嗯,远方 的风景这边独好!

GeekCat 发表于 2016-1-30 09:37:06

前排学习~~
谢谢分享

JZL 发表于 2016-1-30 17:51:36

GGLHY 发表于 2016-1-30 08:19
赞!
前排学习!



GG大人,大驾光临,蓬荜生辉啊

JZL 发表于 2016-1-30 17:53:26

GeekCat 发表于 2016-1-30 09:37
前排学习~~
谢谢分享

我觉得录视频比文字更好。

心蓝教务 发表于 2016-1-31 11:58:20

风景这边独好!
页: [1]
查看完整版本: 某驾考软件 算法分析