首页
社区
课程
招聘
[原创] ty123的实用crackme- CPN Augur (新手飘过~~)
发表于: 2007-1-28 15:29 8354

[原创] ty123的实用crackme- CPN Augur (新手飘过~~)

2007-1-28 15:29
8354

======== 手机号码吉凶测试 (CPN Augur) ========

版本:0.2β

作者:ty123[DFCG]

邮件:soy_ty123@163.com

语言:Win32汇编语言

难度:2-3/10

适用的操作平台:WinXP/Win2K (Win2003下未测试,估计可以运行)

文件:
        - CPN Augur.exe
        - MCP.dll
        - Readme.txt

破解规则:
        - 编制注册机+破解教程
        - 不建议修改程序 (patching is not recommended)
        - 不建议使用装载程序 (loader is not recommended)
        - 破解后程序应能正常显示手机号码预测结果

说明:
        - 为方便跟踪注册码的计算方法,主程序没有加壳
        - 本程序汇集了几种常见的非明码比较的型式,算法本身比较简单
        - 资源库 (MCP.dll)用UPX压缩

致谢:
        - DFCG的老大“我要”及全体成员
        - Kanxue及论坛的道友们

ty123

2007年1月28日

不知道为什么不能上传文件,crackme暂时放在:
http://crackmes.ys168.com

烦请那位大侠传在这里,谢谢!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
2
帮你传上来.
上传的附件:
2007-1-28 20:49
0
雪    币: 242
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Originally posted by bxm
帮你传上来.


感谢bxm大侠!

手机号码测试纯属娱乐,且勿对号入坐,我们主要是玩玩crackme,学学新东西。破解后看到预测结果可正常显示,顺便带来一点成就感,仅此而已。

欢迎讨论
2007-1-28 22:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
要放假了,先下来,回家破破去。谢谢分享了。
2007-1-28 22:10
0
雪    币: 383
活跃值: (41)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
5
00401437   .  E8 90060000   call    <jmp.&kernel32.GetVolumeInformat>; \GetVolumeInformationA
2007-1-31 13:24
0
雪    币: 4441
活跃值: (805)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
新手搞不定,跟到异常就没法再进了,有高手写个教程吗
2007-1-31 14:08
0
雪    币: 242
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
Originally posted by windtrace
新手搞不定,跟到异常就没法再进了,有高手写个教程吗


没有使用常见的anti-debugging技术,如果不修改程序应该不会发生异常。

http://crackmes.ys168.com 上有修正版(修正了几处很少碰到的BUG,与BXM大侠传的这个版本计算方法完全一致),另上传了成功的截图,以备各位参照。

欢迎讨论。

PS:如果这里对注册用户开放上传附件的功能就好了。
2007-2-4 10:49
0
雪    币: 309
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
昨天下载的原来是这个...
2007-2-4 11:53
0
雪    币: 226
活跃值: (30)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
果然不是新手能破的了的。
偶是新手只会破解前四位序列号。
这个还是偶第一个分析算法的软件呢。算法都没见过。不知道怎么弄出来
现分析出下。
软件使用的是重启验证机制,用户名和注册码都写入注册表
并且写入附加数据 PLAY/BOY 两个键 

PLAY 的算法 
COUNT shl 1 * pi 

0040106D    6A 18           push    18
0040106F    8D45 D0         lea     eax, [ebp-30]
00401072    50              push    eax
00401073    68 D5070000     push    7D5
00401078    FF75 08         push    dword ptr [ebp+8]
0040107B    E8 DA090000     call    <jmp.&user32.GetDlgItemTextA>
00401080    D1E0            shl     eax, 1                                      ; 序列号个数左移1位
00401082    8945 C4         mov     [ebp-3C], eax                               ; 放入内存
00401085    DB45 C4         fild    dword ptr [ebp-3C]                          ; 放入st(0)
00401088    D9EB            fldpi                                               ; 放入st(1) pi
0040108A    DEC9            fmulp   st(1), st                                   ; st(1) * st(0)
0040108C    D95D CC         fstp    dword ptr [ebp-34]                          ; 放入变量 

BOY的算法是

