CreateToolHelp32Snapshot:可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。说到底,可以获取系统中正在运行的进程信息,线程信息等
Thread32First,Thread32Next:用来遍历每一个线程
Module32First,Module32Next:
BOOL Module32First(
HANDLE hSnapshot,
LPMODULEENTRY32 lpme
);
获得进程的各个模块的信息(MSDN:Retrieves information about the first module associated with a process.)
FormatMessage:将GetLastError()得到的数字的错误信息,转化为字符串
整个程序都是没有保护的,很明显看得出来程序逻辑,运行一下:
翻一翻,文件中保存的是和系统中所有exe运行有关的dll的信息,包括基地址,文件大小,运行进程号等等
在文件中搜索PROCESS NAME
发现:smss.exe,csrss.exe,winlogon.exe,services.exe等系统中的所有运行着的程序
很可怕,这个程序扫描了我们本地运行着的所有程序,而且还有很多附加信息
举例:
=====================================================
PROCESS NAME: idaq.exe
-------------------------------------------------------
Process ID = 0x00000488
Thread count = 6
Parent process ID = 0x000005F8
Priority base = 8
Priority class = 32
MODULE NAME: idaq.exe
Executable = C:\Documents and Settings\Administrator\×ÀÃæ\IDA\idaq.exe
Process ID = 0x00000488
Ref count (g) = 0xFFFF
Ref count (p) = 0xFFFF
Base address = 0x00400000
Base size = 3289088
MODULE NAME: ntdll.dll
Executable = C:\WINDOWS\system32\ntdll.dll
Process ID = 0x00000488
Ref count (g) = 0xFFFF
Ref count (p) = 0xFFFF
Base address = 0x7C920000
Base size = 602112
MODULE NAME: kernel32.dll
Executable = C:\WINDOWS\system32\kernel32.dll
Process ID = 0x00000488
Ref count (g) = 0xFFFF
Ref count (p) = 0xFFFF
Base address = 0x7C800000
Base size = 1171456
…………(剩下还有好多略去)
问题1:恶意代码怎么样被初始化调用
感觉直接运行就可以啊()
问题2:恶意代码都做了什么
已经分析
问题3:恶意代码使用了什么URL
为了找URL,首先确定API函数:URLDownloadToFileA
所以,这就很简单了,用OD在401510处下断,查看参数即可
注意到函数401534:一个简单的BYTE位置取反,也就是 i = 0xFF - i
现在就需要找个办法把数据抠出来证明一下
x= [0x97,0x8B,0x8B,0x8F,0xC5,0xD0,0xD0,0x88,0x88,0x88,0xD1,0x8F,0x8D,0x9E,0x9C,0x8B,0x96,0x9C,0x9E,0x93,0x92,0x9E,0x93,0x88,0x9E,0x8D,0x9A,0x9E,0x91,0x9E,0x93,0x86,0x8C,0x96,0x8C,0xD1,0x9C,0x90,0x92,0xD0,0x8B,0x8B,0xD1,0x97,0x8B,0x92,0x93,0xFF]
s = ''
for i in x:
i = 0xff - i
s += chr(i)
print s
问题4:恶意代码使用了什么文件名
抠出来403040的数据
y = [0x8c,0x8f,0x90,0x90,0x93,0x8c,0x8d,0x89,0xd1,0x9a,0x87,0x9a]
s = ''
for i in y:
s += chr(0xff - i)
print s
得到文件名 PLUS:
看了书上的分析,才知道有好多东西又没有分析到
假恒成立的判断
ecx永远为0,所以会导致除0异常