20145319 《计算机病毒》动静态分析(实践十)

20145319 《计算机病毒》动静态分析(实践十)

实验内容

该程序导入了哪些dll文件

  • 使用PE exploer打开该文件,查看其导入表,可以看到,这个文件导入了Kernel32.dllnetapi32.dlldll1.dll以及dll2.dll

相应三个dll要求的基地址是多少?实际分配的基地址是多少?

  • 仍旧使用PE exploer,打开相应dll文件,查看映像基地址(以下以dll1.dll为例),结果dll1.dll,dll2.dll,dll3.dll映像基地址都为10000000h

  • 实际分配的基地址和理论上有所不同,使用ollydbg加载恶意程序,打开memory map查看细节信息,可见dll文件所对应的基地址,dll1--10000000,dll2--003c0000,dll3--00430000

当该程序调用dll1.dll中的一个导出函数,这个导出函数做了什么

  • 使用pe explore打开dll1.dll的导出表,可见其中只有一个函数dll1print

  • 使用ida打开恶意程序,细致分析此函数

  • 首先我们看到上述函数中使用到了一个字符串,以及一个函数sub_10001038,我们逐一分析,字符串入栈,应该就是作为函数sub_10001038的参数,所以我们先分析该函数,该函数中又调用了函数stbuf函数ftbuf有兴趣的同学可以查询一下printf函数的实现,这里这个函数sub_10001038所实现的就是printf函数的功能

  • 下一步我们就需要弄清楚这个字符串到底代表了什么含义,查看该字符串的交叉引用,发现这个字符串共两处被使用,其中一个为写另外一个为读,我们着重观察写的部分,可以清楚的判断出,这个字符串其实就是当前进程的进程id

  • 那么函数dll1printf的功能就是获取当前进程的进程id并将其输出

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

  • 首先在函数列表中找到函数writefile的位置,在improts列表中,找到函数,点击并使用交叉引用,找到函数的具体位置

  • 从之前入栈的参数来看,这个要写入的内容应该就是上方那一串网址,但是写入的目标则与ecx中的hfile值有关,再往上翻,就会发现该寄存器中存储的是dll2returnJ函数或者是dll2print函数的返回值

  • 使用ida打开dll2.dll,查看相应函数,使用与之前相同的方法,找到字符串是在何处被写入的,这里可以清楚的看到,这个字符串代表了就是一个文件名temp.txt

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

  • 首先我们找到这个函数在程序中的位置,其参数需要从函数dll3getStructure当中获得,我们打开文件dll3.dll,查看其中细节

  • 查看其中的字符串,通过交叉引用找到其在何处被写入

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

  • dll1:当前进程的PID
  • dll2:temp.txt文件的句柄
  • dll3:ping www.malwareanalysisbook.com在内存中的地址

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

  • 使用ida打开dll2.dll,其中在加载界面时勾选manual load,输入地址003c0000(与之前的结果相符)

posted on 2017-05-31 13:13  20145319钟轲  阅读(364)  评论(2编辑  收藏  举报