1.VMP学习笔记之壳基础流程(一)(二)
VMP学习笔记之壳基础流程(一)(二)
文章标题: Vmp1.学习笔记 软件名称: Vmp1. 编写语言: Borland Delphi 4.0 - 5.0 操作平台: win7 位 详细过程 章节目录 第一章: 壳的插r插基础操作读取PE结构信息
增加区段
根据加密等级选择不同的框架
第二章: Opcode快速入门了解Opcode解析过程
辅助第三章解析Opcode引擎而编写的
无脑查表就对了
第三章: 反汇编引擎框架学习看懂第二章就看得懂第三章
无脑查表就对了
第四章: 壳的初始化与Handle块优化去掉无用的Handle块(不重要)
指令的等级变换
部分指令变形
汇编的多变性
第五章: 壳的重定位修复(未完成) 第六章: 壳的伪代码生成与排序等等(未完成) 第七章: 万用门介绍(未完成) 第八章: Vmp壳的实现或则去混淆插件(不打算写了感觉太麻烦了) 年月日 :: 基础知识之加壳基本套路读取PE信息
添加区段
修复重定位
获取壳需要使用的API(PEB那一套)
读取PE基本信息 定义的结构如下: 获取到壳要的各种API 将用户要VM的Opcode进行解析 如何定位到加密按钮使用DarkDe4.exe
设置是保护全关,所以ProtectOptions = 8
分析关键函数sub_4A(最核心的源件城市智慧停车系统源码函数)
sub_4A函数分析偏移到新区段的起始地址
判断RVA合法性
内存对齐后的总大小
根据保护等级选择使用哪个壳模板,并设置区段保护属性
指令前缀讲解(可选) Opcode结构顺序是插r插eclipse maven jar包源码不能被打乱的 指令前缀分为四组组1——锁定和重复前缀
组2 — 段重载前缀
分支提示
组H—操作数大小重载前缀,也可被用作某些指令的源件launcher2 源码分析强制性前缀
组H—地址尺寸重载前缀
强制性前缀应当位于其他可选的前缀之后(例外的情形请查看第2.2.1节,”REX前缀”) 操作数大小重载前缀允许程序在位和位操作数大小间切换 地址尺寸重载前缀(H)允许程序在位和位地址间切换 ModR/M 和 SIB 字节(可选) ModR/M字节包含3个域信息mod域与r/m域组成个可能的值:8个寄存器和个寻址模式
reg/opcode域确定寄存器号或者附加的3位操作码
r/m域确定一个寄存器为操作数或者和mod域一起编码寻址模式
某些ModR/M字节编码需要第二寻址字节(SIB)。基址+索引或者比例+索引形式的插r插linux源码包下载地址位寻址需要SIB字节 针对前面内容进行实践 举例说明:CC8 MOV DWORD PTR ES:[EAX+ECX*8+0x],0x
指令拆解Legacy Prefix(可选)H—ES 段重载
Opcode(必须有)C7
ModRM(可选)
SIB(可选)C
Displacement(可选)
Immediate(可选)
解析Opcode找到主操作码(查表)得到的源件delphi浏览器源码是 MOV R/M,IMM
分析ModRM(查表)ModRM结构如下
转换成二进制如下:=
分析SIB(查表)根据上文找到的地址发现是[--][--]”,表示有SIB表
得到:MOV DWORD PTR ES:[EAX+ECX*8+0x],插r插0x2024-11-29 23:24
2024-11-29 22:56
2024-11-29 22:54
2024-11-29 22:19
2024-11-29 21:02
2024-11-29 21:02