Reverse Engineering 관련 포스팅 목록
2020/07/08 - [Reverse Engineering] - Linux APK 디컴파일(Decompile, APK tool)
2020/07/08 - [Reverse Engineering] - Linux Apktool 설치(Apktool Install)
목차
리패키징
안녕하세요 오늘은 ApkTool을 사용하여 디컴파일된 Smali 코드를 다시 컴파일하여 APK로 구성하는 방법에 대해 알아보겠습니다.
디컴파일을 통해 얻은 Smali 코드를 수정하여 리패킹을 하면 APK가 나오고 이 앱을 설치하면 똑같은 기능을 하는 Fake 앱을 구현할 수 있습니다. 따라서 악성 코드를 유명한 앱에 추가하여 인터넷에 배포하는 나쁜 목적의 앱들도 있습니다.
최근 유행중인 보이스피싱을 예로 들어보겠습니다. 어느날 갑자기 모르는 전화번호로 연락이 오고 무언가 문제를 해결하기 위해 문자로 보내드리는 URL을 클릭하여 앱을 설치하라고 합니다. 이런 경로로 페이크 앱이 설치될 수도 있습니다.
또한 간단한 앱들, 계산기나 그러한 앱들에 사용자의 전화번호나 사진, 동영상 들을 자신의 이메일로 자동 전송하도록 한 악성코드를 앱에 추가하고 개방된 인터넷에 배포하여 나이가 좀 있으신 어른이나 학생들이 아무런 제한 없이 이 앱을 접하고 설치하여 사용합니다.
따라서 출처를 알 수 없는 앱을 설치하지 않거나 아에 그런 사이트나 메일을 읽으려고 해도 안됩니다. 이야기 주제가 많이 벗어났지만 오늘은 이러한 문제되는 앱을 만드는 과정을 이해해보겠습니다.
오늘 포스팅에서는 ApkTool 이 설치되어있어야 테스트가 가능합니다. 만약 설치 안하셨다면 아래 링크를 타고 들어가 설치를 진행한 후에 진행해주세요
2020/07/08 - [Reverse Engineering] - Linux Apktool 설치(Apktool Install)
리패키징 옵션
$ apktool -h
ApkTool의 리패키징 명령은 "d" 와 반대로 "b" 를 입력하면 리패키징이 진행됩니다. 디컴파일되어 나온 폴더명을 인자로 전달하여 리패키징을 시도 합니다.
작업 디렉토리 생성 및 예제 APK 생성
$ cd /tmp
$ mkdir apktool_compile_example; cd apktool_compile_example
$ wget https://github.com/markushi/android-ui/raw/master/example.apk
$ ls -al
위의 명령을 실행하여 작업디렉토리를 생성하고 예제 APK 파일을 다운로드 합니다.
디컴파일
$ cd /tmp/apktool_compile_example
$ apktool d example.apk
$ ls -al
우선 컴파일을 진행하기에 앞서 디컴파일을 진행합니다.
리패키징
$ cd /tmp/apktool_compile_example
$ apktool b example
$ cd example/
$ ls -al
디컴파일 하였을 때 생성된 폴더 이름을 ApkTool 빌드 인자로 전달하면 리패키징을 시작합니다. 정상적으로 컴파일되었다면 같은 폴더 이름의 apk 파일이 "dist/" 하위경로에 생성됩니다.
중요한 것은 이대로 APK를 휴대폰에 설치해도 설치가 되지 않습니다.
안드로이드의 앱은 반드시 빌드한 후 모든 클래스나 리소스 파일을 서명해야합니다. 서명이란 우리가 흔히 공인인증서로 은행 업무를 볼 때 서명하는 것과 동일합니다. 누가 개발한 것인지 명시하는 것입니다. 그래야 다른 사람이 해당 앱을 복제하거나 사용할 수 없습니다.
다음 포스팅에서는 이렇게 재 컴파일된 APK 파일을 다시 재서명하는 방법을 알아보겠습니다.