디컴파일
apktool은 apk파일로 압축되어 있는 것을 resources.arsc, classes.dex, XML 파일들을 디버깅(debug)파일 형태로 변환을 해주고 이를 수정한 뒤에 다시 수정된 apk파일로 생성(build)할 수 있는 도구이다.
기본적으로 java 최소 1.8? 이상의 버전이 설치되어 있어야한다. java -version 명령어를 통해 설치여부를 확인할 수 있다. 설치되어 있지않다면 https://java.com/ko/download/win10.jsp 지금 바로 설치!!
apktool 다운로드 링크 : https://ibotpeaches.github.io/Apktool/install/
윈도우 환경
- Windows용 wrapper script 을 다운로드 한다.
(마우스 우클릭 메뉴 중 "다른 이름으로 링크된 파일 저장"을 선택 후 apktool.bat로 저장한다.) - apktool-2 을 다운로드 한다. (find newest here)
- 2번에서 다운로드한 jar 파일의 이름을 apktool.jar로 변경한다.
- 두 파일(apktool.jar & apktool.bat)을 자신의 Windows 폴더로 옮긴다.
(보통 경로는 C://Windows 이다. 중간에 한글 폴더명이 없는 폴더) - 만일 Windows 폴더가 접근이 안되면, 적당한 곳에 복사한 후, 환경 변수 설정에서 해당 경로를 추가한다.
디컴파일 시, apktool d [option] [decode할 파일명].apk (또는 java -jar apktool.jar d [option] [decode할 파일명].apk) 명령어를이용한다.
이렇게 디컴파일 과정을 거치면 다음과 같이 smali 코드를 얻을 수 있다.
그런데, 난독화가 되어있어서 에러가 발생하는 경우가 있다.
이런 경우는!!! 디컴파일 할 때, -r 옵션을 붙이고 진행한다. (리소스 디컴파일링 무시하고 진행하는 옵션) 그러면 해결!
리패키징
jadx나 jeb의 디컴파일된 코드와 smali 코드를 비교하여, smali 코드를 수정할 수 있다.
리패키징 명령어는 다음과 같다. apktool b [option] [build할 APK 폴더 경로] -o 생성할apk이름.apk (또는, java -jar apktool.jar b [option] [build할 APK 폴더 경로])
서명
정상적으로 애플리케이션을 사용하기 위해서는 서명을 해줘야한다. signapk.jar를 이용하여 리패키징 앱을 키를 만들어 서명하면 된다.
signapk : https://github.com/appium/sign
링크에서 signapk.jar, testkey.x509.pem, testkey.pk8 을 다운받아 사용할 수 있다. 3가지를 다운받아서 같은 경로에 두고 다음 명령어 수행
java -jar signapk.jar testkey.x509.pem testkey.pk8 리패키징.apk 서명된 리패키징 이름.apk
설치
adb install -r 서명한apk이름.apk
무결성 탐지를 우회하는 방법 중 하나로, 마켓에서 앱을 받으면 ID가 부여되는데 그게 있는지 없는지 확인하는 경우가 있다.
private final boolean a(Context arg2) {
boolean v2_1;
try {
String v2 = arg2.getPackageManager().getInstallerPackageName(arg2.getPackageName());
if(TextUtils.equals(((CharSequence)v2), "com.android.vending")) { // android playstore
return true;
}
else if(!TextUtils.equals(((CharSequence)v2), "com.huawei.appmarket")) {
goto label_11;
}
else {
return true;
}
}
catch(Throwable ) {
label_11:
v2_1 = false;
}
return v2_1;
}
public final void a(@d Activity arg2) {
i0.f(arg2, "activity");
if(!this.a(((Context)arg2))) {
eu.eleader.android.finance.utils.v.a();
arg2.finish();
}
}
변조한 패키지 설치할때 adb install -i "com.android.vending" 패키지명.apk 이렇게 설치하면 ID가 부여되어 우회 가능한 경우도 있다. 이 외에, 방법들에 대해서는 나중에 포스팅하도록 하겠당
'보안 및 개발 > MOBILE' 카테고리의 다른 글
[Android] frida 환경 구축 (0) | 2020.02.11 |
---|---|
[Android] MainActivity 찾기 (0) | 2020.02.10 |
[Android] SuCTF 2014 Reverse200 (0) | 2020.01.29 |
[Android] OWASP UnCrackable 3 미완료 ㅠ (0) | 2020.01.21 |
[Android] OWASP UnCrackable 2 (0) | 2020.01.20 |