zoukankan      html  css  js  c++  java
  • win脱壳_压缩壳_aspack

    [TOP]

    0,压缩壳介绍:

    ASpack是一种高效的win32可执行程序压缩工具,能对可执行文件进行压缩,使最终文件见效达到70%!
    常见的压缩壳还有Upx,nspack

    1,分析压缩壳:

    首先使用Exeinfo 查看到这个壳是:

    2,ESP定律脱壳:

    脱压缩壳最常用的方法是:ESP定律(堆栈平衡定律),其次是单步跟踪法;

    ESP定律:
    程序在加壳之后,程序运行起来,先执行的是壳的代码(称为shell部分或是stub部分),这部分的代码的功能是对原始PE文件进行还原,包括解压缩源程序的代码以及重定位代码等。
    一般在执行shell部分代码的时候,回先保存上下文环境,使用汇编指令pushed/pishfd,等执行完shell部分之后,会使用汇编指令popfd/popad进行恢复环境,前后呼应,堆栈平衡,在这个原理的前提下,一般使用esp定律进行脱壳。

    2.1 ESP定律的步骤:

    1,加载到调试器x63dbg或者OD中,发现pushad/pushfd指令时,判断程序已经加壳(这里我使用的是OD):

    2,看到pushad后,就去找到对应的popad,一般OEP就在popad附近:
    这里使用一个简单的方法,在走过pushad,call xxxxxx,之后,在esp寄存器下写入断点或者是访问断点,然后run 起程序即可断在popad的地方:

    3,下了断点后,跑起程序:

    4,找到OEP:

    2.2 dump 程序:

    在原始OEP处,右键使用OD插件OllyDump :

    进入dump 界面,注意图片上的三点,然后脱壳即可:

    然后转存文件:

    转存文件后,使用导入表修复程序,(ImportREC)对导入表进行修复

    选择dump出的文件进行修复:

    修复后可查,程序已经无壳,而且可以正常运行,而且现在可以看到是使用的VC++程序写的

    2.3 需要注意的地方:

    RVA:
    在修复导入表的时候,如果映像基址不是当前模块的基址的话,那么就无法找到IAT,需要手工指定RVA,在进一步尝试。
    随机基址:
    一般程序如果没有随机基址的话,那么修复后是可以直接运行的,可以在开始使用010editor查看程序是否开启了随机基址,并可以关闭它

    那么怎么把程序在脱壳后仍然支持随机基址呢,这个有空单独开博。

  • 相关阅读:
    List 与 Array 的相互转化及 List、Array、Set转为 String
    Java 序列化介绍及 Redis 序列化方式
    SpringBoot 整合 redis 实现 token 验证
    SpringBoot 整合 Redis 使用
    Map 某 value 为 对象数组,转为 ArrayList 对象集合
    JWT 基本使用
    Spring session + redis 实现 session共享入门
    HttpServletRequest + Filter 添加 header
    Git ahead(超前) 又behind(落后)
    web应用中路径跳转问题-相对路径、绝对路径
  • 原文地址:https://www.cnblogs.com/by-clark/p/9128985.html
Copyright © 2011-2022 走看看