标题尝试用studyPE和x32dbg修改.exe文件

首先,准备一个exe文件,这里我使用自己用c++编写的exe文件,在程序中调用了LoadLibraryA函数动态加载dll文件,并使用GetProcAddress函数查询dll文件中的函数。采用这样的动态加载是为了简化试验过程,通常情况下,由于程序启动时会有地址重定位,因此,修改非动态加载的地址会比较繁琐。下面是源程序,编译后生成的程序就是我们的试验目标exe程序:

EXESCOPE能修改DLL文件吗 修改exe软件_动态加载


下面,启动x32dbg.exe,并点文件->打开,打开上面生成的exe文件;如图:

EXESCOPE能修改DLL文件吗 修改exe软件_c++_02


然后,点击窗口上的“符号”,并点选程序的主线程:

EXESCOPE能修改DLL文件吗 修改exe软件_c++_03


双击主线程会切换到cpu视图:

EXESCOPE能修改DLL文件吗 修改exe软件_c++_04


注意到上图下面的红色框,$1000是虚拟偏移地址,#400文件偏移地址,有了这两个地址后就有可能有针对的修改。但在x32dbg中难于修改,因为程序在壳中运行,地址都经过了重定位。我们需要另外的软件studyPE来进行静态修改。

再次,注意到上方的函数调用,如图:

EXESCOPE能修改DLL文件吗 修改exe软件_visualstudio_05


第一条call上的一条指令push theconsoletest2.EF210C,这是传入函数参数,类似theconsoletest2.EF210C这样的文件名+点号+地址的是静态的参数,应是预先设定好值的;第二条call上有两条push指令,

且其中一条静态的,另一条push eax是动态的,eax应存有上一条函数的返回值,这两条push都是给函数传入参数。

然后查看push指令后的参数,这是一个地址,分析参数的偏移地址:分别为210C和211C,这是虚拟偏移地址。

EXESCOPE能修改DLL文件吗 修改exe软件_EXESCOPE能修改DLL文件吗_06


打开studyPE程序,载入exe文件,如图:

EXESCOPE能修改DLL文件吗 修改exe软件_EXESCOPE能修改DLL文件吗_07


下面,我们用studyPE来进行静态修改:

点击红色框的按钮来查找相应地址处的值:可以替换成其他的,也可以添加另外的。

EXESCOPE能修改DLL文件吗 修改exe软件_EXESCOPE能修改DLL文件吗_08


我只是初初学会,这里只是试验,不是大佬,离高手还有一段距离,谢谢读文。