-
-
[原创] 菜鸟学CrackMe(三)
-
发表于:
2010-4-2 13:12
5678
-
【文章标题】: 菜鸟学CrackMe(三)
【文章作者】: shaochem
【作者邮箱】: xiaoqing325@gmail.com
【软件名称】: Pulsar Crackme
【软件大小】: 3k
【下载地址】: 自己搜索下载
【加壳方式】: 无
【编写语言】: c++
【使用工具】: OD
【操作平台】: Windows Server 2003
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
大家好,今天我们来继续菜鸟学CrackMe(三),今天这个CrackMe也是很简单的,很适合菜鸟朋友学习。
基本上我下的这简单的CrackMe都是没有壳的,先打开运行下,输入注册码,点“Check”,没有反映。
我们直接OD载入,先来看看代码:
00401285 |. 68 46204000 push 00402046 ; /Text = "UnRegistired Version"
0040128A |. FF35 4C254000 push dword ptr [40254C] ; |hWnd = 000908A0 ('UnRegistired Version',class='Static',parent=000D0926)
00401290 |. E8 13010000 call <jmp.&user32.SetWindowTextA> ; \SetWindowTextA
00401295 |. FF35 48254000 push dword ptr [402548] ; /hWnd = 000A0922 (class='Edit',parent=000D0926)
0040129B |. E8 0E010000 call <jmp.&user32.GetWindowTextLength>; \得到你输入的注册码的长度
004012A0 |. 83F8 0B cmp eax, 0B ; 和11比较,如果不是11位就完蛋
004012A3 |. 0F85 93000000 jnz 0040133C ; 不等就跳了,跳走就挂
004012A9 |. 68 00020000 push 200 ; /Count = 200 (512.)
004012AE |. 68 48234000 push 00402348 ; |Buffer = crackme.00402348
004012B3 |. FF35 48254000 push dword ptr [402548] ; |hWnd = 000A0922 (class='Edit',parent=000D0926)
004012B9 |. E8 F6000000 call <jmp.&user32.GetWindowTextA> ; \GetWindowTextA
004012BE |. 803D 4B234000>cmp byte ptr [40234B], 2D ; 这里取第四位和“-”号比较
004012C5 |. 75 75 jnz short 0040133C ; 不等就跳,跳走就完蛋
004012C7 |. C605 4B234000>mov byte ptr [40234B], 41 ; 这里用A把“-”号替换掉
004012CE |. 803D 4F234000>cmp byte ptr [40234F], 2D ; 再取第八位和“-”号比较
004012D5 |. 75 65 jnz short 0040133C ; 这里不等就跳走了,跳走就挂了
004012D7 |. C605 4F234000>mov byte ptr [40234F], 42 ; 这里用B把第二位“-”号替换掉
004012DE |. B9 0A000000 mov ecx, 0A ; 这个应该是控制循环的变量和长度
004012E3 |> FE81 48234000 /inc byte ptr [ecx+402348] ; 让他指向的那位+1
004012E9 |.^ E2 F8 \loopd short 004012E3 ; 这里是循环
004012EB |. BE 48234000 mov esi, 00402348
004012F0 |. BF F3204000 mov edi, 004020F3 ; ASCII "PvMBtBsC112"
004012F5 |. B9 0B000000 mov ecx, 0B ; 这里应该是后面循环比较的控制循环用的
004012FA |. FC cld
004012FB |. F3:A6 repe cmps byte ptr es:[edi], byte ptr>; 把你输入的注册码变形后与edi里面的循环比较
004012FD |. 75 3D jnz short 0040133C ; 不等就跳,跳走就完蛋
004012FF |. 68 5B204000 push 0040205B ; /Text = "Cracking Success!!!"
00401304 |. FF35 4C254000 push dword ptr [40254C] ; |hWnd = 000908A0 ('UnRegistired Version',class='Static',parent=000D0926)
0040130A |. E8 99000000 call <jmp.&user32.SetWindowTextA> ; \SetWindowTextA
主要代码就这么点,我们首先来分析下,它的主要算法就是:
首先判断你输入的注册码是否是11位,不是就跳走了,是的话在检查你输入的第四位和第八位是否是“-”号,不是又完蛋。
如果是的话,分别以A和B替换第四位和第八位,然后指向变换后的注册码的最后一位,依次递减循环,循环10个长度,每个字符+1.
也就是变形后的注册码第一位不变,其他各位依次+1。,最后把变形后的注册码和字符串“PvMBtBsC112”来做比较,不等就完蛋。
那我们明白了算法后,就可以直接逆出注册码了:PuL-sAr-001。
怎么样,很简单吧。
算法很简单,又是明码比较,很适合菜鸟成长哦,希望对各位菜鸟朋友有所帮助!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2010年04月02日 下午 01:00:08
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课