제한된 실행을 사용하여 의미 분석을 개선하는 패턴 기반 Dalvik deobfuscator. 또한 다른 Android deobfuscator에 대한 영감 : Simplify.
전에
후에
SHA1 : A68D5D2DA7550D35F7DBEFC21B7DEEBE3F4005F3
MD5 : 2DD2EEEDA08AC8C15BE8A9F2D01ADBE8
당신은 엘리트 안드로이드 리버셀이기 때문에, 당신은 이미 당신의 길에 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 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
예를 들어, Lcom/android/system/admin/CCOIoll; obad.apk 라는 APK 내부 :
dex-oracle -i com/android/system/admin/CCOIoll obad.apkOracle은 Android Apps (APK), Dalvik Executables (DEX) 및 Smali 파일을 입력으로 가져옵니다. 첫째, 입력이 APK 또는 Dex 인 경우 Smali 파일로 분해됩니다. 그런 다음 Smali 파일은 분석 및 수정을 수행하는 다양한 플러그인으로 전달됩니다. 플러그인은 읽기 쉬운 것으로 변환 할 수있는 패턴을 검색합니다. 코드가 수행하는 작업을 이해하려면 일부 Dalvik 메소드가 실제로 실행되고 출력이 수집됩니다. 이런 식으로 일부 메소드 호출은 상수로 대체 될 수 있습니다. 그 후 모든 Smali 파일이 업데이트됩니다. 마지막으로, 입력이 APK 또는 Dex 파일 인 경우 수정 된 Smali 파일이 다시 컴파일되고 업데이트 된 APK 또는 DEX가 작성됩니다.
메소드 실행은 드라이버가 수행합니다. 입력 APK, DEX 또는 SMALI는 DEXMERGE를 사용하여 DEX로 드라이버와 결합되며 장치 또는 에뮬레이터로 밀립니다. 그런 다음 플러그인은 Java 반사를 사용하여 입력 덱스에서 메소드를 실행하는 드라이버를 사용할 수 있습니다. 반환 값은 단순한 패턴 인식 이상의 의미 분석을 개선하는 데 사용될 수 있습니다. 이것은 일반적으로 암호화 된 문자열 또는 일부 바이트 배열을 취하는 많은 문자열 암호 해독 방법에 특히 유용합니다. 한 가지 제한 사항은 실행이 정적 메소드로 제한된다는 것입니다.
Oracle과 함께 제공되는 세 가지 플러그인이 있습니다.
새로운 유형의 난독 화가 발생하면 Oracle과 함께 deobfuscate가 가능할 수 있습니다. Smali를보고 코드가있을 수 있는지 알아 봅니다.
이 두 가지 중 하나 인 경우 자신의 플러그인을 작성하고 작성해야합니다. 자신의 플러그인을 구축하는 4 단계가 있습니다.
포함 된 플러그인은 단계 #3 및 #4를 이해하기위한 좋은 안내서가되어야합니다. 드라이버는 #2 단계를 돕기 위해 설계되었습니다.
물론, 당신은 항상 당신이 만나는 난독 화를 공유 할 수 있으며 누군가가 결국에는 그것을 얻을 수 있습니다.
먼저 dx 경로에 있는지 확인하십시오. 이것은 Android SDK의 일부이지만 하드 코어가 아니라면 경로에 있지 않을 것입니다.
드라이버 폴더는 Gradle에서 관리하는 Java 프로젝트입니다. Eclipse, Intellij 등으로 가져와 원하는 변경 사항을 변경하십시오. 드라이버 업데이트를 마치려면 ./update_driver 실행하십시오. 이렇게하면 드라이버를 재건하고 출력 항아리를 덱스로 변환합니다.
에뮬레이터 나 장치에서 드라이버 코드를 실행하는 데 문제가있는 경우 monitor (Android SDK의 일부)를 열고 단서를 확인하십시오. 오류가 이해되지 않더라도 생성 할 문제와 함께 게시하면 도움이됩니다.
모든 Android 플랫폼이 Dex-Oracle과 잘 작동하는 것은 아닙니다. 그들 중 일부는 임의의 DEX 파일을 실행하려고 할 때 헛소리를합니다. segfaults 또는 드라이버 충돌에 문제가있는 경우 ARM과 함께 Android 4.4.2 API 레벨 19를 사용해보십시오.
플러그인이 생각하는 패턴을 볼 수 있지만 실제로 실행하지 말아야 할 코드 일 수 있습니다. 난독 화 패턴이 정말 이례적이기 때문에 가능성은 거의 없지만 가능합니다. 특정 플러그인이 문제를 일으킨다는 것을 알게 된 경우 앱이 특정 Obfuscator에 의해 보호되지 않는다고 확신합니다. 즉, 앱은 DexGuarded가 아니라 DexGuard 플러그인이 물건을 실행하려고 시도하고 있습니다.