본문 바로가기

모바일 해킹/안드로이드

모바일 앱 해킹 - 2 (하드 코딩 - apktools, jadx 실습)

이번에는 코드 분석 실습을 한 번 해보겠습니다. 

 

우선 apk파일을 자바 코드로 디컴파일 해주는 apktools와 JADX을 설치하겠습니다.

 

apktools도 마찬가지로 apk파일을 풀어준다고 보시면 됩니다. JADX보다 기초적인 도구라고 생각하시면 됩니다.

 

https://apktool.org/

 

Apktool | Apktool

A tool for reverse engineering Android apk files

apktool.org

여기서 다운받으시면 jar 파일이 있을 겁니다. 그걸 맘에 드시는 곳에 두시면 됩니다.

 

저는 jadx 폴더에 같이 놨습니다.

 

 

 

 

 

 

https://github.com/skylot/jadx/releases

 

Releases · skylot/jadx

Dex to Java decompiler. Contribute to skylot/jadx development by creating an account on GitHub.

github.com

여기서 최신 버젼의 jadx을 다운 받습니다.

 

저는 1.4.7 버젼이네요

 

.zip을 다운 받으시고 맘에 드는 곳에 암축 해제 하시면 됩니다.

 

그다음에 bin 폴더 안에 jadx-gui 파일을 실행하면 끝입니다.

 

bin 폴더 안에

 

gui 버젼

 

실행 하면 끝

 

좋아요!

 

이제 파일을 올리면 알아서 디컴파일을 해줄겁니다.

 

---------------------------

 

제가 하고 있는 실습 환경인 insecureBankv2의 apk파일을 봐보겠습니다.

 

우선 apk파일을 복사해서 가져 온 다음 zip 확장자로 바꾸어서 안에 무슨 파일 있는지 보겠습니다.

 

이렇게요 이름은 안 헷갈리게 zip 붙였습니다.

 

그다음에 압축 해제 하겠습니다.

 

apk파일은 한 종의 압축 파일입니다. 모바일에 쓰이는 압축파일이라고 보시면 되요. 그래서 컴퓨터로 보기 위해

zip 파일로 변환하고 압축 해제 한다고 보시면 됩니다.

 

META-INF는 인증서 입니다.

그리고 dex 파일이랑 리소스파일, 권한파일 있습니다.

 

dex 파일에는 가상머신에서 동작할 때 최적화된 앱 파일입니다. 애뮬레이터 안에 실행 될 때 도움 되는 파일입니다.

 

AndroidManifest.xml은 권한 파일입니다. 저희가 카카오톡이나 다른 채팅 앱을 깔면 메시지 권한을 주겠냐고 물어보는 경우 있죠? 파일을 사용한 다는 권한도 물어보는 경우도 있구요 그 정보들이 담겨있는 파일입니다.

기본적으로 인코딩이 되어 있어서 일반 텍스트로 보기 힘듭니다.

 

--------------------------------

 

이제 apktools을 이용해 봐보겠습니다. 터미널 여신다음 저희가 apktool가 있는 폴더로 간 뒤 실행하겠습니다.

 

java -jar apktool_2.8.1.jar

 

 

도움말입니다.

 

저렇게 입력해서 실행 하면 apktool이 어떻게 쓰는지 알려줍니다.

 

그럼 d 명령어 이용해 저희의 apk파일을 디컴파일 해보겠습니다. 

 

java -jar apktool_2.8.1.jar d InsecureBankv2.apk

 

잘 된거에요 만약 잘 안 된거 같으시면 apk 이름을 변경해보셔서 다시 실행해보세요!

 

 

폴더에 가서 보시면

apk파일 이름과 같이 폴더가 생성 됬습니다.

 

apk 이름과 같은 이름으로 폴더가 생성된 것을 볼 수 있습니다.

들어가서 보시면

 

어?

 

조금 다르죠

 

dex 파일이 해체 되서 smali 파일 됬다고 보시면 됩니다.

한번 xml 파일을 봐보겠습니다.

 

 

 

그럼 암호화된게 아닌 평문으로 볼 수 있습니다.

 

 

이제 이 xml 파일에 불필요한 권한이 있는지 그니깐 취약점이죠 불필요한 권한을 여기서 찾아 볼 수 있습니다.

 

여기 permission 구간

 

여기 구간에서 무슨 권한이 있는지 볼 수 있습니다. 물론 보기는 힘들지만 불필요한 권한이 있는지 없는지 확인할 수 있는 부분이니 꼭 확인 해야 합니다. 문자 보내는데 사용자 정보까지 쓴다던가 그런 경우 권한을 여기서 뺀다고 합니다.

 

 

그다음에 activity 구간을 봐야합니다.

 

