본문 바로가기
Android

안드로이드 앱 리패키징과 소스코드 수정(feat. apktool, jadx)

by Ate1es 2021. 12. 21.

실습에 사용한 APK file link - https://team-sik.org/ahe16-challenges/

 

AHE16: Challenges

One flag per challenge! Standard Flag-format: AHE16{ } There are also challenges with a different flag format. Please check the „Hint“ information. Reverse Engineering Misc Sound (250 points) Hint: Samuel Morse on acid; Flag-Format AHE16- - (no bracket

team-sik.org

해당 앱은 간단한 계산기 앱이다. jadx-gui 를 통해 소스코드 확인을 먼저 해보면,

MainActivity 의 createBackground 메소드에서 Parser.eval(s) 로 사용자의 입력값인 s를 다루고 있다.

해당 메소드를 찾아가보면, 100이상의 수를 입력했을 때 출력값을 내보내는 부분 밑에 로그로 SUPER OUTPUT 이라는 수상한 로그를 남긴다.

 

workthrough --> apktool 사용 해당 오류제어 코드를 지우고 로그 찍는 부분을 실행하게 한 다음 logcat 으로 로그 감시.

STEP-1 : apktool로 apk파일을 디코딩한다.

디코딩 명령어 - apktool d [디코딩할앱.apk] -o [결과폴더이름] 

STEP-2 : 디코딩된 폴더 안에서 위에서 본 Parser 메서드와 같은 경로의 Parser.smali 코드를 찾아 수정하고 싶은 부분을 수정한다.

이 어플 같은 경우엔 에러제어코드인 43번째 라인을 싹 지웠다.

-> 해당 에러제어가 실행되지 않고, 로그가 찍힘으로 예상

STEP-3 : 소스코드 수정 후 apktool을 사용, 앱 리패키징과 서명 후 실행.

리패키징 명령어 

apktool b [ 디코딩했던 폴더지정 ] -o [ 리패키징할 앱 이름 지정 ]

이렇게만 하면 앱이 서명이 되어있지 않기 때문에 서명을 해주어야 애뮬레이터에 adb를 통해 설치를 진행할 수 있다.

앱에 서명 명령어

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [ ketstore 저장 경로 지정 ] [ 리패키징할 앱 ] [ 키 별명 ]

서명 키 없다면, 아래 블로그 참고해서 키 만들어야 한다.

https://programist.tistory.com/entry/Apktool을-이용한-안드로이드-apk-파일-디컴파일-및-리패키징

 

Apktool을 이용한 안드로이드 apk 파일 디컴파일 및 리패키징

Android의 앱은 apk이라는 파일로 되어 있으며 이것은 압축형태로 되어 있다. apk를 압축 프로그램으로 열어보면 크게 AndroidManifest.xml, resources.arsc, classes.dex의 정보에 의해 앱이 실행되며, 때에 따라.

programist.tistory.com

 

STEP-4 : 리패키징한 apk를 애뮬레이터에 설치 후 logcat으로 로그 출력 감시

 

리패키징한 앱을 설치 후 logcat 켜놓고 100이상의 수를 입력하자 log에 SUPER OUTPUT 출력이 되었다.

간단하게 파이썬으로 payload 제작 후 flag를 얻을 수 있었다.