rovellipaolo / ninjadroid Goto Github PK
View Code? Open in Web Editor NEWNinja Reverse Engineering on Android APK packages
License: GNU General Public License v3.0
Ninja Reverse Engineering on Android APK packages
License: GNU General Public License v3.0
I tweaked the log config wrong last time...
I'd like to use your project to work on a script I'd use personally. Unfortunately, since the package and the script have the same name, I'm unable to do so. And python 3 doesn't allow relative imports so I'm not able to do much. I just want to use the functions provided in ninjadroid.py. Any remedy for this?
Could you please check what's wrong with AndroidManifest parsing on some APKs? I get the following for a couple package names (i.e. com.snapchat.android, com.letgo.ar):
Traceback (most recent call last): File "ninjadroid.py", line 117, in <module> sys.exit(main()) File "ninjadroid.py", line 38, in main apk = read_target_file(args.target, args.no_string_processing) File "ninjadroid.py", line 71, in read_target_file apk = APK(filepath, no_string_processing) File "/Users/developer/Downloads/NinjaDroid-master/ninjadroid/parsers/apk.py", line 33, in __init__ self._extract_and_set_entries(string_processing) File "/Users/developer/Downloads/NinjaDroid-master/ninjadroid/parsers/apk.py", line 60, in _extract_and_set_entries self._manifest = AndroidManifest(entry_filepath, True, apk_filepath) File "/Users/developer/Downloads/NinjaDroid-master/ninjadroid/parsers/android_manifest.py", line 27, in __init__ self._raw = AXMLPrinter(fp.read()).get_buff() File "/Users/developer/Downloads/NinjaDroid-master/ninjadroid/axmlparser/axml_printer.py", line 27, in __init__ self.buff += "<%s%s\n" % (self.__get_prefix(self.axml.get_prefix()), self.axml.get_name()) File "/Users/developer/Downloads/NinjaDroid-master/ninjadroid/axmlparser/axml_parser.py", line 162, in get_name return self.string_block.get_raw(self._name) File "/Users/developer/Downloads/NinjaDroid-master/ninjadroid/axmlparser/string_block.py", line 70, in get_raw data += chr(self.get_short(self._strings, offset)) File "/Users/developer/Downloads/NinjaDroid-master/ninjadroid/axmlparser/string_block.py", line 81, in get_short value = array[int(offset / 4)] IndexError: list index out of range
Can't figure it our since I don't fully understand what you're doing there :)
Hello!
Looks like right now only the "classes.dex" file is being parsed :( Are there any plans to implement support for APKs that have multiple dex files inside?
Kindest regards,
Gabriel
Using the snap version, the -e
/--extract
option does not work correctly.
In particular, the APK is parsed and its entries extracted correctly, dex2jar seems to be executed without issues, but apktool execution is failing. It would seem a (sandbox) permission-related issue.
โ ~ /snap/bin/ninjadroid MyApk.apk --all --extract output/ --verbose
>> NinjaDroid: [DEBUG] Reading MyApk.apk...
>> NinjaDroid: [DEBUG] Parsing APK file: filepath="MyApk.apk"
>> NinjaDroid: [DEBUG] Reading file: filepath="MyApk.apk"
>> NinjaDroid: [DEBUG] Extracting APK resource AndroidManifest.xml to /tmp/tmp6s19_4g3.ninjadroid/AndroidManifest.xml
>> NinjaDroid: [DEBUG] AndroidManifest.xml looks like an AndroidManifest.xml file
>> NinjaDroid: [DEBUG] Parsing AndroidManifest.xml file: filepath="/tmp/tmp6s19_4g3.ninjadroid/AndroidManifest.xml"
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/AndroidManifest.xml"
>> NinjaDroid: [DEBUG] Parsing AndroidManifest.xml from DOM...
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-hdpi-v4/ic_launcher.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-hdpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-hdpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-hdpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-hdpi-v4/ic_launcher_logo.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-hdpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-hdpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-hdpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-ldpi-v4/ic_launcher.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-ldpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-ldpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-ldpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-ldpi-v4/ic_launcher_logo.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-ldpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-ldpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-ldpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-mdpi-v4/ic_launcher.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-mdpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-mdpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-mdpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-mdpi-v4/ic_launcher_logo.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-mdpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-mdpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-mdpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-xhdpi-v4/ic_launcher.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-xhdpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-xhdpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-xhdpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-xhdpi-v4/ic_launcher_logo.png to /tmp/tmp6s19_4g3.ninjadroid/res/drawable-xhdpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-xhdpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/drawable-xhdpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/layout/main.xml to /tmp/tmp6s19_4g3.ninjadroid/res/layout/main.xml
>> NinjaDroid: [DEBUG] res/layout/main.xml looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/res/layout/main.xml"
>> NinjaDroid: [DEBUG] Extracting APK resource resources.arsc to /tmp/tmp6s19_4g3.ninjadroid/resources.arsc
>> NinjaDroid: [DEBUG] resources.arsc looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/resources.arsc"
>> NinjaDroid: [DEBUG] Extracting APK resource classes.dex to /tmp/tmp6s19_4g3.ninjadroid/classes.dex
>> NinjaDroid: [DEBUG] classes.dex looks like a dex file
>> NinjaDroid: [DEBUG] Parsing dex file: filepath="/tmp/tmp6s19_4g3.ninjadroid/classes.dex", filename="classes.dex"
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/classes.dex"
>> NinjaDroid: [DEBUG] Extracting strings...
>> NinjaDroid: [DEBUG] Strings extracted: 21
>> NinjaDroid: [DEBUG] Extracting URLs...
>> NinjaDroid: [DEBUG] URLs extracted: 0
>> NinjaDroid: [DEBUG] Extracting shell commands...
>> NinjaDroid: [DEBUG] Shell commands extracted: 1
>> NinjaDroid: [DEBUG] Extracting APK resource META-INF/MANIFEST.MF to /tmp/tmp6s19_4g3.ninjadroid/META-INF/MANIFEST.MF
>> NinjaDroid: [DEBUG] META-INF/MANIFEST.MF looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/META-INF/MANIFEST.MF"
>> NinjaDroid: [DEBUG] Extracting APK resource META-INF/CERT.SF to /tmp/tmp6s19_4g3.ninjadroid/META-INF/CERT.SF
>> NinjaDroid: [DEBUG] META-INF/CERT.SF looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/META-INF/CERT.SF"
>> NinjaDroid: [DEBUG] Extracting APK resource META-INF/CERT.RSA to /tmp/tmp6s19_4g3.ninjadroid/META-INF/CERT.RSA
>> NinjaDroid: [DEBUG] META-INF/CERT.RSA looks like a CERT file
>> NinjaDroid: [DEBUG] Parsing CERT file: filepath="/tmp/tmp6s19_4g3.ninjadroid/META-INF/CERT.RSA", filename="META-INF/CERT.RSA"
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp6s19_4g3.ninjadroid/META-INF/CERT.RSA"
Warning:
The certificate uses the SHA1withRSA signature algorithm which is considered a security risk. This algorithm will be disabled in a future update.
The certificate uses a 1024-bit RSA key which is considered a security risk. This key size will be disabled in a future update.
>> NinjaDroid: [INFO] Creating output/...
>> NinjaDroid: [DEBUG] apktool path: /snap/ninjadroid/3/bin/ninjadroid/use_cases/../apktool/apktool.jar
>> NinjaDroid: [INFO] Executing apktool...
>> NinjaDroid: [INFO] Creating output/smali/...
>> NinjaDroid: [INFO] Creating output/AndroidManifest.xml...
>> NinjaDroid: [INFO] Creating output/res/...
>> NinjaDroid: [INFO] Creating output/assets/...
>> NinjaDroid: [DEBUG] apktool command: `java -jar /snap/ninjadroid/3/bin/ninjadroid/use_cases/../apktool/apktool.jar -q decode -f MyApk.apk -o output`
Exception in thread "main" brut.androlib.AndrolibException: Could not load resources.arsc from file: ~/.local/share/apktool/framework/1.apk
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:797)
at brut.androlib.res.AndrolibResources.loadFrameworkPkg(AndrolibResources.java:123)
at brut.androlib.res.data.ResTable.getPackage(ResTable.java:84)
at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:67)
at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:63)
at brut.androlib.res.decoder.ResAttrDecoder.decode(ResAttrDecoder.java:39)
at brut.androlib.res.decoder.AXmlResourceParser.getAttributeValue(AXmlResourceParser.java:388)
at org.xmlpull.v1.wrapper.classic.XmlPullParserDelegate.getAttributeValue(XmlPullParserDelegate.java:69)
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:84)
at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:143)
at brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamDecoderContainer.java:33)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:141)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:121)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:258)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:129)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:124)
at brut.apktool.Main.cmdDecode(Main.java:179)
at brut.apktool.Main.main(Main.java:82)
Caused by: brut.directory.DirectoryException: java.io.FileNotFoundException: ~/.local/share/apktool/framework/1.apk (Permission denied)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:55)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:38)
at brut.directory.ExtFile.getDirectory(ExtFile.java:52)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:787)
... 19 more
Caused by: java.io.FileNotFoundException: ~/.local/share/apktool/framework/1.apk (Permission denied)
at java.base/java.io.RandomAccessFile.open0(Native Method)
at java.base/java.io.RandomAccessFile.open(RandomAccessFile.java:345)
at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:259)
at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:214)
at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1285)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1251)
at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:732)
at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:849)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:247)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:191)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:53)
... 22 more
>> NinjaDroid: [DEBUG] dex2jar path: /snap/ninjadroid/3/bin/ninjadroid/use_cases/../dex2jar/d2j-dex2jar.sh
>> NinjaDroid: [INFO] Executing dex2jar...
>> NinjaDroid: [INFO] Creating output/MyApk.jar...
>> NinjaDroid: [DEBUG] dex2jar command: `/snap/ninjadroid/3/bin/ninjadroid/use_cases/../dex2jar/d2j-dex2jar.sh -f MyApk.apk -o output/MyApk.jar`
dex2jar MyApk.apk -> output/MyApk.jar
>> NinjaDroid: [INFO] Extracting certificate file...
>> NinjaDroid: [INFO] Creating output/META-INF/CERT.RSA...
>> NinjaDroid: [INFO] Extracting DEX files...
>> NinjaDroid: [INFO] Creating output/classes.dex...
>> NinjaDroid: [INFO] Generating JSON report file...
>> NinjaDroid: [INFO] Creating output/report-MyApk.json...
Getting error
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
at brut.androlib.Androlib.getResTable(Androlib.java:50)
at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44)
at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102)
at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83)
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49)
... 8 more
Updating APKtools to 2.4.0 solved the problem.
Using the flatpak version, the -e
/--extract
option does not work correctly.
In particular, the APK is parsed and its entries extracted correctly, apktool seems to be executed without issues, but dex2jar execution is failing.
flatpak-builder --run flatpak/build flatpak/com.github.rovellipaolo.NinjaDroid.yaml ninjadroid regression/data/Example.apk --all --extract output/ --verbose
>> NinjaDroid: [DEBUG] Reading regression/data/Example.apk...
>> NinjaDroid: [DEBUG] Parsing APK file: filepath="regression/data/Example.apk"
>> NinjaDroid: [DEBUG] Reading file: filepath="regression/data/Example.apk"
>> NinjaDroid: [DEBUG] Extracting APK resource AndroidManifest.xml to /tmp/tmp0h57g3hh.ninjadroid/AndroidManifest.xml
>> NinjaDroid: [DEBUG] AndroidManifest.xml looks like an AndroidManifest.xml file
>> NinjaDroid: [DEBUG] Parsing AndroidManifest.xml file: filepath="/tmp/tmp0h57g3hh.ninjadroid/AndroidManifest.xml"
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/AndroidManifest.xml"
>> NinjaDroid: [DEBUG] Parsing AndroidManifest.xml from DOM...
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-hdpi-v4/ic_launcher.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-hdpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-hdpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-hdpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-hdpi-v4/ic_launcher_logo.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-hdpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-hdpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-hdpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-ldpi-v4/ic_launcher.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-ldpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-ldpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-ldpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-ldpi-v4/ic_launcher_logo.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-ldpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-ldpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-ldpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-mdpi-v4/ic_launcher.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-mdpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-mdpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-mdpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-mdpi-v4/ic_launcher_logo.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-mdpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-mdpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-mdpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-xhdpi-v4/ic_launcher.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-xhdpi-v4/ic_launcher.png
>> NinjaDroid: [DEBUG] res/drawable-xhdpi-v4/ic_launcher.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-xhdpi-v4/ic_launcher.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/drawable-xhdpi-v4/ic_launcher_logo.png to /tmp/tmp0h57g3hh.ninjadroid/res/drawable-xhdpi-v4/ic_launcher_logo.png
>> NinjaDroid: [DEBUG] res/drawable-xhdpi-v4/ic_launcher_logo.png looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/drawable-xhdpi-v4/ic_launcher_logo.png"
>> NinjaDroid: [DEBUG] Extracting APK resource res/layout/main.xml to /tmp/tmp0h57g3hh.ninjadroid/res/layout/main.xml
>> NinjaDroid: [DEBUG] res/layout/main.xml looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/res/layout/main.xml"
>> NinjaDroid: [DEBUG] Extracting APK resource resources.arsc to /tmp/tmp0h57g3hh.ninjadroid/resources.arsc
>> NinjaDroid: [DEBUG] resources.arsc looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/resources.arsc"
>> NinjaDroid: [DEBUG] Extracting APK resource classes.dex to /tmp/tmp0h57g3hh.ninjadroid/classes.dex
>> NinjaDroid: [DEBUG] classes.dex looks like a dex file
>> NinjaDroid: [DEBUG] Parsing dex file: filepath="/tmp/tmp0h57g3hh.ninjadroid/classes.dex", filename="classes.dex"
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/classes.dex"
>> NinjaDroid: [DEBUG] Extracting strings...
>> NinjaDroid: [DEBUG] Strings extracted: 21
>> NinjaDroid: [DEBUG] Extracting URLs...
>> NinjaDroid: [DEBUG] URLs extracted: 0
>> NinjaDroid: [DEBUG] Extracting shell commands...
>> NinjaDroid: [DEBUG] Shell commands extracted: 1
>> NinjaDroid: [DEBUG] Extracting APK resource META-INF/MANIFEST.MF to /tmp/tmp0h57g3hh.ninjadroid/META-INF/MANIFEST.MF
>> NinjaDroid: [DEBUG] META-INF/MANIFEST.MF looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/META-INF/MANIFEST.MF"
>> NinjaDroid: [DEBUG] Extracting APK resource META-INF/CERT.SF to /tmp/tmp0h57g3hh.ninjadroid/META-INF/CERT.SF
>> NinjaDroid: [DEBUG] META-INF/CERT.SF looks like a generic file
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/META-INF/CERT.SF"
>> NinjaDroid: [DEBUG] Extracting APK resource META-INF/CERT.RSA to /tmp/tmp0h57g3hh.ninjadroid/META-INF/CERT.RSA
>> NinjaDroid: [DEBUG] META-INF/CERT.RSA looks like a CERT file
>> NinjaDroid: [DEBUG] Parsing CERT file: filepath="/tmp/tmp0h57g3hh.ninjadroid/META-INF/CERT.RSA", filename="META-INF/CERT.RSA"
>> NinjaDroid: [DEBUG] Reading file: filepath="/tmp/tmp0h57g3hh.ninjadroid/META-INF/CERT.RSA"
>> NinjaDroid: [INFO] Creating output/...
>> NinjaDroid: [DEBUG] apktool path: /app/NinjaDroid/ninjadroid/use_cases/../apktool/apktool.jar
>> NinjaDroid: [INFO] Executing apktool...
>> NinjaDroid: [INFO] Creating output/smali/...
>> NinjaDroid: [INFO] Creating output/AndroidManifest.xml...
>> NinjaDroid: [INFO] Creating output/res/...
>> NinjaDroid: [INFO] Creating output/assets/...
>> NinjaDroid: [DEBUG] apktool command: `java -jar /app/NinjaDroid/ninjadroid/use_cases/../apktool/apktool.jar -q decode -f regression/data/Example.apk -o output`
>> NinjaDroid: [DEBUG] dex2jar path: /app/NinjaDroid/ninjadroid/use_cases/../dex2jar/d2j-dex2jar.sh
>> NinjaDroid: [INFO] Executing dex2jar...
>> NinjaDroid: [INFO] Creating output/Example.jar...
>> NinjaDroid: [DEBUG] dex2jar command: `/app/NinjaDroid/ninjadroid/use_cases/../dex2jar/d2j-dex2jar.sh -f regression/data/Example.apk -o output/Example.jar`
/app/NinjaDroid/ninjadroid/use_cases/../dex2jar/d2j-dex2jar.sh: line 32: dirname: command not found
/app/NinjaDroid/ninjadroid/use_cases/../dex2jar/d2j-dex2jar.sh: line 36: /d2j_invoke.sh: No such file or directory
>> NinjaDroid: [INFO] Extracting certificate file...
>> NinjaDroid: [INFO] Creating output/META-INF/CERT.RSA...
>> NinjaDroid: [INFO] Extracting DEX files...
>> NinjaDroid: [INFO] Creating output/classes.dex...
>> NinjaDroid: [INFO] Generating JSON report file...
>> NinjaDroid: [INFO] Creating output/report-Example.json...
Hi, I am getting this error whenever I try to run ninjadroid with this command
"python ninjadroid.py com.gh4a-46.apk" :
File "ninjadroid.py", line 68
def read_target_file(filepath: str, no_string_processing: bool):SyntaxError: invalid syntax
(The arrow pointer is directly under the colon which I cannot show here).
I did not change anything in the given python file. I cannot see where the issue is either. It seems fine to me, yet giving the error.
I'm not quite sure what to do about this one...
The problem is that none of the async stuff is actually async because none of the ThreadPoolExecutor invocations are with callables, they're all with the result of actually calling the "work" functions.
For example, here:
os.system(command)
is run and its result captured before being sent to the executor's submit method.
To actually call this and have it run asynchronously, you could do it e.g. with a little tweak to JobExecutor
class JobExecutor:
# ...
def submit(self, fn, *args, **kwargs) -> Future:
return self.executor.submit(fn, *args, **kwargs)
then work to be done in the threadpool gets called by passing in a callable, plus any args, e.g. using the earlier example:
class LaunchDex2Jar(UseCase):
# ...
def execute(self) -> Future:
# ...
command = LaunchDex2Jar.DEX2JAR + " -f " + self.input_filepath + \
" -o " + self.output_directory + "/" + jarfile
return self.executor.submit(os.system, command)
But here's the tricky bit... If you do this, there are new issues, most obviously (1) waiting for all the futures in a group to finish, and (2) the very real possibility of race conditions.
I'm not sure how you'd like to proceed with this. I'd be tempted to simply rip out all the executor stuff because it's effectively just dead code not providing any benefit. Happy to lend a hand if you have any thoughts...
If the dex files is at e.g. assets/some.dex
, extraction fails.
ninjadroid instagram.apk
pyaxmlparser.axmlprinter: [WARNING] Not all namespace mappings were closed! Malformed AXML?
file: instagram.apk
size: 53772279
md5: 4785e456f9ecb775623ad1ad13d72efe
sha1: f17b8fcb3c9692c12887ce29983418694a8508ae
sha256: 3b78c6d95745a9d61a6717cfa975fb98477a4d18d06b7e403a2192296be50f9d
sha512: 92cf0ea7705e9b893a1199109d5edd8a7df8489c3ad7e0f1013cf14834f7b6c5f83ed25236c4c79e93f334db364342f327d16f7fe234f6c6a28518c45726a411
Traceback (most recent call last):
File "/snap/ninjadroid/3/bin/ninjadroid.py", line 148, in
sys.exit(main())
File "/snap/ninjadroid/3/bin/ninjadroid.py", line 48, in main
PrintApkInfo().execute(apk, as_json=args.json)
File "/snap/ninjadroid/3/bin/ninjadroid/use_cases/print_apk_info.py", line 22, in execute
self.print_dictionary(apk.as_dict())
File "/snap/ninjadroid/3/bin/ninjadroid/use_cases/print_apk_info.py", line 35, in print_dictionary
PrintApkInfo.print_value(key, value, depth)
File "/snap/ninjadroid/3/bin/ninjadroid/use_cases/print_apk_info.py", line 50, in print_value
print(value)
UnicodeEncodeError: 'ascii' codec can't encode character '\u265a' in position 18: ordinal not in range(128)
Because we're copying in the entire build directory (here) any changes to any of the files in the project will bust Docker's build cache.
Splitting the ADD
s up into a few more pieces and taking action based only on changes introduced by that ADD
mean Docker can better optimize build times by eliminating unnecessary steps. The "cost" of additional ADD
s is more layers in the image, but the layers are independent so there's no real net negative (versus layers which significantly alter underlying layers which unnecessarily increases the total image size).
Getting the following error:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.googlecode.dex2jar.reader.ZipInputStreamHack (file:/home/fade/git/NinjaDroid/ninjadroid/dex2jar/lib/dex-reader-1.15.jar) to field java.util.zip.ZipInputStream.flag
WARNING: Please consider reporting this to the maintainers of com.googlecode.dex2jar.reader.ZipInputStreamHack
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
com.googlecode.dex2jar.DexException: while accept method:[Landroid/support/v4/app/ActionBarDrawerToggle$Delegate;.setActionBarUpIndicator(Landroid/graphics/drawable/Drawable;I)V]
at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:694)
at com.googlecode.dex2jar.reader.DexFileReader.acceptClass(DexFileReader.java:441)
at com.googlecode.dex2jar.reader.DexFileReader.accept(DexFileReader.java:323)
at com.googlecode.dex2jar.v3.Dex2jar.doTranslate(Dex2jar.java:85)
at com.googlecode.dex2jar.v3.Dex2jar.to(Dex2jar.java:261)
at com.googlecode.dex2jar.v3.Dex2jar.to(Dex2jar.java:252)
at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:110)
at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:174)
at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:34)
Caused by: com.googlecode.dex2jar.DexException: while accept parameter annotation in method:[Landroid/support/v4/app/ActionBarDrawerToggle$Delegate;.setActionBarUpIndicator(Landroid/graphics/drawable/Drawable;I)V], parameter:[0]
at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:663)
... 8 more
Caused by: java.lang.RuntimeException: EOF
at com.googlecode.dex2jar.reader.io.ArrayDataIn.readUByte(ArrayDataIn.java:131)
at com.googlecode.dex2jar.reader.DexAnnotationReader.accept(DexAnnotationReader.java:49)
at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:660)
... 8 more
Updating dex2jar to 2.0 solved the error.
Hi,
Thanks for the awesome repo, I'm planning to use it in one of my projects. I have approx 300 apks to analyse, and I want to use this library from a script to get all the JSON data. Any idea how to do this?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.