吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5228|回复: 17
收起左侧

[原创] 一款明码比较 keygenme 的不完全算法分析,果断日它一下。

  [复制链接]
cxj98 发表于 2016-10-14 10:37
本帖最后由 cxj98 于 2016-10-14 13:02 编辑

所用到的工具推荐 x32dbg,我前几天有发布,看我发表过的主题可找到。
所用到的 KeyGenMe 获取方式1:叫 wgz001 王哥拿,不要告诉他是我告诉你的,不谢,我是雷锋。
KeygenMe 获取方式2: https://yunpan.cn/cvRunwiJbQGCm  访问密码 e337

话说已经有一段时间消声匿迹在破解界中,完全忙碌于现状的中国生活环境下,所有工厂几乎都是2班倒 12个小时 + 1小时吃饭时间 + 早班提前10-15分钟打考勤卡 + 下午班提前 10-15分钟打考勤卡 + 晚班提前 10-15 分钟打卡,一天上班基本上要上14个小时,工资又低,还没有2500,于是国庆节就果断辞工了,现在失业在家等找其它工作。

不知道什么时候从某论坛淘到一款明码比较的 KeygenMe,这不在我的电脑硬盘里翻箱倒柜给找出来了,最近看到 wgz001 王哥在某论坛发了不少算法分析破文,一年多不见,感觉此牛功力大展不少,受其影响,遂无奈又想操弄旧业。

果断请出神器 x32dbg,载入 KeygenMe.exe, F9 加大马达跑起来,输入用户名:chixiaojie,假码:abcdefghijklmn,轻触 Register 按扭,妮玛,大白天跳出 "Wrong Code! Try Again !",差点把我吓出心脏病,不管它,直接搜索哪里闹鬼,发现:
[Asm] 纯文本查看 复制代码
004545D0            | 68 B8 46 45 00            | PUSH    <keygenme1.sub_4546B8>          | 4546B8:L"Wrong Code! Try Again !"

往上翻一翻,发现新线索有一处可以直接躲开它:
[Asm] 纯文本查看 复制代码
004545B2            | 75 15                     | JNE     keygenme1.4545C9                |

果断下断点,再往上翻一翻,一直翻到断首下断:
[Asm] 纯文本查看 复制代码
004544DC            | 55                        | PUSH    EBP                             |


万事俱备,准备单挑。F9继续跑起来,看能否直达天堂,这中间省略N多,手算全是体力活,不解释,所有看过程:

