-
-
[原创]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直播授课