조금 내리시면 바로 보입니다.

이 activity 구간은 앱을 실행 했을 때 무슨 행동을 하는지 적혀져 있는 곳입니다.

그래서 저희가 앱을 클릭해서 무슨 행동을 할 때마다 여기에 있는 activity을 보면서 확인이 가능합니다.

 

근데 여기서 눈에 보이진 않지만 숨겨진 activity가 있으면 취약점으로 잡을 수 있습니다.

 

또한 exported라는 속성이 있습니다. 접근 가능한지 못한지 명시하는 속성인데

인증 있어야지 접근이 가능하냐 안하냐 설정입니다.

 

그래서 이 속성 값이 잘 못 되어 있으면 인증이 안 되있는데도 접근이 가능하게 하는 취약점이 될 수 있습니다.

 

 

이제 smali 파일로 가보겠습니다.

자바코드가 안드로이드 환경에 돌기 위해 바뀐 smali 코드라 보시면 됩니다.

 

smali

 

이름에 $가 붙여져 있는 것은 변수명이나 임의적인 파일이니 안 보셔도 됩니다.

한 번 아무 파일 들어가서 봐보겠습니다.

 

아하

 

여기서 어느 코드가 어떻게 실행하는지 그 아래에 실행되는 코드들이 적혀져 있습니다.

나중에 자바 코드와 1대1로 비교하면서 수정할 수 있다고 합니다!

 

그럼 이걸 이용해 어떻게 취약점 진단 할 때 어디에 쓰이는 가?

 

 

apk 파일 <- dex파일 + 리소스파일+ 권한파일 <- smali 코드 <- class <- 자바(코틀린)파일

 

안드로이드는 이렇게 구성 되어 있습니다.

 

그래서 저희가 처음에 zip으로 바꾸고 해제해서 봤을 때

dex파일 + 리소스파일+ 권한파일 이걸 본 거구요

 

이제 인코딩 되어 있는 걸 풀어서 코드로 본게 smali 코드 입니다. 그다음은 class파일 그다음은 자바 파일입니다.

 

그래서 apk파일에서 인코딩을 풀고 또 smali코드로 풀고 또 자바로 풀다보면 오류가 발생 할 확률이 커서

뭔갈 수정해서 apk 실행하고 싶으면 smali까지 풀고 수정한 다음에 진단한다고 합니다.

 

 

apktool는 여기 smali코드까지 해준다고 합니다.

 

 

그럼 이제 JADX 툴을 이용해보겠습니다. JADX 안에 apktool 도구가 들어가 있습니다.

 

그래서 apk 파일 <- dex파일 + 리소스파일+ 권한파일 <- smali 코드 <- class <- 자바(코틀린)파일

여기에서 smali코드까지 자동 분석하고 class까지 풀어 줍니다.

 

그럼 왜 apktools을 설명하셨어요?

가끔 이 jadx 이용하는 걸 방해하는 코드를 작성 한 경우가 있다고 합니다.

그럼 그때 apktools 도구 이용해 해체해 볼 수 있습니다. 그니깐 jadx 오류 발생하면 apktool 이용한다 보시면 됩니다.

 

 

해보겠습니다.

 

jadx-gui 여신 다음 apk파일을 드래그해서 올려보겠습니다.

 

한번에!

 

바로 나오죠

 

그리고 클래스 파일을 봤을 때 거의 디코딩 된 것을 볼 수 있습니다.

 

클래스까지 볼 수 있습니다.

 

매우매우 편합니다!

 

물론 jadx 말고 Bytecode 도구도 쓸 수 있습니다.

 

Bytecode는 다음에 기회되면 이용하겠습니다.

이 도구 이용해 악성 코드가 있는지 볼 수 있는 기능도 있고 따로 string 정보들을 볼 수 있는 기능도 있습니다.

 

기능은 Bytecode가 좋지만 jadx의 장점은 검색 기능이 좋습니다.

 

텍스트 검색

 

이 검색 통해 root을 검색 해보겠습니다.

 

쨘 이렇게

 

보기 편하게 볼 수 있고 클릭하면 알아서 추적해 그 위치까지 가줍니다.

 

그리고 도구란에 난독화 도구 해제로 난독화 해제를 도우는 기능도 있습니다.

.

.

.

.

.

이렇게 파일을 분석하는 도구들을 해보았습니다.

물론 끝판왕 있습니다. 돈 주고 사면 JEB 라는 툴이 있습니다.

 

이걸 이용하면 여러 파일들을 풀어볼 수 있고 다양한 기능을 이용할 수 있지만 조금 비쌉니다.

 

 

이제 실습으로 자바 파일까지 볼 수 있게 됬습니다. 긴글 읽어 주셔서 감사합니다.