[Asm] 纯文本查看 复制代码
004544DA <keygenme1 | 8B C0                     | MOV     EAX,EAX                         |
004544DC            | 55                        | PUSH    EBP                             |
004544DD            | 8B EC                     | MOV     EBP,ESP                         |
004544DF            | 33 C9                     | XOR     ECX,ECX                         |
004544E1            | 51                        | PUSH    ECX                             |
004544E2            | 51                        | PUSH    ECX                             |
004544E3            | 51                        | PUSH    ECX                             |
004544E4            | 51                        | PUSH    ECX                             |
004544E5            | 51                        | PUSH    ECX                             |
004544E6            | 53                        | PUSH    EBX                             |
004544E7            | 56                        | PUSH    ESI                             | esi:"<BE"
004544E8            | 8B F0                     | MOV     ESI,EAX                         | esi:"<BE"
004544EA            | 33 C0                     | XOR     EAX,EAX                         |
004544EC            | 55                        | PUSH    EBP                             |
004544ED            | 68 0F 46 45 00            | PUSH    <keygenme1.sub_45460F>          |
004544F2            | 64 FF 30                  | PUSH    DWORD PTR FS:[EAX]              |
004544F5            | 64 89 20                  | MOV     DWORD PTR FS:[EAX],ESP          |
004544F8            | 8D 55 F4                  | LEA     EDX,DWORD PTR SS:[EBP-C]        | [ebp-C]:"chixiaojie"
004544FB            | 8B 86 00 03 00 00         | MOV     EAX,DWORD PTR DS:[ESI+300]      |
00454501            | E8 BA D6 FD FF            | CALL    <keygenme1.sub_431BC0>          |
00454506            | 8B 55 F4                  | MOV     EDX,DWORD PTR SS:[EBP-C]        | [ebp-C]:"chixiaojie"
00454509            | 8B C6                     | MOV     EAX,ESI                         | esi:"<BE"
0045450B            | 8B 08                     | MOV     ECX,DWORD PTR DS:[EAX]          |
0045450D            | FF 51 18                  | CALL    DWORD PTR DS:[ECX+18]           |
00454510            | 8B 45 FC                  | MOV     EAX,DWORD PTR SS:[EBP-4]        |
00454513            | E8 F4 FB FA FF            | CALL    <keygenme1.sub_40410C>          |
00454518            | 33 DB                     | XOR     EBX,EBX                         |
0045451A            | 8B 46 08                  | MOV     EAX,DWORD PTR DS:[ESI+8]        | [esi+8]:"chixiaojie" <- 将用户名给 eax
0045451D            | E8 EA FB FA FF            | CALL    <keygenme1.sub_40410C>          |
00454522            | 85 C0                     | TEST    EAX,EAX                         |
00454524            | 7E 13                     | JLE     keygenme1.454539                |
00454526            | BA 01 00 00 00            | MOV     EDX,1                           | <- 设循环次数的初始值为1
0045452B            | 8B 4E 08                  | MOV     ECX,DWORD PTR DS:[ESI+8]        | <- [esi+8] 里存放着用户名传递给 ECX
0045452E            | 0F B6 4C 11 FF            | MOVZX   ECX,BYTE PTR DS:[ECX+EDX-1]     | <- 逐位获取用户名 ASCII
00454533            | 03 D9                     | ADD     EBX,ECX                         | <- EBX=EBX+ECX EBX初始值为0,用户名 ascii 的累加和
00454535            | 42                        | INC     EDX                             | <- 循环次数
00454536            | 48                        | DEC     EAX                             | <- 用户名长度递减,直到减完为止。
00454537            | 75 F2                     | JNE     keygenme1.45452B                | <- 一直循环,直到完毕才执行下一步
00454539            | 83 C3 53                  | ADD     EBX,53                          |
0045453C            | 81 C3 2A C6 87 47         | ADD     EBX,4787C62A                    |
00454542            | 8B C3                     | MOV     EAX,EBX                         | <- EAX = (用户名 ascii 累加和) + 53 + 0x4787C62A
00454544            | B9 19 00 00 00            | MOV     ECX,19                          | <- 设 ECX 初始值为 0x19
00454549            | 99                        | CDQ                                     | <- 将双字数据扩展为四字节,该指令先把edx的每一位置成eax的最高位(若eax>=0x80000000, 则edx=0xFFFFFFFF;若eax<0x80000000,则edx=0x00000000) ,再把edx扩展为eax的高位。
0045454A            | F7 F9                     | IDIV    ECX                             | <- IDIV ECX 就是 EAX / ECX,商数放在 EAX,余数放在 EDX (这里的 ECX 初始值 = 19)
0045454C            | 8B D8                     | MOV     EBX,EAX                         | <- EBX = EAX
0045454E            | 81 C3 78 A4 6A D7         | ADD     EBX,D76AA478                    | <- EBX = EBX + 0xD76AA478
00454554            | C1 E3 03                  | SHL     EBX,3                           | <- 将 EBX 的值左移3位,相当于 EBX = EBX * 8 (左移1位 * 2,左移2位 * 4,左移3位 * 8,以此类推,就是 2 的平方)
00454557            | D1 EB                     | SHR     EBX,1                           | <- 将 EBX 的值右移1位,相当于 EBX = EBX / 2
00454559            | 69 C3 05 84 08 08         | IMUL    EAX,EBX,8088405                 | <- EAX = EBX * 0x8088405
0045455F            | 8B D8                     | MOV     EBX,EAX                         |
00454561            | 8B C3                     | MOV     EAX,EBX                         |
00454563            | B9 9F 86 01 00            | MOV     ECX,1869F                       | <- 设 ECX 初始值 = 0x1869F
00454568            | 99                        | CDQ                                     | <- 将双字数据扩展为四字节,该指令先把edx的每一位置成eax的最高位(若eax>=0x80000000, 则edx=0xFFFFFFFF;若eax<0x80000000,则edx=0x00000000) ,再把edx扩展为eax的高位。
00454569            | F7 F9                     | IDIV    ECX                             | <- IDIV ECX 就是 EAX / ECX,商数放在 EAX,余数放在 EDX (这里的 ECX 初始值 = 0x1869F,余数 = EAX Mod ECX)
0045456B            | 8B D8                     | MOV     EBX,EAX                         | <- 将 EAX 传递给 EBX
0045456D            | 81 C3 78 A4 6A D7         | ADD     EBX,D76AA478                    | <- EBX = EBX + 0xD76AA478
00454573            | 8B C3                     | MOV     EAX,EBX                         | <- 将 EBX 传递给 EAX
00454575            | F7 EB                     | IMUL    EBX                             | <- EBX = EBX * EAX
00454577            | 69 C0 13 46 30 A8         | IMUL    EAX,EAX,A8304613                | <- EAX = EAX * 0xA8304613
0045457D            | 8B D8                     | MOV     EBX,EAX                         | <- 将 EAX 值传递给 EBX
0045457F            | 8D 55 F0                  | LEA     EDX,DWORD PTR SS:[EBP-10]       | [ebp-10]:"-1735924981"
00454582            | 8B C3                     | MOV     EAX,EBX                         | 77171854E137A7F89887E30B
00454584            | E8 C7 36 FB FF            | CALL    <keygenme1.sub_407C50>          | <- 这个暂时不知道什么 Call,目测可能是固定字符串
00454589            | 8B 4D F0                  | MOV     ECX,DWORD PTR SS:[EBP-10]       | <- 有符号 "-1735924981" 存放在 [ebp-10]
0045458C            | 8D 45 F8                  | LEA     EAX,DWORD PTR SS:[EBP-8]        | [ebp-8]:"43694E31-1735924981"
0045458F            | BA 24 46 45 00            | MOV     EDX,keygenme1.454624            | <- 固定字符串 "43694E31"
00454594            | E8 BF FB FA FF            | CALL    <keygenme1.sub_404158>          |
00454599            | 8D 55 EC                  | LEA     EDX,DWORD PTR SS:[EBP-14]       | <- 假码 "abcdefghijklmn" 存放在 [ebp-14]
0045459C            | 8B 86 04 03 00 00         | MOV     EAX,DWORD PTR DS:[ESI+304]      |
004545A2            | E8 19 D6 FD FF            | CALL    <keygenme1.sub_431BC0>          | <- 路过此地,可能是固定字符 "43694E31" 连接上面的 "-1735924981"
004545A7            | 8B 55 EC                  | MOV     EDX,DWORD PTR SS:[EBP-14]       | <- 获取假唐僧 "abcdefghijklmn"
004545AA            | 8B 45 F8                  | MOV     EAX,DWORD PTR SS:[EBP-8]        | <- 哟西真码佛现身 "43694E31-1735924981"
004545AD            | E8 A6 FC FA FF            | CALL    <keygenme1.sub_404258>          | <- 这个还用说,真假码比较 Call
004545B2            | 75 15                     | JNE     keygenme1.4545C9                | <- 相等继续运行上天堂,不相符阻止上天堂只能跳下地狱。
004545B4            | 6A 40                     | PUSH    40                              | <- 天堂门入口,玉皇大帝欢迎你!
004545B6            | 68 30 46 45 00            | PUSH    <keygenme1.sub_454630>          | 454630:L"Congratulation"
004545BB            | 68 50 46 45 00            | PUSH    <keygenme1.sub_454650>          | 454650:L"Congratulation !! ,Now Write Keygen "
004545C0            | 6A 00                     | PUSH    0                               |
004545C2            | E8 A5 1F FB FF            | CALL    <keygenme1.MessageBoxW>         |
004545C7            | EB 13                     | JMP     keygenme1.4545DC                |
004545C9            | 6A 10                     | PUSH    10                              | <- 地狱门入口,阎王等着你!
004545CB            | 68 9C 46 45 00            | PUSH    keygenme1.45469C                | 45469C:L"Oh no no ..."
004545D0            | 68 B8 46 45 00            | PUSH    <keygenme1.sub_4546B8>          | 4546B8:L"Wrong Code! Try Again !"
004545D5            | 6A 00                     | PUSH    0                               |
004545D7            | E8 90 1F FB FF            | CALL    <keygenme1.MessageBoxW>         |
004545DC            | 33 C0                     | XOR     EAX,EAX                         |
004545DE            | 5A                        | POP     EDX                             |
004545DF            | 59                        | POP     ECX                             |
004545E0            | 59                        | POP     ECX                             |
004545E1            | 64 89 10                  | MOV     DWORD PTR FS:[EAX],EDX          |
004545E4            | 68 16 46 45 00            | PUSH    <keygenme1.sub_454616>          |
004545E9            | 8D 45 EC                  | LEA     EAX,DWORD PTR SS:[EBP-14]       | [ebp-14]:"abcdefghijklmn"
004545EC            | E8 5B F8 FA FF            | CALL    <keygenme1.sub_403E4C>          |
004545F1            | 8D 45 F0                  | LEA     EAX,DWORD PTR SS:[EBP-10]       | [ebp-10]:"-1735924981"
004545F4            | E8 53 F8 FA FF            | CALL    <keygenme1.sub_403E4C>          |
004545F9            | 8D 45 F4                  | LEA     EAX,DWORD PTR SS:[EBP-C]        | [ebp-C]:"chixiaojie"
004545FC            | E8 4B F8 FA FF            | CALL    <keygenme1.sub_403E4C>          |
00454601            | 8D 45 F8                  | LEA     EAX,DWORD PTR SS:[EBP-8]        | [ebp-8]:"43694E31-1735924981"
00454604            | BA 02 00 00 00            | MOV     EDX,2                           |
00454609            | E8 62 F8 FA FF            | CALL    <keygenme1.sub_403E70>          |
0045460E            | C3                        | RET                                     |


