lab16-01

程序开头就判断了PEB结构,的BeingDebugged是否为为0,如果为0则loc_403573正常执行,否则调用sub_401000

恶意代码分析实战 Lab16

接着正常路径走,发现程序又查看了processheap的forceflag标志,同样为0是无调试

恶意代码分析实战 Lab16

最后查看了NTGlobalFlag,是否为70h.70则是调试状态

恶意代码分析实战 Lab16

然后程序还要求参数不为1

看被识别处程序处于调试时函数sub_401000做了什么

程序会得到如下的cmd参数

恶意代码分析实战 Lab16

最后运行cmd,删除程序

对比win7(左)和xp的prcocessheap,知道程序只有再xp下正常运行,并且实测这三种方法都过时了,ollydbg下都是无效的.

恶意代码分析实战 Lab16恶意代码分析实战 Lab16

因为都是过时的技术了解一下就好,我们还是看第二个例子

至于原程序的功能参考lab9-1


lab16-02

用peview可以发现程序存在.tls节区在 

使用IDA可以看到一个Tls函数,查看这个函数就知道他的反调试技术

函数判断调用tls原因如果是进程开始的话,就查找OLLYDBG窗口,实测无效不知道是不是因为用的吾爱专用所以窗口名不再是OLLYDBG的缘故,然后如果是因为线程开始而调用tls的话就调用sub_401020函数

恶意代码分析实战 Lab16

在sub_401020处还运用了另一种反调试技术,outputdebugstring,并且在程序确认是非调试时候,byte_40A968自加1,这个反调试技术是唯一可行的方法了,分析到现在,在ollydbg下

恶意代码分析实战 Lab16

执行完TLS程序会回到正常代码继续执行

命令行运行,会提示我们输入4位密码

xp下

恶意代码分析实战 Lab16

win7

恶意代码分析实战 Lab16

根据分析,应该是xp下运行是对的,不懂win7为啥在非调试下也会对byte_40A968加一,这么说来,outputdebugstring并不适合win7?

分析结束了,关键在于tls回调函数,要知道他由四种情况被调用,分别是创建进程线程和结束线程和进程


lab16-03

恶意代码分析实战 Lab16

恶意代码分析实战 Lab16

ocl.exe和1qbz2wsx3edc(有点熟悉前面是不是分析过了lab09-02)

重命名为ocl.exe,看下图比较就知道

恶意代码分析实战 Lab16

,然而程序在前面调用sub_4011E0参数,可以知道var_29c数值被修改

并且在函数sub_4011E0函数内部存在QueryPerformanceCounter

恶意代码分析实战 Lab16

ollydbg查看更快,所以程序名为peo.exe

恶意代码分析实战 Lab16

看到字符串里面/c del就知道程序在识别出被调试时候会删除自身(猜的)

域名肯定还是http://www.practicalmalwareanalysis.com了(也是猜的)

看到反调试技术了 使用的是gettickcount的时钟检测 技术

恶意代码分析实战 Lab16

并且注意到中间还有一个sub_401000函数调用

然而程序sub_401000实际上没有做什么事情,就是注册一个seh函数,然后故意除以0,来跳到那个函数执行(401037地方),接着就改变出错地址好让程序调用完seh后能回到sub edi,0xD6A执行,而不是原来的div ecx

接着程序就结束了,纯粹耗时间骗我们进去看的

我们看sub_401300这个函数得到url地址

进入程序又发现了时钟检测技术这次是rdtsc和同样耗时间的seh技术

注意到这次程序被测试出来会调用sub_4010E0函数这个函数会删除程序自身,之前还只是让程序崩溃而已(访问非法地址)

恶意代码分析实战 Lab16

用ollydbg跟踪,注意修改标志位来对抗反调试技术,就可以得到下面的url地址(打脸啪啪啪阿,猜的都错了)

恶意代码分析实战 Lab16

然后程序会建立一个反向shell

分析结束

在分析seh的是否要设置正确的断点来步过,否则容易跑飞了.

相关文章: