恶意代码分析实战-实验15
本文最后更新于:2022-01-13 下午
Lab 15-1
分析
使用IDA打开程序,看到当前的代码,有几个红色的地方,此时已经被混淆过,让IDA的识别出现了问题。
按D
将指令转为数据,然后跳过E8
按C
,重新构造代码,即可看到正确的汇编代码。
重新构造了汇编代码之后,分析一下程序的流程,首先是检查是否携带参数,这里注意下,argc
默认是1,携带一个参数就是2,然后这里的ebp+8
是argc
参数稍微说明一下。
首先main
有三个参数,argc
,argv
,envp
,此时形成栈帧,那么当前栈的ebp+4
就是返回地址,再下面就是压入栈的参数了,参数从右向左入栈,那么ebp+8
就是argc
。这里拿OD动调的来看一下,就明白了。
继续分析,如果参数不对的话,就会跳转到0x40105E
处,这里是输出错误的情况
然后是参数的比较,看到这里是ebp+c
,刚才已经分析过了,这就是main
函数的第二个参数argv
,再看它赋值给eax
之后,又是eax+4
,这是argv
是个数组,如果带参数的话,那么argv[1]
才是参数。
看到这三处都是在比较参数的指定位置是否是指定的字符,也就是pdq
,那么想要输出正确的条件,就需要输入参数pdq
。
问题
1. 这个二进制程序中使用了何种对抗反汇编技术?
通过在正确的语句前,加一个机器码0xE8
,这是call
指令的机器码,它会将后面的代码识别称为要call
的地址,依次来欺骗反汇编。
2. 这个二进制程序使用了什么流氓机器码来欺骗反汇编过程?
0xE8
3. 这种对抗反汇编技术被使用了多少次?
一共使用了5次
4. 什么命令行参数会让程序输出“Good Job”?
pdq
Lab 15-2
分析
使用IDA打开程序,看到部分的代码被识别成为了数据,重新识别一下。
发现混淆有E8
、E9
、EB
这三个十六进制值,分别是call
指令和jmp
指令,分别对应的重新识别即可。
还有这个地方,实际上就是书中说的,一个字节用在了两个汇编指令之中。首先正常执行,会执行mov ax, 5EBh
、xor eax, eax
、jz short near ptr loc_4012E6+2
这三个语句此时注意这个跳转指令是跳到loc_4012E6+2
这个地方,这里也就是4012E8
,看IDA中并没有这个地址。
实际上这个地址的开始就是EB
这个字节的开始,然后后面是05
就是一个jmp
指令了,第一次EB
是作为mov ax, 5EBh
,中给ax
赋值的值,第二次是作为跳转指令。
重新构造了指令之后,框选所有的代码,按下P
即可重新创建函数,再按F5
就可以查看伪代码。
看到整体的流程,在初始化网络之后,会获取hostname
然后进行处理,主要是如果是字母Z
会替换成A
,如果是z
会替换成a
,如果是数字9
会替换成0
,其他的则会在原来ascii
码的基础上加一。这个变化后的值会作为USER-AGENT
,打开一个URL
。读取网页内容,再其中搜索Bamboo::
后的内容。
但是从401216
到401300
的代码并没有被翻译成伪代码,不知道为什么。这部分的内容尝试打开一个URL。sub_40130F
是将exe的名字进行复制。
读取内容,然后创建一个叫Account Summary.xls.exe得文件,再将内容写入。
执行这个文件
问题
1. 程序初始化请求的URL是什么?
http://www.practicalmalwareanalysis.com/bamboo.html
2. User-Agent域是如何产生的?
是通过hostname
来通过一些改变来形成的。
3. 初始化请求时,程序在内存页中查找什么?
在查找Bamboo::
4. 程序如何处理它从页中提取的信息?
获取之后会再尝试打开一个URL,然后获取网页的信息写入Account Summary.xls.exe文件之中。
Lab 15-3
分析
使用IDA打开程序进行分析,看到是一个进程遍历的程序,它会遍历所有的进程,同时遍历进程的所有线程和模块。
模块遍历
线程遍历
sub_4013D1
是一个出现错误的时候,提示错误的函数,调用GetLastError
获取错误号,再打印出来。
函数刚开始就会修改返回地址,这里先将0x400000
给eax
,然后or eax ,0x148C
此时eax等于0x40148C
,这就是想要的返回地址,再写入到[ebp+0x4]
这个地址之中,这就是原先返回值得地址。
在IDA中查看一下返回地址的函数,存在混淆。看到红色的地方,是jmp
指令,那么大概又是通过跳转的混淆。
重新构造指令之后,查看,发现这段代码主要目的是构造一个结构化异常处理,看到框中的代码把自己的处理函数加入了SEH
链中。然后通过xor ecx,ecx
、div ecx
这两条指令来触发异常。
继续查看这个函数,看到一些指令都没有被识别。
重新构造指令。首先会调用两次解密函数sub_401534
,解密一些信息。然后下载资源到指定文件。
然后以隐藏方式启动这个文件
加密的信息,前三行是第一个解密函数解密的信息,最后一行是第二个。
解密函数非常简单,就是一个取反的操作。
解密后的URL
但是有一个问题,就是第二部分密文,没办法进行解密,因为解密函数判断要解密的第一个字节是不是0,但是要解密的信息,起始是0x403040
,这里是0,所以导致没办法进行解密。
我们自己解密一下,看到是一个exe名称。
问题
1. 恶意代码怎样被初始化调用?
通过修改主函数的返回地址,在主函数返回的时候,进行调用。
2. 恶意代码都做了什么?
解密一个URL
,在上面下载资源保存为spoolsrv.exe并且执行
3. 恶意代码使用了什么URL?
http://www.practicalmalwareanalysis.com/tt.html
4. 恶意代码使用了什么文件名?
spoolsrv.exe
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!