最终算出注册码为 43694E31-1735924981,算法是 固定字符 + 有符号(十六进制码),Congratulation !! ,Now Write Keygen 玉皇大帝等着你们的到来。本破文系不完全分析,可能某些注释有误,若发现,还请大牛们指正。


点评

我想知道为什么一定用32dbg看不习惯  发表于 2016-10-16 11:24

免费评分

参与人数 6威望 +1 热心值 +6 收起 理由
jiexia + 1 谢谢@Thanks!
Hmily + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
KaQqi + 1 well
king-sj + 1 热心回复!
朱朱你堕落了 + 1 cxj98大牛重出江湖,谁与争锋!
安河桥 + 1 大牛

查看全部评分

本帖被以下淘专辑推荐:

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

KaQqi 发表于 2016-10-16 11:23
本帖最后由 cqr2287 于 2016-10-16 11:25 编辑

好吧,挺好的算法分析。回头我也拿来练练算法分析

点评

附件请看报纸那一楼层,楼主发了  发表于 2016-10-16 17:21
ningzhonghui 发表于 2016-10-14 10:47
98大牛,确实消失好长时间了,终于又见到你破文了
阿笨猫 发表于 2016-10-14 11:07
lan2602144404 发表于 2016-10-14 12:28
又见牛了,谢谢分享
朱朱你堕落了 发表于 2016-10-14 12:33
楼主应该把小软件放上来,我等菜鸟看着破文比着操练一下。

点评

下载:https://yunpan.cn/cvRunwiJbQGCm 访问密码 e337  发表于 2016-10-14 12:51
kaiterchen 发表于 2016-10-14 12:34
怎么老是滑动验证失败呢?!
中间人 发表于 2016-10-14 12:47
干的漂亮 。  话说 如此技术 为何 只有不到 2500 薪资
落花肆染流年 发表于 2016-10-14 13:56
厉害了我的哥
wgz001 发表于 2016-10-14 15:41
我也想知道为何工资只有2500

点评

得,cm给我一份,练习分析算法用  发表于 2016-10-16 11:24
wujunji666 发表于 2016-10-16 11:12
大牛为何工资这么点?现如今做逆向的收入很高啊(专门吃这碗饭的)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 10:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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