吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23053|回复: 86
收起左侧

[Android 原创] 论autojs庖丁加密破解--自动化逆编译

    [复制链接]
digyth 发表于 2020-8-4 20:16

前言

本文仅交流破解思路,由于涉及许多人的根本利益问题,拒绝提供任何源代码及成品,不要以任何理由及条件私聊我索要,也拒绝有偿转回js!!有能力的可以自己开发

简介

  • auto.js庖丁是一个兼具加密与解密auto.js脚本的APP,能够将auto.js打包加密过的脚本一键解密,同时也能将脚本从js转为dex进行加密,以下简称庖丁
  • 从js转为dex之后,rhino没有任何重新读取java字节码转回js的功能,所以只能另辟蹊径
  • 由于编译之后,很多不兼容java的表达式都使用了等价的表达式进行替换,所以不可能完全与源码一致

所需工具

  • jadx
  • IntelliJ IDEA等任一java编辑器
  • javaparser.jar

过程

了解加密后的dex

使用jadx将dex反编译为java,由于rhino编译时全部使用模板语法,基本不会有无法解析的内容

查看java代码

可以看到方法名和字符串都被都被加密过了,不解密基本是没法操作的
01.png

了解java方法含义

里面还有各种各样的对js语法进行描述的方法,我们可以知道,这些java方法描述了js每条语句的构成,毕竟我们不是rhino作者,我们并不清楚每个java方法对应于js的语法描述,所以我们需要一个代码较多的js源码进行对照
由此我们可以了解到

  • new 类名(scriptable, context, 数字) 是对一个函数的引用,同时最后的数字是与方法名结尾的数字是一一对应的
  • _c_script_0是js代码的根节点
  • objArr是参数数组,但是有时候会被中间变量中转
  • js中的变量在java中往往是Scriptable、Callable、Object三种形式
  • getFunctionName、getParamAndVarCount、getParamCount、getParamOrVarName四个方法中,分别存储了函数名、参数及变量的数量、参数的数量、参数及变量的名称

解析java为语法树

使用javaparser将java代码解析为一颗语法树,我们需要通过不断地修剪这颗语法树,才能使其接近js语法,然后再进行字符串的修饰
02.png

修剪语法树

1、将所有的字符串和方法名全部解密替换
2、清理掉所有无实际意义的节点
3、设定一个解析java方法的类,进行统一解析并返回等价的结果
4、解析每个java方法,替换为对应的表达式,替换掉原来的节点
5、解析携带函数名、函数参数名、变量名的switch节点,提取所有的名称信息
6、将参数名与变量名对应的变量名称替换为真正的名称
7、从_c_script_0开始,递归查找对应的函数引用,将其打包为function形式,同时添加参数名,拼接到原来的位置,最后的_c_script_0方法语句块就携带了原本js的所有信息

修饰字符串

由于某些语法的不兼容性,我使用了eval方法将不兼容的语句打包为字符串,将最后的根语句块生成代码字符串之后,我们再将对应的eval代码展开,即可得到与源代码等价的js代码

逆编译结果

03.png

结束语

  • 由于rhino中对js语法描述的java方法基数极大,除了rhino作者,估计没人能一次性完成对所有方法的解析,只能在不断地修bug中完善,目前我也不能完成对所有js编译后的dex完美转回js
  • 虽然说着原理很简单,但是实际做起来难度很大,会很头疼,踩各种的坑
  • javaparser没有文档对所有的方法做说明,一切需要自己去尝试,之前没用过的人这一步就要卡很久,包括我自己

免费评分

参与人数 42威望 +2 吾爱币 +133 热心值 +36 收起 理由
johnwas + 1 用心讨论,共获提升!
溯雪 + 1 + 1 用心讨论,共获提升!
0615 + 1 + 1 热心回复!
txkkk + 1 热心回复!
alphaperson + 1 + 1 用心讨论,共获提升!
太阳王 + 1 我很赞同!
kodashen + 1 我很赞同!
zhuzhuxia111 + 1 + 1 热心回复!
我有三个艾琳 + 1 我很赞同!
18269055653 + 1 + 1 我很赞同!
19936040638 + 1 + 1 热心回复!
liuxiobiao + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
马爱国 + 1 + 1 用心讨论,共获提升!
kunker + 1 + 1 谢谢@Thanks!
wjc是竟成 + 1 + 1 厉害
ziyoudeyun + 1 + 1 热心回复!
牧羊的人 + 1 + 1 谢谢@Thanks!
小叶冲呀 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
10096ljr + 1 + 1 我很赞同!
zzy0711 + 1 用心讨论,共获提升!
onething + 1 + 1 热心回复!
回忆童年快乐 + 1 + 1 热心回复!
simon6902 + 1 我很赞同!
gaosld + 1 + 1 热心回复!
zhp_king + 1 用心讨论,共获提升!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lz132 + 1 谢谢@Thanks!
fengbolee + 1 + 1 用心讨论,共获提升!
xdd353637 + 1 + 1 我很赞同!
110114120 + 1 谢谢@Thanks!
lookerJ + 1 + 1 用心讨论,共获提升!
welcome7758521 + 1 你的探究很有价值
woditian + 1 + 1 热心回复!
Nachtmusik + 1 热心回复!
yixi + 1 + 1 谢谢@Thanks!
江影影 + 1 + 1 用心讨论,共获提升!
Axiangzai25 + 1 + 1 用心讨论,共获提升!
zooah212 + 1 用心讨论,共获提升!
syx657233701 + 1 + 1 热心回复!
软软超甜呐 + 1 用心讨论,共获提升!
qtfreet00 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
梦殇噬靥 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

青草幽幽在高原 发表于 2020-8-5 14:41
很多人可能并不知道庖丁是个啥玩意,在这:
Auto.js一键加密解密工具《Auto.js庖丁》更新至Ver2.6版本
https://www.52pojie.cn/thread-1212880-1-1.html
(出处: 吾爱破解论坛)
lovest117 发表于 2020-8-16 11:42
楼主我有几点疑问,我最近刚入门autojs,以前学过C++,看到代码比较类似。简单学会了一些。问题1是,这些变量的规则及使用方法我在哪学习呢?问题2,目前学会的都是操作性的,是不是也有读取性的变量,比如识别页面中有无图片,或者图形边缘,或者特定符号等识别类变量。谢谢指点!
linguo2625469 发表于 2020-8-5 10:53
Migroom 发表于 2020-8-5 11:05
我擦大佬
晕晕cc 发表于 2020-8-5 14:18
亮瞎了我的👁  大佬
zZ怪 发表于 2020-8-5 14:49
看不懂 ,,,,,,
ITban 发表于 2020-8-5 14:59
学习学习
hxq40 发表于 2020-8-5 15:09
这个有什么实际用途?
 楼主| digyth 发表于 2020-8-5 16:14
hxq40 发表于 2020-8-5 15:09
这个有什么实际用途?

写auto.js脚本的自然知道用途多大
Znyu 发表于 2020-8-5 16:21
学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 12:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表