首页
社区
课程
招聘
[原创]Miasm 使用笔记
发表于: 2020-12-3 12:53 5703

[原创]Miasm 使用笔记

2020-12-3 12:53
5703

一.开头

这东西不知道发那,随便找个板块发吧,版主不删了就行

Miasm东西是好东西,就是文档太少了,基本没有,以下编写的纯来自看代码

做个总结,防止过几天又忘了

二.正文

首先进行定义

ExprId("c"+str(i), 8)

定义类似于

z3 中的BitVec("c"+str(i), 8)

dse.update_state

这个东西传进去的是个dict如这种形式 dse.update_state({ExprMem(xxxx): ExpId('c1',8)})

或者这样定义

这样我们就大概知

道update_state就如其名一样,修改符号执行器现在的状态(内存状态或者寄存器的),表达式都是Expr类型的

现在我们要将内存区间 [0xCA138,0xCA138+0x10) 的16字节,符号运行

那怎么运行呢?反复查看例子

大概可以这样写

地址是32位的所以这样写ExprInt(i+0xCA138, 32),需要注意的是运算都需要在Expr中然后在将其转化,因为ExprMem需要读取一个32位的ExprInt型,至于读几位Mem就根据情况了,比如现在定义的char,所以定义成ExprMem(ExprInt(i+0xCA138, 32), 8)

有点类似于汇编中的byte ds:[0xCA138+i]=xxxx,至于为什么不能弄成ExprMem(i+0xCA138, 8),估计开发考虑到不同的架构吧

下面是打印执行后的

结果在内存区间[ebp-0xb4 , ebp-0xb4+0x10) 中

打印方法如下

eval_expr 感觉有点类似 php eval 应该就是将表达式运行起来然后转化吧

然后就是加限制条件进行求解了


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

上传的附件:
收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 5194
活跃值: (9722)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
2
大佬的print用的真骚。
2020-12-3 13:27
1
游客
登录 | 注册 方可回帖
返回
//