理论知识:

1、为什么需要重定位

因为特殊情况这块地址不给用了你要挪到另外一个地方,你本来是在哪里的挪到另外一个地方你还是在哪里

如下图所示:

小明在教室A是第一排,搬到教室B小明还是第一排

2、待修复数据如下:

push 0xFACE0002 -------->修复后是:0

mov edi,0xFACE0003 -------->修复后是:新区段首地址VMcontext

jmp dword ptr ds:[eax*4+0x474FCF] -------->修复后是:Handle块,类似于Switch

jmp short 00474984 -------->修复后是:VMDispatcher

总结:

1、这些地址直接使用肯定会报错,因为这些地址是基于加壳机的,并非我们被加壳程序的。

2、我们要将所有地址修复成基本我们被加壳程序的

3、我们要修改两处:struct_DisassemblyFunction->LODWORD_VMP_Address跟struct_DisassemblyFunction->ReadHexAddress

4、基本要修复都是有:Displacement、Immediate这些

3、如图所示

第一种:修复struct_DisassemblyFunction->LODWORD_VMP_Address

修复前:

修复后:

第二种:修复struct_DisassemblyFunction->ReadHexAddress

典型例子1:

00474991 FF2485 CF4F4700 jmp dword ptr ds:[eax*4+0x474FCF]这一句不修复肯定执行会错误

我们要修复这一句的Displacement,改成一个被加壳程序存在的地址就Ok了

例如:jmp dword ptr ds:[eax*4+0x4051BB]

典型例子2:

Jmp VMDispatcher

公式: jmp后的偏移量=目标地址-原来地址-5 5是指令长度

正文:

1、筛选Esi_Addr[X]结构数据保存到ruct_VmpOpcodePY_50结构

将struct_DisassemblyFunction所在的数组下标保存到struc_69结构里

挑选jmp ret指令保存起来

struc_69结构定义如下:

总结:

1、struc_69结构

struc_69->ArrayNumber == Handle块头

struc_69->FilterArrayNumber == Handle块结束地址,也就是jmp或则ret

2、找到第一组Handle块在数组的元素下标,作为结尾标识

符合条件的是:解析JmpAddr跳转表,填充的VMOpcode都是0x23

然后对struct_VmpOpcodePY_50结构进行数组乱序

3、循环填充struc_SaveAllDisasmFunData->ArrayNumber(基本版)Vmp_Address(0x10)替换成实际壳的真实地址

每次执行完毕后sub_480BE0(a1a, ReadHexLen, v3->Characteristics & 0x20, 0i64)函数

struc_59->LODWORD_UserVmpStartAddr+=ReadHexLen;(默认的壳起始OEP(新区段的起始地址))

然后替换掉struct_DisassemblyFunction->LODWORD_VMP_Address为真正的地址

总结:

1、前面所有工作都是找到所有使用到的struct_DisassemblyFunction结构,然后对其地址进行替换成真实壳地址

替换前后对比:

前:

后:

4、修复特定值

执行前 转换 执行后
push 0xFACE0002 -------> Push 重定位值
mov edi,0xFACE0003 -------> Mov edi,VMContext

5、修复所有 JMP VMDispatcher的地址

公式: jmp后的偏移量=目标地址-原来地址-5 5是指令长度

6、修复完毕后的样子

下一篇文章介绍:

1、伪代码构造

2、伪代码加密(前面构成出Add的解密代码,所以这里要对称整出一套加密代码)

正向就是解密,取反就是加密了

0x4=add ---->加密用sub

0x5=xor ---->xor不变

0x34=sub ---->加密用add

0x43=rol 循环左移

0x44=ror 逻辑右移

0x5C=not 单操作数

0x29=inc 单操作数

0x2A=dec 单操作数

0x5D=neg 单操作数

0x31=bswap 单操作数

