从字节码解析看VMP防护

前言

安卓加固的相关知识在安卓逆向中是很关键的,之前的写的方法都是针对早些的整体加固和函数抽取型保护的壳,今天的文章主要是针对VMP保护的一个原理分析学习,下面也列出了其他的文章,是之前在学RASP写的关于class文件的文章和fart的脱壳分析学习。

相关文章:

Class文件

达达,公众号:Th0r安全RASP前置知识点:监控与软件攻防

安卓加固

达达,公众号:Th0r安全Fart完成函数粒度脱壳分析

前言

这里通过源码和一个样例来查看字节码的一个解析。

从字节码解析看VMP防护

这是codeietm结构各个代表的含义
u2 registers_Size_;//方法使用寄存器个数 

u2 ins_Size_;//参数个数 

u2 outs_Size_;//调用其他方法使用参数个数 

u2 tries_Size_; 

u4 debug_Info_Off_; 

u4 insns_Size_in_code_units_;//方法指令长度,二字节为单位

可以得知,偏移16之后,就是字节指令。

字节指令包括操作码和操作数。

从字节码解析看VMP防护

其中一种解释器是通过switch实现,可以看到这边是通过do while循环进行遍历,还要其他的实现,比如跳转表,这里作为示例的就是switch。

从字节码解析看VMP防护

获取PC

从字节码解析看VMP防护

针对字节码解析,比如第一条NOP,就是直接跳过。

从字节码解析看VMP防护

对于MOV指令,就是通过设置虚拟寄存器,把后面的赋值给前面。

从字节码解析看VMP防护

对于Invoke指令,就是通过methodid查找函数

从字节码解析看VMP防护

这里看到网上的一个VMP壳,ADVMP,先对Codeitem进行抽离,包括方法指令/访问标志/参数个数等等信息

从字节码解析看VMP防护

之后再通过解析之前保持信息在的yc文件,来进行复原

从字节码解析看VMP防护

这里用的就是跳转表的形式

从字节码解析看VMP防护

从字节码解析看VMP防护

结尾

对于其他的VMP,就是更改了字节码的映射关系,然后增加自带的反调试。从现在的理解来看,VMP就是自己写的一套解析映射器,然后动态的注册JNI函数,所以一般的VMP加壳,java层的函数都会变为native。

原文始发于微信公众号(Th0r安全):从字节码解析看VMP防护

版权声明:admin 发表于 2022年11月23日 上午8:01。
转载请注明:从字节码解析看VMP防护 | CTF导航

相关文章

暂无评论

暂无评论...