我是一名对 Android 安全感兴趣的学生。我试图使用 baksmali 和 smali 修改 APK 文件。但是,我无法在我的手机上运行重新打包的应用程序。当我单击该图标时,它会显示“不幸的是,测试已停止”并存在。(即使应用程序的图标也发生了变化,现在我看到的是默认的 android 图标而不是应用程序的旧真实彩色图标)
这可能是什么原因?实际上我什至没有修改apk文件的代码。我只是解压 apk 以获取 dex 文件,然后使用 将其转换为 smali baksmali.jar
,然后使用smali.jar
. 最后拉上拉链并签名。
我详细做了什么:
解压apk文件
$ Unzip test.apk
将 1classes.dex1 转换为 smali
$ baksmali -x classes.dex -o smaliClasses
将类转换回
classes.dex
(替换旧的classes.dex
,实际上我没有向 smali 文件添加任何新代码。我想知道这是否首先有效)。$ smali smaliClasses -o classes.dex
将所有文件压缩到
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
重命名
test.zip
为test.apk
$ mv test.zip test.apk
现在我相信我必须再次签署APK,如果这里有错误,请纠正我。
编辑:
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
我尝试安装新的重新打包的 APK。使用 adb 外壳。Adb shell 显示安装成功。但是,我无法在移动设备中运行重新打包的应用程序。当我点击它时应用程序崩溃。它说“不幸的是,测试已停止”。
为什么重新打包的应用程序没有运行?我不明白我在这里缺少什么?
编辑:
我尝试使用 apktool 重新打包同一个应用程序。我使用它提取了 smali 文件并重新打包。但是为什么重新打包对 baksmali、smali、zip 和 signapk 不起作用。在这个过程中压缩是真正的问题吗?与原始 apk 文件相比,当我压缩应用程序并将其重命名为 .apk 时,我看到应用程序的大小大大减少:|