20145326蔡馨熤《计算机病毒》——代码的动静态分析结合

20145326蔡馨熤《计算机病毒》——代码的动静态分析结合

尝试使用各种动静态工具,对代码9-3.exe进行分析,回答如下问题:

该程序导入了哪些DLL?

  • 先打开PEiD工具查看样例代码。这里发现了4个dll被调用。

  • 另外还有一些dll文件呢,它是在程序运行的时候加载的。我们打开IDA Pro来载入程序进行分析。一般来说,在程序的运行中静态加载的话,会用到LoadLibrary这个函数。我们找找看。

  • 在imports中找到后,双击,然后选中地址交叉引用。type对应的是p的话,说明是函数调用,也正是我们关心的。点击交叉引用中的第一项和第二项,我们可以发现还有两个dll文件被调用。

三个dll要求的基地址分别是多少?当使用OD调试该程序时,实际分配的基地址分别是多少?

  • 三个dll要求的基地址我们可以在PEiD工具中直接查看,发现都是10000000.

  • 当使用OD调试该程序时,实际分配的基地址分别是什么呢?将样例代码导入到OD中后,我们点击一个类似“M”的按钮。然后可以看见dll1和dll2的基地址。这里要注意,操作系统不同,每个人的结果可能是不一样的。

  • dll3这个动态链接库是在程序中动态加载的,利用的是函数LoadLibrary。在OD中找到LoadLibrary这个函数的位置,然后在它下面的一个位置设置断点,并让程序执行到这里。这样的话,dll3才会载入到我们的内存中。

当该程序调用DLL1.dll中的一个导入函数时,这个导入函数做了什么?

  • 回到IDA Pro中,我们往上可以看见一个函数,即Dll1Print。这个函数其实是保存在dll1这个动态链接库文件中的。于是我们再重新打开一个IDA Pro窗口,将dll1这个文件拖进去,看看有什么发现。

  • 找到Dll1Print这个函数的位置,这里有一个函数的调用,即sub_10001038,我们进去看一下,发现它有两个参数。第一个参数就是图中那个字符串,这个字符串中有个“%d”,还有个“\n”,所以我们可以说sub_10001038其实就是个printf的函数。第二个参数保存在了eax中,看上一排,它的内容其实就是dword_10008030的内容。我们双击dword_10008030看看,然后再交叉引用。

  • 一个引用的type为“w”,即写入。另一个引用的type为“r”,即读取。我们先看看第一个结果。可以看见有一个GetCurrentProcessId,于是得知dword_10008030这个变量保存的是我们当前进程的ID值。Dll1Print会把这个ID值打印出来。

当该程序调用writefile函数时,文件名是什么?

  • 先找到Writefile这个函数。

  • 我们发现它想写入的内容其实是一个网址,如图所示。

  • 但我们想知道写入的文件名是什么,所以我们应该着重分析第一个参数。即ecx中的内容,但是ecx是由hObject决定的,hObject又是由dll2ReturnJ的返回值决定的。
  • 将dll2单独载入。
  • dll2.dll中调用了两个函数,即dll2print和dll2ReturnJ。
  • 先看看dll2print。我们发现这里同样有一个类似的字符串。想要打印的内容呢,保存在dword_1000B078这个位置。我们对这个位置交叉引用一下,双击第一个type为“w”的结果。

  • 可以发现一个CreatefileA的函数,当CreatefileA这个函数被调用后,它所打开的文件的句柄就会保存在dword_1000B078这个位置,它所打开的文件就是“temp.txt”。所以说dword_1000B078这个位置保存的就是“temp.txt”的句柄。当该程序调用writefile函数时,文件名是“temp.txt”。

当该程序调用NetScheduleJobADD创建一个job时,从哪里得到第二个参数数值

  • 先找到NetScheduleJobADD的位置。

  • 关于这个函数,我们可以查看MSDN上的相关说明。

  • 它的功能就是在未来的一个指定时间提交一个任务,并且去执行。它的第二个参数是buffer,其实就是一个指针,指向一个AT_INFO的数据结构。
  • 这段程序在Writefile之后,调用了LoadLibrary将dll3加载到我们的内存当中。接着是调用GetProcAddress来获取函数Dll3Print的地址,获取地址后,通过call指令来执行Dll3Print这个函数。之后又调用了一次GetProcAddress函数,用于获取Dll3GetStructure的地址,再执行这个函数。
  • 我们再单独载入dll3。

  • 首先看看Dll3Print这个函数,这里依旧有一个类似的字符串。Dll3Print所打印的神秘数据是WideCharStr里面的内容。
  • 我们双击WideCharStr后再进行交叉引用,可以发现这个变量在dllmain中出现过。dllmain中调用了MultibytetoWideChar这样一个函数。通过MSDN得知它的功能是将多字节的形式转换成宽字符的形式。

  • 有个字符串是“ping www.malwareanalysisbook.com”,将它转换成宽字符的形式,最后将结果保存在WideCharStr中。
  • 我们再来看看函数dll3GetStructure,发现它有一个参数。这个参数就是我们当前程序中一个局部变量的地址。

  • 由图得知,将dword_1000B0A0这个地址赋给了以eax的值为地址的内存空间里面,存入的内容是什么呢?我们双击dword_1000B0A0再进行交叉引用看看,第一个结果就是对它的内容进行改写的位置。双击进去看看。可以看见一个区域中有很多mov操作,作用就是赋值呗。

  • 这个区域的起始地址就会成为NetScheduleJobADD的第二个参数的内容。这个区域就是类似AT_INFO的一个结构体。

  • 为了把这个结构体更好的显现出来,我们进行如下操作。点击Structures窗口,然后按下“insert”键,点击add standard Structure,选中AT_INFO,添加成功。然后再来到数据的位置。选中当前位置,然后点击“edit”“struct var”,再选择“AT_INFO”

  • 最后再回到dllmain的位置,可以发现,对刚刚那个区域进行转换后,更有助于我们的分析。

