5

有没有办法从编译的 .apk 中获取使用 Appcelerator 创建的代码的 .js 文件?我丢失了一个项目的源代码,现在只有 .apk 文件,不想重写整个代码。预先感谢

4

4 回答 4

3

如果您想手动执行此操作:

在应用程序的发布版本中,Titanium 将所有资产放入名为 AssetCryptImpl 的 Java 类中,您必须反编译 apk 并在源代码中查找该类文件。

AssetCryptImpl 文件将包含名为 initAssetsBytes 的私有方法,该方法返回一大块数据作为 CharBuffer,其中包含所有资产文件的加密数据。另一种称为 initAssets 的方法将包含所有原始资产文件名以及每个资产文件的范围。

资产数据采用 ECB 模式的 AES 加密,资产数据的最后 16 个字节为解密密钥。资产解密方法实现在 JNI 库中,但不难重写。filterDataInRange 将调用本机代码来解密资源。

您可以使用您的实现轻松重写 filterDataInRange 方法,该方法将获取密钥并解密资源数据并将其写入文件。并编写一个方法,该方法将从 initAssets 方法中为 HashMap 中的每个文件名调用 readAsset。

如果您想要一键式解决方案:

您可以使用名为 ti_recover 的工具。

使用节点包管理器安装它:

npm install ti_recover

比从终端/命令行使用它:

ti_recover apkfile.apk outputdir
于 2019-11-14T01:25:51.707 回答
1

取决于 Titanium 应用程序的构建方式。如果它是一个模拟器构建,那么是的,您可以获得 JavaScript 文件。如果 apk 来自设备或 dist 版本,则不会。

对于 device 和 dist 构建,Titanium 会压缩和加密所有 JavaScript,然后在编译之前将其注入 Java 代码。

因此,如果您有一个来自模拟器构建的 apk,您只需将 .apk 重命名为 .zip 并解压缩,JS 文件就会在那里。

需要注意的一点是,如果您的应用程序是 Alloy 应用程序,那么您将只会获得已编译的 Alloy 代码,而不是原始的 Alloy 代码。这意味着您不会找到任何 .xml 视图、.tss 样式等。

于 2016-01-19T17:55:02.160 回答
-2

本网站可能是您最好的选择。它使用一系列技术来反编译 .apk 文件。

于 2016-01-18T19:53:10.597 回答
-2

您可以尝试创建一个新文件夹并复制要解码的 .apk 文件。将此 .apk 文件的扩展名重命名为 .zip(例如,从 filename.apk 重命名为 filename.zip)并保存。解压后,现在您可以访问 classes.dex 文件等。此外,在 Asset 文件夹中,您将获得资源。尽管您无法按照此过程获取 .js 文件。您可以使用这个http://www.javadecompilers.com/apk网站。但它仍然会给你一个java反编译。

于 2016-01-19T08:52:53.383 回答