前言
在经过一次又一次的失败之后,终于接受了pin不能实现取完整指令,更改,再放回去的实验要求。
在同学的提一下,我开始了对OlleyDBG的摸索。目前的思路就是,用pin得到CFG,也就是每条分支指令的地址及其目的地址的地址,然后使用OD来进行指令的修改。由于OD是动态的,可以一边修改一边运行,还是很符合我们的要求的嘻嘻。
1. 首先是pin
pin在目前的实验思路中的作用是得出控制流图。由于前面已经写好程序了,在这里只需要输入一些指令来进行操作即可。
下面列出使用的两条指令
make obj-ia32/CFG-collect.so TARGET=ia32 //工具代码的编译
./pin -t source/tools/ManualExamples/obj-ia32/CFG-collect.so -- ./test.out //代码的使用
2. 接下来是OD的使用
首先是OD的基本使用
OD的基本使用指令可见https://www.cnblogs.com/yunji5566/p/4249927.html
下面是截取的使用快捷键的表格
一个案例
关于traceme的** https://blog.csdn.net/qq_15458161/article/details/80317794
照着博客的做了,也做成功了,对OD有了一定的了解。
3. 开始搞实验
目标文件
首先是写了一个很简单的C++代码,test.cpp,在windows的环境下使用DEV C++来进行编译。
代码如下
#include<iostream>
using namespace std;
void printit(){
cout<<"0"<<endl;
}
int main(){
printit();
return 0;
}
由于主机是64位win10系统,因此需要对编译器进行设置。将可执行文件设置为32位的。
在window下使用OD进行分析
得到的结果是酱婶儿迪~
注意这里的地址都是00401000开头的
在linux下使用pin进行分析
pin这个磨人的小妖精现在的功能就是找出地址,那么pin找到的地址和OD的地址一样吗?
输出文件:
注意此时已经将地址随机化关闭了,具体步骤为进入root权限,然后更改ALSR设置
sudo -i
echo 0 >/proc/sys/kernel/randomize_va_space
4、思考与思路分析
但是此时的地址仍然不一样。也就是还需要进行一定的转换。
不一样的原因是什么呢?
在这里我进行了一个假设,那就是因为一个在虚拟机里,一个在主机里。
所以接下来的步骤就是尝试在同一个系统中对同一个可执行文件进行分析。
由于OD只能用于windows系统,因此,接下来的尝试,将集中于如何在windows系统中使用pin实现控制流图的生成。