gdb打不开exe文件

逆向工程 拆卸
2021-06-25 11:42:44

我正在尝试使用 gdb 打开一个 exe,但尽管它似乎可以运行,但我无法列出或禁用任何内容。该文件已被混淆,我可能会在这里回答我自己的问题,使用 9 条光线 .net 混淆器。

这是否意味着我无法使用调试器,或者我应该能够使用 idapro 或 gdb 等调试器打开但缺少某些东西?

在 gdb 中运行 (gdb)file name.exe 时,我收到消息“从 name.exe 读取符号...(未找到调试符号)...完成”。

linux 文件命令的输出是“PE32 可执行文件(控制台 Intel 80386 Mono/.Net Assembly,用于 MS Windows”)

谢谢

2个回答

如果你只是想对一个简短的片段进行快速而肮脏的原始反汇编,你可以使用 gdb 的restore命令加载 exe 的相关部分首先提取片段更容易,例如:

tail -c +4096 the-program-with-the-snippet.exe | head -c 1024 > snippet

然后,您需要开始调试一个虚拟程序并将其主要功能替换为您要反汇编的代码段。例如::

~/tmp$ gdb -q dummy
Reading symbols from dummy...done.
(gdb) break main
Breakpoint 1 at 0x79f: file dummy.c, line 9.
(gdb) run
Starting program: /home/ale/tmp/dummy 

Breakpoint 1, main (argc=1, argv=0x7fffffffe2b8) at dummy.c:9
9       for (int i = 1; i < argc; ++i)
(gdb) restore snippet binary main
Restoring binary file snippet into memory (0x555555554790 to 0x555555554b90)
(gdb) disass
Dump of assembler code for function main:
   0x0000555555554790 <+0>:     add    %bh,-0x35(%rdi)
   0x0000555555554793 <+3>:     movabs 0xa1cba872a376f272,%eax
   0x000055555555479c <+12>:    jb     0x555555554806 <main+118>
   0x000055555555479e <+14>:    cmp    0x72a270b7(%rdx,%rsi,2),%esp
   0x00005555555547a5 <+21>:    loopne 0x5555555547c2 <main+50>
   0x00005555555547a7 <+23>:    movabs 0xa1cd0572a12b0f72,%eax
   0x00005555555547b0 <+32>:    jb     0x5555555547c2 <main+50>
   0x00005555555547b2 <+34>:    pop    %rsi
   0x00005555555547b3 <+35>:    movabs %eax,0xa1d13272a1cd3a72
   0x00005555555547bc <+44>:    jb     0x5555555547b5 <main+37>
   0x00005555555547be <+46>:    loopne 0x555555554760 <frame_dummy>
   0x00005555555547c0 <+48>:    jb     0x5555555547a6 <main+22>
   0x00005555555547c2 <+50>:    iret   
...
---Type <return> to continue, or q <return> to quit---

当然,任何格式信息(符号等)都会丢失。

如果gdb不安装和配置所需的组件,您将无法在 Linux 机器上调试 Windows 可执行文件@SYS_V 在他的评论中很好地解释了这一点。

如果您想在 Linux 上调试 Windows 可执行文件,您有多种方法可以这样做。我建议您查看一个特定的 - Winedbg


此外,既然您提到要调试.net应用程序,我建议您查看de4dotdnSpy,它们都适用于 Windows 系统。de4dot 可用于对.net混淆的应用程序进行反混淆处理,其中 dnSpy 将允许您反编译和调试.net应用程序。

反汇编.net应用程序不是最佳实践,因为通常您只会看到中间语言 ( CIL/MSIL )。.net反编译器能够向您展示应用程序的原始源代码。

如果你想.net在 Linux上反编译应用程序,你可以尝试使用ILSpyMono decompiler