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
的方式来给程序添加参数。