
Android 앱을 위한 자동 난독화 도구로, 블랙박스 방식으로 작동하며, 고급 난독화 기능을 지원하고, 새로운 기술로 쉽게 확장할 수 있는 모듈형 아키텍처를 갖추고 있습니다.
[!IMPORTANT] 이 프로젝트는 보관되었으며 더 이상 유지 관리되지 않습니다.

안드로이드 앱을 위한 블랙박스 난독화 도구입니다.
Obfuscapk은 소스 코드 없이도 안드로이드 앱을 난독화할 수 있는 모듈식 Python 도구입니다. apktool을 사용하여 원본 apk 파일을 디컴파일하고, 디컴파일된 smali 코드, 리소스 및 매니페스트에 일부 난독화 기술을 적용한 후 새 애플리케이션을 빌드합니다. 난독화된 앱은 원본과 동일한 기능을 유지하지만, 내부적으로의 차이로 인해 때로는 새 애플리케이션이 원본과 매우 달라집니다 (예: 서명 기반 안티바이러스 소프트웨어에서).
Obfuscapk은 BundleDecompiler를 사용하여 Android App Bundle (aab 파일)에 대한 지원을 추가하고 있습니다 (#121 참조). 이 새로운 기능을 사용하려면 여기에서 최신 버전의 BundleDecompiler를 다운로드하여 PATH에 포함된 디렉토리(예: Ubuntu의 /usr/local/bin 또는 /usr/bin)에 BundleDecompiler.jar로 저장하고 실행 권한이 설정되었는지 확인하세요.
[!IMPORTANT] BundleDecompiler는 아직 Windows에서 작동하지 않으므로 Windows 플랫폼에서는 Obfuscapk에서 앱 번들 난독화가 지원되지 않습니다. 또한 앱 번들 지원은 아직 초기 개발 단계에 있으므로 문제가 발생하거나 개선에 도움을 주고 싶다면 기여하기를 참조하세요.
Obfuscapk에 대한 자세한 내용은 논문 "Obfuscapk: An open-source black-box obfuscation tool for Android apps"에서 확인할 수 있습니다. 논문은 다음과 같이 인용할 수 있습니다.```BibTeX @article{aonzo2020obfuscapk, title = "Obfuscapk: An open-source black-box obfuscation tool for Android apps", journal = "SoftwareX", volume = "11", pages = "100403", year = "2020", issn = "2352-7110", doi = "https://doi.org/10.1016/j.softx.2020.100403", url = "https://www.sciencedirect.com/science/article/pii/S2352711019302791", author = "Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo", keywords = "Android, Obfuscation, Program analysis" }
## ❱ 데모

## ❱ 아키텍처

Obfuscapk은 모듈식이며 확장이 용이하도록 설계되었으므로,
[플러그인 시스템](https://github.com/tibonihoo/yapsy)을 사용하여 구축되었습니다. 따라서 각 난독화 도구는
추상
[기본 클래스](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscator_category.py)
에서 상속받아 `obfuscate` 메서드를 구현해야 하는 플러그인입니다. 도구가 새로운
Android 애플리케이션 파일 처리를 시작하면,
[난독화 객체](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py)
를 생성하여 필요한 모든 정보(예: 디컴파일된 `smali` 코드의 위치)와
작업의 내부 상태(예: 이미 사용된 난독화 도구 목록)를 저장합니다.
그런 다음 난독화 객체는 `obfuscate` 메서드의 매개변수로 모든
활성 플러그인/난독화 도구에 (순차적으로) 전달되어 처리 및 수정됩니다. 활성 플러그인의 목록과
순서는 [명령줄 옵션](#-usage)을 통해 지정됩니다.
이 도구는 새로운 난독화 도구로 쉽게 확장 가능합니다: 난독화 기술을 구현하는 소스 코드와
플러그인 메타데이터(`<obfuscator-name>.obfuscator` 파일)를
[`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators)
디렉토리에 추가하기만 하면 됩니다(간단한 기존 난독화 도구인
[`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py)
를 시작 예제로 참고하세요). 도구는 새로운 플러그인을 자동으로 감지하므로
추가 구성이 필요 없습니다(새 플러그인은 도구에 포함된 다른 모든 플러그인과 동일하게 취급됩니다).
## ❱ 설치
자신의 컴퓨터에 Obfuscapk의 작업 복사본을 얻는 방법은 두 가지입니다:
[Docker 사용](#docker-image) 또는 `Python 3` 환경에서
[소스 코드를 직접 사용](#from-source)하는 방법입니다. 두 경우 모두, 가장 먼저 해야 할 일은
이 저장소의 로컬 복사본을 얻는 것입니다. 프로젝트를 저장할 디렉토리에서 터미널을 열고
저장소를 클론합니다:```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
이것은 Obfuscapk을 설치하는 권장 방법입니다. 필요한 것은 최신 버전의 Docker가 설치되어 있는 것뿐입니다:```Shell $ docker --version Docker version 20.10.21, build baeda1f
#### 공식 Docker Hub 이미지
[공식 Obfuscapk Docker 이미지](https://hub.docker.com/r/claudiugeorgiu/obfuscapk)는 Docker Hub에서 사용할 수 있습니다 (이 저장소에서 자동으로 빌드됨):```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
Docker Hub에서 공식 이미지를 다운로드했다면 도구를 사용할 준비가 된 것이므로 사용 방법을 확인하시면 됩니다. 그렇지 않은 경우, 이전에 생성한 Obfuscapk/src/ 디렉토리(Dockerfile이 포함된 폴더)에서 다음 명령어를 실행하여 Docker 이미지를 빌드하십시오:```Shell
$ # Make sure to run the command in Obfuscapk/src/ directory.
$ # It will take some time to download and install all the dependencies.
$ docker build -t obfuscapk .
Docker 이미지가 준비되면, 모든 것이 올바르게 설치되었는지 확인하기 위해 빠른 테스트를 수행하십시오:```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk을 이제 사용할 준비가 되었습니다. 자세한 내용은 사용 방법을 참조하십시오.
최신 버전의
apktool,
apksigner
및 zipalign이 설치되어 있고 명령줄에서 사용할 수 있는지 확인하십시오:```Shell
$ apktool
Apktool v2.9.0 - a tool for reengineering Android apk files
...
```Shell
$ apksigner
Usage: apksigner <command> [options]
apksigner --version
apksigner --help
...
$ zipalign
Zip alignment utility
Copyright (C) 2009 The Android Open Source Project
...
앱 번들 난독화를 지원하려면 BundleDecompiler가 필요하므로,
여기에서 최신 버전을 다운로드하여
PATH에 포함된 디렉토리(예: Ubuntu에서는 /usr/local/bin 또는 /usr/bin)에 BundleDecompiler.jar로 저장하고
실행 가능 플래그가 설정되었는지 확인하십시오.
BundleDecompiler와 apktool을 사용하려면 최신 버전의 Java가 필요합니다.
zipalign과 apksigner는 Android SDK에 포함되어 있습니다. 실행 파일의 위치는 다음 환경 변수를 통해 지정할 수도 있습니다:
APKTOOL_PATH, BUNDLE_DECOMPILER_PATH, APKSIGNER_PATH, ZIPALIGN_PATH (예: Ubuntu에서 동일한 터미널에서 Obfuscapk를 실행하기 전에
export APKTOOL_PATH=/custom/location/apktool을 실행하십시오).
위 도구 외에도 이 프로젝트의 유일한 요구 사항은 작동하는 Python 3 (최소 3.7) 설치와 해당 패키지 관리자 pip입니다.
프로젝트의 메인 디렉토리(Obfuscapk/)에서 다음 명령을 실행하여 필요한 종속성을 설치하십시오:```Shell
$ # Make sure to run the commands in Obfuscapk/ directory.
$ # The usage of a virtual environment is highly recommended. $ python3 -m venv venv $ source venv/bin/activate
$ # Install Obfuscapk's requirements. $ python3 -m pip install -r src/requirements.txt
요구 사항이 설치된 후, 모든 것이 올바르게 작동하는지 빠르게 테스트해 보세요:```Shell
$ cd src/
$ # The following command has to be executed always from Obfuscapk/src/ directory
$ # or by adding Obfuscapk/src/ directory to PYTHONPATH environment variable.
$ python3 -m obfuscapk.cli --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk을 이제 사용할 준비가 되었습니다. 자세한 내용은 사용 방법을 참조하세요.
이제부터 Obfuscapk은 obfuscapk이라는 실행 파일로 간주됩니다. 따라서 도구를 설치한 방법에 따라 명령어를 조정해야 합니다.