Code Monkey home page Code Monkey logo

ninjadroid's People

Contributors

fdellwing avatar iantruslove avatar rovellipaolo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ninjadroid's Issues

Issue with importing script

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?

Unable to parse AndroidManifest for certain apps

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 :)

multidex support

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

-e/--extract option not working correctly with snap

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...

Update apktools

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.

-e/--extract option not working correctly with flatpak

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...

Getting syntax error

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.

JobExectutor isn't asynchronous

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...

i got this when hit --> ninjadroid instagram.apk

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)

Dockerfile structure doesn't make good use of layer caching

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 ADDs 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 ADDs 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).

Update dex2jar

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.

Pip package

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?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.