VMP学习笔记之壳的重定位修复(五)相关推荐

  1. VMP学习笔记之Handle块优化与壳模板初始化(四)

    参考资料: 本文大量内容抄袭看雪作者:waiWH的VMP系列 1.名称:谈谈vmp的还原(2) 网址:[原创]谈谈vmp的还原(1)-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com ...

  2. 深度学习笔记(32) 目标定位

    深度学习笔记(32) 目标定位 1. 定位分类 2. 定位边框 3. 分类标签 4. 损失函数 1. 定位分类 图片分类任务已经熟悉了,就是算法遍历图片,判断其中的对象是不是汽车 定位分类问题,这意味 ...

  3. Apollo学习笔记 进阶课程之三:定位技术②

    Apollo学习笔记 进阶课程之三:定位技术② 百度的无人驾驶定位方案 1).GNSS定位 GPS误差来源: 上图为单点定位,基于TOA 载波定位技术:(RPK技术,PPP技术) RPK:可以在五秒内 ...

  4. Python学习笔记18:实操案例十五(记录用户登录日志,模拟淘宝客服自动回复)

    Python学习笔记18:实操案例十五(记录用户登录日志,模拟淘宝客服自动回复) 网课传送门:https://www.bilibili.com/video/BV1Sw411Z779?p=168& ...

  5. 爬虫学习笔记(十)—— Scrapy框架(五):下载中间件、用户/IP代理池、settings文件

    一.下载中间件 下载中间件是一个用来hooks进Scrapy的request/response处理过程的框架. 它是一个轻量级的底层系统,用来全局修改scrapy的request和response. ...

  6. 会议学习笔记(一):第十五届《前沿技术讲习班》之唐建

    第十五届中国中文信息学会暑期学校暨中国中文信息学会<前沿技术讲习班>的回放链接:http://conference.cipsc.org.cn/ssatt2020/ 学习笔记 唐建:Neur ...

  7. 【转】cs231n学习笔记-CNN-目标检测、定位、分割

    原文链接:http://blog.csdn.net/myarrow/article/details/51878004 1. 基本概念 1)CNN:Convolutional Neural Networ ...

  8. self_drive car_学习笔记--第8课:定位算法

    前言:这节主要介绍无人车定位系统里面使用到的定位算法. 概要: 1.定位技术简介 2.单个定位技术 3.定位融合技术 4.Apollo定位方案 1.定位技术简介 1.1 定位作用: 1)定位+高精地图 ...

  9. VMP学习笔记之反汇编引擎学习(三)

    参考资料: 本文大量内容抄袭看雪作者:waiWH的VMP系列 1.名称:谈谈vmp的还原(1) 网址:[原创]谈谈vmp的还原(1)-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com ...

  10. CSS学习笔记 04、浮动与定位

    文章目录 前言 一.浮动 1.1.1.浮动的基本概念 1.1.2.浮动的顺序贴靠特性 1.1.3.右浮动效果 1.1.4.案例:使用浮动设计网页布局(分析及源码) 1.1.5.BFC规范与浏览器差异 ...

最新文章

  1. 阿里巴巴CEO马云最新超经典哲学语录
  2. CentOS7中使用Dockerfile部署后台jar包
  3. import和require的区别
  4. java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...
  5. Windows Phone 获取联系人
  6. php 判断是否ipv6,PHP IPV6正则表达式验证代码
  7. C语言程序设计:现代方法阅读笔记
  8. 电容电感充电曲线仿真图
  9. 中职网络安全大赛攻防阶段加固(仅供参考!!!)
  10. 计算机acaa证书,ACAA 认证三维模型师
  11. 《数学之美》知识点详细总结
  12. 常见笔顺错误的字_有哪些常见笔顺错误?
  13. Bluedroid 函数分析:BTA_GATTC_Open
  14. 固高运动卡的使用 4 运动之PT(点位)运动
  15. 信息化故事--温州的传奇(11)从“进城务工”看“温州新版自闭症”
  16. 数据挖掘十大经典算法,你都知道哪些?
  17. 拿图就走系列之《深入理解java虚拟机》
  18. 百度图片下载器2.0
  19. jQuery插件综合应用(四)头像设置
  20. web页面第三方天气预报插件

热门文章

  1. Thermo-Calc 2003p for WiN32 1CD(热力学计算、合金体系扩散控制计算)
  2. div+css页面布局实战
  3. python程序员面试宝典 剑指offer_程序员面试宝典+剑指Offer + 算法100题系列 + 15个经典算法下载...
  4. c++初学,计算立方体的体积和面积,并比较两个立方体是否相同:
  5. 一种解决各种 macos unlocker 无法下载 Darwin.iso 的方法
  6. React Native跨平台移动应用开发框架介绍
  7. 自我提升之二 揭秘IOC注入框架,轻松实现布局、属性、事件注入
  8. java语法和python语法的一些区别
  9. Thinkphp企业级知宇自动发卡系统源码bug漏洞分析
  10. 二叉树遍历算法C++实现