Git Product home page Git Product logo

apk2gold's Introduction

Easy-as-pie Android Decompiler

Why

One stop shop

I got pretty tired of decompiling Android apps with a bunch of steps that I had to remember all the time. It involved a lot of apktool, dex2jar, and jd-gui; it still confuses me.

Collocation of source files

Further, even after these steps were complete (usually a combination of dex2jar and JD-GUI), I would be left with disparate sources of information; the decompiled Java would be over here in this directory, while the un-DEXed content would be somewhere else (Really bad for importing into Eclipse!)

I basically wanted to make this generate a tree and source as close as possible to what the original Android developer sees.

Regeneration of R.* References

One thing that existing decompilers don't do is regenerate R references; this tool includes a script that makes an attempt to do this. Which gives you more insight when you're reading source code?
View v = inflater.inflate(217994357, container, false);
or
View v = inflater.inflate(R.layout.result_panel, container, false);

Now you can easily see and search for what resource is doing what, without needing to file-search R.java for some opaque int.

Note: This process relies on guesses and may lead to weird results, because the resource ints were inlined and opaque. You can check out the source code of rreassoc.py to see my matching heuristics and adjust them appropriately.

What

apk2gold is basically a small amount of original content (the R.* thing) and a script wrapping some excellent 3rd-party tools. It is designed to be easily installed and to get you the best results for Android app introspection as quickly as possible. The project stands on the shoulders of the following giants:

Installation

Dependencies

You'll need python, git (for submodules), mercurial (hg) for the sub-builds, and maven (mvn) for jd-cli. Sorry!

Installing

Just run make.sh

Usage

Getting the APK

There are different ways to acquire an APK, but the easiest is to just download it from the Play Store and use ES File Explorer to back up the APK (ES File Explorer -> "AppMgr" tab -> long click on app you want -> backup). The APK is now in the 'backups' directory on your SD card. Now you can just USB it over (I like to email it to myself from ES File Explorer itself). More depth can be found at this SO post.

Decompiling

Actually using my tool easy as pie! Just use:
apk2gold <target>.apk

Looking at the result

This will create a folder with the APK's name without '.apk' suffix. Everything is in there. There is also an additional directory you may not recognize, /.smali, which contains the Smali output from APKTool. It's just kept around for reference, in case JD did something bad. Load it up in Eclipse and have fun!
Note that the result will almost certainly not compile; that's not really the goal. We just want to get an idea of whats happening in the source code, check for malicious shit, etc.

You know what would be cool?

It would be real cool to look for sections that JD bailed on decompiling and sub in the Smali code generated by apktool. That would be baller.

apk2gold's People

Contributors

adipascu avatar carllee avatar injcristianrojas avatar lxdvs avatar pretz 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  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

apk2gold's Issues

Unable to access jarfile ./jd-cli.jar

I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/Francis/Library/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
W: Could not decode attr value, using undecoded value instead: ns=android, name=touchscreenBlocksFocus, value=0xffffffff
I: Decoding values / XMLs...
Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec: 0x0101048f
at brut.androlib.res.data.ResPackage.getResSpec(ResPackage.java:59)
at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:58)
at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:54)
at brut.androlib.res.decoder.ResAttrDecoder.decode(ResAttrDecoder.java:36)
at brut.androlib.res.decoder.AXmlResourceParser.getAttributeValue(AXmlResourceParser.java:369)
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:83)
at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:141)
at brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamDecoderContainer.java:33)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:107)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:91)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:322)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:123)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:102)
at brut.apktool.Main.cmdDecode(Main.java:170)
at brut.apktool.Main.main(Main.java:86)
mv: rename Test/smali to Test/.smali: No such file or directory
dex2jar Test.apk -> Test-dex2jar.jar
Converting .class files to java...
Error: Unable to access jarfile ./jd-cli.jar
Reassociated 0 R.* references in 0 files

null file contents

On a fresh install of apk2gold all *.java files contain only the contents "null". Console output does not indicate any errors.

command not found

~ ./make.sh
fatal: Not a git repository (or any of the parent directories): .git
./make.sh: line 6: mvn: command not found
cp: jd-cli/target/jd-cli.jar: No such file or directory
/Users/lecong/downloads/apk2gold-master

Needs maven for building

Pretty obvious from running ./make.sh, which gives this output:

Submodule 'jd-cli' (https://github.com/lxdvs/jd-core-java.git) registered for path 'jd-cli'
Cloning into 'jd-cli'...
remote: Counting objects: 91, done.
remote: Compressing objects: 100% (64/64), done.
remote: Total 91 (delta 14), reused 91 (delta 14)
Unpacking objects: 100% (91/91), done.
Checking connectivity... done.
Submodule path 'jd-cli': checked out '560a13172520454c904a7b2ee6920cf144b92d11'
mvn package
make: mvn: No such file or directory
make: *** [target/jd-core-java-1.0.jar] Error 1

But I just figured the documentation should mention it.

Error

fatal: Not a git repository (or any of the parent directories): .git
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.173 s
[INFO] Finished at: 2016-05-26T18:43:38+05:30
[INFO] Final Memory: 7M/309M
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/Users/demo/Desktop/apk2gold-master/jd-cmd). Please verify you invoked Maven from the correct directory. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException
cp: jd-cli/target/jd-cli.jar: No such file or directory
/Users/demo/Desktop/apk2gold-master

apk2gold problem

I'm in a little over my head. I just want to decompile an apk to find a short string of characters that will start with an asterisk.

I've found some other instructions on how to install apk2gold on ubuntu and it appears to be installed, but, I get a command not found error and I can't find the directory apk2gold that was created.

I am running linux mint15 and I have installed python, git, mercurial,jdk and jdk devel using the package manager. Then I ran:

git clone https://github.com/lxdvs/apk2gold.git
cd apk2gold
git submodule init
git submodule update
./make.sh

When I do:

apk2gold # dir

I get:

apk2gold apktool dex2jar-0.0.9.12 jd-cli linux make.sh osx README.md rreassoc.py

but when I look for this directory (apk2gold) with my file manager so I can put my apk file there as well I can't find it.

when I try to run it I get this:

apk2gold # apk2gold FP.apk
apk2gold: command not found

or as root

apk2gold FP.apk

apk2gold: command not found

Merge jd-core-java bug fix

Recently I sent pull request to the original jd-core-java repository: nviennot/jd-core-java#3
This PR fixed the issue on the case-insensitive file system like OS X. Originally, jd-core-java did not consider case-insensitive file system, decompiled class A could overwrite existing decompiled a class.

Can you merge this change into your fork as well? I believe this would be helpful to apk2gold users including me.

apktool is out of date

I was just using this tool to decompile an apk, and the version of apktool you've got included (2.0.0RC2) blows up with a null pointer exception.

When I substituted apktool 2.1.0, it worked beautifully!

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.