0040108F    8D75 D4         lea     esi, [ebp-2C]                               ; 跳过前四位 取序列号后面的字符
00401092    8D7D C8         lea     edi, [ebp-38]
00401095    6A 03           push    3
00401097    59              pop     ecx                                         ; 3次
00401098    A4              movs    byte ptr es:[edi], byte ptr [esi]
00401099    83C6 04         add     esi, 4                                      ; 间隔4位字符取3个字符 也就是从第二组开始取第一个字符
0040109C  ^ E2 FA           loopd   short 00401098
0040109E    B8 47434644     mov     eax, 44464347
004010A3    3145 C8         xor     [ebp-38], eax                               ; 将挑出来的字符异或44464347

好像在后面还有计算,不会分析了
有一段好像是内存解压代码 不知道是什么意思
执行前是
004010BB    8D05 D7104000   lea     eax, [4010D7]                               ; 指向代码
004010C1    B9 2C000000     mov     ecx, 2C
004010C6    8B15 06114000   mov     edx, [401106]
004010CC    3110            xor     [eax], edx                                  ; 解密
004010CE    83C0 04         add     eax, 4
004010D1    83E9 04         sub     ecx, 4
004010D4  ^ 75 F6           jnz     short 004010CC
004010D6    61              popad
004010D7    9D              popfd  

执行后的代码
004010BB    8D05 D7104000   lea     eax, [4010D7]                               ; 指向代码
004010C1    B9 2C000000     mov     ecx, 2C
004010C6    8B15 06114000   mov     edx, [401106]
004010CC    3110            xor     [eax], edx                                  ; 解密
004010CE    83C0 04         add     eax, 4
004010D1    83E9 04         sub     ecx, 4
004010D4  ^ 75 F6           jnz     short 004010CC
004010D6    61              popad
004010D7    A1 6B304000     mov     eax, [40306B]                               ; [40306B] = D72CAF21 哪来的?
004010DC    85C0            test    eax, eax
004010DE    74 32           je      short 00401112
004010E0    35 71FF2CD7     xor     eax, D72CFF71                               ; EAX xor D72CFF71
004010E5    C1E8 04         shr     eax, 4                                      ; 右移4位
004010E8    8B35 06114000   mov     esi, [401106]                               ; 4376073C
004010EE    3335 03114000   xor     esi, [401103]                               ; 3CE08A40
004010F4    3335 0D114000   xor     esi, [40110D]                               ; EBCC7531
004010FA    3335 0A114000   xor     esi, [40110A]                               ; 31C85531
00401100    90              nop
00401101    90              nop
00401102    90              nop
00401103    40              inc     eax                                         ; EAX ++
00401104    8AE0            mov     ah, al
00401106    3C 07           cmp     al, 7                                       ;
00401108    76 43           jbe     short 0040114D
0040110A    3155 C8         xor     [ebp-38], edx                               ; 这里是 BOY
0040110D    3175 CC         xor     [ebp-34], esi                               ; 这里是 PLAY

前四位序列号的计算方法是

先通过用户名第一组四个字符计算生成一个数字
然后再通过一个计算在CodedByTy123-China字符串里取值
这个可以把算法反过来就可以得到序列号

0040143C    FF75 9B         push    dword ptr [ebp-65]
0040143F    58              pop     eax                                         ; 用户名 前四位
00401440    C1C0 08         rol     eax, 8                                      ; 循环左移8位
00401443    3345 FC         xor     eax, [ebp-4]                                ; 再异或C盘序号
00401446    2E:3305 7514400>xor     eax, cs:[401475]                            ; 再异或850F073A
0040144D    8945 90         mov     [ebp-70], eax

00401453    8B45 DB         mov     eax, [ebp-25]                               ; 序列号
00401456    0FC8            bswap   eax                                         ; 交换顺序
00401458    C1C8 08         ror     eax, 8                                      ; 循环右移8位
0040145B    8945 DB         mov     [ebp-25], eax
0040145E    8D7D DB         lea     edi, [ebp-25]

