• 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(与之前的结果相符)

  • 相关阅读:
    SPOJ ORDERSET
    BZOJ 1109: [POI2007]堆积木Klo
    BZOJ 1112: [POI2008]砖块Klo
    BZOJ 4144: [AMPPZ2014]Petrol
    BZOJ 4385: [POI2015]Wilcze doły
    BZOJ 1124: [POI2008]枪战Maf
    BZOJ 1123: [POI2008]BLO
    BZOJ 1121: [POI2008]激光发射器SZK
    BZOJ 1131: [POI2008]Sta
    BZOJ 4551: [Tjoi2016&Heoi2016]树
  • 原文地址:https://www.cnblogs.com/20145319zk/p/6923644.html
Copyright © 2020-2023  润新知