有没有办法从编译的 .apk 中获取使用 Appcelerator 创建的代码的 .js 文件?我丢失了一个项目的源代码,现在只有 .apk 文件,不想重写整个代码。预先感谢
4 回答
如果您想手动执行此操作:
在应用程序的发布版本中,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
取决于 Titanium 应用程序的构建方式。如果它是一个模拟器构建,那么是的,您可以获得 JavaScript 文件。如果 apk 来自设备或 dist 版本,则不会。
对于 device 和 dist 构建,Titanium 会压缩和加密所有 JavaScript,然后在编译之前将其注入 Java 代码。
因此,如果您有一个来自模拟器构建的 apk,您只需将 .apk 重命名为 .zip 并解压缩,JS 文件就会在那里。
需要注意的一点是,如果您的应用程序是 Alloy 应用程序,那么您将只会获得已编译的 Alloy 代码,而不是原始的 Alloy 代码。这意味着您不会找到任何 .xml 视图、.tss 样式等。
本网站可能是您最好的选择。它使用一系列技术来反编译 .apk 文件。
您可以尝试创建一个新文件夹并复制要解码的 .apk 文件。将此 .apk 文件的扩展名重命名为 .zip(例如,从 filename.apk 重命名为 filename.zip)并保存。解压后,现在您可以访问 classes.dex 文件等。此外,在 Asset 文件夹中,您将获得资源。尽管您无法按照此过程获取 .js 文件。您可以使用这个http://www.javadecompilers.com/apk网站。但它仍然会给你一个java反编译。