一款VMP内存DUMP及IAT修复工具

前言

加壳是恶意软件常用的技巧之一,随着黑客组织技术的不断成熟,越来越多的恶意软件家族都开始使用更高级的加壳方式,以逃避各种安全软件的检测,还有些恶意软件在代码中会使用各种多态变形、加密混淆、反调试、反反分析等技巧,来阻止安全分析人员对样本进行逆向分析,一般安全分析人员拿到这种类型的样本之后,都需要对样本进行脱壳去混淆处理,找到恶意软件的核心代码才能进行下一步详细的逆向分析,以便弄清恶意软件的攻击行为意图,以及给客户提供后续的安全解决方案,例如:是什么类型和家族的恶意软件?具体有哪些恶意行为?背后的黑客组织都在做什么?为什么安全软件没有即时检测出来?使用了什么免杀绕过技巧?最后如何清除该恶意软件?等等,这些都是需要对恶意软件进行详细的逆向分析才能解答,而且逆向分析恶意软件是必须要做的,深入研究之后,你会发现其实计算机病毒跟生物病毒其实是非常相似的,正如生物病毒一样,如果不去深入的研究逆向分析病毒样本,怎么知道这款病毒对人体有哪些伤害,开发出对应的治疗药物或者免疫疫苗。

恶意软件使用的常用的加壳软件类型,一般分为三种:压缩壳、加密壳、虚拟壳,针对这几种类型的壳,常用的加壳软件,如下:

压缩壳:ASPack、UPX、PeCompact、NsPack、FSG......

加密壳:EXECryptor、ACProtect、ASProtect、Armadillo、SE......

虚拟壳:VMProtect、Themida......

除了使用这些加壳工具对恶意软件进行加壳处理之外,为了防止安全软件厂商对这些常见的壳工具进行特征提取和自动化脱壳,一些黑客组织开发的恶意软件还会使用自定义的混淆、加密、多态等技术来逃避检测,其实不管遇到什么类型的壳,不管是已知的加壳工具,还是黑客组织自定义的,使用什么混淆加密技术,最终目的都是为了逃避安全软件的检测,增大安全分析人员的分析成本,这是一种对抗升级的过程,随着黑客组织攻击技术的不断提升,未来肯定会有更多使用更高端混淆加密技术的恶意软件家族出现,技术成熟的黑客组织不仅仅使用一些现有的成熟的加壳工具,还会选使用自研究的加壳技术,黑客在不断的进步,安全研究人员也需要不断的学习进步,才能应对未来的挑战。

工具

Night Sky勒索病毒加密后的文件后缀名nightsky,如下所示:

生成的勒索提示信息文件为NightSkyReadMe.hta,内容如下所示:

同时提供了与勒索病毒黑客组织联系方式,以及受害者企业数据暗网网站信息,如下所示:

Night Sky勒索病毒采用VMP加壳处理,如下所示:

一般脱壳的步骤:

1.寻找OEP

2.内存DUMP

3.修复IAT...

这里我直接给大家介绍一款VMP内存DUMP+IAT修复工具VMPDump,代码地址:https://github.com/0xnobody/vmpdump,运行该工具对Night Sky勒索病毒进行内存DUMP+IAT修复,如下所示:

DUMP+IAT修复Night Sky勒索病毒之后,就可以对该勒索病毒进行静态分析,如下所示:

该工具自动修复了DUMP后的文件IAT符号表,并保存到了一个新的Section区段里面,如下所示:

可以对比一下修复IAT之前与修复IAT之后的代码,如下所示:

这款工具是开源的 ,有兴趣的可以去阅读源代码,其实脱壳的方法和技巧有很多,我们要明白一点,脱壳并不是我们的目的,我们的目的是为了深入地分析和研究恶意软件,搞清楚恶意软件都做了什么?通过恶意软件去深入地理解背后的黑客组织最新的一些攻击活动,获取有价值的威胁情报,如何去检测、防御,提供相应的解决方案。

脱壳是一种分析方法或手段,通过上面的这款工具,我们就可以静态分析里面的核心代码,如果不脱壳,静态分析这些加壳混淆的样本会比较困难,在静态分析的过程中遇到问题,还可以动态进行跟踪调试,逆向分析就是静态与动态相结合的方式,分析的方法和技巧也是多种多样,并没有什么固定的招式,正所谓:无招胜有招,不管用什么招式,我们的目标就是为了通过恶意软件搞清楚背后的黑客组织的攻击目的是什么。

针对这些使用常见工具加壳的恶意软件,其实还是有很多办法处理的,因为研究的人也多,所以各种公开的方法、技巧、工具也有很多,如果是遇到一些黑客组织自己编写的加壳封装工具加的壳或者使用他们自研的一些多态混淆加密加壳技术,这类的恶意样本分析起来,反而会花费更多的时间和精力,不过不管使用什么方法进行混淆加壳处理,也都只是增大了安全分析人员的分析成本,并不能完全阻止安全分析人员对样本进行逆向分析,因为逆向分析的方法和技巧太多了,攻与防一直在持续对抗。

笔者之前的文章中提到的一样,恶意样本的逆向分析本身是一项非常复杂的工作,包含的内容太多了,需要学习的东西也很多,而且需要不断的学习,不断的分析和研究各种最新的样本,因为黑客组织也在不断的更新和改进自己的攻击样本和攻击手段,几年前谁也没想到勒索病毒会成为全球网络安全的最大安全威胁之一,几年前也没有挖矿病毒这种恶意软件,随着时代的发展,可能未来这种以破坏计算机系统的恶意软件会成为一种网络攻击的高级武器隐藏在系统当中,假如有一天发生网络安全战,黑客组织通过启动这些恶意软件对系统进行破坏,会直接影响到国家的各种基础设施。

通过深入的分析研究恶意软件,我们可以发现黑客组织在开发这些恶意软件的时候不仅仅会使用多种混淆、加壳、加密等方法来隐藏自己,还包含各种攻击手法、漏洞利用技巧、各种平台语言特征、文件格式等,需要安全分析人员去学习和理解各种知识,有时候捕获到一些高端黑客组织的攻击样本,可能需要花费安全分析人员几周的时间,甚至更长的时间,有些还需要多个经验丰富的安全分析专家进行协作分析,不过这样的高端样本其实也很难捕获,通过恶意软件进行攻击已经成为了全球各大黑客组织主要的收入来源以及网络攻击武器之一。

总结

安全行业经历了这几十年的发展,黑客攻击千变万化,但核心的东西一直没有变化,安全永远是人与人的对抗,有加壳,就有脱壳,有攻,就有防、矛与盾会一直存在,技术本身就是把双刃剑,安全就是一个不断对抗升级的过程,不管使用什么安全防护技术,黑客总是会想方设法的突破防御,达到攻击目标的目的,同样黑客不断使用什么攻击技术,安全人员也总能想出各种各样的办法去解决这些安全问题,这永远是一个持续对抗的过程,黑客组织在不断提升自己的安全能力,身为安全研究人员,更不能停止前进的步伐,不然拿什么跟那些拥有十几年安全技术研究经验,而且还在不断发展壮大的黑客组织较量?

打铁还需自身硬!安全研究人员需要自己不断努力学习,提升自己的安全能力,才能应对未来的各种安全挑战,加油,一起为祖国的网络安全事业奉献自己的一份微薄之力。

最近国际形势严峻,网络安全战一触即发,基于各种基础设施的保护,使得安全会变的越来越重要,对专业安全人才的需求也会越来越多,做安全,不忘初心,与时俱进,方得始终!

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: var num1 = 10; var num2 = 20; var result = num1 - num2; console.log(result); 答案: console.log(num1 - num2); ### 回答2: VMP(Virtual Machine Program)是一种用于模拟虚拟机的编程语言,通常用于实现一些简单的计算功能。下面是一个用VMP程序演示JS减法的代码: ```vmp .var operand1 .var operand2 .var result .read operand1 .read operand2 .sub result, operand1, operand2 .print result ``` 以上代码首先声明了三个变量:`operand1`,`operand2`和`result`,分别用于存储运算的两个操作数和结果。 接着使用`.read`指令分别从输入中读取两个操作数的值。 然后使用`.sub`指令进行减法运算,将`operand1`减去`operand2`的结果存入`result`中。 最后使用`.print`指令输出结果。 在实际运行该VMP程序时,可以将它与一个VMP虚拟机一起使用,该虚拟机可以解释和执行VMP程序。通过输入两个操作数的值,虚拟机将会返回两个操作数的差作为输出结果。 需要注意的是,以上代码是一个简化的示例,实际的VMP程序可能会更加复杂,包含更多的指令和处理逻辑,以实现更复杂的功能。 ### 回答3: VMP(Virtual Machine Program)是一种虚拟机程序,用于模拟计算机或处理器的行为,并执行特定的指令集。下面是一个使用VMP实现一段JS减法的演示代码: ``` // 假设我们要计算 10 - 5 的结果 // 定义VMP指令集 const VMP_INSTRUCTIONS = [ { name: 'LOAD', // 加载指令 operation: function (registers, operand) { registers['R0'] = operand; } }, { name: 'SUBTRACT', // 减法指令 operation: function (registers, operand) { registers['R0'] -= operand; } }, { name: 'PRINT', // 打印指令 operation: function (registers) { console.log(registers['R0']); } } ]; // 定义VMP虚拟机程序 function runVMPProgram(program) { const registers = { 'R0': 0 // 定义寄存器R0,用于存储运算结果 }; program.forEach(instruction => { const opcode = instruction[0]; // 指令的操作码 const operand = instruction[1]; // 指令的操作数 // 根据操作码找到对应的指令 const vmpInstruction = VMP_INSTRUCTIONS.find(inst => inst.name === opcode); // 执行指令的操作 vmpInstruction.operation(registers, operand); }); } // 定义JS减法的VMP程序 const jsMinusVMPProgram = [ ['LOAD', 10], // 将操作数10加载到寄存器R0中 ['SUBTRACT', 5], // 从寄存器R0中减去操作数5 ['PRINT'] // 打印寄存器R0中的结果 ]; // 执行VMP程序 runVMPProgram(jsMinusVMPProgram); ``` 以上代码演示了如何使用VMP虚拟机程序模拟JS减法操作。首先定义了一组VMP指令集,其中包含LOAD、SUBTRACT和PRINT三种指令。然后定义了一个运行VMP程序的函数,其中通过循环执行指令集中的指令,并传入相应的操作数。最后定义了一个JS减法的VMP程序,将两个操作数10和5分别加载到寄存器R0中,并执行减法操作,最后打印结果。运行VMP程序之后,控制台会输出结果为5。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫正正

请我喝杯咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值