该程序所打印的三块数据中,三个dll的数据分别是什么?

  • dll1的数据是当前进程的ID值。
  • dll2的数据是temp.txt的句柄。
  • dll3的数据是“ping www.malwareanalysisbook.com”这个字符串在内存中的地址。

如何将dll2.dll加载到IDA中,使其与OD中加载的地址匹配?

  • 将dll2单独导入到IDA Pro中,不过要选择手动加载。
  • 这里要求我们输入dll2的基地址,我们可以在OD中查看到结果。

  • 顺利导入dll2。与OD中加载的地址成功匹配。

时间: 2024-10-17 06:56:15

20145326蔡馨熤《计算机病毒》——代码的动静态分析结合的相关文章

20145326蔡馨熤《计算机病毒》——高级静态分析

20145326蔡馨熤<计算机病毒>--高级静态分析 尝试使用IDA PRO分析文件lab05-01.dll,回答如下问题: 1.PSLIST导出函数做了什么? 首先在view中选择exports窗口,然后找到PSLIST导出函数. 双击PSLIST,然后按空格键,转换为图形模式,这样的话,观察更直观. 双击第一个call语句.看看有什么发现.如图所示. dwplatformid与2进行比较,看现在是不是处于WIN32-NT的这个平台. majorversion与5进行比较, majorver

20145326蔡馨熤《计算机病毒》——静态分析(2)

20145326蔡馨熤<计算机病毒>--静态分析(2) 基于样例代码lab01-02.exe. 相比于VirusTotal,我更喜欢用VirScan,因为前者太慢了.我们可以从报告中获得一些常用的杀毒软件病毒库对于这个文件的比对结果,从而判断是否是病毒文件. lab01-02.exe的扫描报告如下,点击"行为分析"看看. 利用PEiD查壳.结果显示的是"什么都没有",这个时候有两个办法解决.一是选择"深度扫描",二是点击"S

20145326蔡馨熤《计算机病毒》——静态分析(1)

20145326蔡馨熤<计算机病毒>--静态分析(1) 基于样例代码lab01-01.exe和lab01-01.dll. 相比于VirusTotal,我更喜欢用VirScan,因为前者太慢了.我们可以从报告中获得一些常用的杀毒软件病毒库对于这个文件的比对结果,从而判断是否是病毒文件. lab01-01.exe的扫描报告如下,点击"行为分析"看看. lab01-01.dll的扫描报告如下.点击"行为分析"看看. lab01-01.exe和lab01-01.

20145326蔡馨熤《计算机病毒》——动态分析(1)

20145326蔡馨熤<计算机病毒>--动态分析(1) 基于样例代码lab03-01.exe 找出这个恶意代码的导入函数和字符串列表. 说到导入函数,当然先想到静态分析里面的Dependency Walker工具. 不过,把恶意代码导入Dependency Walker工具的时候,感觉应该加了壳.所以用PEiD进行查壳. 再用脱壳工具进行脱壳,发现竟然脱壳失败. 再利用PEview查看,发现最开始都是乱码,看来的确加了壳.不过我们依旧可以看到有一些路径信息.还有一个网址.一个exe程序名(可能

20145326蔡馨熤《计算机病毒》——静态分析(3)

20145326蔡馨熤<计算机病毒>--静态分析(3) 基于样例代码lab01-03.exe与lab01-04.exe 相比于VirusTotal,我更喜欢用VirScan,因为前者太慢了.我们可以从报告中获得一些常用的杀毒软件病毒库对于这个文件的比对结果,从而判断是否是病毒文件. lab01-03.exe的扫描报告如下,点击"行为分析"看看. lab01-04.exe的扫描报告如下,点击"行为分析"看看. 利用PEiD进行查壳. lab01-03.ex

20145326蔡馨熤《网络对抗》——恶意代码伪装技术实践

20145326蔡馨熤<网络对抗>--恶意代码伪装技术实践 一.木马化正常软件 基于之前的后门程序,做一些修改.再将修改后的程序的名字改成一个正常软件的名字,蒙蔽用户的眼睛.哈哈哈,瞬间觉得自己好阴险.因为之前安装过Systracer这个工具,这次就把后门程序的名字改为"Systracer安装程序". 然后双击运行"Systracer安装程序.exe".并且成功回连到Kali. 但是有个不足之处,就是程序运行后,会弹出一个类似命令行的"黑框&q

20145326蔡馨熤《信息安全系统设计基础》第1周学习总结

20145326蔡馨熤<信息安全系统设计基础>第1周学习总结 教材学习内容总结: 一.Linux基础1.环境登录无需密码自动登录,系统用户名shiyanlou2.环境介绍本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器3.环境使用使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTer

20145326蔡馨熤《信息安全系统设计基础》第14周学习总结

20145326蔡馨熤<信息安全系统设计基础>第14周学习总结 教材内容总结(过多内容不赘述) 1.虚拟存储器的三个重要能力: 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效的使用了主存. 它为每个进程提供了一致的地址空间,从而简化了存储器管理. 它保护了每个进程的地址空间不被其他进程破坏. 2.虚拟存储器是对主存的一个抽象. 3.支持虚拟存储器的处理器通过使用一种叫做虚拟寻址的间接形式来引用主存,处理器产

20145326蔡馨熤《网络对抗》—— Web安全基础实践

20145326蔡馨熤<网络对抗>-- Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御. 原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统. 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入.前者由不安全的数据库配置或数据库平台的漏洞所致:后者主要是由于程序员对输入未进行细致地过滤,