标题尝试用studyPE和x32dbg修改.exe文件01
首先,准备一个exe文件,这里我使用自己用c++编写的exe文件,在程序中调用了LoadLibraryA函数动态加载dll文件,并使用GetProcAddress函数查询dll文件中的函数。采用这样的动态加载是为了简化试验过程,通常情况下,由于程序启动时会有地址重定位,因此,修改非动态加载的地址会比较繁琐。下面是源程序,编译后生成的程序就是我们的试验目标exe程序:
下面,启动x32dbg.exe,并点文件->打开,打开上面生成的exe文件;如图:
然后,点击窗口上的“符号”,并点选程序的主线程:
双击主线程会切换到cpu视图:
注意到上图下面的红色框,$1000是虚拟偏移地址,#400文件内偏移地址,有了这两个地址后就有可能有针对的修改。
再次,注意到上方的函数调用,如图:
第一条call上的一条指令push theconsoletest2.EF210C,这是传入函数参数,类似theconsoletest2.EF210C这样的文件名+点号+地址的是静态的参数,应是预先设定好值的;第二条call上有两条push指令,且其中一条静态的,另一条push eax是动态的,eax应存有上一条函数的返回值,这两条push都是给函数传入参数。
然后查看push指令后的参数,这是一个地址,分析参数的偏移地址:分别为210C和211C,这是虚拟偏移地址。
右键点击push的汇编指令,使用“在内存窗口中转到”,转到210C:
观察内存窗口,可以看到实际的数据:
接下来打开stud_PE,载入exe文件,点击“section”,然后右键点击窗口,用右键命令添加新节,添加好后保存,并记住新节的偏移地址。
再次用x32dbg打开exe文件:
并右键点击cpu的汇编窗口,使用“转到->文件偏移”命令转到新节:
新节用于填充自己的程序:
用右键点击,使用二进制编辑。