首页
社区
课程
招聘
IDA插件Ponce的使用
2022-2-4 19:44 8838

IDA插件Ponce的使用

2022-2-4 19:44
8838

1. 前言

Ponce是一款使用C/C++开发的IDA Pro插件,它使用户能够以简单直观的方式对二进制文件执行污点分析和符号执行。

 

Ponce的github地址:https://github.com/illera88/Ponce

 

我的环境:

  • IDA Pro 7.5
  • Ponce v0.3.2

2. 安装Ponce

在github仓库的release界面下载文件(windows平台下是ponce.dll和ponce64.dll)并复制到IDA安装目录的plugins文件夹即可使用。

3. Ponce使用

使用模式:

  • 污点引擎:在二进制文件执行的每一步确定内存和寄存器的哪些部分可以由用户输入控制
  • 符号引擎:在二进制文件执行路径的每一步维护寄存器和部分内存的符号状态

示例文件:crackme_xor.exe,源代码在https://github.com/illera88/Ponce/blob/master/examples/crackme_xor.cpp,当命令行参数为正确密钥“elite”时程序会输出Win,否则输出fail

 

将示例文件crackme_xor拖入ida打开

3.1 设置调试器

F9(或Debugger-->Select debugger...)

 

选择Local Windows debugger

 

图片描述

 

Debugger-->Process options,设置启动参数为“aaaaa”

 

图片描述

 

打开关键函数check(char *)的反汇编窗口,找到对应源代码for循环的关键跳转判断语句.text:0000000000401577 jz short loc_401580(确定check函数到底是返回1还是0)

 

F2下断点
图片描述

3.2 使用污点引擎跟踪输入

在Edit-->Ponce-->show config中,没有找到官方教程中的Taint argv选项,因此为了symbolize输入参数以生成解决方案,需要先找到输入参数所在的内存地址,再使用ponce标记它

 

分析check函数对应的反汇编代码可知,参数char *s地址在rcx寄存器,通过mov [rbp+ptr], rcx被复制到栈上参数ptr对应的位置,因此在该命令下断点

 

(此时一共下了两个断点,分别是关键跳转语句和参数地址语句)
图片描述

 

F9(或Debugger-->Start process)开始调试

 

程序运行到第一个断点,此时rcx寄存器内的值是0x0000000000BA1570,跳转到该地址查看数据,发现确实是输入的参数字符串“aaaaa”
图片描述

 

ctrl+shift+m,symbolize数据

3.3 生成解决方案

F9(或Debugger-->continue process)运行到下一个断点

 

此时不断闪烁的边是程序即将跳转的分支。由于输入参数的第一个字符是'a'而非正确的密钥字符'e',因此接下来将执行return 1的代码

 

右键断点位置-->SMT Solver--> Negate and Inject
图片描述

 

重复上述过程,SMT求解得到正确密钥elite
图片描述
图片描述


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞3
打赏
分享
最新回复 (5)
雪    币: 15912
活跃值: (1100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killbr 2022-2-5 07:34
2
0
这个不错,我要了,谢谢。
雪    币: 32074
活跃值: (7105)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ninebell 2022-2-5 10:04
3
0

@uever
https://bbs.pediy.com/upload/attach/202202/946004_JGE3APG78MNKY97.png

图中的这个有一个bug,顺序能否调整成正确的? 要是钥匙长度是100位呢? 不得神经?
另外,是否支持 数据 合并成一行的功能? 这样看着不直观啊。

简单修改2处,不就更进一步了? 

最后于 2022-2-5 10:06 被ninebell编辑 ,原因:
雪    币: 842
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
uever 2022-2-5 11:51
4
0
ninebell @ueverhttps://bbs.pediy.com/upload/attach/202202/946004_JGE3APG78MNKY97.png图中的这个有一个bug,顺序能否调整成正确的?&a ...
试了几次顺序都是混乱的,不知道是不是我哪里操作不对
雪    币: 32074
活跃值: (7105)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ninebell 2022-2-6 09:48
5
0
uever 试了几次顺序都是混乱的,不知道是不是我哪里操作不对
https://www.52pojie.cn/thread-1583436-1-1.html
我给找来个明白人,不知有没有帮助? 学习下吧。
雪    币: 842
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
uever 2022-2-6 13:40
6
0
ninebell https://www.52pojie.cn/thread-1583436-1-1.html 我给找来个明白人,不知有没有帮助? 学习下吧。
学习到了,感谢!
游客
登录 | 注册 方可回帖
返回