[转]菜鸟手脱vmp 附上脱壳过程和自己写的脚本 可跨平台

[转]菜鸟手脱vmp 附上脱壳过程和自己写的脚本 可跨平台

前言

作为一名安全研究人员,脱壳是我们必须掌握的一项技能。因为许多恶意软件和软件保护机制都会采用壳进行加壳隐藏,这给动态分析和逆向分析带来了很大的困难。本文将会分享一种脱壳技巧以及相应的脚本,希望能够对需要了解脱壳的新手们有所帮助。

壳介绍

本文要脱掉的是VMP壳,VMP是国外一种常见的保护软件。VMP采用的是虚拟机的方式进行保护,加壳后直接运行程序会先进入虚拟机,然后再将虚拟机中的代码解密出来进行运行。

脱壳过程

首先我们需要解密虚拟机代码,找到入口点,然后通过动态分析还原出未加壳的代码。我们可以使用OllyDbg调试器对加壳程序进行动态分析,具体步骤如下:

  1. 打开OllyDbg,点击File->Open选择需要脱壳的程序。
  2. 点击右侧的打开框图标,在弹出的窗口中找到.tab段,右键属性“Dump Content”,将其导出到磁盘。
  3. 使用IDA Pro软件载入导出文件,找到虚拟机代码的解密函数,将其还原为汇编码。
  4. 在解密函数中查找关键字,找到解密后的程序入口点,并记录下该地址。
  5. 在OllyDbg中找到入口点所在的地址,将其加入断点并运行程序。
  6. 当程序执行到断点时,使用Memory Dump功能将虚拟机代码保存到磁盘中。虚拟机代码的保存格式以文件头内容为准。

在还原出未加壳的代码后,我们需要对其进行修改,去除对虚拟机的依赖关系,这里就需要用到我们的脚本。

脚本介绍

本文提供了一款采用Python脚本语言写的脱VMP脚本,其具体功能如下:

  1. 自动识别程序的加壳类型,并选择相应的脱壳方式。
  2. 支持自动寻找虚拟机解密函数入口点。
  3. 可以跨平台使用。

其主要的核心代码如下:

import struct
import peutils

def vmp(name):
    print "[+] Trying Vmp ExtraUnpack ..."
    pe = pefile.PE(name)
    peutils.SignatureDatabase(nocache=True)
    if peutils.is_probably_packed(pe, signatures=True):
        if vmp_exraunpack(pe):
            return 1
    return 0

def vmp_exraunpack(pe):
    vmpextra = sections.find_xor_encrypted(pe)
    if vmpextra == None:
        return False
    print "Vmp ExtraUnpack: decrypting ..."
    s = vmpextra.name.split(".")
    fname = "%s_decrypted.%s" % (s[0], s[1])
    fw = open(fname, "wb")
    data = sections.decrypt_data(vmpextra.data, vmpextra.VirtualAddress, 0, vmp_key)
    fw.write(data)

    fw.close()

结语

本文简单介绍了一种脱壳技巧,并且提供了相应的脚本。这里需要注意的是,在进行脱壳操作时,必须保证所进行的操作都是在合法的条件下进行的,不得违反相关法律法规。如果对脱壳技巧有任何疑问,欢迎进行讨论。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:[转]菜鸟手脱vmp 附上脱壳过程和自己写的脚本 可跨平台 - Python技术站

(0)
上一篇 2023年3月29日
下一篇 2023年3月29日

相关文章

  • 9个顶级开发iot项目的开源物联网平台

    9个顶级开发IoT项目的开源物联网平台 在现代工业和农业中,物联网(IoT)技术已经被广泛使用。为了实现更智能、可靠和高效的物联网解决方案,需要一个强大的物联网平台。在本文中,我们将介绍9个顶级的开源物联网平台,这些平台可以帮助开发人员快速搭建物联网系统,从而实现更好的智能化管理和控制。 1. Eclipse IoTS Wapama Eclipse IoTS…

    其他 2023年3月29日
    00
  • 在Linux系统上加密文件和目录的教程

    Linux系统上加密文件和目录的教程 1. 安装加密软件 Linux系统上有很多加密软件可供选择,请根据需要选择相应的软件进行安装。本文以GnuPG为例,介绍其基本使用方法。安装命令如下: sudo apt-get install gnupg 2. 生产GPG密钥对 GPG加密软件采用了公钥加密和私钥解密的方式进行文件加密,因此,需要先生产密钥对。执行以下命…

    other 2023年6月27日
    00
  • Android与iOS包体优化及一键自动打包脚本

    现在我来详细讲解“Android与iOS包体优化及一键自动打包脚本”的攻略,具体步骤如下: 一、Android与iOS包体优化 1. Android包体优化 1.1 压缩图片 在Android开发中,经常会用到很多图片资源,如:icon、banner、背景等,而图片资源一般占用的空间比较大,因此,对图片资源进行压缩可以有效地减小APK的体积。使用Androi…

    other 2023年6月27日
    00
  • Java中包的概念和用法实战案例分析

    Java中包的概念和用法实战案例分析 1. 包的概念 在Java中,包(Package)是一种用于组织和管理类和接口的机制。它可以将相关的类和接口组织在一起,形成一个独立的单元,方便代码的管理和维护。包的主要作用有: 命名空间管理:包可以避免类名冲突,通过包名的层次结构,可以更好地组织和管理类和接口。 访问控制:包可以定义访问权限,控制类和接口的可见性,提供…

    other 2023年9月7日
    00
  • 关于web服务:httpget请求的最大长度?

    关于Web服务: HTTP GET请求的最大长度 在Web服务中,HTTP GET请求是一种常见的请求类型。但是,GET请求的URL长度是有限制的。以下是关于Web服务: HTTP GET请求的最大长度的完整攻略,包括常见问题和两个示例说明。 常见问题 1. HTTP GET请求的最大长度是多少? HTTP GET请求的最大长度取决于浏览器和服务器的限制。通…

    other 2023年5月9日
    00
  • 微信小程序开发实现的IP地址查询功能示例

    ip: ip }, success: (res) => { const result = res.data.result; // 假设API返回的结果中有一个result字段 this.setData({ result: result }); }, fail: (error) => { console.error(‘查询失败’, error); …

    other 2023年7月31日
    00
  • 在Mac OS上安装Go语言编译器的方法

    在Mac OS上安装Go语言编译器的方法 概述: 本文将介绍Mac OS上安装Go语言编译器的方法,主要包括以下步骤:安装Homebrew,使用Homebrew安装Go,配置Go环境变量。 步骤一:安装Homebrew Homebrew是Mac OS上常用的包管理器之一,可以方便地安装和管理各种软件包。 打开终端(Terminal)应用程序,执行以下命令安装…

    other 2023年6月26日
    00
  • 部署acfs笔记

    部署ACFS笔记 ACFS(Automatic Storage Management Cluster File System)是Oracle提供的一种高可用性、高性能的分布式文件系统,可以用于存储Oracle数据库和其他应用程序的数据。本攻略将介绍如何部署ACFS。 环境准备 在部署ACFS之前,需要准备以下环境: Oracle Grid Infrastru…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部