zoukankan      html  css  js  c++  java
  • 脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律

          脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律

    一丶什么是ESP定律

    首先我们要明白什么是壳.壳的作用就是加密PE的.

    而ESP定律就是壳在加密之前,肯定会保存所有寄存器环境,而出来的时候,则会恢复所有寄存器的环境.

    这个就成为ESP定律.(当然我个人理解.可能有更好的理解,请下方评论,我会更改)

    pushad的时候,肯定所有寄存器入栈.

    二丶利用工具脱掉ASPACK2.12的壳

    首先,我们找一个带壳的工具,利用PEID查壳.查看是什么壳.

     

    OD附加进程.

    可以看出,一开始就已经pushad (保存所有寄存器环境)了,那么只需要找到popad的位置即可.

    思路:

           因为pushad的时候,所有寄存器传参,当popad的时候,肯定会修改寄存器的值

    所以在栈中下硬件访问或者硬件写入断点.

    先F8走一步,看栈

     

    看得出,所有寄存器已经入栈了.所以我们在数据窗口中,输入栈地址.(保存寄存器的栈地址,随便哪个都可以)然后下硬件访问断点.

     

    我是定位到栈顶的位置,12ffa8的位置,当然也可以是下边的.

    下硬件访问或者硬件写入断点.

     

    然后F9运行起来.发现会断下来.

     

    这个地方则是出来的地方,那么ASPack的壳有一个特征,就是出来之后会跳转,然后有两个ret

    因为程序是32位程序,所以我们要放到32位的虚拟机里面去脱壳.

    然后我们继续F8跟随.一直跟随到一个JMP位置,这个地方就是OEP了.

     

    然后我们使用OD的插件去脱壳, 这个插件是修复PE的导入表的.可以直接利用.

     

    然后点击脱壳即可,如果没有这个工具,你需要自己手动解析PE,然后重建导入表才可以.

    默认选择方式1

    脱壳之后,查看是否还有加密.

     

     没有pushad保存寄存器环境了,已经成功脱壳.

     课堂代码资料: 链接:http://pan.baidu.com/s/1skKYA5n 密码:2di6

     作者:IBinary
    出处:http://www.cnblogs.com/iBinary/
    版权所有,欢迎保留原文链接进行转载:)

    注意,一定是在32位系统下脱壳.

  • 相关阅读:
    C# 图片与Base64的相互转化
    LeetCode 303. Range Sum Query – Immutable
    LeetCode 300. Longest Increasing Subsequence
    LeetCode 292. Nim Game
    LeetCode 283. Move Zeroes
    LeetCode 279. Perfect Squares
    LeetCode 268. Missing Number
    LeetCode 264. Ugly Number II
    LeetCode 258. Add Digits
    LeetCode 257. Binary Tree Paths
  • 原文地址:https://www.cnblogs.com/iBinary/p/7726721.html
Copyright © 2011-2022 走看看