Dalvik Deobfuscator ตามรูปแบบซึ่งใช้การดำเนินการที่ จำกัด เพื่อปรับปรุงการวิเคราะห์ความหมาย นอกจากนี้แรงบันดาลใจสำหรับ Android deobfuscator อีกอัน: ทำให้ง่ายขึ้น
ก่อน
หลังจาก
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 สด สิ่งนี้สามารถอยู่ในอุปกรณ์หรือ emulator (ต้องการ) หากเป็นอุปกรณ์ ตรวจสอบให้แน่ใจว่าคุณไม่สนใจที่จะใช้รหัสที่เป็นมิตรกับมัน
หากคุณต้องการใช้เครื่องจำลองและติดตั้ง 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
ตัวอย่างเช่นวิธีการ deobfuscate เฉพาะในชั้นเรียนที่เรียกว่า Lcom/android/system/admin/CCOIoll; ภายใน APK ที่เรียกว่า obad.apk :
dex-oracle -i com/android/system/admin/CCOIoll obad.apkOracle ใช้แอพ Android (APK), Dalvik Executables (DEX) และไฟล์ SMALI เป็นอินพุต ก่อนอื่นหากอินพุตเป็น APK หรือ DEX จะถูกถอดออกเป็นไฟล์ SMALI จากนั้นไฟล์ SMALI จะถูกส่งผ่านไปยังปลั๊กอินต่างๆซึ่งทำการวิเคราะห์และดัดแปลง ปลั๊กอินค้นหารูปแบบที่สามารถเปลี่ยนเป็นสิ่งที่อ่านได้ง่ายขึ้น เพื่อที่จะเข้าใจว่ารหัสกำลังทำอะไรมีวิธีการ Dalvik บางอย่างที่ดำเนินการจริงและรวบรวมเอาต์พุต ด้วยวิธีนี้การโทรบางวิธีสามารถแทนที่ด้วยค่าคงที่ หลังจากนั้นไฟล์ SMALI ทั้งหมดจะได้รับการอัปเดต ในที่สุดหากอินพุตเป็น APK หรือไฟล์ DEX ไฟล์ SMALI ที่แก้ไขจะถูกคอมไพล์ใหม่และสร้าง APK หรือ DEX ที่อัปเดตแล้ว
การดำเนินการของวิธีการดำเนินการโดยไดรเวอร์ อินพุต apk, dex หรือ smali รวมกับไดรเวอร์ลงใน dex เดี่ยวโดยใช้ dexmerge และถูกผลักไปยังอุปกรณ์หรือตัวจำลอง ปลั๊กอินสามารถใช้ไดรเวอร์ที่ใช้ Java Reflection เพื่อดำเนินการวิธีการจาก DEX อินพุต ค่าส่งคืนสามารถใช้เพื่อปรับปรุงการวิเคราะห์ความหมายนอกเหนือจากการจดจำรูปแบบเพียงแค่ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับวิธีการถอดรหัสสตริงจำนวนมากซึ่งมักจะใช้สตริงที่เข้ารหัสหรืออาร์เรย์ไบต์ ข้อ จำกัด อย่างหนึ่งคือการดำเนินการนั้น จำกัด อยู่ที่วิธีการคงที่
มีปลั๊กอินสามตัวที่มาพร้อมกับ Oracle:
หากคุณพบกับการทำให้งงงวยรูปแบบใหม่อาจเป็นไปได้ที่จะ deobfuscate กับ Oracle ดู SMALI และหาว่ารหัสสามารถเป็นได้หรือไม่:
หากทั้งสองอย่างนี้เป็นกรณีคุณควรลองและเขียนปลั๊กอินของคุณเอง มีสี่ขั้นตอนในการสร้างปลั๊กอินของคุณเอง:
ปลั๊กอินที่รวมไว้ควรเป็นแนวทางที่ดีสำหรับการทำความเข้าใจขั้นตอน #3 และ #4 ไดรเวอร์ได้รับการออกแบบมาเพื่อช่วยในขั้นตอนที่ 2
แน่นอนว่าคุณยินดีที่จะแบ่งปันสิ่งที่ทำให้เกิดความสับสนที่คุณเจอและบางคนอาจได้รับในที่สุด
ก่อนอื่นให้แน่ใจว่า dx อยู่บนเส้นทางของคุณ นี่เป็นส่วนหนึ่งของ Android SDK แต่อาจไม่ได้อยู่บนเส้นทางของคุณเว้นแต่คุณจะไม่ยอมใครง่ายๆ
โฟลเดอร์ Driver เป็นโครงการ Java ที่จัดการโดย Gradle นำเข้าสู่ Eclipse, Intellij ฯลฯ และทำการเปลี่ยนแปลงใด ๆ ที่คุณชอบ หากต้องการอัปเดตไดรเวอร์ให้เสร็จให้รัน ./update_driver update_driver สิ่งนี้จะสร้างไดรเวอร์ใหม่และแปลงโถเอาต์พุตเป็น DEX
หากมีปัญหาในการเรียกใช้รหัสไดรเวอร์บนเครื่องจำลองหรืออุปกรณ์ของคุณอย่าลืมเปิด monitor (ส่วนหนึ่งของ Android SDK) และตรวจสอบเบาะแสใด ๆ ที่นั่น แม้ว่าข้อผิดพลาดจะไม่สมเหตุสมผลกับคุณ แต่ก็จะช่วยได้หากคุณโพสต์พร้อมกับปัญหาที่คุณจะสร้าง
ไม่ใช่แพลตฟอร์ม Android ทั้งหมดที่ทำงานได้ดีกับ Dex-Oracle บางคนเพิ่งอึออกเมื่อพยายามเรียกใช้ไฟล์ Dex โดยพลการ หากคุณมีปัญหากับ segfaults หรือคนขับขัดข้องให้ลองใช้ Android 4.4.2 API ระดับ 19 ด้วย ARM
เป็นไปได้ว่าปลั๊กอินเห็นรูปแบบที่คิดว่าเป็นการทำให้งงงวย แต่จริง ๆ แล้วเป็นรหัสบางอย่างที่ไม่ควรดำเนินการ สิ่งนี้ดูเหมือนจะไม่น่าเป็นไปได้เนื่องจากรูปแบบการทำให้งงงวยนั้นผิดปกติจริงๆ แต่เป็นไปได้ หากคุณกำลังค้นหาปลั๊กอินเฉพาะทำให้เกิดปัญหาและคุณมั่นใจว่าแอพไม่ได้รับการปกป้องโดยเครื่อง obfuscator นั้นเช่นแอปไม่ได้ถูกลดน้ำหนัก แต่ปลั๊กอิน Dexguard กำลังพยายามดำเนินการสิ่งของเพียงแค่ปิดการใช้งาน