Lab5-1

1、DllMain 的地址是啥
直接在函数列表里面找到就行

image.png

2、使用 Imports 窗口并浏览到 gethostbyname,导入函数定位到什么地址

image.png

image.png

3、有多少函数调用了 gethostbyname

光标留在函数那里,然后 ctrl+x 就行,这里面的类型 p 是引用,r 是读取,共有然而实际上有两个函数调用了多次,比如:sub_10001074,所以一共 5 个函数调用了 gethostbyname

image.png

4、将精力集中于 sub_10001656+101 处对 gethostbyname 的调用,能找出哪个 DNS 请求被触发

注意看这里的调用,前面 push 了 eax 作为参数,那么 eax 存的是 off_10019040 字符串的指针加 0xd 偏移,正好是

image.png

image.png

5、IDA pro 识别了在 0x10001656 处的子过程中的多少个局部变量、多少个参数

不同版本的 IDA 是别的不一样,书中只有二十多个,我这里识别了好多

6、使用 string 窗口,定位字符串 “\cmd.exe /c” 位于哪里

shitf+f12 打开字符串窗口,直接找一下这个字符串然后双击跟过去

image.png

双击跟过去来到代码段

image.png

7、在引用 “\cmd.exe /c” 的代码所在的区域发生了什么

看上面那个图,这个字符串被压倒了栈上面作为参数传给后面要调用的函数

8、0x100101C8 处的 dword_1008E5C4 看起来是个全局变量,恶意代码是如何设置它的

摁下 X 看一下交叉引用,然后跟过去看看是怎么赋值的

image.png

可以看到是把 eax,赋值给了它,eax一般是上面那个函数的返回值

image.png

跟进函数看一下,调用了 GetVersionExA 来获取系统的版本
为0表示为win3x系统
为1表示为win9x系统
为2表示为winNT
为3表示为win2000系统
下面还有个 setz 来把 ZF 标志位的值赋给 al,是否赋值要看前面 cmp 的结果,我们 GetVersionExA 的结果为 2,cmp 的结果是 0,ZF 标志位为 1,所以会把 al 赋值为 1,也就是说 dword_1008E5C4 为 1

image.png

9、0x1000FF58 的子过程中的几百行指令中,一些列 memcmp 对字符串进行比较,如果对 ‘robotwork’ 的字符串比较是成功的(当 memcmp 返回 0)会发生什么?

往下找一下,定位到 ‘robotwork’ 然后看一下如果一样的话是会进入 sub_100052A2 的

image.png

image.png

10、PSLIST 导出函数做了什么

image.png

找到 PSLIST,双击跟过去,sub_100036C3 是判断系统版本的,有两个路径

image.png

未完。。。。。。

Lab6-1

main 函数调用的唯一子过程是一处 if 语句,里面条件是:InternetGetConnectedState,可以用来判断本地有没有连接网络,有的话返回 true
0x40105F 处的子过程是一个 printf 函数(IDA 没法识别出来,猜的)
程序目的是检查本地是否连接有网络

Lab6-2

第一个子过程还是上面那个 if,里面的条件也还是之前的
0x40117F 的子过程是 printf 函数
被 main 函数调用的第二个子过程使用 Internet Explorer 7.5/pma 作为 UA,去访问 http://www.practicalmalwareanalysis.com/cc.htm,如果 InternetReadFile 有结果的话就跳到 loc_4010E5

image.png

这里正好是 ‘<!—‘,html 的注释,获取 html 的注释中存好的恶意代码是攻击者常用的方法,让程序看起来像是在访问一个正常的网页

image.png

程序后面有 sleep 了一段时间然后退出

Lab6-3

比上一个多了个 401130 函数,这个函数接受了两个参数,一个是 html 的注释,一个是程序的名字(argv)

image.png

这几个分支依次是:
创建目录:C:\Temp
拷贝自身到 C:\Temp\cc.exe
当 C:\Temp\cc.exe 存在时删除 C:\Temp\cc.exe
设置注册表 Software\Microsoft\Windows\CurrentVersion\Run 为 C:\Temp\cc.exe 来达到开机自启的目的
休眠一段时间

Lab6-4

相比上一个,这个是在 for 循环中循环执行的,UA 会跟着循环的次数进行变化