【问题标题】:Python Decompile APK using ApkTool and SubprocessPython 使用 ApkTool 和 Subprocess 反编译 APK
【发布时间】:2019-08-02 20:50:09
【问题描述】:

我正在构建一个反编译Android APK的Python应用程序进行一些修改并重新编译它。

代码如下:

from shutil import copyfile

# Copy the APK to the output directory.
copyfile('./source/rat.apk', './output/rat.apk')

# Decompiles the APK.
subprocess.call(['apktool','d','./output/rat.apk','-f'], stdout=FNULL, stderr=subprocess.STDOUT)

# Modifies address and port.
with open('./output/RAT/app/src/main/res/values/strings.xml','w+') as netaddress:
    address = netaddress.read()
    address.replace('youraddress','x')
    address.replace('yourport','8080')
    netaddress.write(address)
    print(netaddress.read())
    netaddress.close()

# Recompiles it.
subprocess.call(['apktool','b','./output/RAT'], stdout=FNULL, stderr=subprocess.STDOUT)

但是运行的时候会抛出这个异常:

with open('./output/RAT/app/src/main/res/values/strings.xml','w+') as netaddress:
FileNotFoundError: [Errno 2] No such file or directory: './output/RAT/app/src/main/res/values/strings.xml'

更新
当我尝试使用命令apktool d source/rat.apk

这是我收到的输出:

18:45:51 up 1 min,  0 users,  load average: 0.52, 0.58, 0.59
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
I: Using Apktool 2.0.2-dirty on rat.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /home/stecco/apktool/framework/1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=versionCode, value=0x00000001
I: Loading resource table from file: /home/stecco/apktool/framework/1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=versionName, value=0x00000014
I: Loading resource table from file: /home/stecco/apktool/framework/1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=versionCode, value=0x00000001
I: Loading resource table from file: /home/stecco/apktool/framework/1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=versionName, value=0x00000014
Exception in thread "main" java.lang.NullPointerException
        at java.io.Writer.write(Writer.java:157)
        at brut.androlib.res.util.ExtMXSerializer.writeAttributeValue(ExtMXSerializer.java:38)
        at org.xmlpull.mxp1_serializer.MXSerializer.attribute(MXSerializer.java:696)
        at org.xmlpull.v1.wrapper.classic.XmlSerializerDelegate.attribute(XmlSerializerDelegate.java:106)
        at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.writeStartTag(StaticXmlSerializerWrapper.java:267)
        at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.event(StaticXmlSerializerWrapper.java:211)
        at brut.androlib.res.decoder.XmlPullStreamDecoder$1.event(XmlPullStreamDecoder.java:83)
        at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:141)
        at brut.androlib.res.decoder.XmlPullStreamDecoder.decodeManifest(XmlPullStreamDecoder.java:153)
        at brut.androlib.res.decoder.ResFileDecoder.decodeManifest(ResFileDecoder.java:140)
        at brut.androlib.res.AndrolibResources.decodeManifestWithResources(AndrolibResources.java:199)
        at brut.androlib.Androlib.decodeManifestWithResources(Androlib.java:140)
        at brut.androlib.ApkDecoder.decode(ApkDecoder.java:100)
        at brut.apktool.Main.cmdDecode(Main.java:165)
        at brut.apktool.Main.main(Main.java:81)

通过安装 Apktool 2.4.0 解决了所有问题,似乎 2.0.2 版本确实有问题,甚至 2.2.2 和 2.3.2。

但是当我尝试重新编译它时出现了另一个问题,它给了我一个 classes.dex 而不是 apk 我该如何解决这个问题?

【问题讨论】:

  • 看起来你已经解决了自己的问题,现在写一个新的答案。而且会很酷。
  • 不是真的,目前它在重新编译时给我带来了一些问题。

标签: android python file subprocess apktool


【解决方案1】:

FileNotFoundError 是一个显式名称,这意味着您的代码函数无法找到该文件。如果没有有关此异常发生位置的更多详细信息,我可以给您的唯一答案是验证:

  1. 目录“./output/”存在
  2. 使用shutil 复制文件后正确创建文件

【讨论】:

  • 在接下来的几个小时里我会更新这个问题,需要什么样的“细节”?我可以明确地说目录存在并且文件创建正确。
  • 不仅仅是.output目录,整棵树./output/RAT/app/src/main/res/values/应该存在
  • 当我使用带有apktool的子进程时没有出现,可能是命令的问题,我会测试它并更新问题。
  • 再次,因为您收到此错误,我建议您确保您使用的是正确的文件路径,因为“with 语句”出现错误似乎令人不安。跨度>
  • 当我执行子进程来反编译APK时,它不会反编译它,所以程序在with语句中崩溃,因为没有名为RAT的目录,我会在几分钟内更新问题。
猜你喜欢
  • 2014-07-19
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多