首页
社区
课程
招聘
[原创]脱壳成长之路(3)-初识VMP
发表于: 2020-6-10 00:52 11143

[原创]脱壳成长之路(3)-初识VMP

2020-6-10 00:52
11143

样本:17年BD加固
NativeHook:基于Substrate的Nativehook
Android系统: 6.0.1

上一个样本中,分析壳的initarray时候,就发现有花指令和大循环,那时候没有处理,而是直接找了别的办法去脱出dex,这个样本,又一次遇到了带大量简单花指令的initarray,在老大的要求下,决定对抗一波。

简单的脚本界面

982a9ac78c567daa41ef727a6c28f1b7

log_saver:主要是保存动态调试保存so的日志
init_array:快速定位到so的initarray起始,提高一下每次调试的效率
最后一个就是辅助调试花指令了
花指令详情:

081361c7a5af5fef3859f2c2a855da23

汇编代码中有大量的形似与上面的指令,都是无效指令,分析的时候十分费时间,由于这个花指令特征非常明显,所以可以写脚本去辅助分析。
我的思路:
遍历整个代码匹配花指令的头,然后在花指令后面2句最终BEQ或者B的地址继续循环,直到不是花指令为止,下断点。这里面有可能会遇到真正有用的代码在花指令中,这种情况,可以try一下,catch的时候在头部地址下段即可

核心代码:

后面继续分析initarray,发现有so抹头,初始化反调试、和解密so的操作,篇幅原因就不截图了,印象笔记有完整的分析笔记,有需要的可以私我一哈。

标准操作,dexdump,并且修复大偏移,这个操作就不再重复写了,有需求可以看我之前的文章。

贴一个dump出的dex

53ac465399df9c5a3bf2d3d33f016a8a
会发现,apk中的所有activity的onCreate函数被抽取了,然后调用了native的函数,现在仔细分析一下native函数

hook register_natvie 拿到动态注册函数的地址,然后进行分析

最终发现so中频繁调用JNI接口,于是简单的hook了一波

find cls android/app/Activity|onCreate
find cls com/nfbazi/xuankong/activity_register | setContentView
find cls android/widget/EditText
find cls com/nfbazi/xuankong/a/a
setText
setFocusable
setFocusableInTouchMode
find cls android/widget/Button
find cls com/nfbazi/xuankong/cr
<init>
find cls com/nfbazi/xuankong/cq
<init>
find cls android/widget/TextView
发现,之前java实现的功能,都用JNI实现了。于是开始了漫长的分析(过程十分漫长,我反复看了很多遍so)最终在老大的提示下,定位到下图结构体

d413a6e437428736798006fa81580834

735056cb8e89b73fb100a933403a3903

codeitem相关:

37d645e1739c27e56f2d53089803f59c

置换:

正常
206F 001A 0054 invoke-super {v4, v5}, <void Activity.onCreate(ref) imp. @ _def_Activity_onCreate@VL>

处理后
2086 001A 0054 invoke-super {v4, v5}, <void Activity.onCreate(ref) imp. @ _def_Activity_onCreate@VL>

所以这里面0x86 对应 smali opcode 6F

c401474b8dcf142c20c2203850583906


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-6-10 08:17 被GitRoy编辑 ,原因: 系统版本号错了
上传的附件:
收藏
免费 6
支持
分享
最新回复 (9)
雪    币: 500
活跃值: (3862)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
厉害啊 老哥~
2020-6-10 09:43
0
雪    币: 12502
活跃值: (3053)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
nb
2020-6-10 11:30
0
雪    币: 498
活跃值: (4206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
顶,分享个具体过程就更好了
2020-6-10 15:05
0
雪    币: 19950
活跃值: (4942)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2020-7-31 06:07
0
雪    币: 1841
活跃值: (1290)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2020-8-2 23:29
0
雪    币: 7
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
和邦邦的特别像呀
2020-8-3 10:13
0
雪    币: 916
活跃值: (3434)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
置换表怎么弄出来的呢
2020-8-3 10:30
0
雪    币: 5330
活跃值: (5464)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
葫芦娃 置换表怎么弄出来的呢
是之前师傅脱壳的时候弄出来的,我做的时候就已经有置换表了
2020-8-3 10:55
0
雪    币: 120
活跃值: (1597)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分享,mark
2020-9-1 15:58
0
游客
登录 | 注册 方可回帖
返回
//