VMP3.5 脱壳--查找OEP
背景
无
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相关推荐
- UPack调试——查找OEP
UPack调试--查找OEP OD运行错误 解码循环 设置IAT 参考文献 OD运行错误 OD直接加载会报错,通过Stud_PE确定EP虚拟地址: 并在OD中通过New origin here命令进行 ...
- 脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法
OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口 ...
- experiment : EXE使用UPX加壳后, 用OD查找OEP
测试程序 #include "stdafx.h" #include <windows.h> #include <tchar.h>int _tmain(int ...
- 【脱壳-寻找OEP】通过内存定位OEP实现脱壳
这个方法使用的是特殊OD,这个OD也叫VBOD 这个OD只会在执行的时候断点,其他异常之类的操作都不会进行断点. 这个方法是通过运行壳后壳会对原来的代码段进行 解密 还原 写入 这三个步骤,我们通过在 ...
- 【脱壳-寻找OEP】壳常用的函数寻找OEP
LoadLibrary 加载dll GetProcAddress 获取函数的地址 ExitThread 调用后就会释放系统分配的堆栈 我们这次用GetProcAddres来测试,载入我们的测试文件然后 ...
- OEP程序的入口点查找
OEP程序的入口点查找 OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD ...
- 脱壳笔记-寻找OEP方法总结
本文的示例程序为通过upx加壳的应用程序 讲解的方法:手动单步跟踪法.ESP定律方式.内存二次断点法 一.手动单步跟踪法 主要使用的两个快捷键F8与F4 F8:单步步过 F4:运行到指定位置(右键-& ...
- Zprotect patch KEY 脱壳
对于ZProtect 1.4.x版本的系列软件,只要有其一个可用的机器码和key就可实现完美脱壳. 对于ZProtect 目前版本(ZP1.60)加壳的所有软件,只要有其一个可用的机器码和key就可实 ...
- Zprotect1.4-1.6 patch KEY 脱壳
对于ZProtect 1.4.x版本的系列软件,只要有其一个可用的机器码和key就可实现完美脱壳. 对于ZProtect 目前版本(ZP1.60)加壳的所有软件,只要有其一个可用的机器码和key就可实 ...
最新文章
- 如何解决实时历史数据库存储成本问题?
- vscode怎么执行python_VScode | 执行python
- 一个简单的FreeMarker案例
- 斯坦福CS224n追剧计划【大结局】:NLP和深度学习的未来
- 响应函数sys_xxx
- android 问题汇总系列之三
- PostgreSQ 存储过程 和 存储函数的区别
- 离散ziggurat算法python实现_SLAM的数学基础(3):几种常见的概率分布的实现及验证。...
- 下一代云原生应用交付会怎样发展?KubeVela帮大忙。
- 手机如何从网页完美的跳转到应用程序
- 科技赋能农业变革:“大数据+农业”重新定义产业体系
- 慕司板V1注意事项及问题汇总
- 浏览器导致的图片不显示问题
- iphone长截图哪个软件好_这可能是 iPhone 手机里最好用的长截图、拼图 APP。
- android备忘录教学_Android Studio-备忘录功能实现
- CAKEPHP 常见错误
- 程序员进阶:怎么成为一个软件架构师?
- QT开发过程中自己遇到的问题
- python if函数两个并列条件怎么用_if函数中多个并列的条件怎么定义?
- 解类魔方算法(以C和JAVA为基础)
热门文章
- java中常见的线程安全集合类
- Windows2008 r2 x64下安装FTP服务器File Zilla server报错:could not load tls libraries filezilla
- 澳门旅游线路推荐 【转】
- FOFA(一): FOFA入门
- css如何实现单行/多行文本溢出的省略样式?
- 弘辽科技:流量起不来转化差到爆应该怎么解决
- 一个人如何在一个陌生的城市生活生存下去!
- php allow_url_include,allow_url_include的应用和解释
- IQ_Tuning_Overview
- Microsoft Office Excel 不能访问文件“XXXXXXXXXXXXX.xls”。 可能的原因有: