恶意代码分析实战 13 反调试技术

news2024/10/7 18:26:07

13.1 Lab16-01

首先,将可执行文件拖入IDA中。
vmware_DeM13JYUYG.png
我们可以看到有三处都调用了sub_401000函数,并且代码都在哪里停止执行。由于没有一条线从这些方框中引出,这就意味着函数可能终止了程序。
右侧每一个大框中都包含一个检查,这个检查决定是调用sub_401000函数,还是让恶意代码继续运行。
函数sub_401000非常可疑,因为没有从它返回运行,所以进一步研究这个函数。
vmware_nirASzu2Bz.png
函数sub_401000以一个_exit调用结束,终止了这个恶意代码。ShellExeuteA调用通过参数/c del Lab16-01.exe,启动cmd.exe,从硬盘上删除恶意代码。ton过检查,我们发现79个对sub_401000函数的交叉引用,其中大多数是来自于上图中的反调试代码。
vmware_3QeG8gBjYe.png
BeingDebugged标志
vmware_OMqx2yrEba.png
用位置fs:[30]将PEB结构载入EAX,然后取第二个字节并一如BL寄存器。
进程在运行一个调试器时,PEB结构中偏移量2处的BeingDebugged属性被设置为1,单位了恶意代码在调试器中正常运行,我们需要将其置为0.首先,我们选择手动设置。
首先,dump指令到达BeingDebugged处。
:::success
dump fs:[30]+2
:::
vmware_uY6bO1sjZu.png
使用插件。
vmware_NsJQANiDSF.pngvmware_FBnDXQWC6M.png

ProcessHeap标志
** **vmware_Xlge7O5WYr.png
使用fs:[30]将PEB结构载入到EAX中,然后将偏移0x18处的ProcessHeap移入EAX中,然后ForceFlags(ProcessHeap偏移0x10)移入EAX,将ForceFlags与0比较。
在这个位置上,IDA加入了错误指令db 3Eh,可以使用显示机器码的方法来试验。
:::success
dump ds:[fs:[30]+0x18]+0x10
:::
可以手动也可以使用插件,将此处改为0填充。
NTGlobal标志
vmware_lS17qr67BG.png
用fs:[30]将PEB结构载入EAX中,访问NTGlobalFlag并将其移入EAX处。比较NTGlobalFlag与0x70,然后进行判定。
使用如下命令到达NTGlobalFlag处。
:::success
dump fs:[30]+0x68
:::
也可以使用插件。
题目

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

恶意代码通过检查BeingDebugged、ProcessHeap,以及NTGlobalFlag标志的状态来判断自己是否运行在调试器中。

  1. 当每种反调试技术成功执行时,有什么现象

如果恶意代码的任意一种反调试技术成功,那么它将终止,并从硬盘上删除自身。

  1. 如何应对这些反调试技术?

在恶意代码运行过程中,你可以使用IDAPro手动修改这些跳转标志,但这样往往事倍功半,因为恶意代码会非常频繁地检查内存结构。替代方法是手动或者使用PhantOm或ImmunityDebugger(mmDbg)PyCommandhidedebug之类的OllyDbg插件来修改恶意代码检查的这些数据结构。

  1. 如何在调试过程中手动修改检测的数据结构

用OllyDbg单步转储并修改这些结构,入上分析过程所示。

  1. 哪一种OllyDbg插件可以帮你逃避恶意代码的反调试技术?

OllyDbg的插件PhantOm和ImmDbgPyCommandhidedebug都可以逃避这些恶意代码的检查。

13.2 Lab16-02

题目

  1. 在命令行中运行Lab16-02.exe时,会发生什么?、

vmware_3jTeuB2fS7.png
显示需要4字节的密码。

  1. 当使用猜测的命令参数运行Lab16-02.exe时,会发生什么?

vmware_9MqkqcUXEM.png
显示密码错误。

  1. 命令行密码是什么?
  2. 使用IDAPro加载Lab16-02.exe。在main函数的何处可以找到strncmp函数?

vmware_l4ST2jbZYg.png
0x0040123A.

  1. 在默认设置下,将这个恶意代码加载到OlyDbg中会发生什么?

用OllyDbg的默认设置将程序载入OllyDbg时,程序会立即终止。

  1. Lab16-02.exe中PE结构的独特之处是什么?

使用PEID进行查看。
vmware_jP8kuqyBPL.png
存在一个.tls节,说明这个程序可能存在反调试技术。

  1. 回调(callback)发生在哪些位置?(提示:在IDAPro中使用Ctrl+E组合键。)

vmware_UO8up9QfAe.png
vmware_lhLxJYsHPG.png

  1. 恶意代码使用哪一种反调试技术使它在调试器中立即终止运行?如何避免这种检查?

