【文章标题】: 软柿子呢,都来涅啊!
【文章作者】: llydd
【作者邮箱】: llydd@163.com
【软件名称】: keyme.exe
【下载地址】: http://www.crackmes.de/users/b0ne/keyme1/
【使用工具】: OD
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
今晚郁闷的很,自考计算机系统结构挂了,郁闷,找个软柿子来发泄
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这是个控制台程序,运行后随便输入个数字提示wrong serial
搜索字符串wrong serial
00401603 . 68 29134000 push 00401329 ; |\twrong serial\n
往上翻看到
004015E1 . 68 00134000 push 00401300 ; |well done, your key works. congrats lad\n
004015E6 . 68 50634300 push 00436350 ; |Arg1 = 00436350
004015EB . E8 5C210200 call 0042374C ; \keyme.0042374C
004015F0 . 83C4 10 add esp, 10
004015F3 . C745 E4 01000>mov dword ptr [ebp-1C], 1
004015FA > 837D E4 00 cmp dword ptr [ebp-1C], 0
004015FE . 75 15 jnz short 00401615
只要停在004015E1处便是注册成功
再往上翻
0040137A $ 55 push ebp
在此设置断点,一路F8,最后停下来提示要求输入,那我就输入78787878
00401403 . 83F8 10 cmp eax, 10 ;判断字符串长度是否16位,不是则跳走
00401406 . 0F85 EE010000 jnz 004015FA
那么我重新CTRL+F2,有上次的经验后F2在
004013FB . E8 407B0000 call 00408F40 ; \keyme.00408F40
F9运行
输入16位注册码7878787878787878
后面将是一路的对注册码进行判断的代码
0040140F push 0 ; |Arg2 = 00000000
00401411 lea eax, dword ptr [ebp-18] ; |
00401414 push eax ; |Arg1
00401415 call 004178AC ; \keyme.004178AC
0040141A add esp, 10
0040141D cmp byte ptr [eax], 40 ; 第0个字符为大写字母
00401420 jle 004015FA
00401426 sub esp, 8
00401429 push 0 ; |Arg2 = 00000000
0040142B lea eax, dword ptr [ebp-18] ; |
0040142E push eax ; |Arg1
0040142F call 004178AC ; \keyme.004178AC
00401434 add esp, 10
00401437 cmp byte ptr [eax], 5A ; 不超过'Z'
0040143A jg 004015FA
00401440 sub esp, 8
00401443 push 0B ; |Arg2 = 0000000B
00401445 lea eax, dword ptr [ebp-18] ; |
00401448 push eax ; |Arg1
00401449 call 004178AC ; \keyme.004178AC
0040144E add esp, 10
00401451 cmp byte ptr [eax], 20 ; 第11个字母为空格
00401454 jnz 004015FA
0040145A sub esp, 8
0040145D push 8 ; |Arg2 = 00000008
0040145F lea eax, dword ptr [ebp-18] ; |
00401462 push eax ; |Arg1
00401463 call 004178AC ; \keyme.004178AC
00401468 add esp, 10
0040146B cmp byte ptr [eax], 2E ; 第8个字母为'.'
0040146E jnz 004015FA
00401474 mov dword ptr [ebp-24], 0
0040147B mov dword ptr [ebp-30], 0
00401482 cmp dword ptr [ebp-30], 0A ; 计数器10
00401486 jle short 0040148A
00401488 jmp short 004014AB
0040148A sub esp, 8
0040148D push dword ptr [ebp-30] ; |Arg2
00401490 lea eax, dword ptr [ebp-18] ; |
00401493 push eax ; |Arg1
00401494 call 004178AC ; \keyme.004178AC
00401499 add esp, 10
0040149C movsx edx, byte ptr [eax]
0040149F lea eax, dword ptr [ebp-24]
004014A2 add dword ptr [eax], edx ; 从0-A开始,各位ASSCII码累加,结果存于EBP-24处
004014A4 lea eax, dword ptr [ebp-30]
004014A7 inc dword ptr [eax]
004014A9 jmp short 00401482
004014AB mov dword ptr [ebp-28], 0
004014B2 mov dword ptr [ebp-30], 0C
004014B9 cmp dword ptr [ebp-30], 0F
004014BD jle short 004014C1
004014BF jmp short 004014E2
004014C1 sub esp, 8
004014C4 push dword ptr [ebp-30] ; |Arg2
004014C7 lea eax, dword ptr [ebp-18] ; |
004014CA push eax ; |Arg1
004014CB call 004178AC ; \keyme.004178AC
004014D0 add esp, 10
004014D3 movsx edx, byte ptr [eax] ; 然后从第C个字母处开始累加到第F个字母存于EBP-28
004014D6 lea eax, dword ptr [ebp-28]
004014D9 add dword ptr [eax], edx
004014DB lea eax, dword ptr [ebp-30]
004014DE inc dword ptr [eax]
004014E0 jmp short 004014B9
004014E2 cmp dword ptr [ebp-28], 1D1 ; 判断第二次累加是否为1D1
004014E9 jnz 004015FA
004014EF cmp dword ptr [ebp-24], 3F3 ; 判断第一次累加是否为3F3
004014F6 jnz 004015FA
004014FC mov edx, dword ptr [ebp-28]
004014FF mov eax, dword ptr [ebp-24]
00401502 sub eax, edx ; 第一次累加减第二次累加也就是3F3-1D1
00401504 mov dword ptr [ebp-2C], eax ; 结果存于EBP-2C
00401507 mov dword ptr [ebp-24], 72 ; EBP-24置72
0040150E sub esp, 8
00401511 push 0F ; |Arg2 = 0000000F
00401513 lea eax, dword ptr [ebp-18] ; |
00401516 push eax ; |Arg1
00401517 call 004178AC ; \keyme.004178AC
0040151C add esp, 10
0040151F mov dword ptr [ebp-38], eax ; 取最后一位的地址
00401522 sub esp, 8
00401525 push 0E ; |Arg2 = 0000000E
00401527 lea eax, dword ptr [ebp-18] ; |
0040152A push eax ; |Arg1
0040152B call 004178AC ; \keyme.004178AC
00401530 add esp, 10
00401533 mov edx, eax ; 倒数第二位地址
00401535 mov ecx, dword ptr [ebp-38]
00401538 mov al, byte ptr [ecx]
0040153A cmp al, byte ptr [edx] ; 判断最后一位与倒数第二位是否相等
0040153C jnz 004015FA
00401542 sub esp, 8
00401545 push 0D ; |Arg2 = 0000000D
00401547 lea eax, dword ptr [ebp-18] ; |
0040154A push eax ; |Arg1
0040154B call 004178AC ; \keyme.004178AC
00401550 add esp, 10
00401553 cmp byte ptr [eax], 6F ; 判断倒数每三位是否为6F也就是'o'
00401556 jnz 004015FA
0040155C sub esp, 8
0040155F push 0C ; |Arg2 = 0000000C
00401561 lea eax, dword ptr [ebp-18] ; |
00401564 push eax ; |Arg1
00401565 call 004178AC ; \keyme.004178AC
0040156A add esp, 10
0040156D movsx eax, byte ptr [eax]
00401570 cmp eax, dword ptr [ebp-24] ; 判断倒数第四位是否为r
00401573 jnz 004015FA
00401579 cmp dword ptr [ebp-2C], 222 ; 判断第一次与第二次累加结果是否为222
00401580 jnz short 004015FA
00401582 sub esp, 8
00401585 push 2 ; |Arg2 = 00000002
00401587 lea eax, dword ptr [ebp-18] ; |
0040158A push eax ; |Arg1
0040158B call 004178AC ; \keyme.004178AC
00401590 add esp, 10
00401593 cmp byte ptr [eax], 39 ; 判断第三位是否为数字
00401596 jg short 004015FA
00401598 sub esp, 8
0040159B push 2 ; |Arg2 = 00000002
0040159D lea eax, dword ptr [ebp-18] ; |
004015A0 push eax ; |Arg1
004015A1 call 004178AC ; \keyme.004178AC
004015A6 add esp, 10
004015A9 cmp byte ptr [eax], 2F ;
004015AC jle short 004015FA
004015AE sub esp, 8
004015B1 push 1 ; |Arg2 = 00000001
004015B3 lea eax, dword ptr [ebp-18] ; |
004015B6 push eax ; |Arg1
004015B7 call 004178AC ; \keyme.004178AC
004015BC add esp, 10
004015BF mov dword ptr [ebp-3C], eax ; 第二位数地址送EBP-3C
004015C2 sub esp, 8
004015C5 push 0C ; |Arg2 = 0000000C
004015C7 lea eax, dword ptr [ebp-18] ; |
004015CA push eax ; |Arg1
004015CB call 004178AC ; \keyme.004178AC
004015D0 add esp, 10
004015D3 mov edx, eax
004015D5 mov ecx, dword ptr [ebp-3C]
004015D8 mov al, byte ptr [ecx]
004015DA cmp al, byte ptr [edx] ; 判断倒数第四位是否等于等于第二位
004015DC jnz short 004015FA
004015DE sub esp, 8
004015E1 push 00401300 ; |well done, your key works. congrats lad\n
004015E6 push 00436350 ; |Arg1 = 00436350
004015EB call 0042374C ; \keyme.0042374C
如判断到了004015DC那么便注册成功
总结一下
r . r o x x
0 1 2 3 4 5 6 7 8 9 A B C D E F
0+......+A=3F3H
C+....+F=1D1H
8='.'
1=大写字母
B=' '
1=C='r'
D='o'
E=F='x'
'0'<=2<='9'
也就是第2,3,4,5,6,7,9,A为变数,满足0+......+A=3F3H便可
“Ar9zaaaa.az roxx”便是一组注册码
注册机就不想搞了,哪位兄弟有时间就可以帮忙写一下^_^
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年05月23日 下午 11:32:20
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)