ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

恶意代码分析实战——反调试侦测

2021-01-12 14:31:23  阅读:238  来源: 互联网

标签:exe 恶意代码 运行 var 侦测 调试 调试器


在这里插入图片描述


QQ 1274510382
Wechat JNZ_aming
商业联盟 QQ群538250800
技术搞事 QQ群599020441
解决方案 QQ群152889761
加入我们 QQ群649347320
共享学习 QQ群674240731
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

叮叮叮:产品已上线 —>关注 官方-微信公众号——济南纪年信息科技有限公司
民生项目:商城加盟/娱乐交友/创业商圈/外包兼职开发-项目发布/
安全项目:态势感知防御系统/内网巡查系统
云服项目:动态扩容云主机/域名/弹性存储-数据库-云盘/API-AIeverthing
产品咨询/服务售后(同)

纸上得来终觉浅,绝知此事要躬行 !!!
寻找志同道合伙伴创业中。。。抱团滴滴aming联系方式!!


#本文为广告系统自动投放广告

# 如有侵权 删改 请速速联系我们


数据安全

本科/专科信息安全专业

计算机网络




分析 exe中的恶意代码,
我们将会学到的知识包括恶意代码常见的反调试技术,
分析其在侦测到处于调试状态时的应对策略,
并且根据我们的分析使得文件能够顺利运行。


预备知识
1.关于反调试

调试过程中经常会碰到反调试技术,
原因很简单:调试可以窥视程序的运行“秘密”,而程序作者想要通过反调试手段隐藏他们的“秘密”,
普通程序需要防止核心代码被调试逆向,
恶意代码需要隐藏自己的恶意行为防止被跟踪。

就像病毒和杀软的关系一样,为了顺利的逆向分析,有反调试手段就有对应的破解方法-反反调试。


实验环境
服务器:windows xp
在这里插入图片描述

辅助工具:peview,IDA,ollydbg


需要回答的问题如下:

Q1.当使用静态分析法分析这个二进制文件时,你看到了哪些字符串?

Q2.当运行这个二进制文件时会发生什么?

Q3.如何重命名它,才能使这个二进制文件正常运行?

Q4.这个恶意代码使用了哪些反调试技术?

Q5.对每一种反调试技术而言,如果恶意代码确定它运行在调试器中,它将做什么?

Q6.为什么反调试技术在这个恶意代码中能够成功?

Q7.恶意代码使用了什么域名?


Q1.当使用静态分析法分析这个二进制文件时,你看到了哪些字符串?
在这里插入图片描述在这里插入图片描述

Peview载入查看字符串
在这里插入图片描述

A1:可以看到cmd,cmd.exe等

Q2.当运行这个二进制文件时会发生什么?

A2:一运行就立刻终止了


其他的问题我们需要做完整个实验才能解答。

载入IDA分析,打开imports窗口
在这里插入图片描述

在这里插入图片描述

看到了gethostbyname

这是恶意代码用于解析域名使用的
在这里插入图片描述

我们打开wireshark进行监听,并运行 exe

wireshark中什么都没有捕获到

回到IDA继续分析

在main开始部分,就是将一连串的字符进行了入栈的操作
在这里插入图片描述

按r键,16进制转换为字符
在这里插入图片描述

继续往下

在这里插入图片描述

通过strncmp进行字符串的比较

这里的地址是00401518

我们打开od跳到这个地方,看看比较的字符串是什么

然后f2下断点直接运行过来

在右下角可以看到比较的是lab16-03.exe和qgr.exe

我们把文件改名为qgr.exe再次运行还是没有捕获到相关流量

对应着IDA,我们知道var_104是恶意代码的当前名字,var_29c是待比较的字符串,往前回溯,可以看到它在比较之前传递给了sub_4011e0

再往前可知其值

其实是ocl.exe

我们在IDA中跟入sub_4011e0

调用了两次QueryPerformanceCount,这个函数用于获取执行时间。
实验步骤二
先来分析第二处的

第二次捕获的时间在var_110,第一次捕获的时间在lpPerformanceCount

两者相减的结果在var_114

00401286的cmp指令会将0x4b0与时间差结果比较,0x4b0是十进制的1200

如果时间差结果超过1200ms,则var_118被赋2,否则仍为初值1

之后是一个循环

循环中会使用var_118操作传入这个函数的字符串arg_0,也就是ocl.exe

所以我们也就知道,QueryPerformanceCounter检查会影响字符串的结果

我们看看如果在调试器中运行是怎样的

