吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3598|回复: 5
收起左侧

[CrackMe] 【吾爱2013CM大赛解答】-- 2013CM无邪--另类方法过注册

[复制链接]
1354669803 发表于 2013-12-16 15:52
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 1354669803 于 2013-12-16 15:58 编辑

【文章标题】: 【吾爱2013CM大赛解答】-- 2013CM无邪--另类方法过注册
【文章作者】: Kelly
【下载地址】: http://www.52pojie.cn/thread-228707-1-1.html
【加壳方式】: 无
【编写语言】: E语言
【使用工具】: OD
【操作平台】: XP sp3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  今天刚看到这个程序 听说是易语言的 所以就来看看 看到两位大神的方法 一个是利用GetWindowTextA 另外一个是追码

  所以我想到两个方法过注册 一种是超级简单的方法 另外一种是赋值法

  首先我就来说说赋值的方法 这个方法适用于反复比较反复调用同一地址的验证(我也解释不清楚 能理解多少就看大家

  首先我们到达验证段

  004010A1    55              push ebp    ----F2断点

  00401106   /74 09           je X2013CM_?00401111             ----当我们F8走到这 je未跳转
  00401108   |53              push ebx
  00401109   |E8 C0080000     call 2013CM_?004019CE            ----经过了这个call
  0040110E   |83C4 04         add esp,0x4
  00401111   \8B5D FC         mov ebx,dword ptr ss:[ebp-0x4]
  00401114    85DB            test ebx,ebx
  00401116    74 09           je X2013CM_?00401121              ----走到这 je仍然没有跳转
  00401118    53              push ebx
  00401119    E8 B0080000     call 2013CM_?004019CE             -----经过了这个call
  0040111E    83C4 04         add esp,0x4
  00401121    837D F4 00      cmp dword ptr ss:[ebp-0xC],0x0    ----F8走到这里 发现此时ebp-C的值为0
  00401125    0F84 88000000   je 2013CM_?004011B3               ----这里就跳了(我们先把这个je修改为NOP)


  00401187   /74 09           je X2013CM_?00401192              ----F8单步走到这里 je不跳
  00401189   |53              push ebx
  0040118A   |E8 3F080000     call 2013CM_?004019CE             ----经过这个call
  0040118F   |83C4 04         add esp,0x4
  00401192   \8B5D F0         mov ebx,dword ptr ss:[ebp-0x10]
  00401195    85DB            test ebx,ebx
  00401197    74 09           je X2013CM_?004011A2              ----F8单步走到这里 je不跳
  00401199    53              push ebx
  0040119A    E8 2F080000     call 2013CM_?004019CE
  0040119F    83C4 04         add esp,0x4
  004011A2    837D E8 00      cmp dword ptr ss:[ebp-0x18],0x0   ----F8单步走到这里 此时ebp-18的值为0
  004011A6    0F84 07000000   je 2013CM_?004011B3               ----je跳了(如果不跳 则eax=1 004011B7的je不跳)
  004011AC    B8 01000000     mov eax,0x1
  004011B1    EB 02           jmp X2013CM_?004011B5
  004011B3    33C0            xor eax,eax              ----如果00401125的je和004011A6的je跳 则走到这时eax=0 则下面的je就跳
  004011B5    85C0            test eax,eax
  004011B7    0F84 82050000   je 2013CM_?0040173F      ----如果跳 则走向错误


  这只是其中一段代码 我们继续向下面看 会发现有很多类似的判断

  00401217    85DB            test ebx,ebx
  00401219    74 09           je X2013CM_?00401224
  0040121B    53              push ebx
  0040121C    E8 AD070000     call 2013CM_?004019CE
  00401221    83C4 04         add esp,0x4
  00401224    8B5D FC         mov ebx,dword ptr ss:[ebp-0x4]
  00401227    85DB            test ebx,ebx
  00401229    74 09           je X2013CM_?00401234
  0040122B    53              push ebx
  0040122C    E8 9D070000     call 2013CM_?004019CE
  00401231    83C4 04         add esp,0x4
  00401234    837D F4 00      cmp dword ptr ss:[ebp-0xC],0x0
  00401238    0F84 88000000   je 2013CM_?004012C6                    ----这个跳下去就到了004012C6

  00401298    85DB            test ebx,ebx
  0040129A    74 09           je X2013CM_?004012A5
  0040129C    53              push ebx
  0040129D    E8 2C070000     call 2013CM_?004019CE
  004012A2    83C4 04         add esp,0x4
  004012A5    8B5D F0         mov ebx,dword ptr ss:[ebp-0x10]
  004012A8    85DB            test ebx,ebx
  004012AA    74 09           je X2013CM_?004012B5
  004012AC    53              push ebx
  004012AD    E8 1C070000     call 2013CM_?004019CE
  004012B2    83C4 04         add esp,0x4
  004012B5    837D E8 00      cmp dword ptr ss:[ebp-0x18],0x0
  004012B9    0F84 07000000   je 2013CM_?004012C6                 ----这里的判断
  004012BF    B8 01000000     mov eax,0x1
  004012C4    EB 02           jmp X2013CM_?004012C8
  004012C6    33C0            xor eax,eax                         ----到了这里 下面的je就跳了 所以注册错误
  004012C8    85C0            test eax,eax
  004012CA    0F84 6A040000   je 2013CM_?0040173A                  ----这里是我第二段分析的那个

  下面还有很多类似的代码 我这里就不一一分析了

  那我这里就来给大家理顺一下思路

  首先一个cmp X 决定A是不是会跳

  如果A跳 则xor eax,eax 影响B

  如果B跳 则注册错误

  如果A不跳 则另外一个cmp Y Y影响C

  如果C跳 则xor eax,eax 即和A的作用是一样的 都是报错

  如果C不跳 则mov eax,1 B则不跳 继续执行下一段 下一段的代码和本段代码一样的结构

  所以无论A和C跳和不跳 B都是起关键作用 只有B不跳 才是问题的关键

  如此这样循环判断 如果有任何一个环节错误 则注册失败

  假如说这样的判断有1个或者2个 则我们可以修改B 就能成功 如果这样的判断有大量 比如说10个 100个 我们就要考虑是不

  是有必要全部去修改B了 当然 也许可以通过写程序 锁定B的特征码 定位B的地址 用程序进行修改 那么就简单多了

  如果我们不会的写这样的程序的话 那我们就要锁定关键了 就是看影响那两个A和C的cmp

  影响A: cmp dword ptr ss:[ebp-0xC],0x0

  影响C:cmp dword ptr ss:[ebp-0x18],0x0

  大家也可以往下面看 下面的判断 都是围绕着这两句代码进行的

  所以下面的判断结构都是相似的 起决定作用的 就是这两句

  在前面的代码分析中 我已经说过了 这两句代码中的ebp-C和ebp-18的值都是0 所以je才会跳

  如果ebp-C和ebp-18的值不为0 为1或者是为2 则je不跳 也就是说其他的判断都不会跳了

  关键就是修改ebp-C和ebp-18的值 我们往上找 看看这两句代码上面有没有经过相同的地方

  00401217    85DB            test ebx,ebx
  00401219    74 09           je X2013CM_?00401224                   ----不跳
  0040121B    53              push ebx
  0040121C    E8 AD070000     call 2013CM_?004019CE                  ----这里
  00401221    83C4 04         add esp,0x4
  00401224    8B5D FC         mov ebx,dword ptr ss:[ebp-0x4]
  00401227    85DB            test ebx,ebx
  00401229    74 09           je X2013CM_?00401234                   ----不跳
  0040122B    53              push ebx
  0040122C    E8 9D070000     call 2013CM_?004019CE                  ----这里
  00401231    83C4 04         add esp,0x4
  00401234    837D F4 00      cmp dword ptr ss:[ebp-0xC],0x0         第一个ebp-C
  00401238    0F84 88000000   je 2013CM_?004012C6


  00401298    85DB            test ebx,ebx
  0040129A    74 09           je X2013CM_?004012A5                   ----不跳
  0040129C    53              push ebx
  0040129D    E8 2C070000     call 2013CM_?004019CE                  ----这里
  004012A2    83C4 04         add esp,0x4
  004012A5    8B5D F0         mov ebx,dword ptr ss:[ebp-0x10]
  004012A8    85DB            test ebx,ebx
  004012AA    74 09           je X2013CM_?004012B5                   ----不跳
  004012AC    53              push ebx
  004012AD    E8 1C070000     call 2013CM_?004019CE                  ----这里
  004012B2    83C4 04         add esp,0x4
  004012B5    837D E8 00      cmp dword ptr ss:[ebp-0x18],0x0        第一个ebp-18
  004012B9    0F84 07000000   je 2013CM_?004012C6
  004012BF    B8 01000000     mov eax,0x1
  004012C4    EB 02           jmp X2013CM_?004012C8
  004012C6    33C0            xor eax,eax
  004012C8    85C0            test eax,eax
  004012CA    0F84 6A040000   je 2013CM_?0040173A                     ----A和C影响的B

  综上 我们发现了ebp-C和ebp-18 上面都有一个相同的地方 即call 004019CE 这里就是我要修改的地方

  如果我们在这里面 给ebp-C和ebp-18赋值 就能达到修改所有跳的效果

  PS(这里要说明的是 如果其他非判断的地方调用到了这里 可能会出现别的错误 因为这个call里面是E原体 程序的核心)

  假如说这个地方 调用这个call里面 验证其值 决定了是否退出 原本程序调用这里 是可以退出 但是一旦被修改了 得出来

  的确实不退出 那就不好玩了 所以我们一般建议 就是不要去修改E原体 我这里也算冒险一次吧 轻则程序错误 重则程序卡

  死 导致电脑死机的情况也不是不可能 嘿嘿...

  回归正题:直接进去这个call 到达004019CE   /FF25 3CAB4600   jmp dword ptr ds:[0x46AB3C]

  然后再进去 就到了这里

  0041AA90    55              push ebp                             我们直接修改这里吧 把两个值改掉
  0041AA91    8BEC            mov ebp,esp
  0041AA93    837D 08 00      cmp dword ptr ss:[ebp+0x8],0x0
  0041AA97    74 25           je X2013CM_?0041AABE
  0041AA99    8B45 08         mov eax,dword ptr ss:[ebp+0x8]
  0041AA9C    50              push eax
  0041AA9D    B9 80424900     mov ecx,2013CM_?00494280                 ; 晕F
  0041AAA2    E8 19A6FFFF     call 2013CM_?004150C0
  0041AAA7    85C0            test eax,eax
  0041AAA9    75 13           jnz X2013CM_?0041AABE
  0041AAAB    8B4D 08         mov ecx,dword ptr ss:[ebp+0x8]
  0041AAAE    51              push ecx
  0041AAAF    6A 00           push 0x0
  0041AAB1    8B15 98464900   mov edx,dword ptr ds:[0x494698]
  0041AAB7    52              push edx
  0041AAB8    FF15 84924600   call dword ptr ds:[<&KERNEL32.HeapFree>] ; ntdll.RtlFreeHeap
  0041AABE    5D              pop ebp
  0041AABF    C3              retn

  0041AA90    C745 F4 0100000>mov dword ptr ss:[ebp-0xC],0x1              修改为1 或者2 只要不是0
  0041AA97    C745 E8 0100000>mov dword ptr ss:[ebp-0x18],0x1             同样的修改
  0041AA9E    C3              retn                                        修改完了以后记得retn返回
  0041AA9F    90              nop                                         不然下面的代码也会执行 防止错误
  0041AAA0    90              nop
  0041AAA1    90              nop
  0041AAA2    E8 19A6FFFF     call 2013CM_?004150C0
  0041AAA7    85C0            test eax,eax
  0041AAA9    75 13           jnz X2013CM_?0041AABE
  0041AAAB    8B4D 08         mov ecx,dword ptr ss:[ebp+0x8]
  0041AAAE    51              push ecx
  0041AAAF    6A 00           push 0x0
  0041AAB1    8B15 98464900   mov edx,dword ptr ds:[0x494698]
  0041AAB7    52              push edx
  0041AAB8    FF15 84924600   call dword ptr ds:[<&KERNEL32.HeapFree>] ; ntdll.RtlFreeHeap
  0041AABE    5D              pop ebp
  0041AABF    C3              retn

  修改完了以后 不要太激动了 我们还要排除其他错误 因为这样修改 除了会影响我们需要修改的地方 别的地方也可能会

  导致错误 所以我们现在要排除错误

  004016F6   /74 09           je X2013CM_?00401701
  004016F8   |53              push ebx
  004016F9   |E8 D0020000     call 2013CM_?004019CE
  004016FE   |83C4 04         add esp,0x4
  00401701   \837D E8 00      cmp dword ptr ss:[ebp-0x18],0x0
  00401705    0F84 07000000   je 2013CM_?00401712
  0040170B    B8 01000000     mov eax,0x1
  00401710    EB 02           jmp X2013CM_?00401714
  00401712    33C0            xor eax,eax
  00401714    85C0            test eax,eax
  00401716    0F84 0A000000   je 2013CM_?00401726               ----F8一直单步到这里(值我们已经修改完毕了)
  0040171C    E8 27000000     call 2013CM_?00401748             上面的je没有跳 所以到了这里 我们F7跟进
  00401721    E9 05000000     jmp 2013CM_?0040172B               F7跟进以后 把所有call 004019CE 全部用NOP填充
  00401726    E8 2B010000     call 2013CM_?00401856              出来以后就到了这里 这些call都是错误call
  0040172B    E8 26010000     call 2013CM_?00401856              里面也会调用到call 004019CE
  00401730    E8 21010000     call 2013CM_?00401856              这些call基本上没用 全部NOP掉
  00401735    E8 1C010000     call 2013CM_?00401856
  0040173A    E8 17010000     call 2013CM_?00401856
  0040173F    E8 12010000     call 2013CM_?00401856              从00401726到0040173F 这几行全部NOP
  00401744    8BE5            mov esp,ebp
  00401746    5D              pop ebp
  00401747    C3              retn

  至此 保存一份 重新运行 这样就没问题了 嘿嘿 搞定(在此之前 我因为没有NOP掉那些call 程序总是卡死 或者退出)

  方法二:我以前说过一种方法 就是无视验证 直接跳成功 我们已经知道了

  00401716   /0F84 0A000000   je 2013CM_?00401726
  0040171C   |E8 27000000     call 2013CM_?00401748     这个call才是正确的 所以我们直接这样修改
  00401721   |E9 05000000     jmp 2013CM_?0040172B
  00401726   \E8 2B010000     call 2013CM_?00401856
  0040172B    E8 26010000     call 2013CM_?00401856
  00401730    E8 21010000     call 2013CM_?00401856
  00401735    E8 1C010000     call 2013CM_?00401856
  0040173A    E8 17010000     call 2013CM_?00401856
  0040173F    E8 12010000     call 2013CM_?00401856

  004010A1    55              push ebp  这里是验证段的段首 找个地方jmp 0040171C 或者call 0040171C

  我是这样修改的00401119    E8 B0080000     call 2013CM_?004019CE 修改为 00401119    E8 FE050000     call 2013CM_?0040171C

--------------------------------------------------------------------------------
【版权声明】: 本文原创于Kelly, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2013年12月16日 下午 03:49:59

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1热心值 +1 收起 理由
Chief + 1 吾爱破解2013CM大赛,有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

waphkj 发表于 2013-12-16 16:07
表示以目前知识的确看不懂。。。 鼓励自己努力
Syer 发表于 2013-12-16 16:15
omi8888 发表于 2013-12-16 16:23
Lara 发表于 2013-12-16 16:57


对小白来说,

这个东东是用来注册东西的?
头像被屏蔽
anuo0802 发表于 2014-2-13 06:50
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 11:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表