Exploiting a debuggeable application
Last updated
Last updated
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE) GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE)
์ด ๊ฒ์๋ฌผ์ ์ด ์น์ ์ https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0์์ ์์ฝํ ๋ด์ฉ์ ๋๋ค.
๋ด์ฉ์ https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
APK ๋์ปดํ์ผ:
APK ๋์ปดํ์ผ์ ์ํด APK-GUI ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
android-manifest ํ์ผ์ android:debuggable=true
๋ฅผ ์ฝ์
ํ์ฌ ๋๋ฒ๊น
๋ชจ๋๋ฅผ ํ์ฑํํฉ๋๋ค.
์์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์ปดํ์ผํ๊ณ ์๋ช ํ ํ zipalignํฉ๋๋ค.
์์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค์น:
๋ช
๋ น์ด: adb install <application_name>
์ ์ฌ์ฉํฉ๋๋ค.
ํจํค์ง ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ:
adb shell pm list packages โ3
์ ์คํํ์ฌ ์๋ํํฐ ์ ํ๋ฆฌ์ผ์ด์
๋ชฉ๋ก์ ํ์ธํ๊ณ ํจํค์ง ์ด๋ฆ์ ์ฐพ์ต๋๋ค.
์ฑ์ด ๋๋ฒ๊ฑฐ ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๋๋ก ์ค์ :
๋ช
๋ น์ด: adb shell am setup-debug-app โw <package_name>
์
๋๋ค.
์ฐธ๊ณ : ์ด ๋ช ๋ น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๊ธฐ ์ ์ ๋งค๋ฒ ์คํํด์ผ ๋๋ฒ๊ฑฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ก ์ค์ ๋ฉ๋๋ค.
์ง์์ฑ์ ์ํด adb shell am setup-debug-app โw -โpersistent <package_name>
์ ์ฌ์ฉํฉ๋๋ค.
๋ชจ๋ ํ๋๊ทธ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด adb shell am clear-debug-app <package_name>
์ ์ฌ์ฉํฉ๋๋ค.
Android Studio์์ ๋๋ฒ๊น ์ค๋น:
Android Studio์์ _File -> Open Profile or APK_๋ก ์ด๋ํฉ๋๋ค.
๋ค์ ์ปดํ์ผํ APK๋ฅผ ์ฝ๋๋ค.
์ฃผ์ Java ํ์ผ์ ์ค๋จ์ ์ค์ :
MainActivity.java
(ํนํ onCreate
๋ฉ์๋), b.java
, ContextWrapper.java
์ ์ค๋จ์ ์ ์ค์ ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์์ ์์ ๋๋ฒ๊น ๊ฐ๋ฅ์ฑ์ ํ์ธํ๊ณ ๋ฃจํ ๋ ์ฅ์น๋ฅผ ๋ํ๋ด๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ ์ ๋ณด๋ฅผ ์์ ํ๊ณ , ๋๋ฒ๊น ๊ฐ๋ฅ ๋นํธ๋ฅผ ํด์ ํ๋ฉฐ, ๊ฒ์๋ ๋ฐ์ด๋๋ฆฌ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ์ฌ ์ด๋ฌํ ๊ฒ์ฌ๋ฅผ ์ฐํํ ์ ์์ต๋๋ค.
๋๋ฒ๊น ๊ฐ๋ฅ์ฑ ๊ฒ์ฌ์ ๋ํด:
ํ๋๊ทธ ์ค์ ์์ :
๋๋ฒ๊ฑฐ ์ฝ์์ ๋ณ์ ์น์
์์ ๋ค์์ผ๋ก ์ด๋ํฉ๋๋ค: this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.
์ฐธ๊ณ : flags = 814267974
์ ์ด์ง ํํ์ 11000011100111011110
์ผ๋ก, "Flag_debuggable"์ด ํ์ฑํ๋์ด ์์์ ๋ํ๋
๋๋ค.
์ด ๋จ๊ณ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ฒ๊น ๊ฐ๋ฅํ๋๋ก ํ๊ณ , ํน์ ๋ณด์ ๊ฒ์ฌ๋ฅผ ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐํํ ์ ์๋๋ก ๋ณด์ฅํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ๋ณด๋ค ์ฌ์ธต์ ์ผ๋ก ๋ถ์ํ๊ฑฐ๋ ์์ ํ ์ ์๊ฒ ํฉ๋๋ค.
2๋จ๊ณ์์๋ ํ๋๊ทธ ๊ฐ์ 814267972๋ก ๋ณ๊ฒฝํ๋๋ฐ, ์ด๋ ์ด์ง์๋ก 110000101101000000100010100์ผ๋ก ํํ๋ฉ๋๋ค.
๋ฒํผ๊ณผ ํ ์คํธ๋ทฐ๊ฐ ํฌํจ๋ ์ทจ์ฝํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ์ฌ ์์ฐ์ด ์ ๊ณต๋์์ต๋๋ค. ์ฒ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ "Crack Me"๋ฅผ ํ์ํฉ๋๋ค. ๋ชฉํ๋ ์์ค ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ฐํ์์์ "Try Again" ๋ฉ์์ง๋ฅผ "Hacked"๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค.
apktool
์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ปดํ์ผํ์ฌ AndroidManifest.xml
ํ์ผ์ ์ ๊ทผํ์ต๋๋ค.
AndroidManifest.xml์ android_debuggable="true"
๊ฐ ์กด์ฌํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ด ๋๋ฒ๊น
๊ฐ๋ฅํ๊ณ ์
์ฉ๋ ์ ์์์ ๋ํ๋
๋๋ค.
apktool
์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋๋ฒ๊น
๊ฐ๋ฅ ์ํ๋ฅผ ํ์ธํ๋ ๋ฐ๋ง ์ฌ์ฉ๋๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค๋ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์์ํ๊ณ , ์ทจ์ฝํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์นํ๋ฉฐ, adb jdwp
๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋๊ธฐ ์ค์ธ Dalvik VM ํฌํธ๋ฅผ ์๋ณํ๋ ๊ฒ์ด ํฌํจ๋์์ต๋๋ค.
JDWP(Java Debug Wire Protocol)๋ VM์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ ์ ์๋๋ก ๊ณ ์ ํ ํฌํธ๋ฅผ ๋ ธ์ถํฉ๋๋ค.
์๊ฒฉ ๋๋ฒ๊น ์ ์ํด ํฌํธ ํฌ์๋ฉ์ด ํ์ํ์ผ๋ฉฐ, ์ดํ JDB๋ฅผ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐํ์ต๋๋ค.
์ค๋จ์ ์ ์ค์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ ์ดํ์ฌ ์ ์ฉ์ด ์ํ๋์์ต๋๋ค.
classes
๋ฐ methods <class_name>
์ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์กฐ๋ฅผ ํ์
ํ์ต๋๋ค.
onClick
๋ฉ์๋์ ์ค๋จ์ ์ ์ค์ ํ๊ณ ๊ทธ ์คํ์ ์ ์ดํ์ต๋๋ค.
locals
, next
, set
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ๋ณ์๋ฅผ ๊ฒ์ฌํ๊ณ ์์ ํ์ผ๋ฉฐ, ํนํ "Try Again" ๋ฉ์์ง๋ฅผ "Hacked"๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
์์ ๋ ์ฝ๋๋ run
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ๋ ฅ์ ์ค์๊ฐ์ผ๋ก ์ฑ๊ณต์ ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
์ด ์์๋ ๋๋ฒ๊น ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์กฐ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์คํธ์์ ์ฅ์น์ ๋ํ ์ ์ ๊ทผ๊ณผ ๊ฐ์ ๋ ๋ณต์กํ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ ๊ฐ์กฐํฉ๋๋ค.
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE) GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE)