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异常