การสร้าง Android Emulator แบบไม่หน่วงเครื่อง ด้วย Android Studio Command line tools only

ได้ฤกษ์จะหัดทำ Android Mobile App Pentest Lab ซักที ก็ดันไม่มีมือถือจริงๆที่เอาไว้ root ทำ Test ได้ ครั้นอุส่าห์ไปตามหาจนได้เครื่องมาก็ดันเป็น Android Version ใหม่ที่จะไปหา Firmware root ก็ยากเย็น หรือพอพยายาม root ก็ไม่ผ่านซักที ใจร้อนมือลั่นทำพลาดก็ brick เปิดเครื่องไม่ติดอีก พอมาลง Android Studio เพื่อใช้ Emulator ตอนเปิดใช้ทีคอมก็หน่วงจนไม่เป็นอันทำอะไร… วันนี้ทีวีดูเล็กขอเสนอ การสร้าง Android Emulator ง่ายๆ แบบเบาๆเป็นมิตรกะคอม ที่ไม่จำเป็นต้องติดตั้ง Android Studio ทั้งยวง แต่เป็นการติดตั้ง Android Studio แบบ Command line tools only แทน ที่เคาะๆ keyboard ไม่กี่ขั้นตอนก็มี Android Emulator ให้ได้ใช้กันแล้ว

By ZER0N

1. ติดตั้ง Android Studio Emulator แบบ “Command line tools only”

Download Android Studio แบบ “Command line tools only” ที่เป็นแค่ zip file และทำการ Unzip จะได้ folder ชื่อ “cmdline-tools” จากนั้นทำการแก้ชื่อ folder เป็น “latest” และเอาไปอยู่ใน Path “/User/$USER/Library/Android/sdk/cmdline-tools/latest” (*โดยหากยังไม่มี folder ใดใน path สร้างก็มารถสร้างให้ตรงตาม path ได้เลย)

*ในที่นี้ผู้เขียนใช้ MacOS X ดังนั้นหากเป็น OS อื่น หลักๆก็จะต่างแค่ Directory/Path เช่น การตั้งค่า Environment Variable สำหรับ Android SDK บน Windows

2. ตั้งค่า Environment variables

ทำการตั้งค่า Environment variables  โดยจะใช้เป็น ~/.bash_profile หรือ ~/.zprofile ก็ตามสะดวกเลย

nano ~/.bash_profile หรือ nano ~/.zprofile
export ANDROID_HOME=/Users/$USER/Library/Android/sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export ANDROID_AVD_HOME=/Users/$USER/.android/avd

export PATH=${PATH}:$ANDROID_HOME/platform-tools
export PATH=${PATH}:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH

alias emulator=$ANDROID_HOME/emulator/emulator

เมื่อทำการ save file แล้วให้ทำการ update Environment variables ด้วยคำสั่ง source ตามด้วยไฟล์ที่แก้ไข

source ~/.bash_profile หรือ source ~/.zprofile

3. ติดตั้ง Package ที่จำเป็น โดย sdkmanager

ในที่นี้เนื่องจาก ในบทความต่อๆไป จะมีกล่าวถึงการทำงานร่วมกับ Framework อื่นๆ ไม่ว่าจะเป็น Xposed หรือ MobSF ดังนั้นผู้เขียนจึงแนะนำเลือกใช้ system image ที่เป็น supported image เป็น Android 7 x86 (API25) โดยไม่มี Google API

sdkmanager --install "emulator" "platform-tools" "platforms;android-25" "system-images;android-25;default;x86"

เมื่อทำการติดตั้งเสร็จควรจะต้องมี packages อย่างน้อยตามนี้

4. สร้าง Android Emulator ด้วย avdmanager

avdmanager create avd -n "android7_api25x86" -k "system-images;android-25;default;x86"

ตั้งค่าให้ Android Emulator สามารถรับค่า input จาก keyboard จากคอมเราได้ตรงๆ แทนที่จะต้องใช้เมาส์จิ้มๆ เอาเพื่อความสะดวก

nano /Users/$USER/.android/avd/android7_api25x86.avd/config.ini

hw.keyboard=yes

5. Run Android Emulator ที่สร้างไว้ด้วย emulator

emulator -avd "android7_api25x86" -writable-system -no-snapshot -no-cache

เพียงเท่านี้ก็มี Android Emulator พร้อมใช้เรียบร้อยแล้วครับ ซึ่งอาจจะสร้าง alias ทิ้งไว้ใน Environment Variables แทนที่จะต้อง run command ยาวๆแบบนี้ทีหลัง

alias android7="emulator -avd "android7_api25x86" -writable-system -no-snapshot -no-cache"

ซึ่งการติดตั้ง Android App จาก APK file ก็แสนง่าย โดยลากและโยนลงไปติดตั้งได้เลยทันที

นอกจากนี้ เนื่องจากเป็น Emulator การได้ root ยังแสนง่ายดาย ซึ่งสามารถเข้าไปคุ้ยไฟล์ใน data storage ได้ทันใจ

6. การตั้งค่า Burp SSL Proxy เพื่อเอาไว้ใช้งาน Intercept HTTPS traffic ตอนทำ Pentest ต่อไป

จากการทดลอง ผู้เขียนแนะนำให้ติดตั้ง Burp CA แบบ System trusted credential แทนการติดตั้งแบบ user tested credential ตามทั่วไป โดยสามารถทำตามบทความนี้ได้เลยครับ Install Burp CA as a system-level on Android Studio Emulator

เมื่อติดตั้ง CA แล้วให้ทำการตั้งค่าชี้ proxy ที่ Android Emulator ไปที่ Burp proxy

เมื่อลองใช้งาน web ผ่าน web browser (WebView Browser) จะเห็นว่าสามารถ Intercept HTTPS traffic ได้แล้วครับ

สมัยนี้ Mobile Application ส่วนใหญ่ มักจะมีการตรวจจับและป้องกันไม่ให้ตัว app เอง ถูก run บนเครื่อง rooted, emulator, debugged รวมถึงมี SSL pinning เพื่อป้องกันการถูกโจมตีด้วย Man In the Middle (MiTM) attack อย่างการดัก Intercept HTTPS traffic ด้วย Burp SSL Proxy ตามตัวอย่างด้านบน ทำให้การทำ Pentest อาจจะต้องมีการ Bypass security mechanism ดังกล่าวก่อน ไม่ว่าจะเป็นการใช้ off-the-shelf software/application หรือการใช้ Frida script ในการ Bypass โดยโอกาสถัดไป ผู้เขียนจะพาไปดูวิธีการ bypass security mechanism ทั้งหมดนั้น ด้วย module ต่างๆของ Xposed framework หรือด้วย feature dynamic analysis ของ Mobile Security Framework (MobSF) กันง่ายๆสไตล์คนขี้เกียจกันครับ