恶意代码分析实战 Lab13

lab13-01

1


2首先调用sub_401300函数

程序是一系列的资源操作函数,目的是找到资源


存到内存在调用401190解密,可以到,是在和3bh进行异或解密,最后把数据地址传回


我们用resourcehaacker看一下


把它保存二进制文件再用winhex打开,再把数据异或3bh,得到一个url


接着看程序,调用WSAStartup,wsa启动命令

然后两个sleep(分别睡了500ms和30000ms)之间调用sub_4011c9函数,看函数返回值如果为0就重复这段代码,否则就结束程序


看一下sub_4011c9

想得到主机名,然后将主机名作为参数传递给sub_4010b1函数进行加密操作


进入sub_4010B1,注意到函数sub_401000的调用,注意到他的参数分别是Win,buffer和size=3,函数返回是buffer值为V2lu,看用base64计算器得到的结果一致,所以知道sub_401000是在对hostname进行base64加密


而且注意到加密后的字符串被保存在第二个参数返回,紧接着,这个字符串被作为参数传给_sprintf,填充http协议


Mozilla/4.0为用户代理调用internetopen

然后打开之前解密的网址


接着读取文件


并且读取的第一个字节内容为6Fh函数才返回1,才结束循环

看一下运行结果:


lab13-02

1用regshor比较一下注册表在程序运行前后的变化,注意到都是和shellnoroam相关的注册表项,似乎是文件查看方式相关的



再看一下promon,因为我们已经看了注册表变化,我们就只看一下文件操作有哪些


只截取了,以下部分,后面一串的writefile操作,很明显注意到程序会创建形如上图的tempxxxx的文件,而且写入很大的数据,而且程序会不停的写,好像是操作了窗口就会写?打开其中一个,发现都是乱码,注意到大小都是8.101kb的推测内容一样?

静态分析

字符串没啥值得注意的,也就一个temp%08x知道会被用来创建文件名,注意到GDI32.dll这是绘制图像和显示文字相关dll


再看一下,,和加密相关信息搜索xor注意到,有价值的xor是在sub_4012BD和sub_401739函数特别是sub_401739的xor特别多,我们可以推测特和加密相关


注意到主函数死循环,一直调用sub_401851


GetTickCount得到系统启动毫秒数,然后和填充temp%08x得到一个文件名


注意函数调用sub_401000的三个参数,最后一个filename我们知道就是前面得到的,进入查看就看到一个createfile一个writefile函数,就是创建文件名为filename指向,写入的是lpbuffer指向数据,写入的数据大小事nnumberofbytestowrite,关键事得知另外两个参数事怎么来的


看sub_401070的函数调用


进入sub_401070注意到都是GDI32函数,都不熟,我们不需要具体分析(稍微百度一下,在看书,知道数据就是主窗口截图的数据),感兴趣可以一个个了解函数,我们的目的事知道,两个参数都被赋值为什么,做了什么操作

所以看函数最后部分,hmen被global_addr赋值,numberbytes被var_74赋值

往上找var_74,注意到他是getDIbits的返回值加上36h,而global事globallock的返回值,并且后面被memcpy做了一系列赋值操作,,值都是和窗口像素相关的数据


最后一个函数调用sub_40181f,先是初始化var_44,然后调用heavy_xor,看一下这个函数的内部调用


分析到现在,都没看到加密函数,只剩下这个heavy_xor了,我们可以推测这个函数就是加密函数,而且加密的是那个窗口截图的信息,结合前面分析知道函数里面存在很多xor运算,简单看一下single_xor,注意到函数里面只是很多简单的运算操作,可以推测他是完成某个指定的特殊运算

看一下sub_40181f(这种很多运算但是API函数调用的代码,需要借助流程图,来更快的掌握程序结构)流程图

注意到一个循环结构,循环判断条件事var_4>=参数numbyte,并且每次循环var_4加10h

循环体里面一开始调用sub_4012DD,我们注意到函数调用很多的rot,也就是循环左移函数,和single_xor函数,别陷进去,这是自己设计的加密算法,分析他的代价太大不值的,我们已经知道要加密的数据是什么,和加密函数在哪里,我们完全用ollydbg动态跟踪把原始数据拷贝下来

