骇极干货 | 解密通过Monaca插件加密的文件

我偶然发现了一个使用Monaca开发框架和加密文件开发的android应用。什么是monaca?来自官方网站monaca.io:

Monaca使用PhoneGap / Cordova进行HTML5混合移动应用程序开发,这样是的移动应用开发变得简单而轻松。Monaca是最开放的混合应用程序开发平台,可以立即插入您现有的工作流程和开发环境中。从Cloud IDE,CLI到调试器和远程在线构建,混合应用程序开发所需的一切都在这里。

因此,基本上,它只是在Cordova之上构建的另一个框架。

Monaca框架

您如何确定该应用程序正在使用Monaca框架?通常,在应用程序的 MainActivity中会出现MonacaExtension.init的痕迹。

对于基于Cordova的应用程序,HTML代码应位于 / assets / www /文件夹中。打开index.html时,我发现代码已加密。

加密/解密例程

然后,我研究了该框架,发现这是他们提供的付费计划的一部分,该计划使用AES加密HTML代码。

参考:

https://docs.monaca.io/en/reference/power_plugins/html5_resource_encryption/

io.monaca.plugins.encrypt类中存在的应用程序中的加密/解密例程的实现:

如您所见,这是Monaca的Encrypt插件的入口点,它实际上检查 autoDecrypt是否为boolean true,然后代码将自动设置 Hash。这两个变量都来自 插件中的Config类。

基本上, autoDecrypt设置为 True。

如果文件被加密,这部分代码将被调用。查看屏幕快照中的第77行(不确定是否实际行),插件检查当前文件是否实际加密。加密的monaca文件具有8个字节的标头。标头为{ 24、8、77、69、1、13、10、0 }(字节),魔术标头来自 MonacaFile类内的isEncrypted方法 。

无论如何,回到上一个屏幕截图,代码流程为:如果文件未加密,请调用mFileManager.getRawBytes

否则尝试调用:mFileManage.getBytes

(路径均为flagAsset)

这里的不同之处是 getRawBytes与 getBytes。

getRawBytes = 读取所有文件内容

getBytes =读取所有文件内容向前8个字节(因为加密的文件具有8个字节的魔术头),并应用解密。

以下是解密例程代码:

解密加密文件

基本上, Config.Hash是key,前16个字节的 Config.Hash是IV。现在我们有了Key和IV,我们应该能够解密文件了。我写了一个Python脚本来解密加密文件。

本文是翻译文章,原文链接:

https://blog.rz.my/2020/12/decrypting-monaca-encrypt-plugin.html返回搜狐,查看更多

阅读 ()
平台声明
该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。