Auto.js Pro离线打包源代码加密算法分析

今天在逛论坛时,发现有网友使用frida写了一个连接USB hook加解密Auto.js Project工程的工具
使用介绍是这样的:

要求:本机用pip安装frida 在目标机器上运行frida-server(需root) 通过usb连接设备与电脑 运行目标app(只要进程能起来就行)用法:将apk安装到目标机器中。在本机上解压apk,取出assets目录下的project目录。通过此工具可以解密其中的js文件,具体用法在README中有 在本地修改后,可以重新加密, 替换掉apk中原来的js文件 签名安装。

该作者的分享精神是值得肯定的,但是其实Auto.js的加解密全过程都在Java而已,加密过程很容易被找出来,之前也有人使用Xposed去hook之类,真没必要,运行都是多余了,根本不需要那么曲折的。。

下面跟大家粗略的分享如何去找一款APP应用的加解密算法~

准备工作:
雷电模拟器、
Xposed框架、
Inspeckage、
Auto.js打包好的apk
第一步:使用AndroidKiller对apk进行反编译,让它进行分析过程,然后在“Android”->“字符串”中,搜索加解密算法字眼:AES/DES/MD5/RSA/等
现在市面上企业面向用户的APP中,AES算法使用的概率在 80%以上,搜索结果如下:
Auto.js Pro离线打包源代码加密算法分析_第1张图片
Auto.js Pro离线打包源代码加密算法分析_第2张图片
在搜索结果中只关注与Auto.js相关的类中的结果,搜索到这了,可以在一定程度上确定该APP使用的是Java标准的加密解密库。
第二步:开始上hook加密解密算法的利器:Inspeckage,针对调用Java标准的AES/DES/RSA/PEB等算法,可以直接hook到key/iv之类的。并且Inspeckage是开源的,可以自己定制hook输出的字符格式。
设置好之后,直接跑就好,结果如下:
Auto.js Pro离线打包源代码加密算法分析_第3张图片
这样算法就出来了,仔细分析之后,整理结果如下:
旧版本算法:AES/CBC/PKCS5Padding

///////////////////////////////////////////////////
/////  AES/CBC/PKCS5Padding
///////////////////////////////////////////////////
Inspeckage_Hash:Algorithm(MD5) [com.example.script15668979885591.0.0main.js : d7cab65e8a05d0c7a208a71121f47089]-----
Inspeckage_Hash:Algorithm(MD5) [AA01AAC9-1ww : 5dcfad62436f743148c5ba5985ab8a57]-----
文件为工程文件:project.json:
key是 MD5(packageName + versionName + main)小写;
iv是 MD5(build_id + name)小写前16位;

如果是最新版版的Auto.js Pro8 加密过程为:

///////////////////////////////////////////////////
/////  AES/CBC/PKCS7Padding
///////////////////////////////////////////////////
在smali代码代码中可以直接搜到 AES/CBC/PKCS7Padding
具体逻辑在类:Lcom/stardust/autojs/engine/encryption/ScriptEncryption;
跑出的日志:(...是因为中文,插件支持不好,自编译可避免)
Inspeckage_Hash:Algorithm(MD5) [com.wbzspl.czsmls1.0.0.......js : 1c185384bb6860b6e13f0c4c302af890]-----
Inspeckage_Hash:Algorithm(MD5) [D2646AAC-18............ : 5013d1d1555ea1368e1cb5f443de0a5d]-----
Inspeckage_Crypto:SecretKeySpec(1c185384bb6860b6e13f0c4c302af890,AES) , Cipher[AES/CBC/PKCS7Padding]  IV: 5013d1d1555ea136 (c129cfae8ded4b8b , L2RRR/XxM2Ff1akOq5HmGbfS+CaaZGdkYIeiBWJPnJY=)-----

还有一个要注意的地方就是Header,加密之后要加上magic加密头(所以在解密的时候也要去掉magic头)

magic_num_main="\x77\x01\x17\x7f\x12\x12\x00\x01"
magic_num_normal="\x77\x01\x17\x7f\x12\x12\x00\x00"

这样就可以完成加密解密了。至于Java对PKCS7Padding支持不好百度很好解决。
最后附一张一键加解密的运行截图:
Auto.js Pro离线打包源代码加密算法分析_第4张图片

欢迎关注微信公众号:『掌玩小子』讨论更多的加密解密:
在这里插入图片描述

你可能感兴趣的:(Auto.js,脚本语言,加密解密)