恶意代码分析实战 12 对抗反汇编

news2025/1/10 20:28:33

12.1 Lab15-01

问题

  1. 这个二进制程序中使用了何种对抗反汇编技术?

首先,使用IDA载入该文件。
vmware_3qeaOTWdjf.png
我们可以看到这个程序在地址0040100E处存在一个对抗反汇编技术的痕迹。
eax总是被置为零,jz跳转总是被执行。所以我们认为这一行是假冒的call指令,,将004010010置为数据。下面的几行再转换为代码。
![vmware_3LHwHVowYY.png](https://img-blog.csdnimg.cn/img_convert/103408d6bb4fe15bbbe174336a676059.png
vmware_YBJyf64myx.png
这个程序使用一个永远为假的条件分支:xor eax,eax,随后是一个jz指令。

  1. 这个二进制程序使用了什么流机器码来欺骗反汇编过程?

这个程序欺骗反汇编器反汇编机器码xE8,它是ca11(占5个字节)指令的第一个字节,然后紧跟着的是一个z指令。

  1. 这种对抗反汇编技术被使用了多少次?

永假的条件分支在这个程序中被使用了5次。

  1. 什么命令行参数会让程序输出“GoodJob”?

选中主函数,按P键转换成函数。
vmware_SHZTZQQlnM.png
分析可知,命令行参数需要为pdq。
vmware_QuSe8QZiFH.png
试验一下。
vmware_8hHAY1mpEP.png

12.2 Lab15-02

问题

  1. 程序初始化请求的URL是什么?

首先,将反汇编的地方全部修正,使用idc脚本对无用机器码置空。

#include<idc.idc>
static main()
{
    auto ea = ScreenEA();
    PatchByte(ea, 0x90);
}

vmware_xJYvxRamPQ.png
vmware_e5GFMxzL3L.png
进入这个函数检查。
vmware_FkVHMJgCNs.png
找到了URL。

  1. User-Agent域是如何产生的?

vmware_3RjlbURqj0.png
chrome_ce4jdhtwYu.png
原始的User-Agent经过了如图所示的变换。

  1. 初始化请求时,程序在内存页中查找什么?

vmware_yQT5NalxgG.png
查找的是字符串“Bamboo”。

  1. 程序如何处理它从页中提取的信息?

vmware_aV9Mq0daLM.png
下载的HTML中字符串Bamboo::的指针存储在var_18中,如所示。第二个strstr,它被调用来搜索下一个::。一旦找到了两个冒号,下面的代码就用一个NULL替换第个冒号,它的目的是终止Bamboo::和::之间包含的字符串。
存储在var_18中的指针加8。这恰好是字符串Bamboo::的确切长度,这是一个引用指针。此操作之后,不管随后是否有号,这个指针都会被引用。代码已经发现了尾部的冒号,并用NULL替换了它。所以,不管在Bamboo::和::之间存储了什么内容,我们有了存储在变量var_108中,以NULL终止的字符串。
vmware_vzdcM4fHZp.png
Internetopenur1A的第二个参数(var_18)是一个要打开的URL。因此,Bamboo::和尾部冒号之间数据的目的,就是程序要下载的一个网址。分析行0x0040126E与0x004012E3之间的代码(此处未显示),可以发现代码清单15-13L中打开的URL被下载到文件AccountSumm aryxls.exe中,它调用行0x00401300位置的ShellExecute函数进行启动。
除了搜索字符串Bamboo外,程序还查找一个额外的:,它被转换为一个NULL结束符。Bambo与结束符之间的字符串被下载到一个名为Account Summary.xls.exe的文件中,下载完后,程序运行它。

12.3 Lab15-03

问题

  1. 恶意代码怎样被初始化调用?

首先,到main函数的顶部检查这一部分代码。
vmware_dRpoOLsYHa.png

mov eax,400000h
or eax,148ch
mov [ebp+ 4],eax

这段代码将0x400000和0x148c一起进行或操作,得到结果0x0040148C,并将它存入EAX。代码将这个值载入栈中相对于EBP的位置,按Ctrl+K组合键,弹出当前函数的栈帧视图,你可以看到偏移量4指向返回指针。覆盖这个返回地址,在main函数结束时,地址0x0040148C处的孤立代码将替代C运行库中正常结束的代码获取执行。
我们可以使用OD来查看这一过程。
vmware_RxOkLVVkes.png
通过覆盖main函数的返回地址,初始化调用恶意代码。

  1. 恶意代码都做了什么?

· 首先,将一些不能识别的地方修改好。
vmware_hk4ocNENZJ.png
该段代码是从链中摘除异常处理例程,并从栈中删除了记录。jmp代码是以内部指向的jmp指令形式存在的对抗反汇编技术。将光标放到0x4014d7,按D键将jmp指令转化为数据。然后选择行0x004014D8,按C键,将它转换为代码。
vmware_5gqJzUwEfc.png
URLDownloadToFileA的第二和第三个参数分别是URL和文件名。检查全局地址unk_403010和unk_403040,点进去查看一下数据,看起来像是被加密了,于是我们怀疑上面的函数sub_401534应该解密了这些数据。
解密后是 http://www.practicalmalwareanalysis.com/tt.html和spoolsrv.exe
vmware_PAgk3LFXzR.png
碰到的最后一个对抗反汇编技术。
vmware_MrQxkjTKO2.png
恶意代码从一个URL下载文件,并且用WinExec启动它。

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

恶意代码使用的URL是http://www.practicalmalwareanalysis.com/tt.html。

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

恶意代码使用的文件名是spoolsrv.ere。

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

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

相关文章

Docker的架构设计

前面我们研究了Docker容器的本质是一个特殊的进程&#xff0c;那么这个特殊进程是如何创建、如何终止的那&#xff1f;也就是说是谁来管理这个容器进程的生命周期的那&#xff1f;在mac操作系统中我们可以通过活动监视器来观察操作系统里面有哪些进程&#xff0c;以及通过活动监…

推荐算法:序列召回

目录 序列召回&#xff08;一&#xff09; 序列召回&#xff08;二&#xff09; 序列召回&#xff08;三&#xff09; 序列召回&#xff08;四&#xff09; 序列召回&#xff08;一&#xff09; 源自论文&#xff1a;http://arxiv.org/abs/1511.06939 基于GRU的序列召回中通过…

青训营项目实战1

项目实战 实现掘金青训营报名页码的后端部分 需求描述 展示话题&#xff08;标题、文字描述&#xff09;和回帖列表 不考虑前端页面实现&#xff0c;仅实现一个本地web服务 话题和回帖数据用文件存储 附加要求&#xff1a; 支持发布帖子 本地id生成要保证不重复 append文件 更…

【ONE·C || 指针】

总言 C语言&#xff1a;指针的使用介绍。 文章目录总言1、指针初阶1.1、是什么1.2、指针和指针类型1.2.1、指针类型介绍1.2.2、作用一&#xff1a;指针解引用1.2.3、作用二&#xff1a;指针整数1.3、野指针1.3.1、野指针是什么1.3.2、为什么存在野指针1.3.3、如何避免野指针1.4…

ReentrantLock从入门到踢门

1. ReentrantLock是什么Lock提供了比synchronized方法和语句更广泛的锁定操作。 更灵活的结构化&#xff0c;并且支持多个相关联的对象Condition。它实现了Lock、Serializable序列化接口。图1 ReentrantLock实现接口图1.1 Lock1.1.1 lock// 获取锁 void lock();1.1.2 lockInter…

SpringMVC -->ant风格的路径 -->占位符 -->获取请求参数 -->@RequestParam

文章目录SpringMVC支持ant风格的路径SpringMVC支持路径中的占位符SpringMVC获取请求参数通过servletAPI获取通过控制器方法的形参获取请求参数RequestParam注解处理请求参数和控制器方法的形参的映射关系代码样例SpringMVC支持ant风格的路径 &#xff1f;&#xff1a;表示任意的…

爆火微信公众号自定义早安推送,爱她就给她推送

为女朋友打造专属早安推送先上截图电脑端看的效果手机端看的效果一、申请微信公众号测试号二、让他/她扫码关注测试公众号三、新增模板消息四、天气API五、使用 leancloud 部署云函数六、源代码先上截图 电脑端看的效果 手机端看的效果 一、申请微信公众号测试号 https://mp.w…

Kettle(7):插入/更新组件

1 组件介绍 插入/更新组件能够将Kettle抽取的数据&#xff0c;与某个表的数据进行对比&#xff0c;如果数据存在就更新&#xff0c;不存在就插入。 2 需求 修改 t_user中的张三这一行数据&#xff0c;修改age为80 同时&#xff0c;我们想要使用Kettle将 t_user1 中的张三这一…

【编程入门】N种编程语言做个记事本

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记&#xff0c;将更为简化&#xff0c;去掉了网络调用&#xff0…

量化选股——基于多因子模型的量化策略(第1部分—因子测算策略构建)

文章目录1.多因子模型概述2.因子挖掘3.多因子策略4.多因子策略构建基于多因子的策略通用流程Fama-French三因子因子效果测算方法因子测算结论&量化策略构建东西有点多&#xff0c;拆开成多个文章&#xff0c;边写边整合~&#xff0c;应该会分成2部分&#xff1a; 第1部分—…

【每日一道智力题】之坤坤猜生日(面试高频)

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;每日一题 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最…

文本特征工程——下篇

文本特征下篇 针对梯度提升树模型对文本特征进行特征工程&#xff0c;我们需要充分挖掘LabelLabelLabel编码丢失信息&#xff0c;例如上面的名字特征。内部存在非常强的规律&#xff0c;Mr等信息。这些信息反映了性别相关的信息。如果直接进行Label编码就会丢失此类信息&#…

高通平台开发系列讲解(GPS篇)NMEA数据包解析

文章目录 一、通用NMEA语句类型二、 NMEA语句格式2.1、GSV语句2.2、RMC语句2.3、GSA语句2.4、VTG语句2.5、DTM语句2.6、GNS语句2.7、GGA语句2.8、GLL语句2.9、GST语句2.10、ZDA语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 NMEA-0183是美国国家海洋电子协会为海…

【读论文】Going deeper in spiking neural networks Vgg and residual architecture

frontiers in Neuroscience 2019 摘要 本文提出一种新的方法来构建深度SNN&#xff0c;并在复杂视觉识别问题上证明其有效性&#xff08;如CIFAR10和ImageNet&#xff09;&#xff1b;该方法应用于VGG和残差网络结构&#xff0c;并获得最优精度&#xff1b;最后给出稀疏事件驱…

力扣刷题| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

文章标题LeetCode 20. 有效的括号题目链接&#x1f517;思路代码实现LeetCode 1047. 删除字符串中的所有相邻重复项题目链接&#x1f517;思路代码实现LeetCode 150. 逆波兰表达式求值题目链接&#x1f517;思路代码实现LeetCode 20. 有效的括号 题目链接&#x1f517; LeetC…

运动基元(一):Dubin‘s曲线【part2】

三、六种Dubin’s轨迹的实现——开始摆盘啦 3.1 LSL LSL的第一段圆弧的曲率 k 1 = k m a x > 0 → s i g n ( k 1 ) = 1 k_1=k_{max}>0\rightarrow

118、【回溯算法】leetcode ——40. 组合总和 II:回溯法+剪枝优化(C++版本)

题目描述 原题链接&#xff1a;40. 组合总和 II 解题思路 本题的特点是&#xff0c;一个允许结果中出现相同数字&#xff0c;但每个元素仅能被选取一次。结果与结果之间不允许有重复&#xff0c;需要去重。 与 77. 组合&#xff08;回溯法剪枝优化&#xff09; 的相同之处在于…

【JavaSE专栏9】Java 注释知多少

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

斐波那契数列的--------5种算法(又称“兔子数列”)

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;…

决策树-剪枝处理

前言&#xff1a;理解《机器学习》P79-83中的决策树剪枝示例。 决策树生成 原始数据集如下所示&#xff0c;前10行为训练集&#xff0c;后7行为验证集&#xff0c;由此数据集可生成如下所示的决策树。 下面解释未进行剪枝操作的决策树为何如上图所示。 不对解释每个结点和分支…