吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2275|回复: 3

[原创图文解密] [KeyGenMe] 新人写的CM 求打脸之算法分析+KEYGEN

[复制链接]
易木马 发表于 2015-8-1 14:09 | 显示全部楼层 |阅读模式

本帖最后由 易木马 于 2015-8-1 14:23 编辑

CM标题:[KeyGenMe]新人写的CM 求打脸
CM地址:https://www.52hb.com/thread-12180-1-1.html
作者:易木马(DevilMayCry)
难度等级:超级简单(但是很烦人)
推荐理由:很有意思,我们会用到SPy++,很有亮点哦!~

内容提纲:  1、找按钮事件
                  2、分析关键位置
                  3、算法分析      
                  4、制作KeyGen            

题外话:这个KeyGenMe算法分析,是源于前几天原作者发了帖子一直没有人解出注册码来,爆破也少,不知道是为什么,我想了想,大概就两种情况:一是大牛不屑一顾,二是小菜分析着也烦,当然这些CrackMe、KeyGenMe也好,本身并没有太大的意义,仅供大家娱乐娱乐,所以上手的人少了。或说熟练一下汇编或说初步熟习一下逆向分析思路。


一、找按钮事件。
        这个方法有很多种,我各人喜欢直接拉到代码启始位置,往下翻,但这里不用直接ASCII查找。
作业一.png
双击到代码处。向上找看是谁跳转过了,“恭喜成功”。

二、找关键位置
0040126C  |. /0F84 3F000000 je cm.004012B1                           ;  认定为关键跳JE,当然爆破可以开始啦,这里我们不讲这个。
3.png

接下来,我们要找是谁让这个跳转实现。找到这里
4.png

  1. <p>0040122E  |.  50            push eax                                 ;  user32.76DB4411
  2. 0040122F  |.  FF75 EC       push [local.5]
  3. 00401232  |.  E8 94FEFFFF   call cm.004010CB                ;在这个CALL里面返回值EAX,这里才起决定性作用, 我们叫它关键CALL(算法CALL)
  4. 00401237  |.  83C4 08       add esp,0x8
  5. 0040123A  |.  83F8 00       cmp eax,0x0                          ;*************
  6. 0040123D  |.  B8 00000000   mov eax,0x0
  7. 00401242  |.  0F94C0        sete al                                   ;*************这里修改了EAX的值,但不起决定性的作用!!!
  8. 00401245  |.  8945 E8       mov [local.6],eax                        ;而变量6的值又来自EAX。
  9. 00401248  |.  8B5D EC       mov ebx,[local.5]
  10. ************************************************</p><p>这期间并没有修改变量6 的值。继续向上分析!</p><p>************************************************
  11. 00401268  |>  837D E8 00    cmp [local.6],0x0                          ;决定跳转的变量6与0之间的关系。
  12. 0040126C  |.  0F84 3F000000 je cm.004012B1                           ;认定为关键跳转,JE</p>
复制代码
按钮事件里面的关键CALL,关键跳转就这样找到了,如果只是简单的爆破,到这里就可以收场了,但是这是一个KEYGENME,我们得看看算法。。。

三、算法分析
   通过第二步我们找到了关键CALL,和关键跳我们来理一下思路。
            1、00040126C的JE不实现跳转,
            2、[local.6]得不为0,[local.6]来自EAX,
            3、eax的值得不为0,因为用了,SETE AL则要求 CMP EAX,0的结果要相等。
            4、eax的返回值必须为0,00401232  |.  E8 94FEFFFF   call cm.004010CB ,说明这里返回为0一切OK,
至此一主事件分析结束,结论:00401232返回为0变OK!!!!

  那么进入CALL 004010CB分析:         
  1. 004010F1  |> \F7C2 03000000 test edx,0x3                             ;  这里开始了
  2. 004010F7  |.  75 37         jnz short cm.00401130
  3. 004010F9  |>  8B02          /mov eax,dword ptr ds:[edx]              ;  取假码
  4. 004010FB  |.  3A01          |cmp al,byte ptr ds:[ecx]                ;  与真码第一位比较
  5. 004010FD  |.  75 2B         |jnz short cm.0040112A                   ;  不相等结束
  6. 004010FF  |.  0AC0          |or al,al
  7. 00401101  |.  74 24         |je short cm.00401127                    ;  是否比较结束了
  8. 00401103  |.  3A61 01       |cmp ah,byte ptr ds:[ecx+0x1]            ;  第二位
  9. 00401106  |.  75 22         |jnz short cm.0040112A
  10. 00401108  |.  0AE4          |or ah,ah
  11. 0040110A  |.  74 1B         |je short cm.00401127                    ;  是否比较结束了
  12. 0040110C  |.  C1E8 10       |shr eax,0x10
  13. 0040110F  |.  3A41 02       |cmp al,byte ptr ds:[ecx+0x2]            ;  第三位
  14. 00401112  |.  75 16         |jnz short cm.0040112A
  15. 00401114  |.  0AC0          |or al,al
  16. 00401116  |.  74 0F         |je short cm.00401127                    ;  是否比较结束了
  17. 00401118  |.  3A61 03       |cmp ah,byte ptr ds:[ecx+0x3]            ;  第四位
  18. 0040111B  |.  75 0D         |jnz short cm.0040112A
  19. 0040111D  |.  83C1 04       |add ecx,0x4                             ;  修改循环变量
  20. 00401120  |.  83C2 04       |add edx,0x4                             ;  每次加4,修改循环变量
  21. 00401123  |.  0AE4          |or ah,ah                                ;  没有为进入下一次循环
  22. 00401125  |.^ 75 D2         \jnz short cm.004010F9
  23. 00401127  |>  33C0          xor eax,eax                              ;  EAX=0返回
  24. 00401129  |.  C3            retn                                     ;  这里是我们想要的
  25. 0040112A  |>  1BC0          sbb eax,eax                              ;  这里不是我们想要的
  26. 0040112C  |.  D1E0          shl eax,1
  27. 0040112E  |.  40            inc eax
  28. 0040112F  |.  C3            retn                                     ;  这里返回-1
