逆向工程实验
1、PE头及导入表应用
1、PE可执行文件分析
1.1开发一个源程序 HelloWorld .asm,显示hello world。
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;数据段
.data
szText db 'HelloWorld',0
;代码段
.code
start:
invoke MessageBox,NULL,offset szText,NULL,MB_OK
invoke ExitProcess,NULL
end start
2、调试软件OllyDBG
问题 2.1、利用OD软件调试PE文件。
从OD反汇编的结果分析,invoke MessageBox,NULL,offset szText,NULL,MB_OK分解成哪几个指令?
答:
PUSH 0
PUSH 0
PUSH OFFSET 00403000
PUSH 0
CALL <JMP.&user32.MessageBoxA>
问题 2.2:怎么理解E8 08000000?
答:E8调试CALL指令,E8后跟着偏移地址,高位先读:0000 0008,CALL指令把它的下一条指令压栈,00401010 + 00000008 = 00401018
问题 2.3:F7单步步入和F8单步步过 有什么不同?
答:单步步入遇到子程序时,会跳转到子程序内部执行;单步步过遇到子程序时,将该调用当成一条指令执行,并不进入子程序内部。
2.2、修改EXE文件字节码
将messagebox的 HelloWorld 修改成 GoodNight,显示结果。
答:
问题 2.4:修改是从文件偏移的什么地方开始的(FOA和VA、RVA分别的多少)?
答:FOA的800偏移
基址:00400000
RVA的3000偏移
VA:00403000
3、调试软件W32DASM
利用W32DASM查看HelloWorld.EXE的输出。
问题3.1:该函数用到哪几个DLL,分别用到哪几个函数?
答:两个DLL:user32.dll、kernel32.dll
两个函数:MessageBoxA、ExitProcess
4、FlexHex 或 Winhex
熟悉十六进制编辑软件的使用。
问题4.1:如何初步判断一个文件是PE文件?
答:用Winhex打开文件,从文件头4D 5A(MZ)开始跳转3C,读取到数据0000 00B0,再次跳转到0000 00B0,若该地址为50 45 即为PE文件
5、利用PEditor查看Hellworld,读出其ImageBase的值,并画出节表(截图)。
问题5.1:画出节表。
答:ImageBase:0x00400000
问题5.2&#x