千千万是福朋友 发表于 2015-5-9 22:40:42

ClipNow v4.7 算法注册机

【破文标题】【第十二轮】【初级班第2课作业】ClipNow v4.7 算法注册机
【破文作者】千千万是福朋友
【破解工具】OD
【破解平台】XP
【软件名称】ClipNow v4.7
【破解声明】仅限于技术交流,请勿用于商业用途【破解过程】

首先PEID查壳为UPX,不影响直接拖入OD分析
软件启动弹出注册对话框
输入任意用户名注册码点击Register,弹出"Invalid Reg Key"提示
首先还是使用最简单的方法,查找字符串
找了一圈发现没有什么特别敏感的字符串出现

那就换一种方法,按下F12暂停程序,点击ALT+K显示调用堆栈
调用堆栈:   主线程
地址       堆栈       函数过程 / 参数                     调用来自                      结构
0012CD88   77D19418   包含ntdll.KiFastSystemCallRet         user32.77D19416               0012CDBC
0012CD8C   77D2770A   user32.WaitMessage                  user32.77D27705               0012CDBC
0012CDC0   77D249C4   user32.77D2757B                     user32.77D249BF               0012CDBC
0012CDE8   77D3A956   user32.77D2490E                     user32.77D3A951               0012CDE4
0012D0A8   77D3A2BC   user32.SoftModalMessageBox            user32.77D3A2B7               0012D0A4
0012D1F8   77D663FD   user32.77D3A147                     user32.77D663F8               0012D1F4
0012D250   77D664A2   user32.MessageBoxTimeoutW             user32.77D6649D               0012D24C
0012D284   77D50877   ? user32.MessageBoxTimeoutA         user32.77D50872               0012D280
0012D2A4   77D5082F   ? user32.MessageBoxExA                user32.77D5082A               0012D2A0
0012D2A8   003A0126   hOwner = 003A0126 ('ClipNow V4.7-T
0012D2AC   004231A0   Text = "InValid Reg Key"
0012D2B0   004231C8   Title = "ClipNow-V4.7"
0012D2B4   00000000   Style = MB_OK|MB_APPLMODAL
0012D2B8   00000000   LanguageID = 0x0 (LANG_NEUTRAL)
0012D2C0   73D88411   ? user32.MessageBoxA                  mfc42.73D8840B                0012D2BC
0012D2C4   003A0126   hOwner = 003A0126 ('ClipNow V4.7-T
0012D2C8   004231A0   Text = "InValid Reg Key"
0012D2CC   004231C8   Title = "ClipNow-V4.7"
0012D2D0   00000000   Style = MB_OK|MB_APPLMODAL
0012D2D8   00403E52   ? clipnow.00417228                  clipnow.00403E4D
发现0012D2D8 00403E52 ? clipnow.00417228 clipnow.00403E4D这里调用失败的弹窗提示,右击鼠标显示调用从显示的字符串可以看出这里应该的程序的关键判断位置
00403DEB    68 D8314200   PUSH    clipnow.004231D8                     ; ASCII "Picture.dll"
00403DF0    68 30324200   PUSH    clipnow.00423230                     ; ASCII "abc.xml"
00403DF5    FF96 CC000000   CALL    NEAR DWORD PTR DS:         ; KeyData.TestReg
00403DFB    83C4 08         ADD   ESP, 0x8
00403DFE    3BC5            CMP   EAX, EBP
00403E00    74 35         JE      SHORT clipnow.00403E37               ; 关键跳
00403E02    8B4E 20         MOV   ECX, DWORD PTR DS:
00403E05    6A 01         PUSH    0x1
00403E07    8981 FC000000   MOV   DWORD PTR DS:, EAX
00403E0D    8B4E 20         MOV   ECX, DWORD PTR DS:
00403E10    E8 3BC10000   CALL    clipnow.0040FF50
00403E15    55            PUSH    EBP
00403E16    68 C8314200   PUSH    clipnow.004231C8                     ; ASCII "ClipNow-V4.7"
00403E1B    68 B0314200   PUSH    clipnow.004231B0                     ; ASCII "Regisiter Successfully"
00403E20    8BCB            MOV   ECX, EBX
00403E22    E8 01340100   CALL    clipnow.00417228                     ; JMP 到 mfc42.#4224
00403E27    8B53 20         MOV   EDX, DWORD PTR DS:
00403E2A    55            PUSH    EBP
00403E2B    55            PUSH    EBP
00403E2C    6A 10         PUSH    0x10
00403E2E    52            PUSH    EDX
00403E2F    FF15 CCA84100   CALL    NEAR DWORD PTR DS:         ; user32.PostMessageA
00403E35    EB 1B         JMP   SHORT clipnow.00403E52
00403E37    8B4E 20         MOV   ECX, DWORD PTR DS:
00403E3A    55            PUSH    EBP
00403E3B    E8 10C10000   CALL    clipnow.0040FF50
00403E40    55            PUSH    EBP
00403E41    68 C8314200   PUSH    clipnow.004231C8                     ; ASCII "ClipNow-V4.7"
00403E46    68 A0314200   PUSH    clipnow.004231A0                     ; ASCII "InValid Reg Key"
00403E4B    8BCB            MOV   ECX, EBX
00403E4D    E8 D6330100   CALL    clipnow.00417228                     ; JMP 到 mfc42.#4224
00403E52    8D4C24 2C       LEA   ECX, DWORD PTR SS:
00403E56    C68424 70040000>MOV   BYTE PTR SS:, 0x0
00403E5E    E8 8D070000   CALL    clipnow.004045F0
00403E63    8D4C24 14       LEA   ECX, DWORD PTR SS:
00403E67    C78424 70040000>MOV   DWORD PTR SS:, -0x1
00403E72    E8 49030000   CALL    clipnow.004041C0
00403E77    8B8C24 68040000 MOV   ECX, DWORD PTR SS:
00403E7E    5F            POP   EDI
00403E7F    5E            POP   ESI
00403E80    5D            POP   EBP
00403E81    64:890D 0000000>MOV   DWORD PTR FS:, ECX
00403E88    5B            POP   EBX
00403E89    81C4 64040000   ADD   ESP, 0x464
00403E8F    C3            RETN
这里00403E00   /74 35         JE      SHORT clipnow.00403E37               ; 关键跳的关键跳跳过了成功提示

爆破的话只要NOP这个跳转应该就可以了,这次研究的更深入一点,看看能不能找到真码
一般关键跳往上就是关键CALL,从call的名字TestReg也可以看出这里是测试注册信息是否正确的地方
00403DF5 FF96 CC000000 CALL NEAR DWORD PTR DS: ; KeyData.TestReg
我们直接双击关键跳上面的CALL看看做了什么
好吧,发现双击不进去,我们在这一行下好断,再点击Register,程序再次断下
这回可以F7跟进去看个明白了
100010D0 >81EC 04040000   SUB   ESP, 0x404
100010D6    8D4C24 00       LEA   ECX, DWORD PTR SS:
100010DA    56            PUSH    ESI
100010DB    E8 803B0000   CALL    KeyData.10004C60
100010E0    8B8424 10040000 MOV   EAX, DWORD PTR SS:
100010E7    8B8C24 0C040000 MOV   ECX, DWORD PTR SS:
100010EE    50            PUSH    EAX                                  ; Picture.dll
100010EF    51            PUSH    ECX                                  ; abc.xml
100010F0    8D4C24 0C       LEA   ECX, DWORD PTR SS:
100010F4    E8 073D0000   CALL    KeyData.10004E00
100010F9    8D4C24 04       LEA   ECX, DWORD PTR SS:
100010FD    8BF0            MOV   ESI, EAX                           ; 0
100010FF    E8 FC3B0000   CALL    KeyData.10004D00
进来发现这个CALL很短,也没有什么算法,关键位置应该还在下一层
这个CALL又调用了3个CALL,既然不知道哪个是关键CALL那就一个一个看吧
10004C60    83EC 0C         SUB   ESP, 0xC
10004C63    56            PUSH    ESI
10004C64    8BF1            MOV   ESI, ECX
10004C66    8D4424 0C       LEA   EAX, DWORD PTR SS:
10004C6A    8D4C24 04       LEA   ECX, DWORD PTR SS:
10004C6E    50            PUSH    EAX
10004C6F    51            PUSH    ECX
10004C70    51            PUSH    ECX
10004C71    C706 14730010   MOV   DWORD PTR DS:, KeyData.10007314
10004C77    8BCC            MOV   ECX, ESP
10004C79    896424 18       MOV   DWORD PTR SS:, ESP
10004C7D    68 C0830010   PUSH    KeyData.100083C0                     ; ASCII "DiskID32.dll"
10004C82    C74424 14 00000>MOV   DWORD PTR SS:, 0x0
10004C8A    E8 610A0000   CALL    KeyData.100056F0                     ; JMP 到 mfc42.#537
10004C8F    8BCE            MOV   ECX, ESI
10004C91    E8 3A060000   CALL    KeyData.100052D0
10004C96    8B5424 04       MOV   EDX, DWORD PTR SS:
10004C9A    8B4C24 0C       MOV   ECX, DWORD PTR SS:
10004C9E    52            PUSH    EDX
10004C9F    03C8            ADD   ECX, EAX
10004CA1    8D5424 0C       LEA   EDX, DWORD PTR SS:
10004CA5    51            PUSH    ECX
10004CA6    52            PUSH    EDX
10004CA7    8BCE            MOV   ECX, ESI
10004CA9    E8 02050000   CALL    KeyData.100051B0
10004CAE    8B4424 08       MOV   EAX, DWORD PTR SS:
10004CB2    68 B4830010   PUSH    KeyData.100083B4                     ; ASCII "AE8E448F"
10004CB7    50            PUSH    EAX
10004CB8    FF15 8C710010   CALL    NEAR DWORD PTR DS:       ; msvcrt._mbscmp
10004CBE    83C4 08         ADD   ESP, 0x8
10004CC1    85C0            TEST    EAX, EAX
10004CC3    74 08         JE      SHORT KeyData.10004CCD
10004CC5    6A 02         PUSH    0x2
10004CC7    FF15 C8710010   CALL    NEAR DWORD PTR DS:       ; msvcrt.exit
10004CCD    8D4C24 08       LEA   ECX, DWORD PTR SS:
10004CD1    E8 EA090000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10004CD6    8BC6            MOV   EAX, ESI
10004CD8    5E            POP   ESI
10004CD9    83C4 0C         ADD   ESP, 0xC
10004CDC    C3            RETN


发现第一个CALL100010DB E8 803B0000 CALL KeyData.10004C60比较短,进去的开头前面几行有100083C0=KeyData.100083C0 (ASCII "DiskID32.dll")
又继续往下跟,出现一个关键字符串100083B4=KeyData.100083B4 (ASCII "AE8E448F")也不知道是什么东西,先记下可能有用
拿到注册码那里填进去,发现还是失败。说明这第一个CALL不是真码的位置,应该是验证DiskID32.dll文件的完整性(是不是就不清楚了,猜的)

我们继续跟到下一个CALL 100010F4 E8 073D0000 CALL KeyData.10004E00来看看这里面有什么
10004E00    6A FF         PUSH    -0x1                                 ; 验证CALL
10004E02    68 30610010   PUSH    KeyData.10006130
10004E07    64:A1 00000000MOV   EAX, DWORD PTR FS:
10004E0D    50            PUSH    EAX
10004E0E    64:8925 0000000>MOV   DWORD PTR FS:, ESP
10004E15    83EC 4C         SUB   ESP, 0x4C
10004E18    53            PUSH    EBX
10004E19    56            PUSH    ESI
10004E1A    57            PUSH    EDI
10004E1B    8BF9            MOV   EDI, ECX
10004E1D    8D4C24 1C       LEA   ECX, DWORD PTR SS:
10004E21    E8 A6080000   CALL    KeyData.100056CC                     ; JMP 到 mfc42.#540
10004E26    33DB            XOR   EBX, EBX
10004E28    8D4C24 20       LEA   ECX, DWORD PTR SS:
10004E2C    895C24 60       MOV   DWORD PTR SS:, EBX
10004E30    E8 97080000   CALL    KeyData.100056CC                     ; JMP 到 mfc42.#540
10004E35    895C24 48       MOV   DWORD PTR SS:, EBX
10004E39    895C24 54       MOV   DWORD PTR SS:, EBX
10004E3D    895C24 50       MOV   DWORD PTR SS:, EBX
10004E41    895C24 4C       MOV   DWORD PTR SS:, EBX
10004E45    53            PUSH    EBX
10004E46    8D4C24 20       LEA   ECX, DWORD PTR SS:
10004E4A    C64424 64 03    MOV   BYTE PTR SS:, 0x3
10004E4F    E8 8CC3FFFF   CALL    KeyData.100011E0
10004E54    895C24 44       MOV   DWORD PTR SS:, EBX
10004E58    51            PUSH    ECX
10004E59    8B4C24 6C       MOV   ECX, DWORD PTR SS:
10004E5D    8BC4            MOV   EAX, ESP
10004E5F    C74424 64 04000>MOV   DWORD PTR SS:, 0x4
10004E67    896424 1C       MOV   DWORD PTR SS:, ESP
10004E6B    8908            MOV   DWORD PTR DS:, ECX
10004E6D    8D4C24 20       LEA   ECX, DWORD PTR SS:
10004E71    E8 EAC3FFFF   CALL    KeyData.10001260
10004E76    25 FF000000   AND   EAX, 0xFF
10004E7B    894424 68       MOV   DWORD PTR SS:, EAX
10004E7F    75 35         JNZ   SHORT KeyData.10004EB6
10004E81    8D4C24 4C       LEA   ECX, DWORD PTR SS:
10004E85    C74424 60 07000>MOV   DWORD PTR SS:, 0x7
10004E8D    E8 FECEFFFF   CALL    KeyData.10001D90
10004E92    8B4424 48       MOV   EAX, DWORD PTR SS:
10004E96    C64424 60 06    MOV   BYTE PTR SS:, 0x6
10004E9B    3BC3            CMP   EAX, EBX
10004E9D    74 09         JE      SHORT KeyData.10004EA8
10004E9F    8D4C24 48       LEA   ECX, DWORD PTR SS:
10004EA3    E8 08D6FFFF   CALL    KeyData.100024B0
10004EA8    895C24 48       MOV   DWORD PTR SS:, EBX
10004EAC    C64424 60 05    MOV   BYTE PTR SS:, 0x5
10004EB1    E9 47020000   JMP   KeyData.100050FD
10004EB6    8D4C24 0C       LEA   ECX, DWORD PTR SS:
10004EBA    E8 0D080000   CALL    KeyData.100056CC                     ; JMP 到 mfc42.#540
10004EBF    8D4C24 10       LEA   ECX, DWORD PTR SS:
10004EC3    C64424 60 08    MOV   BYTE PTR SS:, 0x8
10004EC8    E8 FF070000   CALL    KeyData.100056CC                     ; JMP 到 mfc42.#540
10004ECD    51            PUSH    ECX
10004ECE    8D4C24 20       LEA   ECX, DWORD PTR SS:
10004ED2    8BC4            MOV   EAX, ESP
10004ED4    C64424 64 09    MOV   BYTE PTR SS:, 0x9
10004ED9    896424 6C       MOV   DWORD PTR SS:, ESP
10004EDD    C700 F8830010   MOV   DWORD PTR DS:, KeyData.100083F8 ; ASCII "UserName"
10004EE3    E8 48C6FFFF   CALL    KeyData.10001530
10004EE8    3AC3            CMP   AL, BL
10004EEA    74 2B         JE      SHORT KeyData.10004F17
10004EEC    8D5424 68       LEA   EDX, DWORD PTR SS:
10004EF0    8D4C24 1C       LEA   ECX, DWORD PTR SS:
10004EF4    52            PUSH    EDX
10004EF5    E8 36020000   CALL    KeyData.10005130
10004EFA    50            PUSH    EAX
10004EFB    8D4C24 10       LEA   ECX, DWORD PTR SS:
10004EFF    C64424 64 0A    MOV   BYTE PTR SS:, 0xA
10004F04    E8 BD070000   CALL    KeyData.100056C6                     ; JMP 到 mfc42.#858
10004F09    8D4C24 68       LEA   ECX, DWORD PTR SS:
10004F0D    C64424 60 09    MOV   BYTE PTR SS:, 0x9
10004F12    E8 A9070000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10004F17    53            PUSH    EBX
10004F18    53            PUSH    EBX
10004F19    53            PUSH    EBX
10004F1A    8D4C24 28       LEA   ECX, DWORD PTR SS:
10004F1E    E8 2D020000   CALL    KeyData.10005150
10004F23    51            PUSH    ECX
10004F24    8D4C24 20       LEA   ECX, DWORD PTR SS:
10004F28    8BC4            MOV   EAX, ESP
10004F2A    896424 6C       MOV   DWORD PTR SS:, ESP
10004F2E    C700 F0830010   MOV   DWORD PTR DS:, KeyData.100083F0 ; ASCII "SerNo"
10004F34    E8 F7C5FFFF   CALL    KeyData.10001530
10004F39    3AC3            CMP   AL, BL
10004F3B    74 2B         JE      SHORT KeyData.10004F68
10004F3D    8D4424 68       LEA   EAX, DWORD PTR SS:
10004F41    8D4C24 1C       LEA   ECX, DWORD PTR SS:
10004F45    50            PUSH    EAX
10004F46    E8 E5010000   CALL    KeyData.10005130
10004F4B    50            PUSH    EAX
10004F4C    8D4C24 14       LEA   ECX, DWORD PTR SS:
10004F50    C64424 64 0B    MOV   BYTE PTR SS:, 0xB
10004F55    E8 6C070000   CALL    KeyData.100056C6                     ; JMP 到 mfc42.#858
10004F5A    8D4C24 68       LEA   ECX, DWORD PTR SS:
10004F5E    C64424 60 09    MOV   BYTE PTR SS:, 0x9
10004F63    E8 58070000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10004F68    8B4C24 0C       MOV   ECX, DWORD PTR SS:          ; 用户名
10004F6C    8B35 8C710010   MOV   ESI, DWORD PTR DS:       ; msvcrt._mbscmp
10004F72    68 80850010   PUSH    KeyData.10008580
10004F77    51            PUSH    ECX
10004F78    FFD6            CALL    NEAR ESI
10004F7A    83C4 08         ADD   ESP, 0x8
10004F7D    85C0            TEST    EAX, EAX
10004F7F    0F84 2C010000   JE      KeyData.100050B1
10004F85    8B5424 10       MOV   EDX, DWORD PTR SS:         ; 假码
10004F89    68 80850010   PUSH    KeyData.10008580
10004F8E    52            PUSH    EDX
10004F8F    FFD6            CALL    NEAR ESI
10004F91    83C4 08         ADD   ESP, 0x8
10004F94    85C0            TEST    EAX, EAX
10004F96    0F84 15010000   JE      KeyData.100050B1
10004F9C    8B4424 0C       MOV   EAX, DWORD PTR SS:
10004FA0    8D4C24 0C       LEA   ECX, DWORD PTR SS:
10004FA4    8B40 F8         MOV   EAX, DWORD PTR DS:          ; 用户名长度
10004FA7    50            PUSH    EAX
10004FA8    E8 3D070000   CALL    KeyData.100056EA                     ; JMP 到 mfc42.#2915
10004FAD    8D4C24 14       LEA   ECX, DWORD PTR SS:
10004FB1    50            PUSH    EAX
10004FB2    51            PUSH    ECX
10004FB3    8BCF            MOV   ECX, EDI
10004FB5    E8 66040000   CALL    KeyData.10005420                     ; 计算真码
10004FBA    8B5424 10       MOV   EDX, DWORD PTR SS:         ; 假码
10004FBE    8B4424 14       MOV   EAX, DWORD PTR SS:         ; 真码
10004FC2    52            PUSH    EDX                                  ; 假码
10004FC3    50            PUSH    EAX                                  ; 真码
10004FC4    FFD6            CALL    NEAR ESI
10004FC6    83C4 08         ADD   ESP, 0x8
10004FC9    C64424 60 09    MOV   BYTE PTR SS:, 0x9
10004FCE    85C0            TEST    EAX, EAX
10004FD0    8D4C24 14       LEA   ECX, DWORD PTR SS:
10004FD4    0F85 84000000   JNZ   KeyData.1000505E
10004FDA    E8 E1060000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10004FDF    8D4C24 10       LEA   ECX, DWORD PTR SS:
10004FE3    C64424 60 08    MOV   BYTE PTR SS:, 0x8
10004FE8    E8 D3060000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10004FED    8D4C24 0C       LEA   ECX, DWORD PTR SS:
10004FF1    C64424 60 04    MOV   BYTE PTR SS:, 0x4
10004FF6    E8 C5060000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10004FFB    8D4C24 4C       LEA   ECX, DWORD PTR SS:
10004FFF    C74424 60 12000>MOV   DWORD PTR SS:, 0x12
10005007    E8 84CDFFFF   CALL    KeyData.10001D90
1000500C    8B4424 48       MOV   EAX, DWORD PTR SS:
10005010    C64424 60 11    MOV   BYTE PTR SS:, 0x11
10005015    3BC3            CMP   EAX, EBX
10005017    74 09         JE      SHORT KeyData.10005022
10005019    8D4C24 48       LEA   ECX, DWORD PTR SS:
1000501D    E8 8ED4FFFF   CALL    KeyData.100024B0
10005022    8D4C24 20       LEA   ECX, DWORD PTR SS:
10005026    895C24 48       MOV   DWORD PTR SS:, EBX
1000502A    C64424 60 10    MOV   BYTE PTR SS:, 0x10
1000502F    E8 8C060000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10005034    8D4C24 1C       LEA   ECX, DWORD PTR SS:
10005038    C74424 60 FFFFF>MOV   DWORD PTR SS:, -0x1
10005040    E8 7B060000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10005045    B8 01000000   MOV   EAX, 0x1
1000504A    8B4C24 58       MOV   ECX, DWORD PTR SS:
1000504E    64:890D 0000000>MOV   DWORD PTR FS:, ECX
10005055    5F            POP   EDI
10005056    5E            POP   ESI
10005057    5B            POP   EBX
10005058    83C4 58         ADD   ESP, 0x58
1000505B    C2 0800         RETN    0x8
这个CALL有点长,有点像是关键验证CALL,经过多次跟踪发现
10004FBA 8B5424 10 MOV EDX, DWORD PTR SS: ; 假码
10004FBE 8B4424 14 MOV EAX, DWORD PTR SS: ; 真码
10004FC2 52 PUSH EDX ; 假码
10004FC3 50 PUSH EAX ; 真码
10004FC4 FFD6 CALL NEAR ESI
这里出来了真码和假码的对比,这里的真码出现,那么上面的几个CALL应该有计算真码的CALL
到这里真码也找到了,继续看上面的几个CALL看看能不能找出算法部分
再次分析发现上面的这个CALL就是计算真码用的
10004FB5    E8 66040000   CALL    KeyData.10005420                     ; 计算真码
双击跟进去看一下到底是怎么算出真码的,(注:我用的用户名是“千千万是福朋友”)
10005420    6A FF         PUSH    -0x1
10005422    68 E1610010   PUSH    KeyData.100061E1
10005427    64:A1 00000000MOV   EAX, DWORD PTR FS:
1000542D    50            PUSH    EAX
1000542E    64:8925 0000000>MOV   DWORD PTR FS:, ESP
10005435    81EC F4030000   SUB   ESP, 0x3F4
1000543B    56            PUSH    ESI
1000543C    8BF1            MOV   ESI, ECX
1000543E    57            PUSH    EDI
1000543F    8D8C24 14020000 LEA   ECX, DWORD PTR SS:
10005446    C74424 10 00000>MOV   DWORD PTR SS:, 0x0
1000544E    E8 0DEAFFFF   CALL    KeyData.10003E60
10005453    8B8424 10040000 MOV   EAX, DWORD PTR SS:      ; 用户名
1000545A    8D8C24 14020000 LEA   ECX, DWORD PTR SS:
10005461    50            PUSH    EAX
10005462    C78424 08040000>MOV   DWORD PTR SS:, 0x1
1000546D    E8 9EEAFFFF   CALL    KeyData.10003F10
10005472    8D8C24 14020000 LEA   ECX, DWORD PTR SS:
10005479    E8 42F6FFFF   CALL    KeyData.10004AC0                     ; 用户名MD5
1000547E    33C9            XOR   ECX, ECX                           ; EAX=0012CE26, (ASCII "2749525809be1ef30c1afd46807d5a98")
10005480    8BF8            MOV   EDI, EAX
10005482    894C24 19       MOV   DWORD PTR SS:, ECX
10005486    C64424 18 00    MOV   BYTE PTR SS:, 0x0
1000548B    894C24 1D       MOV   DWORD PTR SS:, ECX
1000548F    894C24 21       MOV   DWORD PTR SS:, ECX
10005493    894C24 25       MOV   DWORD PTR SS:, ECX
10005497    8BD1            MOV   EDX, ECX
10005499    81E2 01000080   AND   EDX, 0x80000001
1000549F    79 05         JNS   SHORT KeyData.100054A6
100054A1    4A            DEC   EDX
100054A2    83CA FE         OR      EDX, 0xFFFFFFFE
100054A5    42            INC   EDX
100054A6    75 0E         JNZ   SHORT KeyData.100054B6
100054A8    8BC1            MOV   EAX, ECX
100054AA    99            CDQ
100054AB    2BC2            SUB   EAX, EDX
100054AD    8A1439          MOV   DL, BYTE PTR DS:
100054B0    D1F8            SAR   EAX, 1
100054B2    885404 18       MOV   BYTE PTR SS:, DL
100054B6    41            INC   ECX
100054B7    83F9 20         CMP   ECX, 0x20
100054BA^ 7C DB         JL      SHORT KeyData.10005497
100054BC    8D4424 18       LEA   EAX, DWORD PTR SS:         ; 堆栈地址=0012CA68, (ASCII "24550b1f01f48759")
100054C0    6A 10         PUSH    0x10
100054C2    8D4C24 10       LEA   ECX, DWORD PTR SS:
100054C6    50            PUSH    EAX
100054C7    51            PUSH    ECX
100054C8    8BCE            MOV   ECX, ESI
100054CA    E8 E1FCFFFF   CALL    KeyData.100051B0                     ; 587F528
100054CF    8D4C24 2C       LEA   ECX, DWORD PTR SS:
100054D3    C68424 04040000>MOV   BYTE PTR SS:, 0x2
100054DB    E8 80E9FFFF   CALL    KeyData.10003E60
100054E0    8B5424 0C       MOV   EDX, DWORD PTR SS:          ; 堆栈 SS:=00BB6DD8, (ASCII "B578F528")
100054E4    8D4C24 2C       LEA   ECX, DWORD PTR SS:
100054E8    52            PUSH    EDX
100054E9    C68424 08040000>MOV   BYTE PTR SS:, 0x3
100054F1    E8 1AEAFFFF   CALL    KeyData.10003F10
100054F6    8D4C24 2C       LEA   ECX, DWORD PTR SS:
100054FA    E8 C1F5FFFF   CALL    KeyData.10004AC0                     ; 取MD5
100054FF    50            PUSH    EAX                                  ; EAX=0012CC3E, (ASCII "1619457074b437461336c80a531ccd67")
10005500    8D4C24 0C       LEA   ECX, DWORD PTR SS:
10005504    E8 E7010000   CALL    KeyData.100056F0                     ; JMP 到 mfc42.#537
10005509    8D4424 14       LEA   EAX, DWORD PTR SS:
1000550D    6A 08         PUSH    0x8
1000550F    50            PUSH    EAX
10005510    8D4C24 10       LEA   ECX, DWORD PTR SS:
10005514    C68424 0C040000>MOV   BYTE PTR SS:, 0x4
1000551C    E8 23020000   CALL    KeyData.10005744                     ; JMP 到 mfc42.#4129
10005521    50            PUSH    EAX                                  ; 取前8 “16194570”
10005522    8D4C24 0C       LEA   ECX, DWORD PTR SS:
10005526    C68424 08040000>MOV   BYTE PTR SS:, 0x5
1000552E    E8 93010000   CALL    KeyData.100056C6                     ; JMP 到 mfc42.#858
10005533    8D4C24 14       LEA   ECX, DWORD PTR SS:
10005537    C68424 04040000>MOV   BYTE PTR SS:, 0x4
1000553F    E8 7C010000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10005544    8D4C24 08       LEA   ECX, DWORD PTR SS:
10005548    E8 F1010000   CALL    KeyData.1000573E                     ; JMP 到 mfc42.#4204
1000554D    8BB424 0C040000 MOV   ESI, DWORD PTR SS:
10005554    8D4C24 08       LEA   ECX, DWORD PTR SS:          ; 到大写 6DD95E07
10005558    51            PUSH    ECX
10005559    8BCE            MOV   ECX, ESI
1000555B    E8 96010000   CALL    KeyData.100056F6                     ; JMP 到 mfc42.#535
10005560    C74424 10 01000>MOV   DWORD PTR SS:, 0x1
10005568    8D4C24 08       LEA   ECX, DWORD PTR SS:
1000556C    C68424 04040000>MOV   BYTE PTR SS:, 0x3
10005574    E8 47010000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
10005579    8D4C24 2C       LEA   ECX, DWORD PTR SS:
1000557D    C68424 04040000>MOV   BYTE PTR SS:, 0x2
10005585    E8 06E9FFFF   CALL    KeyData.10003E90
1000558A    8D4C24 0C       LEA   ECX, DWORD PTR SS:
1000558E    C68424 04040000>MOV   BYTE PTR SS:, 0x1
10005596    E8 25010000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
1000559B    8D8C24 14020000 LEA   ECX, DWORD PTR SS:
100055A2    C68424 04040000>MOV   BYTE PTR SS:, 0x0
100055AA    E8 E1E8FFFF   CALL    KeyData.10003E90
100055AF    8B8C24 FC030000 MOV   ECX, DWORD PTR SS:
100055B6    8BC6            MOV   EAX, ESI
100055B8    5F            POP   EDI
100055B9    5E            POP   ESI
100055BA    64:890D 0000000>MOV   DWORD PTR FS:, ECX
100055C1    81C4 00040000   ADD   ESP, 0x400
100055C7    C2 0800         RETN    0x8
多次跟踪发现这里出现了几个比较敏感的字符串
类似MD5的字符串1000547E 33C9 XOR ECX, ECX ; EAX=0012CE26, (ASCII "2749525809be1ef30c1afd46807d5a98")
100054BC    8D4424 18       LEA   EAX, DWORD PTR SS:         ; 堆栈地址=0012CA68, (ASCII "24550b1f01f48759")

100054E0 8B5424 0C MOV EDX, DWORD PTR SS: ; 堆栈 SS:=00BB6DD8, (ASCII "B578F528")
100054FF 50 PUSH EAX ; EAX=0012CC3E, (ASCII "1619457074b437461336c80a531ccd67")
10005521 50 PUSH EAX ; 取前8 “16194570”,也就是真码

使用MD5计算器计算下用户名“千千万是福朋友”的MD5值,刚好就是第一个关键字符串“2749525809be1ef30c1afd46807d5a98”
第二个字符串一看还看不出来,但和第一个对比看一下,发现刚好是第一个字符串中取出奇数位的字符(第1、3、5、7、9、11、13、15、17、19、21、23、25、27、29、31)组合"24550b1f01f48759"
第三个字符串“B578F528”怎么也猜不出来是什么东西,那就先不管了
看看第四个也有点像MD5,再计算下“B578F528”的MD5,哈哈刚好就是"1619457074b437461336c80a531ccd67"
第五个字符串就很简单了,用眼睛一看就知道取的是“B578F528”的MD5前8位数


现在问题就只剩一个了:这个“B578F528”到底是怎么得出来的??
跟到这个字符串的上一个CALL进去看看能不能找到什么东西
100051B0    6A FF         PUSH    -0x1
100051B2    68 5F610010   PUSH    KeyData.1000615F
100051B7    64:A1 00000000MOV   EAX, DWORD PTR FS:
100051BD    50            PUSH    EAX
100051BE    64:8925 0000000>MOV   DWORD PTR FS:, ESP
100051C5    83EC 14         SUB   ESP, 0x14
100051C8    55            PUSH    EBP
100051C9    56            PUSH    ESI
100051CA    57            PUSH    EDI                                  ; 用户名MD5
100051CB    8BF1            MOV   ESI, ECX
100051CD    C74424 10 00000>MOV   DWORD PTR SS:, 0x0
100051D5    E8 A6FFFFFF   CALL    KeyData.10005180
100051DA    8B7C24 38       MOV   EDI, DWORD PTR SS:         ; 位数
100051DE    8B4C24 34       MOV   ECX, DWORD PTR SS:         ; 真码MD5取奇数位
100051E2    83C8 FF         OR      EAX, 0xFFFFFFFF
100051E5    85FF            TEST    EDI, EDI
100051E7    7E 1B         JLE   SHORT KeyData.10005204
100051E9    8BE8            MOV   EBP, EAX
100051EB    33D2            XOR   EDX, EDX
100051ED    8A11            MOV   DL, BYTE PTR DS:
100051EF    81E5 FF000000   AND   EBP, 0xFF
100051F5    33EA            XOR   EBP, EDX
100051F7    C1E8 08         SHR   EAX, 0x8
100051FA    8B54AE 04       MOV   EDX, DWORD PTR DS:
100051FE    33C2            XOR   EAX, EDX
10005200    41            INC   ECX
10005201    4F            DEC   EDI
10005202^ 75 E5         JNZ   SHORT KeyData.100051E9
10005204    33C9            XOR   ECX, ECX
10005206    8D5424 14       LEA   EDX, DWORD PTR SS:
1000520A    894C24 15       MOV   DWORD PTR SS:, ECX
1000520E    6A 10         PUSH    0x10
10005210    F7D0            NOT   EAX
10005212    894C24 1D       MOV   DWORD PTR SS:, ECX
10005216    52            PUSH    EDX
10005217    50            PUSH    EAX
10005218    C64424 20 00    MOV   BYTE PTR SS:, 0x0
1000521D    884C24 29       MOV   BYTE PTR SS:, CL
10005221    FF15 00720010   CALL    NEAR DWORD PTR DS:       ; msvcrt._itoa
10005227    8D7C24 20       LEA   EDI, DWORD PTR SS:         ; 堆栈地址=0012CA28, (ASCII "b578f528")
1000522B    83C9 FF         OR      ECX, 0xFFFFFFFF
1000522E    33C0            XOR   EAX, EAX
10005230    83C4 0C         ADD   ESP, 0xC
10005233    33F6            XOR   ESI, ESI
10005235    F2:AE         REPNE   SCAS BYTE PTR ES:
10005237    F7D1            NOT   ECX
10005239    49            DEC   ECX
1000523A    74 28         JE      SHORT KeyData.10005264
1000523C    8B2D C4710010   MOV   EBP, DWORD PTR DS:       ; msvcrt.toupper
10005242    0FBE4434 14   MOVSX   EAX, BYTE PTR SS:
10005247    50            PUSH    EAX
10005248    FFD5            CALL    NEAR EBP
1000524A    884434 18       MOV   BYTE PTR SS:, AL
1000524E    83C4 04         ADD   ESP, 0x4
10005251    8D7C24 14       LEA   EDI, DWORD PTR SS:
10005255    83C9 FF         OR      ECX, 0xFFFFFFFF
10005258    33C0            XOR   EAX, EAX
1000525A    46            INC   ESI
1000525B    F2:AE         REPNE   SCAS BYTE PTR ES:
1000525D    F7D1            NOT   ECX
1000525F    49            DEC   ECX
10005260    3BF1            CMP   ESI, ECX
10005262^ 72 DE         JB      SHORT KeyData.10005242
10005264    8D4C24 0C       LEA   ECX, DWORD PTR SS:          ; 堆栈地址=0012CA20, (ASCII "5a98")
10005268    E8 5F040000   CALL    KeyData.100056CC                     ; JMP 到 mfc42.#540
1000526D    8D4C24 14       LEA   ECX, DWORD PTR SS:         ; 堆栈地址=0012CA28, (ASCII "B578F528")
10005271    8D5424 0C       LEA   EDX, DWORD PTR SS:
10005275    51            PUSH    ECX
10005276    BF 01000000   MOV   EDI, 0x1
1000527B    68 04840010   PUSH    KeyData.10008404                     ; ASCII "%s"
10005280    52            PUSH    EDX
10005281    897C24 34       MOV   DWORD PTR SS:, EDI
10005285    E8 A8040000   CALL    KeyData.10005732                     ; JMP 到 mfc42.#2818
1000528A    8B7424 3C       MOV   ESI, DWORD PTR SS:
1000528E    83C4 0C         ADD   ESP, 0xC
10005291    8D4424 0C       LEA   EAX, DWORD PTR SS:
10005295    8BCE            MOV   ECX, ESI
10005297    50            PUSH    EAX
10005298    E8 59040000   CALL    KeyData.100056F6                     ; JMP 到 mfc42.#535
1000529D    897C24 10       MOV   DWORD PTR SS:, EDI
100052A1    8D4C24 0C       LEA   ECX, DWORD PTR SS:
100052A5    C64424 28 00    MOV   BYTE PTR SS:, 0x0
100052AA    E8 11040000   CALL    KeyData.100056C0                     ; JMP 到 mfc42.#800
100052AF    8B4C24 20       MOV   ECX, DWORD PTR SS:
100052B3    8BC6            MOV   EAX, ESI
100052B5    5F            POP   EDI
100052B6    5E            POP   ESI
100052B7    5D            POP   EBP
100052B8    64:890D 0000000>MOV   DWORD PTR FS:, ECX
100052BF    83C4 20         ADD   ESP, 0x20
100052C2    C2 0C00         RETN    0xC
发现上面的第三个关键字符串是从10005227 8D7C24 20 LEA EDI, DWORD PTR SS: ; 堆栈地址=0012CA28, (ASCII "b578f528")这里算出来的
100051DA    8B7C24 38       MOV   EDI, DWORD PTR SS:         ; 位数
100051DE    8B4C24 34       MOV   ECX, DWORD PTR SS:         ; 真码MD5取奇数位
100051E2    83C8 FF         OR      EAX, 0xFFFFFFFF    ;初始为0xFFFFFFFF
100051E5    85FF            TEST    EDI, EDI
100051E7    7E 1B         JLE   SHORT KeyData.10005204
100051E9    8BE8            MOV   EBP, EAX    ; ebp = eax
100051EB    33D2            XOR   EDX, EDX
100051ED    8A11            MOV   DL, BYTE PTR DS:    ;依次循环取真码奇数位MD5的ASCII码
100051EF    81E5 FF000000   AND   EBP, 0xFF; ebp 和 0xff 进行与运算
100051F5    33EA            XOR   EBP, EDX    ; EBP 和 EDX 异或运算
100051F7    C1E8 08         SHR   EAX, 0x8    ; EAX 右移8位
100051FA    8B54AE 04       MOV   EDX, DWORD PTR DS:    ; ESI = 0012CED8 计算 地址查取数据
100051FE    33C2            XOR   EAX, EDX
10005200    41            INC   ECX
10005201    4F            DEC   EDI
10005202^ 75 E5         JNZ   SHORT KeyData.100051E9
10005204    33C9            XOR   ECX, ECX
10005206    8D5424 14       LEA   EDX, DWORD PTR SS:
1000520A    894C24 15       MOV   DWORD PTR SS:, ECX
1000520E    6A 10         PUSH    0x10
10005210    F7D0            NOT   EAX    ; EAX 按位取反
10005212    894C24 1D       MOV   DWORD PTR SS:, ECX
10005216    52            PUSH    EDX
10005217    50            PUSH    EAX
10005218    C64424 20 00    MOV   BYTE PTR SS:, 0x0
1000521D    884C24 29       MOV   BYTE PTR SS:, CL
10005221    FF15 00720010   CALL    NEAR DWORD PTR DS:       ; msvcrt._itoa
10005227    8D7C24 20       LEA   EDI, DWORD PTR SS:         ; 堆栈地址=0012CA28, (ASCII "b578f528")


发现ASCII "b578f528"上面也没有调用其他什么CALL了,那这上面的这些汇编就是算法部分了
这里也不需要看懂怎么算的(因为我看着也有点复杂),只要把代码照搬到注册机中就行,还需要把 0012CED8 地址的数据(大小0x400)烤出来一份用于计算
00 00 00 00 96 30 07 77 2C 61 0E EE BA 51 09 99 19 C4 6D 07 8F F4 6A 70 35 A5 63 E9 A3 95 64 9E
32 88 DB 0E A4 B8 DC 79 1E E9 D5 E0 88 D9 D2 97 2B 4C B6 09 BD 7C B1 7E 07 2D B8 E7 91 1D BF 90
64 10 B7 1D F2 20 B0 6A 48 71 B9 F3 DE 41 BE 84 7D D4 DA 1A EB E4 DD 6D 51 B5 D4 F4 C7 85 D3 83
56 98 6C 13 C0 A8 6B 64 7A F9 62 FD EC C9 65 8A 4F 5C 01 14 D9 6C 06 63 63 3D 0F FA F5 0D 08 8D
C8 20 6E 3B 5E 10 69 4C E4 41 60 D5 72 71 67 A2 D1 E4 03 3C 47 D4 04 4B FD 85 0D D2 6B B5 0A A5
FA A8 B5 35 6C 98 B2 42 D6 C9 BB DB 40 F9 BC AC E3 6C D8 32 75 5C DF 45 CF 0D D6 DC 59 3D D1 AB
AC 30 D9 26 3A 00 DE 51 80 51 D7 C8 16 61 D0 BF B5 F4 B4 21 23 C4 B3 56 99 95 BA CF 0F A5 BD B8
9E B8 02 28 08 88 05 5F B2 D9 0C C6 24 E9 0B B1 87 7C 6F 2F 11 4C 68 58 AB 1D 61 C1 3D 2D 66 B6
90 41 DC 76 06 71 DB 01 BC 20 D2 98 2A 10 D5 EF 89 85 B1 71 1F B5 B6 06 A5 E4 BF 9F 33 D4 B8 E8
A2 C9 07 78 34 F9 00 0F 8E A8 09 96 18 98 0E E1 BB 0D 6A 7F 2D 3D 6D 08 97 6C 64 91 01 5C 63 E6
F4 51 6B 6B 62 61 6C 1C D8 30 65 85 4E 00 62 F2 ED 95 06 6C 7B A5 01 1B C1 F4 08 82 57 C4 0F F5
C6 D9 B0 65 50 E9 B7 12 EA B8 BE 8B 7C 88 B9 FC DF 1D DD 62 49 2D DA 15 F3 7C D3 8C 65 4C D4 FB
58 61 B2 4D CE 51 B5 3A 74 00 BC A3 E2 30 BB D4 41 A5 DF 4A D7 95 D8 3D 6D C4 D1 A4 FB F4 D6 D3
6A E9 69 43 FC D9 6E 34 46 88 67 AD D0 B8 60 DA 73 2D 04 44 E5 1D 03 33 5F 4C 0A AA C9 7C 0D DD
3C 71 05 50 AA 41 02 27 10 10 0B BE 86 20 0C C9 25 B5 68 57 B3 85 6F 20 09 D4 66 B9 9F E4 61 CE
0E F9 DE 5E 98 C9 D9 29 22 98 D0 B0 B4 A8 D7 C7 17 3D B3 59 81 0D B4 2E 3B 5C BD B7 AD 6C BA C0
20 83 B8 ED B6 B3 BF 9A 0C E2 B6 03 9A D2 B1 74 39 47 D5 EA AF 77 D2 9D 15 26 DB 04 83 16 DC 73
12 0B 63 E3 84 3B 64 94 3E 6A 6D 0D A8 5A 6A 7A 0B CF 0E E4 9D FF 09 93 27 AE 00 0A B1 9E 07 7D
44 93 0F F0 D2 A3 08 87 68 F2 01 1E FE C2 06 69 5D 57 62 F7 CB 67 65 80 71 36 6C 19 E7 06 6B 6E
76 1B D4 FE E0 2B D3 89 5A 7A DA 10 CC 4A DD 67 6F DF B9 F9 F9 EF BE 8E 43 BE B7 17 D5 8E B0 60
E8 A3 D6 D6 7E 93 D1 A1 C4 C2 D8 38 52 F2 DF 4F F1 67 BB D1 67 57 BC A6 DD 06 B5 3F 4B 36 B2 48
DA 2B 0D D8 4C 1B 0A AF F6 4A 03 36 60 7A 04 41 C3 EF 60 DF 55 DF 67 A8 EF 8E 6E 31 79 BE 69 46
8C B3 61 CB 1A 83 66 BC A0 D2 6F 25 36 E2 68 52 95 77 0C CC 03 47 0B BB B9 16 02 22 2F 26 05 55
BE 3B BA C5 28 0B BD B2 92 5A B4 2B 04 6A B3 5C A7 FF D7 C2 31 CF D0 B5 8B 9E D9 2C 1D AE DE 5B
B0 C2 64 9B 26 F2 63 EC 9C A3 6A 75 0A 93 6D 02 A9 06 09 9C 3F 36 0E EB 85 67 07 72 13 57 00 05
82 4A BF 95 14 7A B8 E2 AE 2B B1 7B 38 1B B6 0C 9B 8E D2 92 0D BE D5 E5 B7 EF DC 7C 21 DF DB 0B
D4 D2 D3 86 42 E2 D4 F1 F8 B3 DD 68 6E 83 DA 1F CD 16 BE 81 5B 26 B9 F6 E1 77 B0 6F 77 47 B7 18
E6 5A 08 88 70 6A 0F FF CA 3B 06 66 5C 0B 01 11 FF 9E 65 8F 69 AE 62 F8 D3 FF 6B 61 45 CF 6C 16
78 E2 0A A0 EE D2 0D D7 54 83 04 4E C2 B3 03 39 61 26 67 A7 F7 16 60 D0 4D 47 69 49 DB 77 6E 3E
4A 6A D1 AE DC 5A D6 D9 66 0B DF 40 F0 3B D8 37 53 AE BC A9 C5 9E BB DE 7F CF B2 47 E9 FF B5 30
1C F2 BD BD 8A C2 BA CA 30 93 B3 53 A6 A3 B4 24 05 36 D0 BA 93 06 D7 CD 29 57 DE 54 BF 67 D9 23
2E 7A 66 B3 B8 4A 61 C4 02 1B 68 5D 94 2B 6F 2A 37 BE 0B B4 A1 8E 0C C3 1B DF 05 5A 8D EF 02 2D

下面附上注册机

GGLHY 发表于 2015-5-10 08:12:34

厉害!
下面是码表,其实是标准的CrC32运算!

赞一个~

yunfeng 发表于 2015-5-10 13:46:38

分析很精辟,赞一下。

千千万是福朋友 发表于 2015-5-10 19:00:29

GGLHY 发表于 2015-5-10 08:12
厉害!
下面是码表,其实是标准的CrC32运算!



现在知道了,感谢G大指点

dyshjl 发表于 2015-5-10 22:30:01

论坛高人辈出,顶一下

FraMeQ 发表于 2015-5-10 22:36:53

学校学习了一下。 感谢楼主

FraMeQ 发表于 2015-5-10 22:38:50

学校学习了一下。 感谢楼主

左岸麦田 发表于 2015-5-11 09:22:58

感谢楼主破解分享,貌似有人也爆破过,非注册机算法类。

南山雾U2 发表于 2015-5-11 21:52:52

感谢楼主的破文。
页: [1]
查看完整版本: ClipNow v4.7 算法注册机