恶意代码分析实战-实验6
本文最后更新于:2021-08-10 晚上
Lab 6-1
1.由main函数调用的唯一子过程中发现的主要代码结构是什么?
使用IDA找到main函数看到调用了一个子函数sub_401000,F5即可看到伪代码。
可以看到调用了InternetGetConnectedState这个API,这个函数是用来检测是否联网的,判断本地网络状态。
1 |
|
当存在一个连接时返回TRUE,否则返回FALSE。
2.位于0x40105F的子过程是什么?
这样确实看不太出来是做什么的。
这样看可以看到成功或者失败分别会压入栈不同的文字然后调用。
再看实际运行情况,推测应该是一个printf函数。
3.这个程序的目的是什么?
通过上面的函数分析可以得知,这是一个判断是否有网络连接的程序。如果存在网络连接返回1,否则返回0。
Lab 6-2
1.main函数调用的第一个子过程执行了什么操作?
调用的第一个函数是sub_401000,调用了InternetGetConnectedState这个API判断当前是否连接了网络
2.位于0x40117F的子过程是什么?
查看此函数,发现与lab6-1是一样的,所以是一个printf函数。
3.被main函数调用的第二个子过程做了什么?
首先调用了InternetOpenA初始化应用程序对 WinINet 函数的使用。
然后调用了InternetOpenUrlA下载“http://www.practicalmalwareanalysis.com/cc.htm”这个页面
再调用InternetReadFile读取数据,如果读取的前几个字符是“<!–”就成功,如果失败就会打印“Error 2.3: Fail to get command”,读取失败会打印“Error 2.2: Fail to ReadFile”
openurl失败会打印“Error 2.1: Fail to OpenUrl”
再仔细分析一下返回值,可以看到前几个值如果比对都正确的话,那么会把第五个字符给al,而前几个字符是html页面的注释,也就是读取注释的第一个字符。
这个函数结束之后,可以看出来后al的值会再次赋给[EBP+var_8],最终会传给ecx,再压入栈作为printf的一个参数。可以看到压入栈一句话”Success: Parsed command is %c\n”,%c对应的就是这个值,打印出这个字符。
4.在这个子过程中使用了什么类型的代码结构?
if-else的结构
5.在这个程序中有任何基于网络的指示吗?
使用了Internet Explorer 7.5/pma作为InternetOpenA函数lpszAgent参数的值,还有http://www.practicalmalwareanalysis.com/cc.htm这个URL。
6.这个恶意代码的目的是什么?
首先判断是否联网,如果联网那么就会开始读取http://www.practicalmalwareanalysis.com/cc.htm这个页面的,然后获取注释的第一个字符,最后将其打印出来,再调用sleep函数
Lab 6-3
1.比较在main函数与实验6-2的main函数的调用。从main中调用的新的函数是什么?
多了一个函数sub_401130函数
这个新函数是通过读取到的值来执行不同的操作。
2.这个新函数使用的参数是什么?
使用的参数是通过读取网页资源注释中得到的字符,还有一个是main函数的参数argv[0],就是程序名本身。
3.这个函数包含的主要代码结构是什么?
包含的主要结构式switch结构
4.这个函数能够做什么
首先当字符等于“a”时,可以创建一个文件夹路径是C:\TEMP
当字符等于“b”时,会将自身复制到创建文件夹内,并且重命名为cc.exe
等于“c”时,会删除文件夹下的cc.exe。
等于“d”时,会实现一个自启动功能,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下写入键值
通过注册表实现自启动可以看这里:自启动技术-注册表
1 |
|
等于“e”的时候,调用sleep函数
都不满足的话就打印字符串“Error 3.2: Not a valid command provided”
5.这个恶意代码中有什么本地特征吗?
有,就是前面分析的注册表键值的修改,还有对于文件夹的创建和文件的复制。
6.这个恶意代码的目的是什么?
判断网络是否连接,然后读取一个网页资源中的注释后的第一个字符,通过这个字符来判断进行何种操作。具体上面已经分析过了。
Lab 6-4
1.在实验6-3和6-4的main函数中的调用之间的区别是什么?
加了一个for循环,sub_401040加了一个参数i。
2.什么新的代码结构已经被添加到main中
for循环结构
3.这个实验的解析HTML的函数和前面实验中的那些有什么区别
主要是给InternetOpenA传入的szAgent参数不一样,这个参数先通过sprintf将“Internet Explorer 7.50/pma”与循环次数i拼接起来。第一次是Internet Explorer 7.50/pma0第二次是Internet Explorer 7.50/pma1…以此类推。
4.这个程序会运行多久?(假设它已经连接到互联网)
看这个for循环,每次都会sleep,其中参数是6000ms,是一分钟,也就是每循环一次沉睡一分钟,那么就是1440分钟。
5.在这个恶意代码中有什么新的基于网络的迹象吗?
就是InternetOpenA传入的szAgent参数不同了,每次都会变。
6.这个恶意代码的目的是什么?
跟之前的基本一样,只是运行的时间变得特别长。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!