首页
社区
课程
招聘
[原创] 菜鸟学CrackMe(三)
发表于: 2010-4-2 13:12 5677

[原创] 菜鸟学CrackMe(三)

2010-4-2 13:12
5677

【文章标题】: 菜鸟学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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 66
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
来学习了
2010-4-7 16:00
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习啦  不错啊 哈哈
2010-4-7 20:26
0
游客
登录 | 注册 方可回帖
返回
//