오늘 알아볼 것
- apk tool이 무엇이고, 이것을 가지고 무얼 할 수 있는가.
- 여기서 apk를 디컴파일 한다는데 이게 가능할 수 있었던 이유 와 그 원리를 찾는다.
apk tool
- 난독화가 수행된 안드로이드 앱(apk)의 개발 코드를 역공학(reverse engineering)하기 위한 도구(tool)
- 이걸 사용한다면, 거의 오리지널 코드에 가깝게 디컴파일 할 수 있다고 한다.
→ apk tool 공식 깃 허브사이트에서의 특징을 본다면 다음과 같이 알 수 있었다.
1. 리소스를 거의 원래 형태로 분해할 수 있다고 한다.
여기서 얼마나 돌리냐면, resources.arsc와 classes.dex , (앱에 쓰일 사진) , XML.s등등 안드로이드 앱의 주요 소스를 뽑을 수 있다고 한다.
- classes.dex = 달빅 가상머신에서 동작하는 바이너리 실행파일
- AndroidManifest.xml = ??
- res폴더 = 리소스 파일 폴더
- META_INF폴더 = 인증파일(서명같은것 같다.)
2. JAVA 기반으로 생성된 도구다.
- 명령어는 다음과 같다.
디컴파일할 때
- unzip testapp.apk와 같이 apk를 구성하는 요소를 합치기 전 파일로 만들어준다.
- 하지만 안에 xml파일이 암호화가 되있어서 읽을 수 없는 상태다.
xml파일등을 디코딩할때
- apktool d [option] [decode할 파일명].apk // java -jar apktool.jar d [option] [decode할 파일명].apk
-->ex)
apktool d testapp.apk
으로 쓰면 된다.
옵션
~d
= 디코딩할때 쓰이는 옵션. apktool d example.apk이런식으로 쓰면 된다.
++ apktool decode foo.jar
++ apktool d foo.jar
etc..
~b
= 빌드 옵션. apktool b (디컴파일 했을때 나왔던 어떤 파일을 다 합쳐서 apk로 만드는?
-o
=만들어질 소스 폴더의 경로를 설정하는 ㅇ옵션.
- 만약 이 옵션을 안 넣으면 자동으로 앱 이름과 동일한 이름의 폴더가 만들어진다고 한다.
- apktool d example.apk와 같은 명령어 뒤에 -o C:\windows\apktool 이런식으로 넣으면 apktool안에 파일에 저장이 되거나 디코딩된 파일이 저장되는 방식.
위와 같이 apk-tool을 사용한다고 한다.,
Java code를 확인 하려면?
-자바 코드가 들어있는 .dex파일이 apktool로 보게 된다면 smali 파일 코드로 변환한다고한다.
smali 파일 코드?
=An assembler/disassembler for Android's dex format의 약자.
=DEX바이너리를 사람이 읽을 수 있도록 표현한 언어.
= 결국 달빅 가상머신이 읽기 좋게 표현한거라서 사람이 보기에는 전문적인 지식이 있지 아니한 이상 보기 어렵다.
= 근데 smali단계에서 어셈블리어마냥 중간에 바꿔서 다시 넣고 재컴파일이 가능해서 앱을 변조할 수 있다고 한다.
결론 : 이제 이 smali코드를 java로 다시 디컴파일해서 코드가 어떻게 짜여있는지 보고, 수정은 smali코드단계에서 어떠한 툴로 하는것으로 생각된다.
-> 코드 분석에 어려움 多
고로, apktool중에서도 GUI로 구성된 Bytecode viewer 또는 jd-gui를 봐야 한다고 한다.
저 두개의 툴이 Java code로 보기 쉽게 만들어주는 툴이라고 한다.
Bytecode viewer
만약 다운로드 했으면
java -jar Byteocde-Viewer-2.9.22.jar로 cmd상에서 실행하면 될 것 같다.
jd-gui
이번에 내가 쓸 GUI툴이다. 이제 이 smali코드를 java로 다시 디컴파일해서 코드가 어떻게 짜여있는지 보고, 수정은 smali코드단계에서 이 툴가지고 바꾸는 것 같다.
여기서 어떻게 디컴파일이 가능했을까?
- 여기서 디컴파일에 대해 다시한번 상기시키는 것이 중요하다.
디컴파일(Decompile)?
- 바이너리 결과물로부터 소스코드를 복원하는 것을 뜻하는것. 컴파일과 정 반대로 돌아간다고 생각하면 된다.
- 안드로이드 내의 apk부터 보자면, apk에서 java코드로 복원하는 작업이라고 이해하면 될 것 같다.
- 그 자바파일을 뜯어봄으로써, 어떤 기능이 있는지 살펴볼 수 있는 작업을 하는 것이라고 이해되었다.
obfuscator
- 디컴파일을 하지 못하도록 난독화시키는 툴.
- class, methods, parameters, fields, properties, events를 선택적으로 난독화할 수 있는것이 특징.
- 저 위에 디컴파일을 방지하는 느낌으로 쓴다.
이제 디컴파일이 가능한 경우에 대해 알아보자면 다음과 같다.
- 이 apk가 난독화가 안되었다는 가정
- 되있다고 해도 일정한 원리를 알게 된다면 보기 쉽게 만들어서 분석하는 경우.
그리고 안드로이드가 실행될때의 구조가 또한 이렇다고 한다.
여기서 우리는 연어처럼 저 *.apk에서 *.java로 거슬러 올라가면서 디컴파일을 하며 java코드를 읽는것이다.
여기서 우리는 디컴파일러를 쓴다. ==> 디컴파일러는 apktool이다.
출처 및 참고 -
https://ibotpeaches.github.io/Apktool/
Apktool - A tool for reverse engineering 3rd party, closed, binary Android apps.
A tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications. It also makes working with an app easier because of the project like file structure and
ibotpeaches.github.io
https://blog.yena.io/studynote/2020/02/10/Android-App-Decompile.html
[Android] 안드로이드 앱 Decompile (Reverse Engineering)
역공학이란(리버스 엔지니어링, Reverse Engineering) 프로그램을 복제하거나 기능향상, 유지보수 등을 위해 분해해보는 과정이다. 디컴파일 과정은 역공학 단계에서 아주 중요한 역할을 한다. 디컴
blog.yena.io
https://ibotpeaches.github.io/Apktool/documentation/
Apktool - Documentation
Introduction Basic First lets take a lesson into apk files. Apks are nothing more than a zip file containing resources and assembled java code. If you were to simply unzip an apk like so, you would be left with files such as classes.dex and resources.arsc.
ibotpeaches.github.io
https://kibua20.tistory.com/162
Android apk Decompile 과 분석 tool: apktool 사용법
Android apk 분석 시 사용할 수 있는 Tool은 크게 Anroid SDK에 포함된 apkanalyzer (사용법 링크), aapt2, SDK 에는 포함되지 않은 Android studio에서 사용된다고 하는 apktool이 있습니다. apktool 은 원래 Apk의 Reverse
kibua20.tistory.com
Unity Obfuscator 들여다보기
#1 Unity 난독화프로그램을 개발하고 배포하는 과정에서 항상 고민하게 되는 것이 난독화이다.Unity로 개발된 프로그램은 Assembly_csharp.dll 파일로 ILspy, dnspy, dotpeek같은 .Net decompiler를 통해쉽게 리버
masher.tistory.com
https://okky.kr/questions/663433
OKKY - C#으로 윈도우 프로그램을 만들면 디컴파일로 코드 다 털릴까요?
안녕하세요 코린이 입니다.요즘 부쩍 윈도우 소프트웨어를 만들고 싶어져서 조금씩이라도 시간을 투자해서 배워볼까 합니다. 다만, pyinstaller로 exe파일 만들면서 알게된 사실은 리버스 엔지니
okky.kr
안드로이드 APK 파일 디컴파일 (JAVA 코드 보기)
안드로이드 APK 디컴파일이란? 먼저 디컴파일(Decompile)이란 역컴파일이란 말로써 컴파일의 반대 개념입니다. 안드로이드 APK 파일은 JAVA 기반으로 이루어져 있기 때문에 컴파일 후 코드의 실행 구
a6ly.dev
(안드로이드)smali코드란 무엇인가
smali 코드란?
medium.com
'Android' 카테고리의 다른 글
안드로이드 부팅시 작동 순서 찾아보기 (0) | 2023.03.27 |
---|---|
JNI와 NDK에 대한 간단한 고찰. (0) | 2023.03.15 |
안드로이드에서 사용하는 자바는 뭐가 다를까? (0) | 2023.03.15 |
Android에 대한 간단한 고찰. (0) | 2023.03.11 |