快捷搜索:  网络  渗透  后门  CVE  扫描  木马  黑客  as

ESP技巧:教你怎么样解包可执行文件

ESP技巧:教你怎么样解包可执行文件

恶意软件开发者会使用种种要领绕过反病毒产品,他们可以对字符串进行混淆处理,或者使用其他软件的证书来对恶意软件进行署名。其中最经常使用的一种要领就是行使封装器来对恶意软件进行压缩,并让反病毒软件没法检测到它们,这也就是俗称的“加壳”。因此,作为一名恶意软件阐发人员来说,我们应该了解加壳机制,并清楚怎么样解包可执行文件。

加壳与解包

加壳软件可以帮助你对可执行文件进行压缩,就跟zip文件差不久不多。一般来说,当你在使用zip文件时,需要手动进行解压缩。然则对于加壳来说,它会在可执行文件的代码中添加一部分不会被压缩的“运行时封装器”代码。当你运行这个可执行文件时,这部分未被封装的代码将会对可执行文件中其他已被封装的恶意代码进行解包并运行。

识别加壳

怎么样识别这类加壳的恶意软件呢?其中一种要领就是检查其中的字符串信息,然则加壳后的可执行文件中并没有大批字符串可以查看。你也能够对代码中import的类以及库进行阐发,但加了壳的可执行文件并不会显示这部分内容,如许可以增添逆向阐发的难度。因此,为了对加壳的恶意软件成功进行逆向阐发,我们需要对其始终调试直到发现了未压缩的代码为止,然后对导出的可执行文件代码进行阐发。

这里可以使用“ESP技巧”,也就是ESP寄存器。我们可以行使这类手艺在ESP寄存器中配置硬件断点,当我们转移到改断点时,也就是到达了程序的入口点(OEP)。接下来,我们就可以将剩下的可执行文件导出,并得到解包后的可执行文件代码了。

解包夺旗游戏

我们专程开发了一个小程序来演示怎么样手动解包可执行文件,你可以点击【这里】获取。实在这就是一个夺旗小游戏,当你找到了正确的暗码以后,你需要输入并尝试拿到Flag。你可以在Radare2中通过比对字符串数据来寻觅到暗码,或者你也能够直接使用“strings”命令来搜索,但要是程序加了壳的话,又该怎么办呢?因此,我们这里使用了免费的UPX封装器来对代码进行封装加壳,它的解包过程也比较简单,所以它是一款无比适合学习的工具。祝人人好运!

过程阐发

当我们使用rabin2运行封装的可执行程序并查看import信息时,我们可以看到这里几乎没有什么信息,企业黑客,而且字符串也看不出什么字面意思:

$rabin2 -i UPX_Proj_Packed.exe                                                         [Imports]                                                                                      0010x0040d03c NONE FUNC KERNEL32.DLL_LoadLibraryA                                            002 0x0040d040 NONE FUNC KERNEL32.DLL_ExitProcess                                               003 0x0040d044 NONE FUNCKERNEL32.DLL_GetProcAddress                                           0040x0040d048 NONE FUNC KERNEL32.DLL_VirtualProtect                                           0010x0040d050 NONE FUNC msvcrt.dll__iob                                                        $

很显然,这是一个经过封装的程序。我们可以PEiD工具来查看它所使用的封装器信息:

ESP技巧:教你怎么样解包可执行文件

你可以看到,这里使用的是UPX封装器。当然了,这类封装器拆封起来无比简单,你也能够直接下载UPX拆封程序来进行解包。但我们这里要演示的是怎么样手动完成这个过程,所以接下来我们在x64dbg中启动程序,然后按下F9,直到我们到达应用程序的入口点地位。X64dbg会直接用“EntryPoint”对入口点进行标记,这里我们使用了pushal指令对入口点配置识别符。

ESP技巧:教你怎么样解包可执行文件

下一步,我们需要按下F8或F7键,或者按下“step over”或“step into”按钮。然后需要右键点击右侧的ESP寄存器,并选择“Follow in Dump”。

ESP技巧:教你怎么样解包可执行文件

接下来,我们需要选择x64dbg底部导出数据的前四个字节,然后在DWord中配置一个硬件走访断点。

ESP技巧:教你怎么样解包可执行文件

接下来,我们就可以按下F9键来重新运行应用程序了,当运行到硬件端点地位时,程序将停息运行。我们在断点后配置了一个popal指令,并用它来表示我们仍在正确的执行路径上。我们还可以看到,结尾部分跳转到的0x0040c483就是解包后可执行文件的结尾部分。

ESP技巧:教你怎么样解包可执行文件

跳过jmp指令以后,我们就到达了程序的入口点地位。

ESP技巧:教你怎么样解包可执行文件

下一步就是要对导出的应用程序进行阐发了,按下CTRL+A键并最先阐发汇编代码,如许可以确保四处的汇编代码不会出现错误。现在,我们可以按下CTRL+I键或在插件栏选择Scylla来最先导出程序。

ESP技巧:教你怎么样解包可执行文件

现在,点击“IAT Autosearch”按钮来让程序自动帮我们找出可执行程序的导入地址表(IAT)。点击了“Get Imports”按钮以后,我们将会得到这个可执行文件引用的第三方库。

ESP技巧:教你怎么样解包可执行文件

现在,点击“Dump”按钮并保存导出的可执行程序。然则当我们运行这个可执行文件时,却出现了下图所示的错误:

ESP技巧:教你怎么样解包可执行文件

这是因为解包后的可执行文件中不包含之前可执行文件中的IAT,所以我们还需要对其进行修复。返归Scylla界面,点击“Fix Dump”按钮,选择刚才导出的可执行文件,并点击确定。修复成功后,可执行文件的文件名后面会加上一个“SCY”,现在它就可以正常运行了。

ESP技巧:教你怎么样解包可执行文件

ESP技巧:教你怎么样解包可执行文件

ESP技巧:教你怎么样解包可执行文件

然后重新在Rabin2中关上这个解包后的可执行程序,并尝试导出其中的配置信息。

ESP技巧:教你怎么样解包可执行文件

要是你使用暗码“this_is_password”来运行我们的应用程序,你将会看到以下所示的界面:

ESP技巧:教你怎么样解包可执行文件

祝贺你成功拿到了Flag!

资源获取

UPX_Proj_Packed.exe:【传送门】

* 参考来源:goggleheadedhacker,Alpha_pck编译,

您可能还会对下面的文章感兴趣: