首页
社区
课程
招聘
[分享]动态规划实现O(n)爆破任意加密
发表于: 2018-1-10 22:46 8103

[分享]动态规划实现O(n)爆破任意加密

2018-1-10 22:46
8103

之前的写了一遍不知道发生了什么突然全没了,都要吐血了。。。这次果断用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上了。。608K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6y4k6h3@1J5x3o6p5&6i4K6u0r3b7Y4u0#2N6r3g2r3L8%4u0U0k6f1y4J5j5h3y4C8c8h3&6U0L8$3c8A6L8X3M7`.

代码基本上是用C with class写的。。没怎么用C++的特性,考虑到是爆破,就没有用C++的那套理论。。。怕慢。。。代码写的渣,大神轻喷。。。


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 2
支持
分享
最新回复 (16)
雪    币: 144
活跃值: (718)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
思路666
2018-1-10 23:29
0
雪    币: 14462
活跃值: (3935)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
3
思路不错
2018-1-10 23:38
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
以前也是这么干的,后来有了unicorn和某peEmu再也没有写过这种东西
2018-1-11 04:39
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
5
cvcvxk 以前也是这么干的,后来有了unicorn和某peEmu再也没有写过这种东西
666,这是啥,搜了下没搜到
2018-1-11 05:01
0
雪    币: 225
活跃值: (498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
爆破是不错,要是逆向写注册机还得老一套
2018-1-11 11:12
0
雪    币: 7149
活跃值: (2051)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
思路太棒了,,膜拜
2018-1-11 11:20
0
雪    币: 3407
活跃值: (2421)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
holing 666,这是啥,搜了下没搜到
018K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6#2L8X3W2U0L8%4u0F1i4K6u0V1k6h3&6Y4K9h3&6W2i4K6u0r3N6h3&6A6j5$3!0J5L8R3`.`.
cd9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6C8k6i4W2K6N6r3!0F1k6g2)9J5k6r3g2F1k6$3W2F1k6g2)9J5c8X3E0W2P5i4y4@1L8$3&6W2

2018-1-11 14:11
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
9
MsScotch 70bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6#2L8X3W2U0L8%4u0F1i4K6u0V1k6h3&6Y4K9h3&6W2i4K6u0r3N6h3&6A6j5$3!0J5L8R3`.`. 5a2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6C8k6i4W2K6N6r3!0F1k6g2)9J5k6r3g2F1k6$3W2F1k6g2)9J5c8X3E0W2P5i4y4@1L8$3&6W2
谢,我看看
2018-1-11 18:02
0
雪    币: 94
活跃值: (3097)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
膜拜
2018-1-22 18:58
0
雪    币: 206
活跃值: (108)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
mark,记录下
2018-1-22 19:08
0
雪    币: 1078
活跃值: (306)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
厉害了
2018-1-22 19:43
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
2018-1-22 23:17
0
雪    币: 4
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
怎么也要编译成exe吧  我只输入加密串  你真能破出来?  骗鬼呢
2018-3-4 13:31
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
15
JSeuC 怎么也要编译成exe吧 我只输入加密串 你真能破出来? 骗鬼呢
请先把语文学好再出来喷人
2018-3-7 06:26
0
雪    币: 4836
活跃值: (61)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
16
请问学长如果 要导入的 dll (exe修改而来) 已经调用了其他的dll 导致 loadlibraryA返回值一直为0该怎么办 ? (还是说返回值一直为0的原因不是这个?)
2018-9-8 17:56
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
17
HeyLXF 请问学长如果 要导入的 dll (exe修改而来) 已经调用了其他的dll 导致 loadlibraryA返回值一直为0该怎么办 ? (还是说返回值一直为0的原因不是这个?)
看last error
2018-9-19 17:41
0
游客
登录 | 注册 方可回帖
返回