首先IDA载入游戏主程序
找到“tTVPXP3ArchiveStream”的虚函数表
第1个就是“tTVPXP3ArchiveStream::Read”

为了固定基址方便调试,先修改一下EXE的FLAG

把这个勾上即可。
用OD或者x32dbg载入主程序。
找到“tTVPXP3ArchiveStream::Read”下断点。
直接F9跑程序。
断下来之后Ctrl+F9、F8跟出这个函数。
从“tTVPXP3ArchiveStream::Read”出来之后就到了这里。

然后继续Ctrl+F9、F8跟出这个函数。
你会发现,EIP都不在EXE的地址空间里了。

此时先不继续跟踪,把这块代码搞出来。

如果用的是x32dbg就可以非常方便地dump这块内存了。
记住基址“0x10000000”
然后直接把文件拖到IDA里,这里需要选“Binary file”。

然后选“Yes”进行32位代码反编译

载入代码之后,先Rebase一下,把基址对齐。

刚才dump出来的时候这块内存的基址是0x10000000,所以这里照填。

点击“OK”即可对齐基址。
找到“tTVPXP3ArchiveStream”的虚函数表
第1个就是“tTVPXP3ArchiveStream::Read”

为了固定基址方便调试,先修改一下EXE的FLAG

把这个勾上即可。
用OD或者x32dbg载入主程序。
找到“tTVPXP3ArchiveStream::Read”下断点。
直接F9跑程序。
断下来之后Ctrl+F9、F8跟出这个函数。
从“tTVPXP3ArchiveStream::Read”出来之后就到了这里。

然后继续Ctrl+F9、F8跟出这个函数。
你会发现,EIP都不在EXE的地址空间里了。

此时先不继续跟踪,把这块代码搞出来。

如果用的是x32dbg就可以非常方便地dump这块内存了。
记住基址“0x10000000”
然后直接把文件拖到IDA里,这里需要选“Binary file”。

然后选“Yes”进行32位代码反编译

载入代码之后,先Rebase一下,把基址对齐。

刚才dump出来的时候这块内存的基址是0x10000000,所以这里照填。

点击“OK”即可对齐基址。