2024-07-19 05:21:00 +00:00
# 디버깅 가능한 애플리케이션 악용하기
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
GCP 해킹 배우기 및 연습하기: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
< details >
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
< summary > HackTricks 지원하기< / summary >
2024-01-03 10:43:38 +00:00
2024-07-19 05:21:00 +00:00
* [**구독 계획** ](https://github.com/sponsors/carlospolop ) 확인하기!
* **💬 [**Discord 그룹** ](https://discord.gg/hRep4RUj7f ) 또는 [**텔레그램 그룹** ](https://t.me/peass )에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
2023-12-03 18:08:20 +00:00
< / details >
2024-07-19 05:21:00 +00:00
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
# **루트 및 디버깅 가능성 검사 우회하기**
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
이 게시물의 이 섹션은 [**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 )에서 요약한 내용입니다.
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
## Android 앱을 디버깅 가능하게 만들고 검사 우회하기 위한 단계
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
### **앱을 디버깅 가능하게 만들기**
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
내용은 https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0를 기반으로 합니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
1. **APK 디컴파일:**
- APK 디컴파일을 위해 APK-GUI 도구를 사용합니다.
- _android-manifest_ 파일에 `android:debuggable=true` 를 삽입하여 디버깅 모드를 활성화합니다.
2024-07-19 05:21:00 +00:00
- 수정된 애플리케이션을 다시 컴파일하고 서명한 후 zipalign합니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
2. **수정된 애플리케이션 설치:**
2024-07-19 05:21:00 +00:00
- 명령어: `adb install <application_name>` 을 사용합니다.
2023-12-03 18:08:20 +00:00
2024-07-19 05:21:00 +00:00
3. **패키지 이름 가져오기:**
- `adb shell pm list packages – 3` 을 실행하여 서드파티 애플리케이션 목록을 확인하고 패키지 이름을 찾습니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
4. **앱이 디버거 연결을 기다리도록 설정:**
2024-07-19 05:21:00 +00:00
- 명령어: `adb shell am setup-debug-app – w <package_name>` 입니다.
- **참고:** 이 명령은 애플리케이션을 시작하기 전에 매번 실행해야 디버거를 기다리도록 설정됩니다.
2024-02-10 21:30:13 +00:00
- 지속성을 위해 `adb shell am setup-debug-app – w -– persistent <package_name>` 을 사용합니다.
- 모든 플래그를 제거하려면 `adb shell am clear-debug-app <package_name>` 을 사용합니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
5. **Android Studio에서 디버깅 준비:**
- Android Studio에서 _File -> Open Profile or APK_로 이동합니다.
2024-07-19 05:21:00 +00:00
- 다시 컴파일한 APK를 엽니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
6. **주요 Java 파일에 중단점 설정:**
2024-07-19 05:21:00 +00:00
- `MainActivity.java` (특히 `onCreate` 메서드), `b.java` , `ContextWrapper.java` 에 중단점을 설정합니다.
2023-12-03 18:08:20 +00:00
2024-07-19 05:21:00 +00:00
### **검사 우회하기**
2023-12-03 18:08:20 +00:00
2024-07-19 05:21:00 +00:00
애플리케이션은 특정 시점에서 디버깅 가능성을 확인하고 루팅된 장치를 나타내는 바이너리를 검사합니다. 디버거를 사용하여 앱 정보를 수정하고, 디버깅 가능 비트를 해제하며, 검색된 바이너리의 이름을 변경하여 이러한 검사를 우회할 수 있습니다.
2023-12-03 18:08:20 +00:00
2024-07-19 05:21:00 +00:00
디버깅 가능성 검사에 대해:
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
1. **플래그 설정 수정:**
2024-07-19 05:21:00 +00:00
- 디버거 콘솔의 변수 섹션에서 다음으로 이동합니다: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974` .
- **참고:** `flags = 814267974` 의 이진 표현은 `11000011100111011110` 으로, "Flag_debuggable"이 활성화되어 있음을 나타냅니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png ](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png )
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
이 단계들은 애플리케이션이 디버깅 가능하도록 하고, 특정 보안 검사를 디버거를 사용하여 우회할 수 있도록 보장하여 애플리케이션의 동작을 보다 심층적으로 분석하거나 수정할 수 있게 합니다.
2022-04-28 16:01:33 +00:00
2024-07-19 05:21:00 +00:00
2단계에서는 플래그 값을 814267972로 변경하는데, 이는 이진수로 110000101101000000100010100으로 표현됩니다.
2023-12-03 18:08:20 +00:00
2024-07-19 05:21:00 +00:00
# **취약점 악용하기**
2023-12-03 18:08:20 +00:00
2024-07-19 05:21:00 +00:00
버튼과 텍스트뷰가 포함된 취약한 애플리케이션을 사용하여 시연이 제공되었습니다. 처음에 애플리케이션은 "Crack Me"를 표시합니다. 목표는 소스 코드를 수정하지 않고 런타임에서 "Try Again" 메시지를 "Hacked"로 변경하는 것입니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
## **취약점 확인**
2024-07-19 05:21:00 +00:00
- `apktool` 을 사용하여 애플리케이션을 디컴파일하여 `AndroidManifest.xml` 파일에 접근했습니다.
- AndroidManifest.xml에 `android_debuggable="true"` 가 존재하면 애플리케이션이 디버깅 가능하고 악용될 수 있음을 나타냅니다.
- `apktool` 은 코드를 변경하지 않고 디버깅 가능 상태를 확인하는 데만 사용된다는 점에 유의해야 합니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
## **설정 준비**
2024-07-19 05:21:00 +00:00
- 프로세스는 에뮬레이터를 시작하고, 취약한 애플리케이션을 설치하며, `adb jdwp` 를 사용하여 수신 대기 중인 Dalvik VM 포트를 식별하는 것이 포함되었습니다.
- JDWP(Java Debug Wire Protocol)는 VM에서 실행 중인 애플리케이션을 디버깅할 수 있도록 고유한 포트를 노출합니다.
- 원격 디버깅을 위해 포트 포워딩이 필요했으며, 이후 JDB를 대상 애플리케이션에 연결했습니다.
2023-12-03 18:08:20 +00:00
2024-02-10 21:30:13 +00:00
## **런타임에서 코드 주입**
2024-07-19 05:21:00 +00:00
- 중단점을 설정하고 애플리케이션 흐름을 제어하여 악용이 수행되었습니다.
- `classes` 및 `methods <class_name>` 와 같은 명령어를 사용하여 애플리케이션의 구조를 파악했습니다.
- `onClick` 메서드에 중단점을 설정하고 그 실행을 제어했습니다.
- `locals` , `next` , `set` 명령어를 사용하여 로컬 변수를 검사하고 수정했으며, 특히 "Try Again" 메시지를 "Hacked"로 변경했습니다.
- 수정된 코드는 `run` 명령어를 사용하여 실행되어 애플리케이션의 출력을 실시간으로 성공적으로 변경했습니다.
이 예시는 디버깅 가능한 애플리케이션의 동작을 조작할 수 있는 방법을 보여주며, 애플리케이션의 컨텍스트에서 장치에 대한 쉘 접근과 같은 더 복잡한 악용 가능성을 강조합니다.
## 참고문헌
* [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 )
* [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications ](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications )
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
GCP 해킹 배우기 및 연습하기: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
< details >
< summary > HackTricks 지원하기< / summary >
* [**구독 계획** ](https://github.com/sponsors/carlospolop ) 확인하기!
* **💬 [**Discord 그룹** ](https://discord.gg/hRep4RUj7f ) 또는 [**텔레그램 그룹** ](https://t.me/peass )에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
< / details >
{% endhint %}