我们在00401286下断点,之后单步,看看之后的跳转是否有实现,从而明确var_118的值

可以看到跳转没有实现,那么var_118的值仍为1

如果是正常执行的话,var_118的值会是2

为了使得不论是否在调试器内,都让var_118保持为1,我们可以直接在00401292处通过nop实现

如下图操作即可

nop后的结果如下

然后将其复制到可执行文件

选择copy all

然后右键->save file

我这里修改为qgr.exe

od载入该文件,跳到00401518

可以看到此时是将文件名qgr.exe与peo.exe进行比较

那么我们就将文件名改为peo.exe,启动wireshark进行监控后再运行

从抓到的流量看出,此时会有dns请求解析域名adg.malwareanalysisbook.com

说明此时程序可以正常运行了
实验步骤三
回到IDA继续分析两个调用之间的指令的作用

结合od来看。我们跳到00401223

可以看到在IDA中显示的call $+5在od中显示的是call 00401228

单步

在右下角可以看到401128入栈

而pop指令则会将401228(目前的栈顶)出栈保存在eax中

单步之后可以看到确实如此

一旦恶意代码获取当前eip并存储到eax后

之后是将eax与0x2c相加,结果为0x401254,保存在eax

之后通过push将00401254入栈

如果在执行div ecx引发除零异常时,则会调用00401254处的指令

由于在00401229处ecx已经赋0了,所以一定会触发除零异常

而00401254处的指令就是用于删除异常处理的例程

我们知道,当进程运行在调试器中时,异常处理花费的时间更多,如果这一段时间差,恶意代码就知道自己是否运行在调试器中

接下来看看gethostbyname

地址是004015db,下断点执行过来,看看请求的域名是什么

但是可以看到恶意代码没有名字这个断点就终止了

这里的位置是004015b4

在IDA中定位到该位置

可以看到004015b4和gethostbyname是在两个分支中

再其上面看到了两次GetTickCount调用,当中出现了sub_401000的调用,跟入

看到了除零异常,这种操作和我们之前分析的是一样的

回到上层函数

两次GetTickCount结果保存在var_2b4,var_2bc

相减的结果保存在ecx

会比较ecx是否为1

如果ecx大于1,则往左边走

eax被置0,这是非法操作,所以恶意代码就会崩溃

也就是我们在od中遇到的情况

要想在调试器中能够走右边,我们可以将左边的三条指令nop掉

保存到可执行文件

将其命名为peo.exe

再次在gethostbyname下断点,执行,可是依旧报错

接着回到IDA

在调用gethostbyname前还调用了sub_401300

看到调用了两次rtdsc

rtdsc用于计算系统启动以来的时钟数

两次调用计算的差值保存在var_4

然后与7a120h进行比较,如果大于7a120h(10进制500000)则会往左调用sub_4010e0,跟入,关键部分截图如下

不难看出是实现了删除自身并终止进程的功能

所以我们可以将401380处的指令nop掉

还是同样的操作

此时再次在gethostbyname下断点,运行

可以看到成功了

Q3.如何重命名它,才能使这个二进制文件正常运行?

A3:重命名为peo.exe

Q4.这个恶意代码使用了哪些反调试技术?

使用了三种不同的反调试时钟检测技术: rdtsc、 GetTick Count和QueryPerformanceCounter

Q5.对每一种反调试技术而言,如果恶意代码确定它运行在调试器中,它将做什么?

如果QueryPerformanceCounter检查成功, 恶意代码会修改它正常运行所需的字符串;如果GetTickCount检查成功,恶意代码会产生一个导致程序崩溃的未处理异常;如果rdtsc检查成功,恶意代码将会从硬盘上删除自身。

Q6.为什么反调试技术在这个恶意代码中能够成功?

这个反调试技术检查获得成功,因为恶意代码修改SEH机制,在两个计时检查函数调用之间包含恶意代码自己的异常处理例程,这样它就可以捕获一个它处理的异常。异常在调试器内处理比在调试器外处理慢很多。

Q7.恶意代码使用了什么域名?

恶意代码使用的域名是adg.malwareanalysisbook.com。

实验报告要求
参考实验原理与相关介绍,完成实验任务,并对实验结果进行分析,完成思考题目,总结实验的心得体会,并提出实验的改进意见。

配套学习资源
1.《恶意代码分析实战》

标签:exe,恶意代码,运行,var,侦测,调试,调试器
来源: https://blog.csdn.net/qq_33608000/article/details/112505326

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有