00401461    6A 04           push    4
00401463    59              pop     ecx
00401464    6A 10           push    10
00401466    5A              pop     edx
00401467    8D1D 00304000   lea     ebx, [403000]                               ; 字符 CodedByTy123-China
0040146D    33C0            xor     eax, eax
0040146F    AC              lods    byte ptr [esi]                              ; 取用户名算出来的字符第一个字节到al
00401470    F6F2            div     dl                                          ; 将值 / 10
00401472    86C4            xchg    ah, al                                      ; 交换 ah, al
00401474    D7              xlat    byte ptr [ebx+al]                           ; 从字符 CodedByTy123-China 中取值
00401475    3A07            cmp     al, [edi]                                   ; 对比

第二个对比的地方 这里反着算不了.....
00401498    8B45 88         mov     eax, [ebp-78]                               ; BOY
0040149B    2E:3305 7514400>xor     eax, cs:[401475]                            ; 异或850F073A
004014A2    3345 8C         xor     eax, [ebp-74]                               ; 异或 PLAY=COUNT shl 1 * pi
004014A5    F7D0            not     eax                                         ; 取反
004014A7    35 CA158B7D     xor     eax, 7D8B15CA                               ; 异或 7D8B15CA

第三个对比的地方

004014B2    8D75 E0         lea     esi, [ebp-20]                               ; 继续取序列号的第二组四个字符
004014B5    8B06            mov     eax, [esi]                                  ; 取四位放入eax
004014B7    3345 DB         xor     eax, [ebp-25]                               ; 和序列号生成的前四位数异或
004014BA    8906            mov     [esi], eax
004014BC    33C0            xor     eax, eax
004014BE    33D2            xor     edx, edx
004014C0    6A 04           push    4
004014C2    59              pop     ecx
004014C3    AC              lods    byte ptr [esi]                              ; 放入al
004014C4    3203            xor     al, [ebx]                                   ; xor Code
004014C6    03D0            add     edx, eax                                    ; edx += eax
004014C8    43              inc     ebx
004014C9  ^ E2 F8           loopd   short 004014C3
004014CB    52              push    edx                                         ; edx
004014CC    8D75 9B         lea     esi, [ebp-65]                               ; esi = 用户名
004014CF    33C0            xor     eax, eax
004014D1    33D2            xor     edx, edx
004014D3    6A 04           push    4
004014D5    59              pop     ecx
004014D6    AC              lods    byte ptr [esi]
004014D7    3203            xor     al, [ebx]                                   ; xor dByT
004014D9    03D0            add     edx, eax                                    ; edx += eax
004014DB    43              inc     ebx
004014DC  ^ E2 F8           loopd   short 004014D6
004014DE    87CA            xchg    edx, ecx
004014E0    5A              pop     edx
004014E1    33CA            xor     ecx, edx                                    ; edx1 != edx2 序列号不对

 后面的不会算了... 5555555
2007-2-4 15:28
0
雪    币: 242
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Originally posted by 流动的情感
果然不是新手能破的了的。
偶是新手只会破解前四位序列号。
这个还是偶第一个分析算法的软件呢。算法都没见过。不知道怎么弄出来
现分析出下。
软件使用的是重启验证机制,用户名和注册码都写入注册表
........


Good work! 离目标不太远了。

提示:把验证序列号代码部分全部看看,确定其可能的位数,然后需要一点破解灵感和经验。

欢迎讨论
2007-2-4 18:25
0
雪    币: 226
活跃值: (30)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
注册码是 21位
偶已经破解前15位了..
实在是佩服作者的爆破能力
2007-2-7 10:20
0
雪    币: 242
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
Originally posted by 流动的情感
注册码是 21位
偶已经破解前15位了..
实在是佩服作者的爆破能力


祝贺流动的情感大侠!

不过我印象21注册码应该不会通过第二关...
2007-2-7 10:42
0
雪    币: 226
活跃值: (30)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
应该是 23位
21位也可以通过第二关 因为 
21 shl 1 * pi
得到的数 为 43******H 所以就可以了.
如果是21位
第一次注册的注册码格式应该为
****/****\****>********
23位中间就是-了

偶要写教程. 这次想说的东西真是太多了...

上传的附件:
2007-2-7 14:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好长呀 勉强看完了  不错
2007-2-7 22:04
0
游客
登录 | 注册 方可回帖
返回
//