飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5531|回复: 6

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

[复制链接]
  • TA的每日心情
    开心
    2024-5-12 21:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    发表于 2016-10-14 10:46:02 | 显示全部楼层 |阅读模式
    本帖最后由 cxj98 于 2016-10-15 09:46 编辑

    所用到的工具推荐 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 玉皇大帝等着你们的到来。本破文系不完全分析,可能某些注释有误,若发现,还请大牛们指正。

    评分

    参与人数 3威望 +28 飘云币 +28 收起 理由
    GeekCat + 20 + 20 98大婶V5
    飞天 + 4 + 4 PYG有你更精彩!又见98大婶
    wgz001 + 4 + 4 只能膜拜,无法模仿!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2018-7-9 18:21
  • 签到天数: 948 天

    [LV.10]以坛为家III

    发表于 2016-10-14 14:16:37 | 显示全部楼层
    大牛赶紧加入PYG核心成员,让老飘推荐,有高薪,呵呵
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    4 天前
  • 签到天数: 1944 天

    [LV.Master]伴坛终老

    发表于 2016-10-14 14:23:16 | 显示全部楼层
    膜拜,感谢分享分析文章。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-11-20 10:47
  • 签到天数: 73 天

    [LV.6]常住居民II

    发表于 2016-10-14 15:40:23 | 显示全部楼层
    原来是98大牛啊,支持,顶你~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-12-27 12:04
  • 签到天数: 1247 天

    [LV.10]以坛为家III

    发表于 2016-10-14 16:00:19 | 显示全部楼层
    感谢大神分享!支持!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 16:50
  • 签到天数: 1592 天

    [LV.Master]伴坛终老

    发表于 2016-10-14 22:12:28 | 显示全部楼层
    98大婶来了,支持呀
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-10-15 11:29
  • 签到天数: 168 天

    [LV.7]常住居民III

    发表于 2016-12-1 13:08:35 | 显示全部楼层
    谢谢分享教程
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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