恶意代码分析实战 第十五章课后实验

问题1:

首先使用ida载入实验文件Lab15-01.exe

在main函数的位置可以看到一个跳转语句,结果为0 就跳转,上面一条语句是eax自身的异或操作,也就是无论eax里的值是什么,结果都是0,所以呢这条跳转指令就一定会执行。也就可以理解为这里采用固定条件的跳转指令来对抗反汇编技术。

问题2:

继续向下看:

可以看到这里的代码是有问题的,ida已经标注了红色。这里可以将光标停留在401010位,按下d键转化为数据:

可以看到已经出现了一些改变,由于jz指令的跳转目标是401011,所以将光标停留在401011位置,按下c键将这段数据转换为代码,发现代码并没有对其,为了使其对齐,遇到所有的db就按下c键,结果如下:

分析到这里可以知道,是因为添加了E8h这个机器码才导致程序出现问题。

问题3:

刚刚修复的是一处,可以继续向下看,继续利用快捷按键d,c来进行修复,可以发现一共有五个。

问题4:

通过分析可以知道在命令行输入pdq可以输出Good Job!

先使用ida分析一波:

看到ida标记了红色,就知道这里有错误,看看代码发现test语句的结果一定是个非零值,那么jnz指令就一定会执行,这就是采用对抗反汇编的技术,让我们来修复它。将光标放到40115E的位置,按下D键,然后在40115F处按下C键。转换后代码如下:

后面还发现了几处使用了对抗反汇编的技术,我们可以将其一一修复。为了后面更好的分析,可以使用idc脚本进行nop填充,代码如下:

#include<idc.idc>

static main()

{

    auto ea = ScreenEA();

    PatchByte(ea,0x90);

}

使用这个脚本将机器码该为90h,选中main函数代码,使用快捷键p,然后空格键就可以转换为图形模式了。

在这里说一下我遇到的问题:使用P键时ida没有反应,结果发现我的ida p快捷键被一个插件占用了,导致这样的结果。Editàfunctionsàcreate function 这个就是快捷键p的所在位置。大家如果遇到了同样的问题可以使用这个解决一下。

问题1:

来到401167的位置:

在这里发现调用了函数sub_401386,进去发现创建了一个字符串:

“http://www.practicalmalwareanalysis.com/bamboo.html”这个就是程序初始化请求的URL。

问题2:

 

发现了函数InternetOpenA的一个参数是lpszAgent,这个参数就是User-Agent。可以看到这里取决于name,

这里调用了函数gethostname,用来获取主机的名称,F5看一下:

 

可以很清楚的看到,将获取到名称进行了一个转换。ZàA  zàz  9à0。若都不是就自增1.

问题3:

这个程序先是调用函数InternetOpenA来进行初始化,然后调用函数InternetOpenUrlA来打开一个网址,接着调用了函数InternetReadFile俩获取网址中的内容,会将获取到的网址保存到buffer中。

然后调用了函数strstr,在buffer字符串中查找Bamboo::,然后返回该字符串首次出现的位置。

问题4:

我们就像向下分析;

先是将上面获取的字符串保存在Str中,然后再一次的调用了函数strstr,用来查找::,

这里将Str加上8,也就是指向了Bamboo::后面的内容,下面调用了函数InternetOpenUrlA才保存刚刚上面获取的amboo::后面的内容。继续向下看:

这里将获取到的网页内容保存到名为Filename的文件中。通过向上查找Filename的位置,发现文件名的名称 “Account Summary.xls.exe”。最后调用函数ShellExecuteA来结束整个程序。

问题1:

先俩观察一下main函数的起始位置:

这里就是将或运算的结果保存到ebp中,使用OD结合看一下:

当程序执行到401016位置的时候,EBP的值为12FF4C,选择堆栈窗口跟随, ebp+4也就是12FF50。可以看到,这个地址是返回地址,这段程序的目的就是要将返回地址覆盖为40148C。这样一来,当main函数执行完后,就会跳转到40148C的位置继续执行。

问题2,3,4:

我们跳转到40148C的位置:

发现了一段对抗反汇编的技术,利用D,C键将其转化。

这里调用了函数printf,用来输出一段字符串,但是仔细分析就可以知道这个输出不会被调用,上面触发了一个除零异常,其地址为4014C0,来到4014C0代码处,ida并没有将其识别出,利用c键将其进行转化,

这段代码的就是从异常处理链中摘除异常处理的例程,并从栈中删除了记录。下面继续进行转化:

这里调用了函数URLDownloadToFileA,这个函数的两个参数分别就是URL和文件名。点击进去发现是经过加密的,通过阅读代码可以发现这两个也都是sub_401534的参数,推测其为解密函数,双击进去发现确实如此:

就是将二进制字符串进行按位取反。

下面进行解密:

将光标移动到403010位置,点击Run即可。解密内容如下:

也就知道了URL就是 “http://www.practicalmalwareanalysis.com/tt.hyml”文件名是spoolsrv.exe。

程序最后调用了函数WinExec来运行spoolsrv.exe,然后调用函数ExitProcess结束。

猜你喜欢

转载自blog.csdn.net/Stronger_99/article/details/89711360