在调用sub_40181f之前去除截屏信息,即可

在数据窗口选择复制全选,然后选择二进制复制,最后复制到winhex打开的型bmp文件即可



lab13-03

1首先注意到程序的字符串极多,有一些是乱码还看不出来,但有些信息是极为明显的,看下面这两条,知道程序会用到base64加密,并且还是自定义的base64,还有一个输出格式字符串,来打印API错误信息

注意到这几个乱码


还有一个域名信息,结合导入函数知道,会有网络操作


并且注意到好几个提示信息类的字符串,还注意到一个cmd.exe说明程序可能调用cmd运行恶意代码


运行程序,没有任何提示信息,注册表也只是写了几个种子,文件操作没有什么注意的

只注意到有网络数据,注意到端口是8910


nc监听(apateDNS配合使用),发现输入一个字符串,返回一段乱码,并且lab13-03程序没有结束,显然一直在等待远端的命令


回到静态分析,注意到存在AES加密,结合之前得知自定义base64,知道程序有两个加密算法


搜索xor也注意到sub_401AC2存在很多xor运算,还有sub_40223A和sub_402DA8    sub_4027ED 和sub_403166,结合上图知道,前俩个函数可能和AES加密相关(不包括sub_401AC2),后两个解密相关

还注意到一个sub_3990函数,函数很简单,只是进行一些简单运算,并且他被sub_40352D调用两次

并且注意到sub_40352D还调用了sub_40223A和sub_402DA8,所以推测sub_40352D是一个AES加密函数

看一下,对sub_40352D的调用,四个参数


注意到,有个数据缓冲区buffer和数据大小参数,还有一个unk_412EFB参数,应该注意到他是函数一开始调用的如下,我们猜测这是AES的密钥,为什么?等下会讲,现在再看var_FE8我们可以结合上面memset对他的初始化,知道他是个数据缓冲区可能用来存放加密后的数据

现在看一下sub_401AC2,函数唯一的提示信息就是empty key了,说明上面那一串是密钥,并且我们知道AES加密是需要一个加密器的,而这个加密器就是unk_413374,他在sub_401AC2时候被初始化

回到40352D,看到下图,我们回到sub_4015B7会发现,程序通过创建线程的方式调用了sub_40132B,还注意到还以线程方式调用strataddress,我们发现(通过看base64的字符串引用,一直找上来)这个函数会调用base64的加密函数,并且也会在readfile和writefile之间调用



看一下sub_4015B7里面的一堆管道操作(写好的这一段文章的,md csdn老是没给我保存md好气啊,耗光我的耐心)


结合代码和上图应该看的懂不想再打一遍

这样的一波操作是在复制管道句柄的副本,也就是一个新句柄同样指代管道的写端口


然后注意程序关闭了一大堆的句柄,只留下了副本var_4c和var_18,连标准输入都关闭

还有一点就是cmd的output和write_1是被绑定了,所以output输出的直接到管道的write缓冲区

现在运行代码,看一下结果

nc运行结果如下,(结合apatedns使用),其中BInnaEi==是我们输入的,那段AES加密乱码是返回的结果


ollydbg跟踪在如下函数运行完后,可以在栈中看到base解密后的dir



然后在下面函数运行完后,在局部变量var_FE8里面有AES密文,buffer里面是明文


将密文二进制拷贝下来

依照课本写py脚本运行结果,发现开头的16个字符大小写反了,这里说下,课本没有IV,但是实际需要如下修改语句

obj=AES.new('ijklmnopqrstuvwx',AES.MODE_CBC,b'                ')16个空格结果如下图

obj=AES.new('ijklmnopqrstuvwx',AES.MODE_CBC,b'Microsoft Window')(mICROSOFT wINDOW效果一样)这是为了知道Microsoft Window为什么发现就是空格,所以不懂为啥开头16byte会大小写出错(AES加密算法里面被做了手脚?)



分析结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值