
패턴 기반 Dalvik 디오브퓨케이터로, 제한된 실행을 사용하여 의미론적 분석을 개선합니다.
패턴 기반 Dalvik 난독화 해제 도구로, 제한된 실행을 사용하여 의미 분석을 개선합니다. 또한 다른 Android 난독화 해제 도구인 Simplify에 영감을 주었습니다.
전

후

sha1: a68d5d2da7550d35f7dbefc21b7deebe3f4005f3
md5: 2dd2eeeda08ac8c15be8a9f2d01adbe8
당신은 정예 Android 리버서이므로 이미 Smali와 Baksmali가 경로에 있을 것이라고 확신합니다. 만약 어떤 이상한 이유로 아직 설치되지 않았다면, 다음 명령어로 시작할 수 있지만 실행하기 전에 주의 깊게 확인하세요:
mkdir ~/bin || cd ~/bin
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali-2.2.5.jar && mv smali-*.jar smali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.2.5.jar && mv baksmali-*.jar baksmali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali
chmod +x ./smali ./baksmali
export PATH=$PATH:$PWD
adb가 경로에 있는지 확인하세요.
gem install dex-oracle
또는, 소스에서 빌드하려면:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install
Oracle이 작동하려면 에뮬레이터가 실행 중이거나 기기가 연결되어 있어야 합니다. 최소 요구 Android 버전은 5.0입니다!
Oracle은 활성 Android 시스템에서 메서드를 실행해야 합니다. 이는 기기 또는 에뮬레이터(권장)에서 가능합니다. 기기를 사용하는 경우, 잠재적으로 적대적인 코드를 실행해도 괜찮은지 확인하세요.
에뮬레이터를 사용하고 싶고 Android SDK가 이미 설치되어 있다면, 다음 명령어로 에뮬레이터 이미지를 생성하고 시작할 수 있습니다:
android avd
Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
-h, --help Display this screen
-s ANDROID_SERIAL, Device ID for driver execution, default=""
--specific-device
-t, --timeout N ADB command execution timeout in seconds, default="120"
-i, --include PATTERN Only optimize methods and classes matching the pattern, e.g. Ldune;->melange\(\)V
-e, --exclude PATTERN Exclude these types from optimization; including overrides
--disable-plugins STRING[,STRING]*
Disable plugins, e.g. stringdecryptor,unreflector
--list-plugins List available plugins
-v, --verbose Be verbose
-V, --vverbose Be very verbose
예를 들어, obad.apk라는 APK 안에 있는 Lcom/android/system/admin/CCOIoll; 클래스의 메서드만 디오브퓨스케이트하려면:
dex-oracle -i com/android/system/admin/CCOIoll obad.apk
Oracle은 Android 앱(APK), Dalvik 실행 파일(DEX), Smali 파일을 입력으로 받습니다. 먼저, 입력이 APK 또는 DEX인 경우, Smali 파일로 디스어셈블됩니다. 그런 다음, Smali 파일은 분석 및 수정을 수행하는 다양한 플러그인에 전달됩니다. 플러그인은 더 읽기 쉬운 형태로 변환할 수 있는 패턴을 검색합니다. 코드가 무엇을 하는지 이해하기 위해 일부 Dalvik 메서드가 실제로 실행되고 출력이 수집됩니다. 이렇게 하면 일부 메서드 호출을 상수로 대체할 수 있습니다. 그 후, 모든 Smali 파일이 업데이트됩니다. 마지막으로, 입력이 APK 또는 DEX 파일이었다면, 수정된 Smali 파일이 다시 컴파일되어 업데이트된 APK 또는 DEX가 생성됩니다.
메서드 실행은 Driver에 의해 수행됩니다. 입력 APK, DEX 또는 Smali는 dexmerge를 사용하여 Driver와 결합되어 단일 DEX가 되고, 기기 또는 에뮬레이터로 푸시됩니다. 플러그인은 Driver를 사용할 수 있으며, Driver는 Java 리플렉션을 사용하여 입력 DEX의 메서드를 실행합니다. 반환 값은 단순한 패턴 인식을 넘어서 의미 분석을 개선하는 데 사용될 수 있습니다. 이는 일반적으로 암호화된 문자열이나 바이트 배열을 입력으로 받는 많은 문자열 복호화 메서드에 특히 유용합니다. 한 가지 제한 사항은 실행이 정적 메서드로 제한된다는 것입니다.
Oracle에 포함된 세 가지 플러그인이 있습니다:
새로운 유형의 난독화를 발견한 경우 Oracle로 디오브퓨스케이트하는 것이 가능할 수 있습니다. Smali를 살펴보고 코드가 1. 재배열될 수 있는지, 2. 일부 정적 메서드를 실행하여 이해될 수 있는지 파악하세요. 이 두 경우 중 하나에 해당한다면, 자신만의 플러그인을 작성해 보세요. 자신만의 플러그인을 만드는 네 가지 단계가 있습니다:
포함된 플러그인은 3단계와 4단계를 이해하는 좋은 안내서가 될 것입니다. Driver는 2단계를 돕기 위해 설계되었습니다. 물론, 발견한 난독화를 언제든지 공유해 주시면 누군가가 결국 처리할 수도 있습니다.
먼저, dx가 경로에 있는지 확인하세요. 이는 Android SDK의 일부이지만, 당신이 하드코어하지 않다면 경로에 없을 것입니다.
driver 폴더는 Gradle로 관리되는 Java 프로젝트입니다. Eclipse, IntelliJ 등에 가져와서 원하는 대로 변경하세요. Driver 업데이트를 완료하려면 ./update_driver를 실행하세요. 이렇게 하면 Driver가 다시 빌드되고 출력 JAR이 DEX로 변환됩니다.
에뮬레이터나 기기에서 Driver 코드를 실행하는 데 문제가 있으면 monitor(Android SDK의 일부)를 열어서 단서가 있는지 확인하세요. 오류가 이해되지 않더라도, 생성할 이슈와 함께 게시하면 도움이 됩니다.
모든 Android 플랫폼이 dex-oracle과 잘 작동하는 것은 아닙니다. 일부는 임의의 DEX 파일을 실행하려고 할 때 제대로 작동하지 않습니다. Segfaults 또는 Driver 충돌 문제가 있다면 ARM과 함께 Android 4.4.2 API 레벨 19를 사용해 보세요.
플러그인이 난독화라고 생각하는 패턴을 발견했지만 실제로는 실행해서는 안 되는 코드일 가능성이 있습니다. 난독화 패턴이 매우 특이하기 때문에 가능성은 낮지만, 가능합니다. 특정 플러그인이 문제를 일으키고 있고 앱이 해당 난독화 프로그램으로 보호되지 않는다고 확신하는 경우, 즉 앱이 DexGuarded가 아닌데 DexGuard 플러그인이 무언가를 실행하려고 한다면, 그냥 비활성화하세요.