吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6110|回复: 12
收起左侧

[原创] VMP学习笔记之壳的重定位修复(五)

  [复制链接]
鱼无论次 发表于 2019-9-5 23:05
本帖最后由 鱼无论次 于 2019-9-5 23:17 编辑

理论知识:
1、为什么需要重定位

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

如下图所示:

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

clipboard.png

2、待修复数据如下:

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

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

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

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

总结:

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

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

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

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

3、如图所示

第一种:修复struct_DisassemblyFunction->LODWORD_VMP_Address

clipboard.png

修复前:

clipboard.png

修复后:
clipboard.png

第二种:修复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结构里

clipboard.png

挑选jmp ret指令保存起来
clipboard.png

struc_69结构定义如下:
clipboard.png

总结:
1、struc_69结构

struc_69->ArrayNumber         == Handle块头

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


2、找到第一组Handle块在数组的元素下标,作为结尾标识
符合条件的是:解析JmpAddr跳转表,填充的VMOpcode都是0x23

clipboard.png

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


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

每次执行完毕后sub_480BE0(a1a, ReadHexLen, v3->Characteristics & 0x20, 0i64)函数
struc_59->LODWORD_UserVmpStartAddr+=ReadHexLen;(默认的壳起始OEP(新区段的起始地址))

clipboard.png

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

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

替换前后对比:

前:

clipboard.png

后:
clipboard.png


4、修复特定值
push 0xFACE0002            ------>Push 重定位值
mov edi,0xFACE0003       ------>Mov edi,VMContext
clipboard.png


5、修复所有 JMP VMDispatcher的地址
公式: jmp后的偏移量=目标地址-原来地址-5       5是指令长度

clipboard.png


6、修复完毕后的样子
clipboard.png


下一篇文章介绍:

1、伪代码构造

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

clipboard.png

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

0x4=add                                 ---->加密用sub
0x5=xor                                  ---->xor不变
0x34=sub                               ---->加密用add

0x43=rol 循环左移

0x44=ror 逻辑右移

0x5C=not                  单操作数

0x29=inc                   单操作数

0x2A=dec                 单操作数

0x5D=neg                单操作数

0x31=bswap             单操作数

VMP学习笔记之壳的重定位修复(五).zip

338.69 KB, 下载次数: 35, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 10威望 +1 吾爱币 +14 热心值 +10 收起 理由
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
叶落尘埃 + 1 + 1 我很赞同!
agool123456 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
poisonbcat + 1 + 1 用心讨论,共获提升!
hxw0204 + 1 + 1 热心回复!
朱朱你堕落了 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wh421 + 1 + 1 用心讨论,共获提升!
少林大虾 + 1 用心讨论,共获提升!
qws1855 + 1 + 1 谢谢@Thanks!
pojie6 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

鸭子咯咯哒~ 发表于 2020-11-15 08:28
重定位说挺好理解的,我看别的教程我看不懂,有没有这类通俗易懂的说教程。我想深入理解重定位
pojie6 发表于 2019-9-5 23:34
qws1855 发表于 2019-9-6 00:04
cwz 发表于 2019-9-6 09:01
谢谢分享
小米xiaomi 发表于 2019-9-6 16:06
感谢分享
asd4260 发表于 2019-9-6 18:42
        感谢发布原创作品,吾爱破解论坛因你更精彩!
SuperGround 发表于 2019-9-7 07:01
有意思的逻辑设计哈,谢谢楼主分享
头像被屏蔽
luli1111 发表于 2019-9-7 08:25
提示: 作者被禁止或删除 内容自动屏蔽
苏沐327 发表于 2019-9-27 10:01
教程很不错
Hmily 发表于 2019-10-9 19:09
@鱼无论次 4了?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 03:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表