Lab16使用x64dbg调试带参数程序

Lab16使用x64dbg调试带参数程序

在分析一些样本的时候,无论是.exe / .dll程序,或多或少都需要给程序添加参数。尤其是通过命令行给参数使得程序运行起来的。这篇笔记主要记录的两个调试方式

  • 调试带参数启动的.exe程序
  • 调试带参数启动的'.dll'程序 看下一篇文章

今天分析的程序是来自《恶意代码分析实战》的第十六章实验,第二个程序是一个crackme的程序,本来这个样本的重点是关注反调试部分的知识点,笔者在分析的时候发现这个有一个知识点–如何使用x64dbg调试带参数启动的程序,因此这里就一并记录了。

Lab16-02 分析反调试–TLS回调

首先查看这个PE文件知道这是一个cmdline的程序

在这里插入图片描述
直接运行后提示要求输入四个字符的密码

在这里插入图片描述

同时发现了.tls

在这里插入图片描述
使用ida分析这个程序配合Ctrl+E快捷键打开程序的入口,这个技巧会将程序的入口程序都列出来,如下

在这里插入图片描述

第一个就是TlsCallback_0接着是start,进入第一个函数调用分析知道,这里主要调用FindWindowA函数获取当前最顶部的程序窗口名称,这里主要获取OLLYDBG这个程序,很明显是反调试手段,如果找到就退出,否则就进入主程序调用

在这里插入图片描述

这个bypass也很好办,使用x64dbg即可,也可以在动态调试阶段修改ZF的状态即可。接着来到main程序后分析可知道要求输入一个password才能获得正确提示

在这里插入图片描述

经过逆向分析这个程序知道,程序会调用比较一个字符串内容

在这里插入图片描述
但 这个程序在静态时的数据是加密的,需要在运行时才能获取得到

在这里插入图片描述

这个解密函数就在CreateThread函数的lpStartAddress,进入分析这个函数如下

在这里插入图片描述
这个计算过程比较复杂,一个简单的方式就是运行时获取这个password的内容。因此需要在调试启动的时候赋值参数给程序,下面进入动态调试阶段直接获取password

调试带参数启动的.exe程序

有些样本要求启动时给定参数,例如

test.exe  -l aa -c bb

如果用x64dbg这里的版本是

在这里插入图片描述

我们用x64dbg启动程序的步骤通常是open --> 待调试程序的方式

在这里插入图片描述

选择打开程序后,调试器就会加载Lab16-02.exe这个样本,
在这里插入图片描述

要想调试这个程序还要给参数,在打开程序后给程序添加参数的方式File–>Chang Command line

在这里插入图片描述

在弹出的对话框中输入参数,格式为

"path\to\aaa.exe" "arg1" "arg2" "arg3"

如下是

在这里插入图片描述

接着确定之后会看到调试器提示程序已经修改了程序的启动参数

在这里插入图片描述

这样就设置好了,接着在strncmp函数设置断点并观察参数就能获取到解密的password了。

在这里插入图片描述
到此程序就分析完成了。输入正确的密码后如下

在这里插入图片描述

正确输出

在这里插入图片描述
这个题在cmd下输入的byqrp@ss不能的得到正确结果才选择用调试器查看了。如下是cmd下执行的结果

在这里插入图片描述

总结

  • 查看程序的PE结构观察是否存在.tls段的内容

  • 程序的反调试通过TLS来预先执行,可以通过ida的Ctrl+E的方式来定位tls的回调

  • 可以使用x64dbg调试带参数的程序

    • 先加载程序
    • 通过File->change command line的方式来给程序添加参数。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章