일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- jeb
- 호갱노노
- 투자
- 프리다
- 서울
- Frida
- APKManager
- 부동산
- webhacking.kr
- ADB
- 부동산분석
- NOX
- Mid()
- 월세
- 매물
- Lord of SQLInjection
- 아파트실거래가
- 일기
- SQL INJECTION
- 스마트폰
- Blind Injection
- UnCrackable
- 아파트
- 후킹
- 모의해킹
- 웹해킹
- 전세
- 안드로이드
- 블라인드 인젝션
- Los
- Today
- Total
일단 쓰고보자
Uncrackable-Level1 문제 풀이 본문
#서론
실제 푸는 것보다 환경설정 하는데 더 애먹음
#준비물
1. Nox
2. JEB (소스 분석, 동적 디버깅)
3. ADB (사실 그닥 필요 없음)
4. APK Manager (디컴파일)
5. UnCrackable-Level1 앱
#시작
1. Nox 내 UnCrackable-Level1 앱 설치하고 실행
- 루팅 탐지하고있어서 우회해야함
2. JEB로 소스코드 분석
- 찾았다 요놈. 루팅 탐지하는 로직하고, 디버거블 옵션 확인하는 로직
자세히 보면 루팅이 되어있거나 디버거블 옵션 체크 함수를 통해 if문 안으로 들어오게 되면 위에 보이는 a 함수로 출력할 스트링 값 보내서 앱이 종료되도록 처리하는 구조인 것을 확인할 수 있다.
3. UnCrackable-Level1 앱을 APK Manager 툴로 디컴파일 및 코드 수정
- System.exit(0); 코드만 삭제해서 문구는 출력돼도 앱이 종료되지 않도록 MainActivity$1.smali 코드 41번째 줄 삭제
41번재 줄 : invoke-static {p1}, Ljava/lang/System;->exit(I)V
- 수정하는 김에 디버깅 옵션 추가
<application android:allowbackup="true" ... 뒤에 android:debuggable="true" 삽입
4. APK Manager 툴로 컴파일 및 사이닝해서 Nox에 재설치
- 컴파일 및 사이닝 : APK Manager 11, 12번 옵션
- 생성된 signedUnCrackable-Level1.apk 파일 Nox 내 설치
5. 루팅 탐지 팝업은 나오는데 정상적으로 사용할 수 있음 ㅎㅎ
- 이제 어떤 값을 넣고 VERIFY 버튼을 입력해서 성공하기만 하면 됨. 사실 위 루팅 우회한 것과 비슷하게 로직만 우회해서 키값 없이 Success 문구를 볼 수는 있음... 찝찝해서 그렇지. 그래봐야 공부가 안되니까 동적 디버깅을 통해서 정석으로 키 값을 알아내보도록 한다.
6. JEB 를 통한 동적디버깅 준비
- JEB 실행 후 방금 컴파일, 사이닝 한 앱 열기
- Nox 에서 설정> 개발자 옵션> USB 디버깅 ON, 디버깅할 앱 선택 Uncrackable1, 디버거 연결을 위한 대기 ON
※ 개발자 메뉴가 없으면 기기 정보> 빌드 번호 연타해서 개발자가 되어보자
- UnCrackable1 앱 실행
아까 디버거 연결을 위한 대기 ON 설정을 해줘야 아래와 같이 디버거를 대기한다
- JEB에서 저 벌레 버튼 클릭하고 아래 앱 중에서 UnCrackable1 어플 패키지명 선택
- 앱 찾는 방법은
1) Flags 에 "D" 표시되어 있는 걸로 찾아보거나
2) "D" 표시되어 있는 앱이 5조 5억개면 찾기 힘드니 ID로 찾아주거나
※ ID는 안드로이드 OS 내 PID값이고, 여기서 ADB가 아주 잠깐 필요함...
3) Name 에 해당하는 패키지명으로 찾아주거나
- VERIFY 버튼을 누르면 앱 어딘가에 숨어있을 시크릿키와 내가 입력한 스트링값 비교를 통해 정합성을 판단할 것으로 예상되며, 잘 찾다보면 아래 부분인 것을 알 수 있음.
- 위 부분의 Bytecode 를 찾아서 브레이크 걸어두고 VERIFY 버튼 누르면 아래와 같이 문자열을 비교하는 순간의 지역변수들 값들이 나오게 됨. 근데 다 int 타입으로 되어있어서 문자열을 알아볼 수가 없음.
- 위 브레이크 걸어둔 부분을 잘 살펴보면 어떤 변수 내용을 확인해야 하는지 나오고, int 타입인 변수들을 string 타입으로 변경해주면 답이 나옴. 끝!
정답
I want to believe
#오류
1. JEB에서 동적디버깅 시도할 때 Nox 디바이스를 전~혀 인식하지 못 할 때가 있음. 이건 ADB 문제일 가능성이 있는데, 일반적으로 설치한 ADB에서는 Nox 디바이스를 인식하지 못한다. 대신 [Nox 설치 디렉터리]/bin 디렉터리 안에 있는 adb.exe 에서는 인식이 됨. 그러니 기존 설치되어 있던 ADB 파일을 [Nox 설치 디렉터리]/bin/adb.exe 로 바꿔주면 됨.
※ 확인하는 방법
- cmd 재실행 한 뒤 "adb devices" 명령어 입력해보고 127.0.0.1:62001 devices 가 출력되는지 확인해본다.
- [Nox 설치 디렉터리]/bin 폴더 들어가서 adb 실행하면 당연히 Nox 디바이스가 잡힐테니, 시스템 환경변수에 의해 Nox 디바이스를 인식할 수 있는 파일이 실행되는지 확인해야한다. 고로 전혀 상관없는 위치에서 "adb devices" 명령어 실행
'모의해킹 > Uncrackable' 카테고리의 다른 글
Uncrackable-Level2 문제 풀이(frida Hooking) (0) | 2020.04.01 |
---|---|
Uncrackable-Level1 문제 풀이(frida Hooking) (0) | 2020.03.25 |