本帖最后由 giantbranch 于 2018-8-14 21:19 编辑
这个学习的时候是边做边写博客的,这样学习效果挺好的,推荐给大家
博客原文:[url=http://oldblog.giantbranch.cn/?p=495]http://oldblog.giantbranch.cn//url]
4个小实验做下来,发现自己确实一点点在进步
实验文件(包含脱壳后的文件)
Lab1.zip
(16.88 KB, 下载次数: 70)
文章备份(还是传个doc备份一下吧):
《恶意代码分析实战》Chapter 1课后静态分析实验.doc
(2.66 MB, 下载次数: 37)
Lab1-1这个有个exe,还有个dll 先去查杀一下
由于那个网站上不了(翻墙的话应该可以)
除了上面这个多引擎查杀,还有下面的 https://virusscan.jotti.org/ http://www.virscan.org/ https://fireeye.ijinshan.com/
不过还有PhrozenVirusTotalUploader工具,是客户端版 不过还是不行..... 算了用其他吧 dll的 2.什么时候编译的呢 pe文件里面有这个一个字段 直接拖PE tools,点击文件头 当然用其他工具,或者手动也可以 发现结果跟上面的不一样 那么可以确定那个工具有点问题啊
再看看dll的 时间相差无几,应该是同属一个恶意代码包 有没有被加壳呢直接看到了vc++6.0,区段也 dll的
查看输入表有两个查找当前目录文件的api,还有复制文件的(应该是复制自身到一个隐蔽的目录)
dll的 有创建进程,和睡眠 这个就有个网络通信的了 还有没有其他特征可发现呢看看里面有什么字符串是一个办法
strings的下载地址
https://technet.microsoft.com/en-us/sysinternals/bb897439.aspx
直接strings + 文件名
我们可以看到 有个迷惑的字符串,那个l变成了1,根据前面可以猜测是将自身复制到system32那里迷惑人了
也可看到导入函数
看下dll 有个ip地址,如果真实的病毒就不知保留地址了
总结应该是复制自身,查找文件那个api有可能是查找杀软,或者要感染的文件等
dll可能是一个后门,由exe来启动,exe有个CreateProcess的api可以dll注入什么的
Lab1-2接下来直接跟上面的步骤来重复了
而且从上面可以大概知道加了upx壳,应该是一个含有下载功能的恶意代码
查壳看看 确实如此 upx壳,直接esp定律即可脱壳
先看没脱壳的
一个创建服务的 The CreateService function creates a service object and adds it to the specified service control manager database. 那个InternetOpen是初始化对象的(Initializes an application's use of the WinINet functions.)
再看脱壳了的,就看得更多了 这里就多了一个打开url的了,猜想是get参数传递? 再看看字符串 直接看脱壳了的,脱壳对静态分析的影响还是挺重要的,下面就看到了那个url了,一看这个程序就是本书原作者自己写的
当然od也可以
怎么检测这个主机被这个恶意代码感染呢 一个就是网络迹象:访问上面那个url的 另一个就是创建了一个服务,通过上面的分析可知道,但是创建的服务名是什么还不知道... 稍微od跟一下差多多确定是这个了名称的服务 之后调用了401040,我们去看看 最后再创建一个线程,调用的是StartAddress函数
Lab1-3一上去全部报毒,这个看来很牛逼啊
查下壳,果然 见识短,这个我第一次见
这个壳,作者说暂时没法脱壳,我就是要挑战,失败了再说,基本上脱壳八法都尝试过了
查了一下,可以用模拟跟踪来脱壳 http://oldblog.giantbranch.cn/?p=341#nbsp 再ctrl + a就看到熟悉的结构了 向下稍微拖一下,发现了main函数 直接用od的插件脱壳吧 看看,果然脱壳了
当然用SFX也是可以的
既然脱了壳,那尝试继续分析咯
看看导入表,有点诡异,不认识。。。,等之后的章节再看吧,作者说18章后回来
看看字符串,有个url 也跟程序运行的效果吻合
跟着就跳到404的页面了
用ida看看吧,其实也不太懂,大概就是通过浏览器打开那个url吧
这里的话,可以通过这个网络特征来查,当然还可以有其他方法
Lab1-4先查杀一波 又有下载字眼
查一下,没有壳 看看编译时间 看着就有点不对劲 这是伪造的。。 我也可以去修改它
看看导入表 这里可以知道这个可能会执行命令,复制文件,操作一些资源文件,创建线程什么的 这里还涉及权限的东西,那个提升程序的特权(AdjustTokenPrivileges),那个lookup是查询权限,之前的打开句柄吧
网上查了查提升权限的代码段 if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ){
TOKEN_PRIVILEGES tkp;
LookupPrivilegeValue( NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid );//修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL );//通知系统修改进程权限
return( (GetLastError()==ERROR_SUCCESS) );
}
就是用这几个函数的
接下来看看字符串
有些个下载到文件的api,下载那个完之后的文件后,很可能伪装成系统的一些文件的名称了
没运行lab4前,我们打开那个system32的exe看看
其实运行lab4也会打开这个页面
先来个小总结:有网络连接为啥没有网络连接的api,但字符串中又搜索得到呢,为什么要操作资源节中的数据呢,难道资源节中有什么秘密吗
我们用resource hacker看看资源有什么 我去,里面竟然藏了一个二进制文件 我们直接将他导出来
我们上传查下毒
查下壳,就是一个vc++写的程序,没加壳 看下导入表 应该 这才看到下载了 字符串跟刚才的重复了的,string也搜到资源节中的字符串了
那整个程序我们就可以猜想出来了: 首先是从资源节提取出二进制文件,放到一个目录(可能需要提权),跟着执行提取出来的下载程序,并运行,下载程序下载一个程序后,运行下载后的程序,恩大概应该这样
我们接借助ida看看吧 一开始会枚举进程
枚举每个进程pid 下面调用此函数,看看那个程序(winlogon.exe)有没有运行, winlogon.exe:Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出
跟着进入下面这里 这个是将系统目录下的\system32\wupdmgr.exe移动到临时目录的winup.exe 搜一下,确实如此
再来看,最后的4011fc 首先获取到路径\system32\wupdmgr.exe 跟着从资源节读取数据,最终写入上面的目录 跟着执行从资源节提取出来的一个二进制文件
我们用ida看看那个提取出来的文件
那个程序图标都变了
最后发现怎么没有权限提升呢,发现漏了 跟进,提升不成功就加载一个dll,sfc_os.dll,进行dll注入 继续跟进就可以看到经常看到的权限提升的代码了
我们最后看看那个下载来的程序时怎么样的吧
结果发现跟从资源节解压出来的哪个二进制文件一样,访问一下那个下载的url结果已经404了 所以那个wupdmgr.exe跟资源节解压出来的一样也不奇怪了(没下载前是用那个覆盖的嘛)
好了,基本上分析完了,虽然程序简单,但是学到的东西还是很多的
|