恶意代码分析lab-3,lab-5
lab3-1
peid打开,发现程序是加壳的,其实好像前面的章节不要求脱壳,而且这是动态分析章,所以就先不脱了
ida分析,可疑的字符串如下
使用processmonitor,添加过滤器,把字符串中的vmx32to64.exe这个名称和lab03-01.exe添加进去
使用ApateDns检测dns行为
用regshot拍摄注册表快照
不过我这里程序没有启动成功。。。。
但是能看到一些操作,因为没运行成功也没看到最后有没有那个exe。。。
lab3-2 dll
题目中要求让其自行安装,观察其导出表有类似名字为install的函数,据说是需要使用rundll32 ,加载
lab 5 -1
1.ida打开处即是dllmain
2.使用Imports窗口并浏览到gethostbyname, 导入函数定位到什么地址?
在import窗口可以进行CTRL+F搜索
3.有多少函数调用了gethostbyname?
对这个函数右键,选择Jump to xref operand,可以看到这个表,r代表读取函数,p代表引用
4.将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出那个DNS请求将被触发吗?
用G键,可以直接跳转到对应地址
这里先push了eax,然后调用函数,这里的off_10019040是字符串指针(指向这个字符串起始地址),然后加上13(dh),就刚好到p的位置
5.IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?
G键跳转此地址,可以看到有差不多23个局部变量
6.IDA Pro识别了在0x10001656处的子过程中的多少个参数?
同上,可以看到有一个lpThreadParameter参数
7.使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c。 它位于哪?
shift+f12 用字符串窗口 CTRL+ F查看
8.在引用\cmd.exe /c的代码所在的区域发生了什么?
转到调用\cmd.exe /的函数,上面会打印这段话,猜测可能是远程执行shell的函数
9.在同样的区域,在0x100101C8处,看起来好像dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
w表示写入,点进去第一处看到,eax的值写入到了这个位置,在这之前调用了sub_10003695函数
跟进去函数可以看到,返回之前有
cmp [ebp+VersionInformation.dwPlatformId], 2
setz al
这两个操作
根据https://blog.csdn.net/m0_37442062/article/details/116423682的解释
dwPlatformId与2进行比较确定设置AL寄存器。2代表VER_PLATFORM_WIN32_NT,如果这里相等,则AL寄存器将被置位。
setz:当ZF标志被设定时,AL寄存器设1
所以sub_10003694的返回值是1,最后的dword_1008E5C4的值就被赋成了1,所以这个全局变量在程序运行的时候一直保持的是1
10.在位于0x1000FF58处的子过程中的几百行指令中,一系列使用memecmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?
比较成功后会调用sub_100052A2函数
按汇编来说就是把调用memcmp,之后add esp 0ch,栈顶+12,等于释放12个字节的空间,然后test eax eax,如果返回为0,则不跳转jnz的地址
11.PSLIST导出函数做了什么?
在导出函数窗口里找到该函数
首先调用了sub_100036c3函数
获取了系统版本,如果VersionInformation.dwPlatformId == 2 && VersionInformation.dwMajorVersion >= 5则返回ture
12.使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,那个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?
在view-a里g跳转到这个函数,然后右键xref graph from
然后就可以看到这个函数的调用图
这里可以看到GetSystemDefaultLangID函数,貌似是获取系统的默认语言,然后还有send,malloc,free,感觉像是发送系统默认语言信息的函数
13.DLLMain直接调用了多少个Windows API? 多少个在深度为2时被调用?
如果没找到视图的选项可以右键工具栏打开
选最右边这个,深度选择1,然后创建
深度2同理,调用的函数太多了我就不放了
14.在0x10001358处,有一个对Sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
g跳转到这个地址,可以看到参数是v16*1000,v16又是v16 = atoi(off_10019020[0] + 13);得来的
进去off_10019020,可以看到这个字符串加13的位置就是30,所以v16就是30,sleep的参数就是30*1000毫秒
15.在0x10001701处是一个对socket的调用。它的3个参数是什么?
g键跳转到这个地址发现这3个参数,据说是符号常量
然后对着这个常量右键-选择使用标准符号常量,可自己更改其显示的符号常量
1 |
|
16.就是上面使用符号常量的过程
17.搜索in指令(opcode 0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?
搜索里选择字节搜索,然后把这个勾上
找到in这个指令
跳转过去就可以看到这个字符串
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!,本博客仅用于交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此站文章的修改和解释权。如欲转载此站文章,需取得作者同意,且必须保证此文章的完整性,包括版权声明等全部内容。未经文章作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。若造成严重后果,本人将依法追究法律责任。 阅读本站文章则默认遵守此规则。