千羽huilai 发表于 2018-5-17 03:15

简单算法分析-追出注册码,献给想学或喜欢算法分析的朋友

**** Hidden Message *****
继续往下分析



00401513   .8038 36       cmp byte ptr ds:,0x36               ;cmp 36与我输入的1进行比较 不相等则跳    用计算器计算一下36等于ASII的 6
00401516   .75 1E          jnz short 算法分析.00401536               不相等则跳
也就是说第一位是6才不跳好,重新载入程序-运行   我输入 623456789没跳

00401518   .8078 01 32    cmp byte ptr ds:,0x32         ;cmp32与我输入的2进行比较 不相等则跳计算器计算一下32等ASII的2
0040151C   .75 18         jnz short 算法分析.00401536                     不相等则跳


也就是说第二位是2才不跳好,重新载入程序-运行   我输入 623456789没跳


继续分析
附图:


0040151E   .8078 02 38    cmp byte ptr ds:,0x38         ;cmp38与我输入的第三位3进行比较 不相等则跳计算器计算一下38等与ASII的8
00401522   .75 12         jnz short 算法分析.00401536                     不相等则跳
现在前三位我们找出来了(628)   继续往下分析


00401524   .8078 03 37    cmp byte ptr ds:,0x37                               ;cmp37与我输入的第四位4进行比较       不相等则跳计算器计算一下37等与ASII的7
00401528   .75 0C         jnz short 算法分析.00401536                                           不相等则跳

第四位找出来(6287) 继续往下分析

0040152A   .8078 04 2D    cmp byte ptr ds:,0x2D         ;cmp2D与我输入的第五位5进行比较 不相等则跳      计算器计算一下2D等与ASII的-
0040152E   .75 06         jnz short 算法分析.00401536                      不相等则跳
第五位出来了   (6287-)


00401530   .8078 05 41    cmp byte ptr ds:,0x41         ;cmp41与我输入的第六位6进行比较 不相等则跳    计算器计算一下41等与ASII的A
00401534   .74 17         je short 算法分析.0040154D
第六位出来了(6287—A)

附图:


代码:
004014B0   .64:A1 0000000>mov eax,dword ptr fs:               ;段首
004014B6   .6A FF         push -0x1
004014B8   .68 701B4000   push 算法分析.00401B70                     ;溉%@
004014BD   .50            push eax
004014BE   .64:8925 00000>mov dword ptr fs:,esp
004014C5   .83EC 08       sub esp,0x8
004014C8   .53            push ebx                                 ;user32.PostQuitMessage
004014C9   .55            push ebp
004014CA   .56            push esi
004014CB   .8BF1          mov esi,ecx
004014CD   .57            push edi
004014CE   .8DBE A0000000 lea edi,dword ptr ds:
004014D4   .8BCF          mov ecx,edi
004014D6   .E8 6F030000   call <jmp.&MFC42.#3876>                  ;读取我们的账号长度
004014DB   .8B1D FC214000 mov ebx,dword ptr ds:[<&USER32.PostQuitM>;user32.PostQuitMessage
004014E1   .83F8 05       cmp eax,0x5                              ;我们输入的账号位数是8   cmp 5和8比较
004014E4   .7E 50         jle short 算法分析.00401536
004014E6   .8D6E 60       lea ebp,dword ptr ds:
004014E9   .8BCD          mov ecx,ebp
004014EB   .E8 5A030000   call <jmp.&MFC42.#3876>                  ;读取我们的密码长度
004014F0   .83F8 05       cmp eax,0x5                              ;cmp 5与9比较
004014F3   .7E 41         jle short 算法分析.00401536                  ;小于5-等于5调到错误提示
004014F5   .8D86 E0000000 lea eax,dword ptr ds:
004014FB   .8BCF          mov ecx,edi
004014FD   .50            push eax
004014FE   .E8 41030000   call <jmp.&MFC42.#3874>                  ;把我们的用户名存入
00401503   .8DBE E4000000 lea edi,dword ptr ds:
00401509   .8BCD          mov ecx,ebp
0040150B   .57            push edi
0040150C   .E8 33030000   call <jmp.&MFC42.#3874>                  ;把我们的假码存入
00401511   .8B07          mov eax,dword ptr ds:
00401513   .8038 36       cmp byte ptr ds:,0x36               ;cmp 36与我输入的第一位1进行比较 不相等则跳
00401516   .75 1E         jnz short 算法分析.00401536
00401518   .8078 01 32    cmp byte ptr ds:,0x32         ;cmp32与我输入的第二位2进行比较 不相等则跳
0040151C   .75 18         jnz short 算法分析.00401536
0040151E   .8078 02 38    cmp byte ptr ds:,0x38         ;cmp38与我输入的第三位3进行比较 不相等则跳
00401522   .75 12         jnz short 算法分析.00401536
00401524   .8078 03 37    cmp byte ptr ds:,0x37         ;cmp37与我输入的第四位4进行比较 不相等则跳
00401528   .75 0C         jnz short 算法分析.00401536
0040152A   .8078 04 2D    cmp byte ptr ds:,0x2D         ;cmp2D与我输入的第五位5进行比较 不相等则跳
0040152E   .75 06         jnz short 算法分析.00401536
00401530   .8078 05 41    cmp byte ptr ds:,0x41         ;cmp41与我输入的第六位6进行比较 不相等则跳
00401534   .74 17         je short 算法分析.0040154D
00401536   >6A 00         push 0x0
00401538   .68 64304000   push 算法分析.00403064                     ;ERROR
0040153D   .68 38304000   push 算法分析.00403038                     ;One of the Details you entered was wrong
00401542   .8BCE          mov ecx,esi
00401544   .E8 F5020000   call <jmp.&MFC42.#4224>                  ;提示错误的关键call
00401549   .6A 00         push 0x0
0040154B   .FFD3          call ebx                                 ;user32.PostQuitMessage
0040154D   >8D8E E0000000 lea ecx,dword ptr ds:
00401553   .8D5424 14   lea edx,dword ptr ss:
00401557   .51            push ecx
00401558   .68 2C304000   push 算法分析.0040302C                     ;Well done,
0040155D   .52            push edx
0040155E   .E8 D5020000   call <jmp.&MFC42.#926>
00401563   .68 3C314000   push 算法分析.0040313C
00401568   .50            push eax
00401569   .8D4424 18   lea eax,dword ptr ss:
==============================================================

成功截图:

用户名:xuepojie
我追出的注册码是:6287-A   后面可以随意输入 6287-Axuepojie
简单吧如有失误之处,请各位大佬指出,谢谢
最后祝愿我们吾爱汇编论坛2018红红火火,晚安

alvin2018 发表于 2018-5-17 12:02

看不懂啊 支持一下

1614590507 发表于 2018-5-17 19:15

学习一下~~~

insane 发表于 2018-5-17 20:11

很详细!很好的文章

Pit丶妖 发表于 2018-5-17 20:38

感谢楼主分享

fyh505099 发表于 2018-5-17 20:57

谢谢分享,学习一下

dic945898986 发表于 2018-5-18 16:22

感谢楼主 正需要这方面的文字

atctzyz 发表于 2018-5-23 09:58

好好学习,天天向上

atctzyz 发表于 2018-5-23 09:59

好好学习,天天向上。好好学习,天天向上。

Scorpio 发表于 2018-5-23 11:32

给力,好好学习
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 简单算法分析-追出注册码,献给想学或喜欢算法分析的朋友