接下来要看看怎么把Win32 PE文件还原为汇编 - 可打印的版本 +- WeHack BBS (https://bbs.wehack.space) +-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html) +--- 版块: 逆向工程讨论区 (https://bbs.wehack.space/forum-9.html) +--- 主题: 接下来要看看怎么把Win32 PE文件还原为汇编 (/thread-131.html) |
接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 01-29-2020 和裸数据不一样,PE文件是有元数据的,所以想还原出一个完全相同的PE文件是有难度的,只能还原出一个功能相同的文件。 一个难点在于工具链,winegcc只能把C代码变成链接到libwine的so文件,mingw的工具链倒是可以把ELF的目标文件链接成PE,但是Windows API的符号名不知道为什么要改动。 其他的工作和r2dumpbin的做法应该类似,而且PE文件有分段信息,应该更容易区分代码和数据。 RE: 接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 11-04-2020 前几天做 Broadwell 的 refcode.elf 的时候,我给 r2dumpbin 加入了重定位的支持,对于某些类型的文件会有帮助。 RE: 接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 04-07-2021 gcc 会把 ExitProcess 的符号名变成 __imp__ExitProcess@4, 这是因为 ExitProcess(uint32_t) 的函数原型有两个 attribute. __attribute__((dllimport)) 把 func 的符号名变成 __imp__func. __attribute__((__stdcall__)) 把 func(int) 的符号名变成 _func@4. 两者一起使用,即 __attribute__((dllimport)) int __attribute__((__stdcall__)) func(int) 把 func 的符号名变成 __imp__func@4. RE: 接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 04-09-2021 这几天用r2dumpbin反汇编wine的32位notepad.exe,修改输出的汇编可以汇编并链接成功,但是产生的是一个功能残缺的记事本。 RE: 接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 05-03-2021 notepad.exe的dump终于搞定了,现在能生成一个看起来比较正常的记事本。 一个关键点:不要输出.idata节到汇编里面。 RE: 接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 05-05-2021 wine里面有个winedump程序,可以输出PE文件的信息。 RE: 接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 05-08-2021 刚刚r2dumpbin把大富翁4的rich4.exe还原为了汇编。有几个要点: - 它有.reloc节,说明程序可重定位,并且可以通过重定位信息获得所有的指针。 - 有大量的函数需要手动标记,一部分是结构体里的指针常量,一部分是用mov填入内存的回调函数指针,还有的是Windows API用的回调函数。 - radare2/rizin解析PE节有bug,rich4.exe的DGROUP节权限是rw-,但r2却认为没写权限。结果得到的文件运行时出现访存异常,最后把DGROUP改成.data就正常了。后来用winedump确认了DGROUP节是可写的。 刚刚试跑了一下,程序还是有问题的,不知道哪里出错了。 RE: 接下来要看看怎么把Win32 PE文件还原为汇编 - vimacs - 05-09-2021 对比了一下代码,发现是capstone反汇编movs系列指令的问题。 代码: bits 32 |