我正在构建一个可反编译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我该如何解决呢?
答案 0 :(得分:1)
FileNotFoundError是一个显式名称,这意味着您的代码功能找不到该文件。如果没有更多有关此异常发生的位置的详细信息,我只能给您提供以下答案: