申请ID:k0Sh1【申请通过】
1、申请ID:k0Sh12、个人邮箱:k0pwn_0110@sina.cn
3、原创技术文章:
0x01 前言
一直在52pojie看帖子,学到了很多知识,感谢大牛们,我是接触信息安全一年多的菜鸟,现在进行的是二进制漏洞的研究,对汇编,C,Python(漏洞测试过程中的验证脚本),Ruby(由于用到Metasploit),都有一定研究,但是慢慢发现可看的资源太少,所以想申请会员了{:1_908:},看到会员的审核很严格,心里没底,所以我尽量把我的申请帖子写的全面一些,希望版主能够通过!谢谢,这里我将分三部分来介绍,第一部分是个人的一些简介,第二部分是我过去的一些技术文章分享,第三部分是我带来的一个CTF的Crackme的分析。写的不好还望各位大牛见笑!
0x02 个人的一些简介
首先我是360补天漏洞平台的一名白帽子,因为一直做二进制漏洞,同时对Web也有一定的研究
重制的Sebug的白帽子,提交了一个phpcms漏洞后收到的邀请码
乌云白帽子,由于后来转到补天所以大多数漏洞都提交在补天和其他企业SRC中,乌云多数是浏览drops学习大牛们的技术
好吧似乎离我的二进制漏洞有点遥远了,马上回来!{:1_937:}
0x03 过去的一些文章介绍
刚入行的时候在百度贴吧发过五个帖子,其中三个被加为精品,都是比较基础的内容
http://tieba.baidu.com/p/3465287439
这是我在我的蜜罐中拿到的一个黑客的工具的逆向分析,主要用到的工具是OD,PEid,比较基础易懂。
http://tieba.baidu.com/p/3469534568
这个是对PDF的一个漏洞CVE 2013 0640的分析,主要用到的是Windbg,其中借鉴了看雪古河大大的分析,我承认当时除了调试MS08-067和MS11-050后对JS的一些分析还不到位,所以查阅了很多相关漏洞的资料,不过有些概念性的分析还是原创。
http://tieba.baidu.com/p/3503611974
这个是对一个服务器程序的Exploit,其中包含了IDA pro的静态分析,配合C语言构造Exploit,我承认那时候Python还没有入门,所以一直用C语言来写Exploit,当然没有恶意,这个是看雪的一道题目。
下面是我对一道CTF题目的分析,向52pojie各位大牛致敬!
0x04 大牛多多包含!
这是一道IDF实验室CTF训练营的题目,文件叫做Pe_Crackme1.exe,拿到这个exe首先是放到Peid里跑一跑看看是否加壳,如果加壳了还得进行分析找到正确的OEP,当然了作为一个入门级的Crackme这个并没有加上千奇百怪的壳。那么我们直接运行这个程序,并且输入一个错误的key之后,看看运行结果。当输入错误字符串的时候提示“u r wrong”,既然没有壳,那么我们直接放入OD,并且找到u r wrong字符串我们可以看到00E61615的位置将“u r wrong”字符串推入栈中,再调用printf函数打印,在00E615DC位置,我们通过查看00E65764的内容可以看到00E65764位置保存的两个字符串分别是0D 0A,也就是/r/n,是回车符,那么也就是说基本可以判断00E615DC往下是打印结果的部分,那么向上回溯就应该是key与输入字符串比较的部分以及产生key的部分。PS:这里要解释一下,由于用OD搜索字符串时并没有搜索到代表key的字符串,那么可以猜测key动态产生的,如果要是本身写好了,那就更没有难度了通过回溯分析,我们发现了前面汇编代码段的几处关键跳转,回溯时,我们看到了一处循环,一处分步条件判断,然后就进入了我们的打印代码阶段,这三块的划分是根据关键的跳转点来区分的,按照汇编代码顺序可以总结为:图中画黑线的部分就是这几处跳转,在第一块,也就是循环部分中,会将ebp-cch处存放的内容与11h,也就是17作比较,这里作者使用了jge,也就是大于等于则跳转至第二块分步判断,进入第二部分后我们可以看到若不等,则直接跳至00E615C7的位置,而若相等则会继续向下进行,直到跳转至00E615D1,而在最后一块的黑线部分会做一次判断,也就是若ebp-c0h处存放的值与0做比较,若不相等,则会打印错误的字符串。这里我们就发现了一个问题,在00E615C7的位置恰好执行mov dword ptr ,1这条汇编指令,也就是将这个位置中存放的值置1,这就导致会打印错误信息,那么我们可以推断上诉的分步判断块内容可能与key值相关。0x03、key的分析首先我们进入第一块,关于块中汇编代码的解释我已经注释好,其实这个解释是需要通过单步跟踪一遍可以得到的,下面会对这段注释进行一个说明。之所以判断这个循环可能也是一个key的产生和判断的原因之一就是对于eax寄存器的分析,在这个循环中,eax作为一个计数器使用,在每一轮循环进行时都会对eax累加1,当到达17个字符串时就会跳出循环,那么跳转指令下的内容就有可能是计算key和与密码匹配的部分,详细注释已经写好下面会做几点说明,首先我们判断ecx作为我们输入密码字符串的存储器,而edx作为key字符的存储器,之所以这么判断的原因在于对于movsx ecx,byte ptr 这条汇编指令的分析,ebp-20处存放的内容如下:0042fc40就是ebp-20的值,那么此处存放的正好是我们输入的测试密码abc,这里取出1byte字符交给ecx,而movsx edx,byte ptr,我们直接来到00E65768,查看堆中存放的内容:这里存放很多个字符,但并不都是key的内容,正确的key存放的位置是要由这条汇编指令前两条内容获得的,而此时eax中存放的内容也不是计数的值了,而是可以看做正确key的偏移,而00E65768中存放的则是key的“基址”,这也就是为什么回到循环开始时,需要将eax重新赋值的原因。最后我们要对ecx与edx比较,若相等则直接进入下一个字符的判断,如果不相等,则说明密码错误,就会直接将我们之前分析到的ebp-0c0h位置的值置1,输出错误字符串。那么到此为止我们只需要观察edx的值就可以进行第一部分内容的解密了。我们直接在循环入口处下断点,F9分析,按照我们之前分析的结果,对17个字符串进行记录。这里我们省略了后面的循环,前两次循环中,edx第一个值为77h,也就是119,就是ascii码中的w,第二个为63h,也就是99是c,以此类推,得到前半部分内容wctf{Pe_cRackme1_。17个字符判断完毕后我们就进入到第二个分步条件判断,通过第一部分的分析我们发现ebp-28h的位置是密码的起始位置,那么这里ebp-17h中间间隔正好是11h也就是17个字符,所以我们判断这个分步条件判断部分就是key的第二部分,这第二部分的判断相对简单,分别对到中存放的值分别取出,与31h,30h,32h,34h,7dh做判断,如果有一处不对,则跳到下面的mov ,1部分,这一部分正好和第一块中我们提到的部分意义相同,对这块解密为1024}。那么一个完整的key就为:wctf{Pe_cRackme1_1024},我们重新运行程序输入这个key值得到正确的结果。至此分析结束!分析不好的地方请各位大牛批评指正,也请各位大牛多多包涵!
ID:k0Sh1
邮箱:k0pwn_0110@sina.cn
申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。 感谢版主大大!来报道了:lol Hmily 发表于 2015-9-7 10:25
ID:k0Sh1
邮箱:
来报道了!感谢版主! 好列害开启膜拜{:301_998:}
页:
[1]