好友
阅读权限10
听众
最后登录1970-1-1
|
gezz
发表于 2011-5-10 09:47
本帖最后由 gezz 于 2011-5-10 10:13 编辑
Kidebug写的对第二题的分析详细漂亮,里面利用help.dll里面的指令交换堆栈和缓冲区来实现shellcode,通用性极好。虽然我也参加了,不过我的理解有偏差,下面我给大家提供我写的如何提取算法暴力破解md5加密的验证码:902B0D55FDDEF6F8D651FE1035B7D4BD(Error)的得到,我原来以为这是个考点,以为要写出破解注册机,其实应该去md5的网站上输一下即可,源代码:
先简单分析:
sub_40355A((int)&v16, (int)"PASS:", 5)----->比较前面5个字节是否是"PASS:",是则继续去后面的值比较,不是则认为是不合法的字符攻击,退出
sub_402450((int)&v18, nBufferLength, &ConfigIni_FileName) ------>这里就是要进行md5值比较的大函数,跟进去
sub_402450里面的分析:
通过md5加密算出一个16字节的数,然后拆分成32个Ascii的值,并且对这些值(如果是字母就进行小写转换),最后同config.ini文件字段的Passwd后面所得到的32个ascii值比较,使用 lstrcmpiA(忽略大小写比较)来进行比较,相等则进入下一比较(Clientxx),不等则跳出,因此如何提取MD5的算法,来进行暴力破解,
sub_4011A0(int a1, int a2)--- 这个函数就是你输入的5个字节(为什么是5个,确切的说是<=5个,因为如果输入的>5个字节,第6个字节被0截断,程序只读取<=5个的输入字节的字符。
int __cdecl EncryKey(int a1, int a2) --------------------------------------------------------------------------------------->本人使用IDA5.2从360Server.exe文件提取的sub_4011A0函数,你也可以使用OllyDbg提取汇编代码,会有点长哦。
下面是截取的示意图:
源代码附件:
360Qcheck.rar
(1.39 MB, 下载次数: 29)
,
为了演示,我是从"Errop"来搜索,因此很快就搜索到,但是当时我是通过构造数据字典,"0-9,a-z,A-z",从数字,小写字母、大写字母开始,如果是从1-4来全部搜索,半个小时,但是5个字节来搜要6个小时(谁让我是从数字开始,从大写字母开始估计快很多),还有只开了一个线程(界面线程除外),因此最后写出代码,找到"Error"用了我2天多的时间,后面的构造rop攻击就没做,思路还是对的,问了黑月教主,教主说理解题目很重要,他破解只用20ms,直接去md5网站搜,哎,理解题目很重要,我以为这也是考点,不过对于我来说,学习到就是好的,毕竟比赛总有人垫背,享受过程比结果更重要,这里感谢黑月教主、sudmi、还有平时帮组我的人也一并感谢。
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|