首页
社区
课程
招聘
[原创]脱壳之aspack压缩壳
发表于: 2022-1-4 16:26 23018

[原创]脱壳之aspack压缩壳

2022-1-4 16:26
23018

  1. 寻找原始OEP
  2. dump内存到文件
  3. 修复文件

1. 堆栈平衡法(ESP定律)
  壳代码就像一个函数,进入时会开辟堆栈、保存寄存器环境,退出时会恢复堆栈、恢复寄存器。所以应该是堆栈平衡的,那我们可以在壳代码操作了堆栈后对堆栈设置访问或写入断点,然后运行程序,当断点命中的时候,应该就是退出壳代码的时候。在其附近单步几次,应该就能到达程序的原始OEP。
2. 特征定位法
在我们熟悉的程序中,我们可以使用特征来定位程序原始OEP。特征有几种:
① 二进制特征
  比如release版的VS2013是:
    oep入口特征:E8????????E9
  第一个CALL内的特征:5657BF4EE640BBBE0000FFFF3BC7
  注意:搜索特征应该在程序解密之后再搜索,一般让程序跑起来,在程序代码段开始处搜索,使用Ctrl+B搜索二进制
② API特征
  比如release版的VS2013的第一个API调用是:
    GetSystemTimeAsFileTime
  比如vc6.0的第一个API调用是:
    GetVersion
  比如Delphi程序第一个API调用是:
    GetModuleHandleA
③编译器特征
  IAT调用不同的编译器生成的调用机器码是不一样
    vs -》 call [IAT地址] -》 FF15 xx xx xx xx
    delphi -> jmp [IAT地址] -》 FF25 xx xx xx xx
3. 单步跟踪法

一般再执行Shell部分代码时,会先保存上下文环境,使用push指令(pushad/pushfd),执行Shell部分代码之后,再使用pop指令(popad/popfd)恢复环境,使堆栈平衡,故使用ESP定律进行简单脱壳。

图片描述

图片描述
图片描述

图片描述

图片描述
图片描述
图片描述

图片描述
图片描述


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2022-1-4 19:22 被HLuKT编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//