简单算法分析-追出注册码,献给想学或喜欢算法分析的朋友
**** 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红红火火,晚安
看不懂啊 支持一下 学习一下~~~ 很详细!很好的文章 感谢楼主分享 谢谢分享,学习一下 感谢楼主 正需要这方面的文字 好好学习,天天向上 好好学习,天天向上。好好学习,天天向上。 给力,好好学习