背景

VMP的介绍

相信看到这篇文章的人都听过或了解过vmp,基本遇到vmp加壳的程序基本就是右键回收站,但是如果只是简单的加了一层vmp壳的话,还是可以分析的。

vmp加壳方式

下面是程序代码

int main() {printf("222222222\n");system("pause");return 0;
}

然后把随机基地址关一下,方便之后查找main函数

这里说明一下,目前大部分人加壳都会虚拟化代码段,这样的话基本上就需要右键回收站了,主要是核心代码被vm了,还原的话基本上是不太现实的。

下面是主函数被vm之后的样子,左边是被vm的,已经看不出函数的原来样子,在多几个call基本分析不了,当然还有其他方式爆破,侧性道攻击等 一些手段。

剩下的少部分不太了解vmp的人会直接把程序放进去选择反调试拉满和虚拟姬拉满(这里真机所以不管它)

好了,来看看这样加壳之后的主函数什么样,和原来的基本是 一样的,主要是iat方面的加密,这里不涉及iat的修复。

开整

脱壳的同学们都知道,要脱壳不得先在调试器跑起来,这里选择x96加上ScyllaHide插件,程序就能正常的跑起来了,记得点上drx Protection,之后会用到硬件断点。

相关的vmp反调试方式可以查看这个看雪的blog

如何查找oep,这里给几个思路

1、让程序正常跑起来,然后根据编译器的特征码去定位

2、壳会在解密代码段完成之后跳转到程序正常的.text段执行

3、程序在到达oep的时候需要还原寄存器,可以在栈上面做点事情

好了,顺着这个思路继续往下看看,第一个,有特征的情况下可以试试,但是编译器种类还是比较多的,所以这里从第二个开始。

加载程序然后在程序,text下一个内存执行断点(程序最终是要走到原始的程序入口的,所以这里vm还原代码段结束之后,会触发这个断点)

但是会发现被检测到了

emme,看来直接下.text段还不行,于是观察了一下,发现在触发第一次异常之后对.text下执行断点之后就不会被检测了,确实也断下了,但是问题是这里不是oep啊,还是会来回跳,距离oep的执行还有很长的一段距离。

所以,这里想到了下断VirtualAlloc,在程序真正执行起来之前对.text进行下段,这里可以看到断点如下,在观察一下周围的指令,发现差不多快到真正的oep的样子了,但是实际上还很远,这里还在壳里跑。作者也知道直接解密.text段然后跳过去会有这样的问题,所以他把.text段的代码和VirtualAlloc申请的地址来回跳,导致.text段会被一直断下。

这里想到了最开始脱壳时的esp定律,程序最后会还原栈的环境,所以这里在VirtualAlloc下断之后,oep执行之前对原始栈下硬件写入,之后在对.text下内存执行,此时段下来的就是正常的oep了。

操作方式如下

1、首先记录原始的esp是多少 0019FF40

2、在程序正常运行的前一个VirtualAlloc对0019FF40下硬件写断点

3、等断下,在继续在.text代码段下内存执行断点,记得把硬断删除了

4、最后到正常的oep

5、这里其实可以带壳分析了,当然不满意还要处理iat cpuid 申请的地址方面的东西

VMP3.5 脱壳--查找OEP相关推荐

  1. UPack调试——查找OEP

    UPack调试--查找OEP OD运行错误 解码循环 设置IAT 参考文献 OD运行错误 OD直接加载会报错,通过Stud_PE确定EP虚拟地址: 并在OD中通过New origin here命令进行 ...

  2. 脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法

    OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口 ...

  3. experiment : EXE使用UPX加壳后, 用OD查找OEP

    测试程序 #include "stdafx.h" #include <windows.h> #include <tchar.h>int _tmain(int ...

  4. 【脱壳-寻找OEP】通过内存定位OEP实现脱壳

    这个方法使用的是特殊OD,这个OD也叫VBOD 这个OD只会在执行的时候断点,其他异常之类的操作都不会进行断点. 这个方法是通过运行壳后壳会对原来的代码段进行 解密 还原 写入 这三个步骤,我们通过在 ...

  5. 【脱壳-寻找OEP】壳常用的函数寻找OEP

    LoadLibrary 加载dll GetProcAddress 获取函数的地址 ExitThread 调用后就会释放系统分配的堆栈 我们这次用GetProcAddres来测试,载入我们的测试文件然后 ...

  6. OEP程序的入口点查找

    OEP程序的入口点查找 OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD ...

  7. 脱壳笔记-寻找OEP方法总结

    本文的示例程序为通过upx加壳的应用程序 讲解的方法:手动单步跟踪法.ESP定律方式.内存二次断点法 一.手动单步跟踪法 主要使用的两个快捷键F8与F4 F8:单步步过 F4:运行到指定位置(右键-& ...

  8. Zprotect patch KEY 脱壳

    对于ZProtect 1.4.x版本的系列软件,只要有其一个可用的机器码和key就可实现完美脱壳. 对于ZProtect 目前版本(ZP1.60)加壳的所有软件,只要有其一个可用的机器码和key就可实 ...

  9. Zprotect1.4-1.6 patch KEY 脱壳

    对于ZProtect 1.4.x版本的系列软件,只要有其一个可用的机器码和key就可实现完美脱壳. 对于ZProtect 目前版本(ZP1.60)加壳的所有软件,只要有其一个可用的机器码和key就可实 ...

最新文章

  1. 如何解决实时历史数据库存储成本问题?
  2. vscode怎么执行python_VScode | 执行python
  3. 一个简单的FreeMarker案例
  4. 斯坦福CS224n追剧计划【大结局】:NLP和深度学习的未来
  5. 响应函数sys_xxx
  6. android 问题汇总系列之三
  7. PostgreSQ 存储过程 和 存储函数的区别
  8. 离散ziggurat算法python实现_SLAM的数学基础(3):几种常见的概率分布的实现及验证。...
  9. 下一代云原生应用交付会怎样发展?KubeVela帮大忙。
  10. 手机如何从网页完美的跳转到应用程序
  11. 科技赋能农业变革:“大数据+农业”重新定义产业体系
  12. 慕司板V1注意事项及问题汇总
  13. 浏览器导致的图片不显示问题
  14. iphone长截图哪个软件好_这可能是 iPhone 手机里最好用的长截图、拼图 APP。
  15. android备忘录教学_Android Studio-备忘录功能实现
  16. CAKEPHP 常见错误
  17. 程序员进阶:怎么成为一个软件架构师?
  18. QT开发过程中自己遇到的问题
  19. python if函数两个并列条件怎么用_if函数中多个并列的条件怎么定义?
  20. 解类魔方算法(以C和JAVA为基础)

热门文章

  1. java中常见的线程安全集合类
  2. Windows2008 r2 x64下安装FTP服务器File Zilla server报错:could not load tls libraries filezilla
  3. 澳门旅游线路推荐 【转】
  4. FOFA(一): FOFA入门
  5. css如何实现单行/多行文本溢出的省略样式?
  6. 弘辽科技:流量起不来转化差到爆应该怎么解决
  7. 一个人如何在一个陌生的城市生活生存下去!
  8. php allow_url_include,allow_url_include的应用和解释
  9. IQ_Tuning_Overview
  10. Microsoft Office Excel 不能访问文件“XXXXXXXXXXXXX.xls”。 可能的原因有: