这可能是什么原因?实际上,我什至没有修改过apk文件的代码。我只是解压缩apk以获取dex文件,然后使用
baksmali.jar
将其转换为smali,然后使用smali.jar
将其转换为dex。最终压缩并签名。 我已完成的详细操作:
解压缩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 shell。 Adb Shell显示成功安装。但是,我无法在移动设备上运行重新打包的应用程序。当我单击它时,该应用程序崩溃。它显示“不幸的是,测试已停止”。
为什么重新打包的应用程序不运行?我不明白我在这里缺少什么?
编辑:
我试图使用apktool重新包装相同的应用程序。我使用它提取了smali文件并重新打包。但是,为什么重新包装不能与baksmali,smali,zip和signapk一起使用。在此过程中压缩真正的问题吗?与原始的apk文件相比,我将其压缩并将其重命名为.apk时,该应用程序的大小已大大减少:
#1 楼
我使用apktool
来实现此目的,并使用一小段Shell脚本来反编译和重新编译APK:decompile-apk
#!/bin/bash -e
if ! [ "" ]; then
echo "usage: #!/bin/bash -e
if ! [ "" ]; then
echo "usage: q4312078q <original.apk>"
exit -1
fi
fn=${1%.apk}
rm -f $fn.unaligned.apk $fn.smali.apk
rm -rf smali/build
apktool b -f smali/ -o $fn.unaligned.apk
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey
zipalign -v 4 $fn.unaligned.apk $fn.smali.apk
rm -rf smali/build
<file.apk>"
exit -1
fi
fn=${1%.apk}
target_apk=$fn.apk
apktool d -f "$target_apk" -o smali
echo "Done."
compile-apk
q4312078q
使用
apktool
具有以下优势能够查看和编辑所有资源以及解码的清单文件。评论
这是唯一对我有效的方法。我已经尝试了数十次,但都没有成功。非常感谢。
–酸奶
17年1月1日在16:03
#2 楼
在玩了smali / baksmali之后,我开始工作了。我认为您在压缩时没有使用递归标志。这导致res文件夹为空,从而导致崩溃。我也对apk签名后运行zipalign。步骤:
解压缩
$ unzip test.apk
Baksmali
$ baksmali classes.dex -o smaliClasses
Smali
$ smali smaliClasses -o classes.dex
邮编-r
$ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
Jarsign
$ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
Zipalign
$ zipalign -v 4 test-patched.apk final-apk.apk
利润:)
#3 楼
由于声誉我无法发表评论,因此将其发布在这里。由于使用apktool可以正确完成工作,因此在我看来zip流程出了点问题。
重新打包应用程序后,您能否验证新APK的内容(就文件名和结构而言)与原始APK的内容相同?
编辑:而且,由于该文件是.dex文件,所以我认为在baksmali中不需要-x选项。
编辑2:重新打包时,不需要包括压缩文件中的META-INF目录。签名文件时将创建它。
#4 楼
不需要使用deodex选项“ -x”,因为您不在odex上执行baksmali。只需在dex文件上运行baksmali。您还可以使用apktool解包所有东西,我认为这更容易。#5 楼
为什么减小文件大小?
因为
apktool
在重新编译时对其进行了优化。为什么崩溃了? />发生崩溃的可能原因:
您无法按正确的顺序执行所有步骤。
应用程序可能会对文件大小进行CRC检查。
工具带有GUI的全自动工具。.
它是使用最新的android框架进行更新的,因此没有资源反编译错误和更好的处理。 com / s / 02ifm4veotiuik1 / apkstudio-2.0.3b-windows-Updates-Framework.rar?dl = 0
这篇小论文包括有关反转android应用程序的Tuts和有关修改/处理APK。
https://www.dropbox.com/s/nkkmp4ait71kjku/Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl=0
#6 楼
如果您对Anroid apps RE感兴趣,那么您会发现可以定期使用的更好的工具。其中一个工具是Android Cracker Kit(由我开发),它为您提供了所有所需:Android Cracker Kit(ACK):
http://www.at4re.com/f/showthread.php?11231
http://forum.exetools.com /showthread.php?t=16538
评论
链接断开。请修复它。
–贝鲁兹(Behrouz.M)
16年1月19日在12:03
在这里您可以前往:forum.exetools.com/showthread.php?t=16538
– Yaser Al-Najjar
16年1月19日在20:45
@raypixar:链接没有断开,只是速度很慢。
– 0xC0000022L♦
16年4月13日在15:09
#7 楼
我使用APK Editor Pro可以直接在Android设备上编辑APK!https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
评论
大提示。生成的apk无法使用上述(反)编译脚本正确安装(为什么?),但替换了classes.dex即可。
– Zekitez
3月5日15:55
#8 楼
步骤4.您忘记了递归地进行操作。压缩时不会复制/ res中的文件。添加-r选项。zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
步骤6。由于已经将它与META-INF目录重新打包到了APK中,因此无需再次签名。签名信息位于META-INF内部。
评论
您应该检查logcat以获得更多信息,如果可能的话,也请发布崩溃日志。@xDragonZ,我已编辑帖子。这次,我尝试使用“ adb install”进行安装,并使用signapk.jar进行了签名。这次应用已安装到手机中。但是,当我单击该应用程序时,它崩溃并显示““不幸的是,应用程序已停止”。我注意到的一件事是重新包装的apk的尺寸小于原始尺寸,这是因为zip工具导致更改的原因是尺寸?关于为什么应用程序崩溃的信息?我如何获得此日志?非常感谢。
也许您还需要zipalign文件?
您是否有意进行Dedesxing(baksmali -x选项)?您似乎会因为执行此选项而没有提供“ bootclasspath”,您会得到一些奇怪的smali代码,这些代码可能无法转换回dex文件。同样,只需在压缩之前删除META-INF文件夹,然后尝试在包含所有内容的目录内进行zip -r unsigned.apk *。如果仍然崩溃,请尝试发布logcat输出
那么在五个答案中,没有一个是可以接受的吗?