首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
Android安全
发新帖
14
3
[原创]关于某开源加固的代码还原
发表于: 2025-8-10 03:07
6950
[原创]关于某开源加固的代码还原
lov520ing
2025-8-10 03:07
6950
# 1. 概述 在这个加固中,会使用到2个so文件,一个是作为解释器的so,一个用来加密字节码的so。(在不同的版本里名字可能会有差异)。 这种加固一般是将app中代码全部加固,少的几百个方法,多的上千个方法被加固。有些在同一个类中就加固了二百多个方法。  在还原的时候很难将所有代码全部回填回去,所以可以只将关键代码还原即可。 # 2. 操作 1. 还原操作码 使用ida打开解释器so,找到解释函数vmInterpret,点击红框中的地址跳转  跳转过来后,就会看到一堆跳转地址,数一下刚好是255个,而opcode操作码也正好是255个。 这里就可以大致的确定,下面的这些跳转地址就是操作码的解释器,只不过顺序是被打乱了。  那如何将其还原? 其实我们看到这个红框中 loc_1ADB8 地址是排在第一位的,绿框中的地址sub_18FC4是排在第3位的。 也就是说 伪操作码 01 对应的是loc_1ADB8,伪操作码 03 对应的是sub_18FC4,以此类推。 只要弄清了这些地址对应的真实的操作码即可。 这里有个笨办法就是自己去加固一个app,在加固的时候他会输出操作码的对应关系,这样就可以根据对应关系找到这些地址各自解释了什么操作码。 小提示:如果自己操作一遍就会发现一些更简单的办法来还原了,这样就可以自己写个脚本来快速的还原出对应的关系了。 2. 制作操作码字典 将地址注释成真实的操作码,就会看到下图的情况(这张图跟上面的图不是同一个)  这样就得到了 伪操作码 01 对应的真实操作码 是5b,以此类推。 将其复制下来,利用脚本跑一下就得到了操作码的对应关系了。 3. 获取被加固方法的code 在 加密代码的so 中 你会发现类似这种的函数非常多。基本除了几个功能函数,so中都是这种函数。 这种函数每一个都代表了一个被加固的类,就是有多个这样的函数,在app中就被加固了多个方法。 红框中就是被加固函数的代码地址,绿框中表示加固代码的长度。  一个一个的拿代码,一个小时也拿不了多少个,如果有一千多个,直接崩溃。 可以用ida的脚本来拿,如果不会写可以问问chatgpt之类的AI。 我的思路就是利用ida脚本拿到伪c代码,再将偏移和长度取出来。 4. 分析函数功能 拿到了被加固的代码和操作码了,但是现在还是无法还原。 第1个问题:这个加固跟360加固不一样,360是将操作码加固了,只还原操作码就行。 而这个加固就算你还原了操作码也无法使用。因为他将字符串之类的也抽取了,所以这个操作码并不是原来app中操作码。 第2个问题:不知道app中的函数 和so中加固函数的对应关系 先说第一个问题。在 JNI_OnLoad 函数的附近(上面),会有6个函数。 这里最好是自己加固然后对比下,就能大体能明白其中的含义了。有些地方我也讲不明白,先上个图略过。  你想知道TypeIds是什么就从StringIds中去拿值,然后再用这个值去BaseStrPtr里去找对应的字符串。 知道了这些地址具体代表了什么,就可以将加固的代码 还原成 smali代码了。 这样就知道了 ida中哪些函数地址所对应的smali代码了。 第二个问题 是找到ida中的函数地址所对应的函数名。 这里也说不明白了,自己用的脚本是去年写的,现在也看不明白了(捂脸)。 有兴趣的可以自己加固试试,加固完会在文件夹中有这个算法。 5. 还原代码 找到了这些对应关系,就可以将代码还原出来了。就会得到下图中的情况。  6. 回填代码 如果直接使用还原的smali进行还原,要注意的是寄存器问题。(我自己还原的smali代码中是没有p寄存器的) 这里只提供了大致的思路,有兴趣的可以自己加固app对比的进行分析,这样能更好的理解其中的原理。
登录后可查看完整内容
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
#混淆加固
#脱壳反混淆
收藏
・
14
点赞
・
3
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
龙飞雪
这个讨论对我很有帮助,谢谢!
2025-10-27 17:55
wx_Dispa1r
你的帖子非常有用,感谢分享!
2025-8-19 09:35
sinker_
感谢你的积极参与,期待更多精彩内容!
2025-8-13 16:53
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
7
)
mb_rjdrqvpa
雪 币:
9084
活跃值:
(10512)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
90
粉丝
3
关注
私信
mb_rjdrqvpa
2
楼
给个样本
2025-8-10 13:16
0
lov520ing
雪 币:
44
活跃值:
(1905)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
24
粉丝
8
关注
私信
lov520ing
3
楼
243K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0j5h3!0S2j5X3y4Q4x3V1k6F1L8h3#2H3i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1#2i4@1u0o6i4K6R3H3i4@1f1$3i4@1u0m8i4K6V1H3i4@1f1#2i4K6W2o6i4@1t1H3i4@1f1#2i4K6W2p5i4K6R3H3
2025-8-10 14:27
0
alds
雪 币:
136
活跃值:
(1710)
能力值:
( LV3,RANK:20 )
在线值:
发帖
3
回帖
62
粉丝
7
关注
私信
alds
4
楼
这个操作码每次加固顺序会变吧?
2025-11-13 22:42
0
alds
雪 币:
136
活跃值:
(1710)
能力值:
( LV3,RANK:20 )
在线值:
发帖
3
回帖
62
粉丝
7
关注
私信
alds
5
楼
这个操作码每次加固顺序会变吧?
2025-11-13 22:42
0
ikunnn
雪 币:
50
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
62
粉丝
0
关注
私信
ikunnn
6
楼
alds
这个操作码每次加固顺序会变吧?
不会吧,但是怎么得到对应的真是操作码呢?帖子里没具体说啊,还有怎么知道找到ida中的函数地址所对应的函数名
2025-11-16 23:16
0
mb_elqwyvnm
雪 币:
2652
活跃值:
(3273)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
155
粉丝
0
关注
私信
mb_elqwyvnm
7
楼
dex2c
2025-11-17 00:15
0
ikunnn
雪 币:
50
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
62
粉丝
0
关注
私信
ikunnn
8
楼
mb_elqwyvnm
dex2c
这不是vmp?
2025-11-22 15:53
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
lov520ing
3
发帖
24
回帖
10
RANK
关注
私信
他的文章
[原创]关于某开源加固的代码还原
6950
[分享]pixel 5 编译安卓12源码和源码
5965
[分享]自己脱壳某加固时的笑话
4058
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部