这一节完全是IDA的使用介绍
1直接用IDAPro打开.dll文件,就直接来到Dllmain处,可以知道地址为0x1000D02E
2 3要知道gethostbyname在WS2_32.dll就比较容易找到,而且注意是区分大小写的.这是小写,找到后双击到达输出表处,然后右键gethostbyname函数名选择Xrefs graph to查看有多少函数调用它结果如图:五条线说明有五个函数调用他
4在上题的输出表处,选择函数名gethostbyname并且按X,显示所有对hethostbyname的调用,找到,0x10001757(sub_10001656+101)双击到达代码处,分析如下,0x100019040处的全局变量地址赋值给eax,eax+0dh得到要请求的DNS名字,再压入栈作为gethostbyname的参数,所以双击查看10019040处代码,再双击跳转到1001994处看到字符串,[This is RDO]pics.praticalmalwareanalysis.com,去掉前头0dh个字符得到pics.praticalmalwareanalysis.com
5 6按G跳转到0x10001656往上翻看,得到下图,分析可得,有23个局部变量一个(最后一个)参数,大于ebp的是参数,小于的是局部变量
7\cmd.exe /c加一个转移字符,再加一个结束符一共13个字符,在setup里面设置一下最小长度为13,再按length低到高排列可以快速找到,双击到达位置.10095B34处
8在上题处选中该局部变量,然后按x查看那个地方调用这个局部变量,可以发现只有 一个地方,双击跳转到该处
可以看到下面有个recv应该是接受远端发来的命令,然后下面一串的命令比较看运行哪一个命令,可以推测这是一个远程shell会话
9简单,在0x100101c处选中该局部变量按x可以看到就三个地方调用它,其中只有一个是mov指令其他都是比较,所以双击查看该mov指令,可以看到局部变量给赋予从函数10003695返回的值.再双击查看sub_10003695处的代码,可以看到如果得到的ID==2则al设为1否则为0,为2说明VER_PLATFORM_WIN32_NT win32nt平台
10在10010444处,成功则执行sub_100052A2函数双击跳转到该函数位置查看代码,看到两个关键的函数调用,打开一个注册表项成功跳转到10005309处,失败则关闭返回的注册表句柄,再看10005309处代码,还是几个关键函数调用,regwueryvalue和sprintf和100038EE,双击查看100038EE可以知道这是一个send函数,那么很明显了,得到某注册表值并且发送给某个远端.
11看导出表,找到PSLIST,双击查看几个关键call调用,一个个分析,第一个sub_100036c3,双击查看可以知道同样是一个判断操作系统是否是win2000以上的函数dwpaltformid==2,且dwMajorVersion>5
strlen函数看str参数是否为空,如果为空调用sub_10006518函数,否则跳转1000704E处调用sub_1000664c函数
现在看sub_1000664c函数查看函数的调用右键选择xrefs from可以看到几个关键函数
Getmodulfilename,strcmp,process32next process32first
再看函数流程图具体分析可以知道,函数列出并发送所以str指定的模块名字的进程 流程图分析关键点截图
再看10006518同样的方法发现他们很相似,用到的函数基本相同,但是你会发现10006518少了strcmp函数相对于1000664c,可以知道因为没有指定str,所以程序列出所以进程信息,并发送.这就是PSLIST函数作用.正如他的函数名所暗示的一样
12xrefs from截图如下:可以看到关键函数send,那么他send什么呢?看getsystemdefaultlangid和sprintf可以知道send的是和系统缺省语言ID,故命名为send_langID
13直接右键xrefs from只能看到密密麻麻一片黑数不清多少个函数调用,选择view graphs user xrefs chart选择深度为1,为2的时候已经多的看不清楚了
14查看关键代码知道参数eax决定睡眠多长,可以看到一系列对eax的操作查看初始10019020处的数据得到30,30乘以3e8h(1000)得到30000毫秒
15 16 #define AF_INET 2协议域
#define SOCK_STREAM 2 socket类型tcp
#define IPPROTO_TCP 6tcp协议
17选择searsh text 选择find all,需要一点时间,双击到达100061DB处查看代码,存在VMXh,再看交叉引用选择一个双击查看代码,可以看到关键字符串输出
18未识别16进制数
19数值改变
20按A
21notepad++打开查看,获得光标位置将0-0x50个字节和0x55异或再重新写回去