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查看程序是否开启了随机基址,并可以关闭它

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

  • 相关阅读:
    Leetcode Binary Tree Level Order Traversal
    Leetcode Symmetric Tree
    Leetcode Same Tree
    Leetcode Unique Paths
    Leetcode Populating Next Right Pointers in Each Node
    Leetcode Maximum Depth of Binary Tree
    Leetcode Minimum Path Sum
    Leetcode Merge Two Sorted Lists
    Leetcode Climbing Stairs
    Leetcode Triangle
  • 原文地址:https://www.cnblogs.com/by-clark/p/9128985.html
Copyright © 2011-2022 走看看