欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[讨论]某安全SDK的ARM级VMP简单分析

[讨论]某安全SDK的ARM级VMP简单分析

样本来源于阿里安全SDKAPP为狼人杀,这个样本并不算真正的VMP,但是有VM的影子,非常值得学习。

[617255_wk1mch80ki97pcf.zip] 

阿里安全SDKlibsgmainso-5.3.38.so提取方法:

解压APP,定位lib目录,找到libsgmain.so,该so实际是一个apk文件。将该apk解压后,就能在lib目录中找到真实SO

 

样本SO ELF文件节表有问题,IDA无法正常打开,进行简单修复即可。

 

修复方法:

打开010 套模板,Elf32_Half e_shnum0即可。

 

运作原理:

 

其中有一张表,该表记录了opcode对应Handler的偏移地址。

 

Handler地址计算:

Vm_table 为该表起始地址。

Vm_base 为一个对齐地址等于Vm_table + 1

Offset = vm_table[opcode * 4]

HandlerAddr = offset + vm_base

Opcode字节码不集中,采用指令链接形式把所有opcode串联起来。

 

本文样本的解析部分结果(手动计算):

Op Handler

1D CF9D

1E D3B3

10 D264

2B D5F4

25 D4F0

2A D5CC

0C 01F8

29 .....

...       ....

可以根据前面的公式自行写一个脚本提取Opcode

 

Op 链接例子:例如0x1EHandler 0xD3B3中,在主要代码执行后,有一条指令来设置下一条指令的Opcode 0x10。如图:


 

所以,0x1E的下一条指令为0x10

 

 

主要分析JNI_OnLoad 函数,单步一小会有如下风景:

 

函数sub_8ccA0 为重要函数(忽略转移代码)


注释已经很清晰了。

 

 

 

 

 

 

 


注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功