标签:byte turn ret 进程 res 操作 注意 oca 工具
sub_10001038
,我们进去看一下,发现它有两个参数。第一个参数就是图中那个字符串,这个字符串中有个“%d”
,还有个“\n”
,所以我们可以说sub_10001038
其实就是个printf的函数。第二个参数保存在了eax中,看上一排,它的内容其实就是dword_10008030
的内容。我们双击dword_10008030
看看,然后再交叉引用。但我们想知道写入的文件名是什么,所以我们应该着重分析第一个参数。即ecx中的内容,但是ecx是由hObject决定的,hObject又是由dll2ReturnJ的返回值决定的。
将dll2单独载入。
dll2.dll中调用了两个函数,即dll2print和dll2ReturnJ。
先看看dll2print。我们发现这里同样有一个类似的字符串。想要打印的内容呢,保存在dword_1000B078这个位置。我们对这个位置交叉引用一下,双击第一个type为“w”的结果。
dword_1000B078
这个位置,它所打开的文件就是“temp.txt”。所以说dword_1000B078
这个位置保存的就是“temp.txt”的句柄。当该程序调用writefile函数时,文件名是“temp.txt”。它的功能就是在未来的一个指定时间提交一个任务,并且去执行。它的第二个参数是buffer,其实就是一个指针,指向一个AT_INFO的数据结构。
这段程序在Writefile之后,调用了LoadLibrary将dll3加载到我们的内存当中。接着是调用GetProcAddress来获取函数Dll3Print的地址,获取地址后,通过call指令来执行Dll3Print这个函数。之后又调用了一次GetProcAddress函数,用于获取Dll3GetStructure的地址,再执行这个函数。
我们再单独载入dll3。
有个字符串是“ping www.malwareanalysisbook.com”
,将它转换成宽字符的形式,最后将结果保存在WideCharStr中。
我们再来看看函数dll3GetStructure
,发现它有一个参数。这个参数就是我们当前程序中一个局部变量的地址。
dword_1000B0A0
这个地址赋给了以eax的值为地址的内存空间里面,存入的内容是什么呢?我们双击dword_1000B0A0
再进行交叉引用看看,第一个结果就是对它的内容进行改写的位置。双击进去看看。可以看见一个区域中有很多mov操作,作用就是赋值呗。NetScheduleJobADD
的第二个参数的内容。这个区域就是类似AT_INFO的一个结构体。“edit”
,“struct var”
,再选择“AT_INFO”
。dll1的数据是当前进程的ID值。
dll2的数据是temp.txt的句柄。
dll3的数据是“ping www.malwareanalysisbook.com”
这个字符串在内存中的地址。
20145326蔡馨熤《计算机病毒》——代码的动静态分析结合
标签:byte turn ret 进程 res 操作 注意 oca 工具
原文地址:http://www.cnblogs.com/cxy1616/p/6916933.html