复制代码
大概的意思我们是明白了,这个关键的CALL就是进行字符串的比较,返回比较的结果,相等返回为0.
004010CB  /$  8B5424 04     mov edx,dword ptr ss:[esp+0x4]           ;  我们输入的注册码
004010CF  |.  8B4C24 08     mov ecx,dword ptr ss:[esp+0x8]           ;  通过上面计算地注册码

6.png
我们在数据窗口里面查看这个字符串,我们可以得到这样一个公式:机器码+“特殊值”。
这里我们启用SPY++(为什么用我们后面讲)。
7.png
用SPY++查找我们的窗体,我们发现有一个窗口的标题与这个注册码内容相同。
8.png

9.png

10.png
正好,一模一样。与这个按钮事件里面的三次调用

  1. 00401171  |.  6A FF         push -0x1
  2. 00401173  |.  6A 08         push 0x8
  3. 00401175  |.  68 04000116   push 0x16010004
  4. 0040117A  |.  68 01000152   push 0x52010001
  5. 0040117F  |.  E8 0F170000   call cm.00402893                        ;第一次调用,取编辑框1机器码!!

  6. 0040118A  |.  6A FF         push -0x1
  7. 0040118C  |.  6A 08         push 0x8
  8. 0040118E  |.  68 1C000116   push 0x1601001C
  9. 00401193  |.  68 01000152   push 0x52010001
  10. 00401198  |.  E8 F6160000   call cm.00402893                        ;第二次调用,取编辑框2上图控件标题

  11. 00401212  |> \6A FF         push -0x1
  12. 00401214  |.  6A 08         push 0x8
  13. 00401216  |.  68 05000116   push 0x16010005
  14. 0040121B  |.  68 01000152   push 0x52010001
  15. 00401220  |.  E8 6E160000   call cm.00402893                       ;第三次调用,取编辑框 假注册

复制代码
好了,程序的流程我们也知道了,算法处理的方式我们也知道了。接下来我们做注册机
四、KEYGEN编写 (VC)
由于分析出来这个比较简单,我就不多说了。机器码24位+编辑框标题,标题内容比较长,但后面是重复的1428个“6359832”,固定的3.1832。大概如下:
CString szStr;
if(m_OsVersion.GetLength()!=24)
{
  MessageBox("请输入24位机器码!!","提示",MB_OK);
  m_OsVersion="";
  UpdateData(false);
  return;
}
szStr=m_OsVersion+"3.1832";
for(int i=0;i<1428;i++)
{
  szStr+="6359832";
}
m_Key=szStr;
UpdateData(false);

11.png
12.png

测试KeyGenMe_xiaodiaomao: KeyGenMe_xiaodiaomao.zip (4.99 KB, 下载次数: 3)

评分

参与人数 17威望 +1 HB +49 THX +16 收起 理由
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
消逝的过去 + 1
agan8888 + 1
EMT + 1 + 1
king51999 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
playboy + 1
a783516354 + 1 + 1 不错哦
1319080572 + 1 评分=感恩!简单却充满爱!感谢您的作品!
ningzhonghui + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
a132500 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
虚竹 + 10 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Honey丶Crack + 6 + 1 评分=感恩!简单却充满爱!感谢您的作品!
冷瞳 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Shark恒 + 10 + 1 分析的非常细致,我相信又会帮助很多人!
黄景月 + 2 + 1 给你奖励!!!
king + 2 + 1 附件形式上传教程,为后来学习者保证了资源稳定性,额外+10HB,感谢!
Mrsin + 1 + 10 + 1 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
冷瞳 发表于 2015-8-1 14:11 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
小峰 发表于 2015-8-1 15:11 | 显示全部楼层

沙发没了,板凳是我的了。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ningzhonghui 发表于 2015-8-1 22:07 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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