Method-based AOT compiler that can wrap Dalvik bytecode with JNI native code.
This project is a forked version of amimo/dcc, which aims to make it easy for everyone to use this tool. We automated plenty of processes that you had to do manually in the original DCC. Moreover, we always try to add new features to make this tool more usable in real-world applications. Check out Roadmap to know about the changes we made and also the changes we are planning to make in the feature.
Python 3.8 or higher is required for running this tool. So, make sure your python is up-to-date.
git clone https://github.com/codehasan/dex2c
cd dex2c
tools
folder with the name apktool.jar
wget -O tools/apktool.jar https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.10.0.jar
ndk-build
executable is located inside the extracted folder and configure ndk_dir
in dcc.cfg
pip3 install -r requirements.txt
sudo apt-get install openjdk-17-jdk, zipalign
pip3 install -r requirements.txt
zipalign
installed. You'll get it in Android SDK build-tools from here. Add it to your system path.One Step Installation: Run Below Command
pkg install wget && wget -O termux_install.sh https://raw.githubusercontent.com/codehasan/dex2c/master/termux_install.sh && chmod -R +x termux_install.sh && ./termux_install.sh
NOTE: Some users have reported about installation errors with latest
clang
on termux. If you happen to face the same issue, then uncomment the lines stated intermux_install.sh
and then proceed with the installation.
Add all your filters in filter.txt
file - one rule for each line. Filters are made using regex patterns. There are two types of filters available in Dex2c - whitelist, and blacklist. You can use them whenever you need them.
Protect just one method in a specific class.
com/some/class;some_method(some_parameters)return_type
Protect all methods in a specific class.
com/some/class;.*
Protect all methods in all classes under a package path.
com/some/package/.*;.*
Protect a method with the name onCreate in all classes.
.*;onCreate\(.*
Adding an exclamation !
sign before a rule will mark that rule as a blacklist.
Exclude one method in a specific class from being protected.
!com/some/class;some_method(some_parameters)return_type
Exclude all methods in a specific class from being protected.
!com/some/class;.*
Exclude all methods in all classes under a package path from being protected.
!com/some/package/.*;.*
Exclude a method with the name onCreate in all classes from being protected.
!.*;onCreate\(.*
dex2c
folder where dcc.py
is located and run this command.python3 dcc.py -a input.apk -o output.apk
python3 dcc.py --help
Open project/jni/Android.mk
file in the cloned directory. You will find a variable named LOCAL_MODULE
, initially with the value stub
. Please change it to your desired lib name. Keep in mind the following instructions to prevent possible errors.
-
or underscore _
lib
itselfdcc.cfg
See the open issues for a full list of proposed features and known issues.
Contributions are what makes the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give this project a star! Thanks again!
git checkout -b feature/AmazingFeature
)git commit -m 'Add some AmazingFeature'
)git push origin feature/AmazingFeature
)Distributed under the Apache License. See LICENSE.txt
for more information.