首页
社区
课程
招聘
[原创]尝试一下CrackMe的编写,请高手指教。
发表于: 2007-7-26 14:33 6768

[原创]尝试一下CrackMe的编写,请高手指教。

2007-7-26 14:33
6768

【文章标题】: 尝试一下CrackMe的编写
【文章作者】: 敏思
【作者邮箱】: 查看本人资料
【软件名称】: CrackMe
【下载地址】: http://disk.thysea.com/?MinSi
【编写语言】: VS2005
【使用工具】: OD
【操作平台】: Windows
【作者声明】: 我只是个刚刚入道的新手,仅懂皮毛、受Backer耐心指导完成了此程序
        此程序无壳,无花指令,无反调试,纯粹锻炼加密解密而制作。
--------------------------------------------------------------------------------
对此程序做了加密手段,效果如下:
1、要求输入用户名与密码进行匹配。
2、一用户名仅对应一个密码(用户名过长除外)。
3、任意用户名都有对应密码。
4、如果验证失败程序直接退出。(详情请见录像)
5、如果验证成功将有新的窗口出现。(详情请见录像)
6、此程序是可以破解的,据对没有戏弄大家的意思,稍后会发破解方法。

对程序破解过程中可能会遇到MD5码事先在代码中的存放。
再此声明,这些MD5码绝对与密码无关,仅为防止程序出错让程序跳转而存在。

本人学习中,接受任何指点。敬请各位批评指正、提意改进之处。

--------------------------------------------------------------------------------

我只是个新人,哪里做的不好请谅解并指出,以后一定改正。

程序以及录像下载地址:
http://disk.thysea.com/?MinSi

******************  在此再次感谢耐心辅导我的Backer老师  ************************


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 334
活跃值: (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你的思路是:
将用户名和密码生成公钥然后和程序的数据运算
再把得出的结果写入程序代码段作为程序的成功界面来运行。如果没有用户名是很难搞定,但是如果没有用户名成功的结果就不是唯一的了
有点单向加密的感觉。有点像WINRAR

我感觉有一个地方可以做手脚,就是在程序运算的时候用了除法,可以联想到“0”。不过向前推,没推出来:(

就这些,^_^
2007-7-27 11:38
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
双向加密 , 有待了解
2007-7-27 16:19
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
need realkey
2007-7-28 17:23
0
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
在此感谢各位高手的关注,对此程序的耐心研究。不多说了,提出本人一点点破解思路。

纯粹个人意见,高手路走通了,希望可以与我继续交流其他方法。

相信各位高手一定在破解过程中得到了以下信息吧:
输入用户名与密码通过一定运算得到密钥。
使用密钥去对密文解密。
而密钥的长度为8个字节。
那可想而知破解这8个字节就是破解程序的关键了。

对于您是否已经发现本程序加密的代码恰好正是一个完整的函数体呢。

既然是函数体,又很完整,那入口和最后的ret是少不了的。
既然这些信息我们都有了,用VC编译一个带有普通入口的函数,将二进制代码拷贝出来。

函数入口形式。
push        ebp                                55
mov        ebp,esp                                8B EC
sub        esp,0xXX                        83 EC XX
mov        eax,dword ptr [0xXXXXXXXX]        A1 XX XX XX XX
xor        eax,ebp                                33 C5
mov        dword ptr [ebp-4],eax                89 45 FC

函数返回形式。
00401302  pop         esi  
00401303  mov         ecx,dword ptr [ebp-4]
00401306  xor         ecx,ebp
00401308  call        __security_check_cookie (408AF4h)
0040130D  mov         esp,ebp
0040130F  pop         ebp  
00401310  ret         10h  

再将程序加密的起始地址找到(这个不难吧,这里就不多说了。)
得到以下字节
0x004011D0        17 BC D4 A7 D8 4D 92 5F 66 75 38 17 F1 A4 76 DF
序    号        1  2  3  4  5  6  7  8  1  2  3  4  5  6  7  8
这些当然就是函数入口被加密过的密文了。

那还有一个信息就是加密方式,都看到 xor 了吧,不多说,全部在 xor 回来。

0xXXXXXXXX        55 8B EC 83 EC XX A1 XX XX XX XX 33 C5 89 45 FC
0x004011D0        17 BC D4 A7 D8 4D 92 5F 66 75 38 17 F1 A4 76 DF
序    号        1  2  3  4  5  6  7  8  1  2  3  4  5  6  7  8
密    钥        42 37 38 24 42 -- 33 -- -- -- -- 24 34 3D 33 23
密钥只有8个字节我们只要得到这些就足够了,以后的全部用这8个字节循环解密,是不是破了呀 ^_^。

这里只是提供一种破解思路,只利用了程序入口,当然程序入口并不一定是这个样子,那还有返回部分呢!

如果加密不是函数入口开始,不是函数返回结束 .....  - -! 我也没太好的方法了~~

还请各位高手多多指点,其他破解方法。本人将感激不尽。
2007-7-29 18:06
0
雪    币: 334
活跃值: (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
嗯,思路很好
2007-7-31 11:29
0
游客
登录 | 注册 方可回帖
返回
//