题目:

  1. 编写一个采用MessageBox函数显示本组基本信息的程序Hello.exe
  1. 用IDA Pro分析程序, 从其汇编代码中查看其对数据指针和函数指针的引用方式,以及其IAT的结构及其数据。给出指针引用和IAT的截图。
  2. 用OD动态查看自己编写的Hello.exe,查看其IAT和EAT的关系,即如何把EAT的函数地址与IAT的函数地址关联,给出截图。同时,确定Hello.exe的哪些位置调用IAT中的函数.
  3. 结合peview和Winhex(或 Ultraedit),修改Hello.exe的imagebase,看程序是否可以运行?如果不能,如何通过增加重定位节或者其他方式修正该可执行代码,使得该代码可以继续运行。
1. hello程序
#include<windows.h>
char message[50] = "信安4班,组员";
int main(){
	MessageBox(NULL, TEXT(message), TEXT("hello"), NULL);
	return 0;
}
2. IDA Pro分析程序
  • 找到.text节。用IDA以PE executable方式打开exe文件,在选项栏选择jump->jump to segment,可以看到PE文件的各个节的基本信息。.text节保存的是可执行的机器码;.idata节保存的是程序引用的dll函数表,即IAT表。双击打开.text节。
  • 如何找到main函数入口地址?因为main函数中调用了Messagebox函数,因此在import窗口找到Message box。双击跳转到.idata段。
    段双击CODE XREF后的地址,跳转到main函数处。
  • 查看对数据指针的引用方式。由MessageBox(NULL, TEXT(message), TEXT("hello"), NULL);知:
    • 首先压入hello
      双击,跳转到idata节
      在节中说明是资源文件存放hello的地址为00404000,而中调用地址的二进制内容也是00404000,再一次确认。
    • 再压入全局变量message。双击offset跳转到.data节,说明这是一个初始化的全局变量。确认步骤同上。
  • 查看对函数指针的引用
    双击黄色部分
    Messagebox函数跳转到.idata
    同样是资源文件,存的是函数真正的跳转地址,要到程序运行时才能得出,所以是
3.OD动态查看

ctrl+G,输入要跟进的地址,即是刚才看到在idata中存Messagebox的地址0x4061d8
已经被填上函数真正的地址call messagebox处F2键设置断点,在调试选项中选择跳转到用户代码,然后F7单步步入,可看到程序跳转到
77D507EA处

posted on 2017-04-23 11:23  yingtaomj  阅读(342)  评论(0编辑  收藏  举报