我是一名对Android安全性感兴趣的学生。我试图使用baksmali和smali修改APK文件。但是,我无法在手机上运行重新打包的应用程序。当我单击图标时,它说“不幸的是,测试已停止”并且存在。 (即使该应用程序的图标已更改,现在我看到的还是默认的android图标,而不是该应用程序的旧真实彩色图标)

这可能是什么原因?实际上,我什至没有修改过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时,该应用程序的大小已大大减少:

评论

您应该检查logcat以获得更多信息,如果可能的话,也请发布崩溃日志。

@xDragonZ,我已编辑帖子。这次,我尝试使用“ adb install”进行安装,并使用signapk.jar进行了签名。这次应用已安装到手机中。但是,当我单击该应用程序时,它崩溃并显示““不幸的是,应用程序已停止”。我注意到的一件事是重新包装的apk的尺寸小于原始尺寸,这是因为zip工具导致更改的原因是尺寸?关于为什么应用程序崩溃的信息?我如何获得此日志?非常感谢。

也许您还需要zipalign文件?

您是否有意进行Dedesxing(baksmali -x选项)?您似乎会因为执行此选项而没有提供“ bootclasspath”,您会得到一些奇怪的smali代码,这些代码可能无法转换回dex文件。同样,只需在压缩之前删除META-INF文件夹,然后尝试在包含所有内容的目录内进行zip -r unsigned.apk *。如果仍然崩溃,请尝试发布logcat输出

那么在五个答案中,没有一个是可以接受的吗?

#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内部。