查看回调函数。
vmware_dbVcnV8suu.png
检查类名,如果是“OllyDbg”就退出。
使用spy++查看。类名确实是OllyDbg。
vmware_9CIS9xLtst.png
可以使用PhantOm插件进行绕过。
chrome_KZkInCdB86.png
这样就可以绕过了。
vmware_s7hjS19SuQ.png

  1. 当你禁用反调试技术后,你在调试器中看到的命令行密码是什么?

使用OD启动程序,跳转到字符串对比的位置。
vmware_lwxJ1wFXrg.png
vmware_VdBBHGnQCr.png
密码应该是前4个字节,byrr。

  1. 调试器中找到的密码在命令行中运行有效吗?

使用bzrr,成功。(所使用的的OllyDbg插件较为完善,反调试技术被自主清除。)

  1. 哪种反调试技术为调试器和命令行设置不同的密码?如何防御它们?

OutputDebugstringA的结果和BeingDebugged的属性被用作解码算法的输入。可以使用PhantOm插件,确保BeingDebugged属性被置为0,并且你可以使用NOP替换0x401051处add指令。

13.3 Lab16-03

题目

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

vmware_FTb7zSVlfX.png
看到了导入函数,还有/c del、>>NULL、cmd.exe字符串。

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

没有发生什么。

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

vmware_NkuffgYhHW.png
使用OD跳转到字符串对比位置。OD里把反调试的这个jle跳转给换成jmp跳转即可绕过本反调试,拿到真正的文件名:

vmware_cAkOExElSB.png
所以重命名为peo.exe即可。

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

vmware_q3OdpfO5Jl.png
QueryPerformanceCounter技术
vmware_bG8wxqnHh9.png
GetTickCount技术。
在这之后紧接着调用了函数sub_401300:和之前的反调试一个路子,不过如果发现在调试了会触发自我删除,一样可以修改跳转条件来绕过。

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

对于QueryPerformanceCounter反调试,会修改判断的字符串;对于GetTickCount反调试,会产生导致程序奔溃的异常;对于rdtsc反调试,会触发自我删除程序

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

通过使用SEH异常,使得程序在调试器中运行比实际中慢得多,从而确保这种反调试能够成功。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Makefile学习②:Makefile基本语法

Makefile学习②:Makefile基本语法 Makefile基本语法 目标: 依赖 (Tab)命令 目标:一般是指要编译的目标,也可以是一个动作 依赖:指执行当前目标所要依赖的先项,包括其他目标&#xf…

neural collaborative filtering 阅读笔记

