吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7853|回复: 22
收起左侧

[Android 原创] 论js快照还原(rhino,autojs)

[复制链接]
digyth 发表于 2021-7-9 18:17

前言

好久没发帖了,在我发布rhino js的dex还原教程之后,autojs官方推出了另一种编译类加密:快照加密,从刚开始我便已开始研究,最近已经有一些人发布了运用AST进行语义还原的视频,甚至快照也有初步的还原,所以也没有什么藏着掖着的必要了,在这做个总结吧。

简介

快照加密是一种编译类的加密,将js编译为仅有rhino能够识别的二进制字节码,所有的条件、循环逻辑都被编译为了goto跳转语句,且字节码类型比使用dex编译更为繁多,所以还原难度极大,且直接修改字节码可能导致跳转错位,整个js脚本无法正常运行,运行逻辑抗修改性也极强。迄今为止,我依旧不能还原所有的js。

所需工具

  • rhino官方文档
  • rhino源码一份(可于github获取)
  • idea/eclipse

    具体过程

    鉴别文件类型

    刚开始,我拿到快照加密的结果,并不知道是什么类型的文件,所以可以去百度它的文件头。

    搜索结果

    搜索结果
    从文件头可知这是一个java的序列化对象文件,然后再去翻rhino的官方文档。

    rhino文档

    rhino文档

    rhino文档2

    rhino文档2

    由此可知使用ScriptableInputStream即可读取这种文件。

    寻找逻辑代码

    读取之后。通过获取这个对象的class可知其为InterpretedFunction,也就是经过解释的函数。

    函数类

    函数类
    根据英文意义判断,数据都在InterpreterData里面。

    数据类

    数据类

    根据我的经验,这几个变量对应的含义已经标注在图片里了。

    解析逻辑代码

    这些字节码我们也不知道它的含义,那就得从编译器下手了,编译器类为Interpreter类。打开之后往下翻发现一个特殊的方法。

    dumpICode

    dumpICode
    本来想着不会是编译为字节码了吧,谁知道真特么给我来了个惊喜,这确实就是字节码,全是goto的那种。。。

    rhino内置AST

    既然要还原,那肯定是要映射到一个AST上的,自己写一个AST太费劲,其它的解析库又不一定支持rhino的某些语法,最后发现rhino自带了一个js全套AST。

    AST

    AST
    那么直接使用这套AST进行映射就行了。

    确定还原方式

    在各种查找调试之后,最终决定为模拟一个栈,自行解析所有字节码,栈的内容为AST节点,类比Interpreter将数据加载之后从栈里出栈读取拼凑之后再入栈,遇到结束字节码时插入AST作为节点。
    遇到函数字节码时,先行解析对应函数的字节码为AST,再将生成的FunctionNode放入栈顶即可
    最后从AST根部直接生成源代码即可成为一个完整可运行的js。

    效果图

    效果图

    效果图
    左边为源代码,右边为根据字节码还原出来的代码。
    可以看到为了正常表达所在作用域,变量都被提前声明了,let被解析为了var,多了几个括号。但是整体逻辑都与源代码别无二致。

    难点

  • 从goto中抽取与运算&&和或运算||
  • 从多层if嵌套中正确识别有无else
  • 正确区分三元运算?:与if-else
  • 正确识别循环中的break与continue语句
  • 正确区分let与var
  • 使用,分隔的多运算语句

    结束语

    至此,与rhino有关的dex与快照编译类加密都被窥得全貌,虽然不至于完美还原所有js(现在的程度也就还原v6到可运行),但是原理已经被许多人知悉。正所谓能运行那必能被破解,所以没有绝对安全的加密,只有破解成本远大于收益即是真正的安全。
    好了,所有内容就这些,研究到后面也没什么意思了,我继续潜水摸鱼去了,下次我再次发帖或许是新加密出现的时候?(手动狗头)

不要私聊我接不接单!仅限学习交流,不提供任何代码,有需求请自行编写代码!

免费评分

参与人数 7吾爱币 +6 热心值 +5 收起 理由
都同学 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
zishuing + 1 热心回复!
lfm333 + 1 + 1 谢谢@Thanks!
679 + 1 + 1 用心讨论,共获提升!
a1521125 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
骚猪佩奇 + 1 用心讨论,共获提升!

查看全部评分

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

yiwai2012 发表于 2021-7-11 09:28
digyth 发表于 2021-7-10 18:18
源码丢出去那就乱了,我可不想被集火喷
现在就是等一段时间别人都把加密换得差不多了我再传git ...

不是要源码 我的意思 过程都没有 可以写一个样本作为例子讲解一下如何去还原 这样更好
 楼主| digyth 发表于 2021-7-11 12:38
yiwai2012 发表于 2021-7-11 09:28
不是要源码 我的意思 过程都没有 可以写一个样本作为例子讲解一下如何去还原 这样更好

大概15号我再发好了,缓一下,到时候把整个架构原理都发出来
a1521125 发表于 2021-7-9 18:44
6666666666666666

免费评分

参与人数 1吾爱币 -8 收起 理由
涛之雨 -8 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

s18737518913 发表于 2021-7-9 18:49
收藏备用
a1521125 发表于 2021-7-9 19:05
代码路上雾茫茫
nanaqilin 发表于 2021-7-9 19:38
楼主你这个太高深了,我还是第一次听说
skingwa 发表于 2021-7-9 23:43
这是一个AUTO.JS的竟争作品么
knowspring 发表于 2021-7-10 01:42
牛年看牛人啊。。
lfm333 发表于 2021-7-10 07:37
感谢分享
tanyuan 发表于 2021-7-10 12:03
学到了666666666

免费评分

参与人数 1吾爱币 -8 收起 理由
涛之雨 -8 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

openwit 发表于 2021-7-10 12:46
这个可以用来干啥 不明觉厉
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 16:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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