现在新版有个问题就是卡虚拟机启动,原理和x8沙箱一样,怎么找卡哪里我就不重复教学了。
https://www.52pojie.cn/thread-1441372-1-1.html
*本次仅做逆向示范,没有成品,后续也不再更新新版方法。
*51虚拟机整体逆向难度我认为属于中高水平。因为有不少人问过这个,ROM保护也比较少见,至少1.2.0以后没再有破解版。
[color=]准备工具
1、IDA64
2、010编辑器
前几天发了个x8沙箱教程,elf文件是经过ollvm混淆的,而且v2签名能过,所以我就没进行反混淆。但是51虚拟机好像不行,于是我对servicemanager进行反混淆后就可以看见所有的字符串了。本次仅用51虚拟机介绍如何反so混淆,破解方面请自行分析,如果你不了解安卓ROM的安装与启动原理,大概率是没有办法回填文件的。
新版软件的rom签名校验应该不止一个地方,安卓框架下我随便搜了md5就发现了2处,bin文件夹下的以servicemanager为例,这个文件也藏了签名md5。
IDA加载elf文件完毕后打开字符串窗口,拉到底,这些乱七八糟的的字符串就是被ollvm混淆导致的,既然有混淆就会有还原,这些字符串相当于密文,密钥就藏在某个地方,找到密钥和算法后就可以还原了。
1.png (75.78 KB, 下载次数: 0)
下载附件
2021-5-20 14:56 上传
1.png (41.49 KB, 下载次数: 0)
下载附件
2021-5-20 15:05 上传
如上图,8LKHLKKJJ;J就是签名md5,那段汇编就是把获取到的签名值和so中的签名值进行对比,原型
strcmp
(const char *
[color=]s1
,const char *
[color=]s2
[color=])
,相等返回0,不相等返回其它数。过签名校验的思路是把自己的签名值加密后填回去,或者改rsa路径都是可以的。改汇编也可以但是难度较大,新手不建议尝试。
接下来对这些混淆的字符串进行还原,现在祭出16进制编辑神器
010编辑器
。然后搜索字符串r920s;l-1
1.png (117.48 KB, 下载次数: 0)
下载附件
2021-5-20 15:14 上传
在这个区域内,00为结束,所以一般一个连续的字符串是不会有00出现的。一般ollvm默认的加密规则就是对字符串进行异或运算,密钥就是密文的最后一位数(不是所有的字符串加密都是这个方法)。
比如下图中的
7C73796F72747933726E33544E786F6B747E78507C737C7A786F
[color=]1D
,密钥就是1D。
1.png (68.23 KB, 下载次数: 0)
下载附件
2021-5-20 15:21 上传
点击菜单栏的
[color=]工具
——>
16进制运算
——>
[color=]二进制异或
——>
[color=]无符号字节
,操作数填入密钥,点击确定就可以还原出字符串了。
1.png (116.79 KB, 下载次数: 0)
下载附件
2021-5-20 15:24 上传
最后一个16进制可选可不选,如果选择解密后会消失,加密还原回去还要再补密钥,所以建议不选择。
1.png (63.66 KB, 下载次数: 0)
下载附件
2021-5-20 15:28 上传
有了这些明文就很容易理解它在干什么了,所以8LKHLKKJJ;J
1.png (94.25 KB, 下载次数: 0)
下载附件
2021-5-20 15:40 上传
进一步解密后都是一些熟悉的字符串了,总的来说servicemanager逻辑就是提取安装包的路径,然后直接获取要校验的文件,这样可以绕过各种hook。所以它的字符串储存方式就是
密文+密钥
,然后用异或算法进行加解密。
破解会员功能需要修改dex,因为比较简单请自行分析。