일단 쓰고보자

Uncrackable-Level1 문제 풀이 본문

모의해킹/Uncrackable

Uncrackable-Level1 문제 풀이

휘갈기갈기 2020. 2. 10. 00:16

#서론

실제 푸는 것보다 환경설정 하는데 더 애먹음


#준비물

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" 명령어 실행