首页
社区
课程
招聘
[原创]ctf中 可执行文件patch技术
发表于: 2017-11-7 22:51 16467

[原创]ctf中 可执行文件patch技术

2017-11-7 22:51
16467

在ctf比赛中, 有时我们需要对可执行文件进行patch, 或者在植入后门时,patch也是常用的手段。不过手工patch比较麻烦,下面介绍几个工具。

博客地址:https://jinyu00.github.io/

地址:
https://github.com/lunixbochs/patchkit.git

1.由于链接器的原因暂时还不能使用 libc 中的函数,所以所有要做的事情都需要我们自己实现。用 c 或者 asm

使用方式:./patch binary_file patch.py

过滤printf中 %n 的脚本。

64位程序,修改 malloc函数的参数为 0x20

32位,由于与栈进行操作,要注意保存还原返回地址

或者

程序地址:https://github.com/lief-project/LIEF

使用这个工具可以很方便的 patch elfpeMachO 文件。本文以elf 为例。

通过交换导入导出符号

首先看第一个测试程序:

我们的目标是让他调用 puts 变成调用 system

方案一

修改 libc 中的相关符号,然后使用 LD_LIBRARY_PATH 加载我们修改后的库。

首先拿到 puts 和 system 符号对象,然后交换他们的名称。

paste image
成功

方案二

直接修改目标文件的导入符号,代码如下

paste image

直接增加代码进行patch

测试程序:

目标是hook exp 函数,直接增加一个 segments , 然后劫持函数指针到这里。首先编译一个 lib 用来提供用于 hook 的代码。

hook.c 的内容:

然后看脚本内容,很清晰。

paste image

测试程序

hook.c 内容,hook memcpy, 打印内容。

hook 脚本

paste image

参考:

https://lief.quarkslab.com/doc/tutorials/

https://github.com/lunixbochs/patchkit


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

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 4230
活跃值: (1435)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2017-11-7 23:54
0
雪    币: 0
活跃值: (1003)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2017-11-8 10:02
0
雪    币: 346
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
谢谢分享!
2017-11-8 10:18
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
thxs  for  share
2017-12-14 11:26
0
雪    币: 261
活跃值: (64)
能力值: ( LV7,RANK:111 )
在线值:
发帖
回帖
粉丝
6
比较简单的缓解fsb,lief改printf的got表到__printf_chk也行。。
2017-12-17 21:25
0
雪    币: 27
活跃值: (622)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
加section搞个wrapper也行  2333
2017-12-22 10:21
0
游客
登录 | 注册 方可回帖
返回
//