-
-
[分享]动态规划实现O(n)爆破任意加密
-
发表于:
2018-1-10 22:46
8102
-
之前的写了一遍不知道发生了什么突然全没了,都要吐血了。。。这次果断用typora边写边保存。。。建议看雪加入即时存草稿的功能,像知乎那样。。。
这个框架是当你手上有一个加密,但是不知道他的实现的时候(比方说要通过逆向来获得),已知密文,爆破出明文。
其实这个有点标题党,因为并不能爆破任意加密,像AES、DES这样的分块加密就不行。。。而像魔改base64、魔改rc4这种加密就随便爆破了,所以条件是需要有从左到右的对应的关系,顺序不能被打乱。
当然分块加密后续也会支持,这个以后再说吧。。。
接下来我会用一道CTF题目的实例,这是一个魔改base64+魔改rc4的加密的题目,但是不用去逆向他,直接用框架爆破。
这个是我学PE的时候就想到的,应该有其他人早就玩过类似的东西了。但是我在网上找却没找到过类似的思路,这里就写一下吧。。。
首先EXE和DLL都是PE文件格式,所以当我们逆向一个EXE的时候,需要分析他其中一个函数。这个时候可能就会需要call这个函数以便详细分析,但跨进程远程call明显就比较麻烦,所以我就想到反正都是PE文件格式,只要把characteristic那个bit改成1就是DLL了,那我们不就可以LoadLibrary把这个EXE当做一个DLL加载到自己的内存空间中了吗?然后虽然并没有导出表,所以并不能通过GetProcAddress获取到我们要分析的函数的地址,但是LoadLibrary返回的值就是模块的基址,这个时候加上函数的RVA(通过IDA逆向分析获得),就可以直接call它了!
具体操作如图所示:

首先是把入口点改为0,不然LoadLibrary会直接调用他的主函数,这不是我们所期望的。还有就是在特征值(characteristic)里面把DLL勾选了,不然重定位会出问题,我不知道为什么,有大神知道的话可以解答一下。。然后把文件后缀改成dll(这个好像改不改都行),就可以当dll使了。
这个CrackMe是让你输入,然后把加密结果写到文件里,题目要求写入文件的内容为"Itl9qnxD/IJhoarL"。程序main函数如下。
所以就是吃一手hook,我这里基本上用的是IAT hook,有一个e8的call我是直接用的改参数值hook。
IAT hook就是要拿到IAT的RVA,这个简单,IDA双击那个函数,就是IAT地址,去掉400000就是RVA了,如图所示:

现在来看看怎么去用这个框架:
基本秒破,如图:

嗯。。基本上是这样,目前是通过继承和纯虚函数实现的,以后可能会改成模板。。。现在暂不支持分块加密,以后可能会支持,也有可能会支持多线程,这个以后再说吧。。。
源码我放在github上了。。3e1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6y4k6h3@1J5x3o6p5&6i4K6u0r3b7Y4u0#2N6r3g2r3L8%4u0U0k6f1y4J5j5h3y4C8c8h3&6U0L8$3c8A6L8X3M7`.
代码基本上是用C with class写的。。没怎么用C++的特性,考虑到是爆破,就没有用C++的那套理论。。。怕慢。。。代码写的渣,大神轻喷。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课