本文主要介绍了一种一种基于神经网络的技术,来解决在含有隐形反馈的基础上进行推荐的关键问题————协同过滤。 2.1 Learning from Implicit Data yui1,(ifinteraction(useru,itemi)isobserved)y_{ui} 1,(if interaction (user u, item i) is observed)yui​1,(…

还在为ElementUI的原生校验方式苦恼吗,快用享受element-ui-verify插件的快乐吧(待续)

element-ui-verify 本文章意在介绍element-ui-verify插件使用&#xff0c;以及对比elementUI原生校验方式&#xff0c;突显该插件用少量代码也能实现原生的校验效果甚至更好。 1.先观察一个示例 <template><d2-container><el-form :model"ruleForm&qu…

二叉树超级经典OJ题

目录1.根据二叉树创建字符串2.二叉树的层序遍历3.二叉树的层序遍历II4.二叉树的最近公共祖先5.二叉搜索树与双向链表6.从前序与中序遍历序列构造二叉树1.根据二叉树创建字符串 根据二叉树创建字符串 给你二叉树的根节点root&#xff0c;请你采用前序遍历的方式&#xff0c;将二…

编码器M法测速仿真(Simulink)

编码器M法和T法测速的详细讲解可以参看下面的文章链接,这里不再赘述,这里主要介绍Simulink里建模仿真,带大家从另一个角度理解编码器测速原理。 PLC通过编码器反馈值计算速度的推荐做法(算法解析+ST代码)_RXXW_Dor的博客-CSDN博客_编码器计算速度程序实例PLC如何测量采集编…

Power BI中类似Vlookup的查询筛选功能如何实现

一、问题描述 在Excel中有一个非常经典的函数Vlookup&#xff0c;可以通过首列查找&#xff0c;返回相对应的其他列的值。这种功能&#xff0c;在Power BI中没有Vlookup函数&#xff0c;那么该如何实现这一功能呢&#xff1f;下面通过一个实例做分析演示。 二、数据源 已知某…

厚积薄发打卡Day114:Debug设计模式:设计原则(二)<接口隔离原则、迪米特法则>

厚积薄发打卡Day114&#xff1a;Debug设计模式&#xff1a;设计原则&#xff08;二&#xff09;<接口隔离原则、迪米特法则> 接口隔离原则 定义 用多个专门的接口&#xff0c;而不使用单一的总接口&#xff0c;客户端不应该依赖它不需要的接口 一个类对一个类的依赖应…

如何将 Spring Boot 项目提交到 Gitee 进行远程管理?

如何将初始化完成的 Spring Boot 项目&#xff0c;提交的 Gitee 仓库&#xff0c;进行远程管理&#xff1f; 目录 如何将初始化完成的Spring Boot项目&#xff0c;提交的Gitee仓库&#xff0c;进行远程管理&#xff1f; 0. 环境说明 1.创建并初始化Spring Boot项目 2.创建…

如何设计一个 70w 在线人数的弹幕系统 ?

背景 现在的抖音、快手等一系列能支持直播的软件如何做到的同一时间万人发弹幕的功能的&#xff1f; 问题分析 带宽压力&#xff1b; 弱网导致的弹幕卡顿、丢失&#xff1b; 性能与可靠性。 带宽优化 启用Http压缩 HTTP压缩是指在Web服务器和浏览器间传输压缩文本内容的方…

网络— — 二层交换机

网络— — 二层交换机 1 交换机端口 g0/3 g&#xff1a;1000M/s0&#xff1a;模块号3&#xff1a;接口号 每个端口网速&#xff1a; Ethernet 10M/s FastEthernet 100M/s GigabitEthernet 1000M/s TenGigabitEthernet 10000Mb/s 2 数据链路层&#xff08;2层&#xff09; Data…

python图像处理(opencv入门)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们讨论了fpga的基本操作,这些都是作为整个图像处理的基础部分进行学习的,本质上还是希望用fpga来对部分算法进行加速处理。当然,fpga实现的只是一部分算法,并不是所有的算…

【手写 Promise 源码】第二篇 - Promise 功能介绍与特性分析

一&#xff0c;前言 上一篇&#xff0c;对 Promise 进行了简单介绍&#xff0c;主要涉及以下几个点&#xff1a; Promise 简介和基本使用&#xff1b;Promise 和 callback 对比&#xff1b;Promise 的重要性和作用&#xff1b;Promise 使用场景&#xff1a;Promisify 封装&am…

Python Flask 框架设置响应头,一篇文章学明白

flask 响应头设置&#x1f4d6; 导读&#x1f4d6; Python Flask 设置响应头&#x1f389; response.headers 属性&#x1f389; flask.abort() 函数返回特定状态码&#x1f4d6; Flask 中可设置的响应头参数&#x1f4d6; 其他关于响应头的配置&#x1f381; 使用中间件&#…

[Python]调用pytdx的代码示例

安装pytdxpip install pytdx简单示范from pytdx.hq import TdxHq_API api TdxHq_API() # 数据获取接口一般返回list结构&#xff0c; with api.connect(119.147.212.81, 7709): # 返回普通listdata api.get_security_bars(9, 0, 000001, 0, 10) print(data)输出结果[Ordered…

康巴丝(compas)某Wi-Fi万年历无法自动校时的问题

笔者前两年购买过一块康巴丝牌的电子万年历&#xff0c;该万年历的最大特点可以通过Wi-Fi联网自动校时。 后来的某一天&#xff0c;笔者将原来的H3C AP&#xff08;11AC&#xff09;升级为锐捷AP&#xff08;11AX&#xff09;。 在之后的几个月中&#xff0c;发现这块电子万年…

Linux常用命令——setsebool命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setsebool 修改SElinux策略内各项规则的布尔值 补充说明 setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组。SELinux的策略与规则…

【云原生】Prometheus 监控系统的初步了解与系统搭建

内容预知 前言 1. Prometheus的相关知识 1.1 Prometheus的认识与了解 1.2 Prometheus的特点 1.3 Prometheus存储引擎TSDB 的特点优势 1.4 Prometheus 的生态组件 &#xff08;1&#xff09;Prometheus server &#xff08;2&#xff09;Client Library &#xff08;3&a…

主流的操作系统(带你快速了解)

&#x1f4dc; “作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴。 &#x1f341; 操作系统【带你快速了解】对于电脑来说&#xff0c;如果说…

如何安装双系统与多系统(带你快速了解)

&#x1f4dc; “作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴。 &#x1f341; 操作系统【带你快速了解】对于电脑来说&#xff0c;如果说…

开放式基金净值历史数据 API 数据接口

开放式基金净值历史数据 API 数据接口 实时净值&#xff0c;历史数据&#xff0c;多维度指数参数。 1. 产品功能 支持所有开放式基金净值历史数据查询&#xff1b;可定义查询指标与时间范围&#xff1b;支持所有开放式基金净值历史数据查询&#xff1b;不同的输入指标返回不同…