Android Hacking
- Android 패킷 캡처를 위한 iptables 명령어 정리 2018.09.12
- Frida 권한 오류 해결 2018.09.11
- bypass proxy check using frida 2017.08.08 4
- 모바일 앱에서 frida timeout error 해결 방법 2017.07.26 1
- DBI on Android - ADBI(Android Dynamic Binary Instrumentation) 2016.02.14 1
- error: only position independent executables (PIE) are supported 에러 해결 2016.02.05 2
- 안드로이드 루팅 탐지 우회 2015.08.07
- Bypass Certificate Pinning - iOS / Android 2015.01.27
- 안드로이드 프로젝트 기본 구조 2012.11.27 1
Android 패킷 캡처를 위한 iptables 명령어 정리
안드로이드 패킷 포워딩(burp 등으로)용 iptables 명령어 정리.
보통 proxydroid, autoproxy 등 자동 설정 apk 를 이용하면 되지만 80, 8080, 443이 아닌 경우
리다이렉트가 안되는 경우가 있다. 그런 경우 직접 아래와 같이 iptables 로 세팅해줄 수 있다.
# iptables -F // 전체 삭제
# iptables -L -t nat // nat 리스트
아래는 proxydroid 포트로 리다이렉트 하는 경우.
# iptables -A OUTPUT -t nat -p tcp --dport 10443 -j REDIRECT --to-port 8124
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
REDIRECT udp -- anywhere anywhere udp dpt:domain redir ports 54358
RETURN tcp -- anywhere 192.168.43.187
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8123
REDIRECT tcp -- anywhere anywhere tcp dpt:https redir ports 8124
REDIRECT tcp -- anywhere anywhere tcp dpt:5228 redir ports 8124
REDIRECT tcp -- anywhere anywhere tcp dpt:10443 redir ports 8124
'Android Hacking' 카테고리의 다른 글
Frida 권한 오류 해결 (0) | 2018.09.11 |
---|---|
bypass proxy check using frida (4) | 2017.08.08 |
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
Frida 권한 오류 해결
간만에 점검용 폰을 새로 세팅해야 할 일이 있어서 간략히 정리.
# 세팅 순서
- custom recovery 설치, custom rom 설치
- magisk, su 설치(루팅)
- gdb, frida... (점검용 툴들)
다 잘 되다가.. frida 에서 뜬금없이 오류가 떠서 당황..
$ frida-ps -Uai
Failed to enumerate applications: failed to execute child process “/data/local/tmp/re.frida.server/frida-helper-64” (Permission denied)
검색해보니 동일한 오류를 겪은 선구자(?) 들이 있었고 검색 후 해결할 수 있었다.
(삼성계열 폰에서 selinux policy 와 관련해 자식프로세스 생성 시 발생하는 문제라고 하나 정확히 알아보진 않음.)
몇번의 시도 후 성공했는데, 결론적으로 아래와 같이 /system/priv-app 폴더로 복사해주면 해결된다.
$ frida-ps -Uai
PID Name Identifier
----- ---------------------------------------------- -------------------------------------------------
11267 AhnLab V3 Mobile Plus 2.0 com.ahnlab.v3mobileplus
4398 Android Services Library com.google.android.ext.services
6857 BadgeProvider com.sec.android.provider.badge
21975 CMHProvider com.samsung.cmh
4158 CSC com.samsung.sec.android.application.csc
...
잘 됩니다.
'Android Hacking' 카테고리의 다른 글
Android 패킷 캡처를 위한 iptables 명령어 정리 (0) | 2018.09.12 |
---|---|
bypass proxy check using frida (4) | 2017.08.08 |
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
bypass proxy check using frida
모바일 앱중 proxy 체크를 할때, frida 를 이용해서 우회하기.
bypass proxy check on android device(using frida hooking)
var System = Java.use("java.lang.System"); if (System.getProperty){ System.getProperty.overloads[0].implementation = function(prop){ send("[S] called : system.getProperty("+ prop.toString() +")") if (prop.toString().toLowerCase().indexOf("proxy") > -1){ send("[W] bypass proxy check : " + prop); return; } var ret = this.getProperty(prop); send("[W] ret value : " + ret.toString()); return ret; } }
자주 느끼는 거지만 프리다 참 좋다.
frida is awesome!
'Android Hacking' 카테고리의 다른 글
Android 패킷 캡처를 위한 iptables 명령어 정리 (0) | 2018.09.12 |
---|---|
Frida 권한 오류 해결 (0) | 2018.09.11 |
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
모바일 앱에서 frida timeout error 해결 방법
최근에는 주로 모바일 앱 후킹시 frida 를 이용하고 있는데, 안드로이드 느린 앱을 후킹하려고 하다 보면 가끔 아래처럼
타임아웃 메시지가 나오며 죽어버리는 경우가 있다.
이 경우 해결방법.
hyunmini:02.dbi $ python dbi.py Traceback (most recent call last): File "dbi.py", line 73, in <module> main(target_process) File "dbi.py", line 54, in main pid = frida.get_usb_device().spawn([target_process]) File "/Library/Python/2.7/site-packages/frida/core.py", line 85, in spawn return self._impl.spawn(argv) frida.TimedOutError: unexpectedly timed out while waiting for app to launch |
...
pid = frida.get_usb_device().spawn([target_process])
...
앱 실행하는 위 코드에 timeout 인자값을 주면 됨(;;)
...
pid = frida.get_usb_device(timeout=10).spawn([target_process])
...
이제 잘 된다.
hyunmini:02.dbi $ python dbi.py >>>> Start Native Hooking <<<< [+] find open() address: 0xf6fda1af [+] find fopen() address: 0xf6ff658d [+] find access() address: 0xf6fd7d65 [+] find stat() address: 0xf6fdb125 [+] find strcasecmp() address: 0xf6ffd39d [+] find strcmp() address: 0xf6fd66dc [!!] Starting Java Hooking... Runtime.loadLibrary: soundpool Runtime.loadLibrary: authmanager Runtime.loadLibrary: webviewchromium Runtime.loadLibrary: webviewchromium_plat_support Runtime.loadLibrary: NS***** Runtime.loadLibrary: ap1.7.8 Runtime.loadLibrary: a**** [+] Hooking /data/app/com.*****-1/lib/arm/lib****.so!****1 [*] bypass rooting check : called - *****() |
'Android Hacking' 카테고리의 다른 글
Frida 권한 오류 해결 (0) | 2018.09.11 |
---|---|
bypass proxy check using frida (4) | 2017.08.08 |
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
안드로이드 루팅 탐지 우회 (0) | 2015.08.07 |
DBI on Android - ADBI(Android Dynamic Binary Instrumentation)
DBI on Android - ADBI(Android Dynamic Binary Instrumentation)
- DBI(Dynamic Binary Instrumentation)
- ADBI(the Android Dynamic Binary Instrumentation toolkit)
안드로이드 환경에서 DBI를 하기 위한 툴킷으로, crmulliner 라는 사람이 만들었으며 github 에 공개해 놓았다. 코드를 살펴보니,
후킹을 통해 구현해 놓았고, 예제 소스를 보고 직접 라이브러리(.so)를 만들어서 타겟 프로그램에 인젝션 하는 방식으로 동작한다.
조사 혹은 조작할 함수의 앞 뒤에서 직접 C언어로 프로그래밍을 하면 된다. 후킹 방식은 대상 함수의 첫줄을 변조하여 후킹함수로
점프하여 조작을 수행하는 방식으로 되어있다. 사용자는 후킹함수 내에서 조작을 하거나 값을 조사한 뒤 대상 원본 함수를 후킹할
수도, 아예 호출을 하지 않고 임의의 값을 리턴할 수도 있다.
1. 설치
adbi 를 사용하기 위해서는 먼저 ndk 가 필요하다. ARM 크로스 컴파일 시 ndk 를 이용하기 때문이다.
1) ndk 설치
아래 다운로드 페이지에서 자신의 OS 환경에 맞는 버전을 다운로드 하도록 하자.
http://developer.android.com/intl/ko/ndk/downloads/index.html |
설명에도 나와있듯이 다운로드한 파일에 실행권한을 주고 실행만 해 주면 설치는 끝이 난다.
2) adbi 설치
# git clone https://github.com/crmulliner/adbi |
2. 예제 소스코드 분석
본격적으로 adbi 를 사용해보기 전에 먼저 소스코드를 분석해 보면서 원리를 파악해 보도록 하자.
hyunmini$ tree ./ ./ ├── README.md ├── build.sh // 컴파일 스크립트 ├── clean.sh // 초기화(컴파일 이전으로 복구) ├── hijack │ ├── hijack.c // 라이브러리 인젝션 소스 │ └── jni │ └── Android.mk └── instruments ├── base │ ├── base.c │ ├── base.h │ ├── hook.c // 후킹 소스 │ ├── hook.h │ ├── jni │ │ ├── Android.mk │ │ └── Application.mk │ ├── util.c │ └── util.h └── example ├── epoll.c // instrument 예제 소스 ├── epoll_arm.c // instrument 예제 소스 └── jni └── Android.mk |
1) hijack.c - 라이브러리 인젝션 소스
윈도우 운영체제에서는 DLL 인젝션을 통해 주로 타 프로세스를 조작했는데, 마찬가지 개념으로 *nix 계열 운영체제에서는 so 인젝션을 통해
타 프로세스를 조작할 수 있다. hijack.c 소스코드는 바로 이러한 라이브러리 인젝션을 수행해 주는 코드이다.
라이브러리 인젝션을 위해서 hijack.c 에서는 아래와 같은 방법을 사용한다. 윈도우 DLL 인젝션과 거의 동일하다.
(1) PTRACE 를 이용하여 현재 컨텍스트(레지스트리 등의 정보)를 구한다. 이후 대부분의 과정에서 PTRACE API 를 이용한다.
(2) 인젝션 하려는 라이브러리 이름을 스택 메모리에 쓴다.
(3) 쉘코드(dlopen() 함수를 실행하는)를 스택메모리에 쓴다.
(4) mprotect() 를 호출하여 스택에 실행권한을 부여한다.
(5) pc 레지스터를 스택의 쉘코드의 주소로 변경하여 dlopen() 함수를 강제로 호출한다.
(6) 라이브러리가 대상 프로세스에 강제로 로드되며 후킹 코드가 실행된다.
코드 중 중요한 부분만 살펴 보도록 하자. 조금 내려가다 보면 쉘코드가 보인다. 단순히 레지스터에 스택의 값을 넣어 주는 역할만 한다.
[그림] dlopen 을 실행해 주는 간단한 쉘코드
nop 로 비어있는 부분에는 호출에 필요한 인자값에 맞춰 각각의 값을 넣어주게 된다. 이때도 PTRACE 를 이용하게 된다.
아래로 조금만 더 내려가 보면 메인함수가 시작되고, 아래와 같이 dlopen() 함수의 주소를 구하는 부분이 나온다.
[그림] 동적으로 dlopen 주소 얻기
linker 프로세스에서
(작성중)
'Android Hacking' 카테고리의 다른 글
bypass proxy check using frida (4) | 2017.08.08 |
---|---|
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
안드로이드 루팅 탐지 우회 (0) | 2015.08.07 |
Bypass Certificate Pinning - iOS / Android (0) | 2015.01.27 |
error: only position independent executables (PIE) are supported 에러 해결
root@zerofltektt:/sdcard/test # ./hijack
error: only position independent executables (PIE) are supported.
안드로이드에서(아마도 롤리팝 이상인 경우 ELF로더가 PIE를 확인하는 듯) 위와 같이 PIE로 컴파일 되지 않으면 실행되지 않는다는 에러 메시지가 발생한 경우
Android.mk 파일에 아래와 같이 두줄을 간단히 추가해주면 해결된다.
LOCAL_CFLAGS += -fPIE
LOCAL_LDFLAGS += -fPIE -pie
# vi Android.mk
=============================================
1 # Copyright (C) 2009 The Android Open Source Project
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 #
15 LOCAL_PATH := $(call my-dir)
16
17 include $(CLEAR_VARS)
18 LOCAL_MODULE := base
19 LOCAL_SRC_FILES := ../../base/obj/local/armeabi/libbase.a
20 LOCAL_EXPORT_C_INCLUDES := ../../base
21 include $(PREBUILT_STATIC_LIBRARY)
22
23
24 include $(CLEAR_VARS)
25 LOCAL_MODULE := libexample
26 LOCAL_SRC_FILES := ../epoll.c ../epoll_arm.c.arm
27 LOCAL_CFLAGS := -g
28 LOCAL_SHARED_LIBRARIES := dl
29 LOCAL_STATIC_LIBRARIES := base
30 LOCAL_CFLAGS += -fPIE
31 LOCAL_LDFLAGS += -fPIE -pie
32
33 include $(BUILD_SHARED_LIBRARY)
# make
해결~
'Android Hacking' 카테고리의 다른 글
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
---|---|
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
안드로이드 루팅 탐지 우회 (0) | 2015.08.07 |
Bypass Certificate Pinning - iOS / Android (0) | 2015.01.27 |
안드로이드 프로젝트 기본 구조 (1) | 2012.11.27 |
안드로이드 루팅 탐지 우회
안드로이드 루팅 탐지 우회
안드로이드 앱중 보안성을 중요시 하는 일부 앱들의 경우 루팅 및 무결성을 탐지하여 사용을 제한하고 있다.
이러한 경우 탐지 기법에 따라 몇가지 우회 방법들이 존재한다. 이에 대해 간략히 정리해 본다.
1. 루팅우회
1.1. 루팅 탐지 기법
직접 탐지하기도 하지만, 대부분 솔루션(주로 백신 모듈)을 통해서 수행한다. 매우 다양한 방법이 존재한다.
1) su 바이너리 탐지
- 목록 확인
/system/bin/su /system/xbin/su /sbin/su /system/su /system/bin/.ext/.su /system/usr/su-backup /system/xbin/mu
- File Search API 를 통해 탐색
2) 프로세스 리스트 탐지
- ps 명령 혹은 내부 명령 구현을 통해 프로세스 목록 확인
3) 설치된 패키지 목록 탐지
- /system/app 폴더에 존재하는 apk 파일 확인
private static boolean checkRoot() {
String[] paths = { "/system/app/Superuser.apk", "/system/app/su.apk", "/system/app/Spapasu.apk", etc... };
for (String path : paths) {
if (new File(path).exists()) return true;
}
return false;
}
- 패키지 목록 확인
$ pm list packages | grep root pm list packages | grep root package:com.devadvance.rootcloak package:com.devadvance.rootcloakplus package:com.jrummy.root.browserfree package:com.geohot.towelroot |
4) 루팅 카운트 탐지
5) busybox 및 관련 명령어 탐지
6) build.tags 확인
7) 폴더 권한 확인
루팅 후에는 편의를 위해 쓰기 권한을 추가해서 remount 하고 write 권한을 주는 경우가 있다.
다양한 디렉토리들의 쓰기 권한 검증을 수행할 수 있다.
/
/data /system /system/bin /system/sbin /system/xbin /vendor/bin /sys /sbin /etc ...
1.2. 루팅 탐지 기법 우회
루팅 탐지를 어떤 방식으로 하는지에 대한 분석이 완료되면 우회는 간단하다. 탐지하는 파일 혹은 폴더 등을 숨기거나 변경하는 방법,
결과값을 받아온 후 조건에 따른 앱 내부 분기문 코드를 조작하여 리패키징 하는 방법, 후킹을 통해 API 를 조작하는 방법 등이 있다.
1) 파일 혹은 폴더 변경
2) smail 코드 패칭
3) 후킹
'Android Hacking' 카테고리의 다른 글
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
---|---|
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
Bypass Certificate Pinning - iOS / Android (0) | 2015.01.27 |
안드로이드 프로젝트 기본 구조 (1) | 2012.11.27 |
Bypass Certificate Pinning - iOS / Android
모바일에만 해당되는 것은 아니지만 최근 HTTPS 사이트 몇군데에서 프록시 툴을 차단하는 경우가 있다.
프록시 툴은 MITM 을 수행하여 자신을 클라이언트로 HTTPS 로 연결한 뒤 클라이언트와 중계해 주는 방식으로 HTTPS 패킷을
볼 수 있게 해준다. 이러한 프록시를 차단하기 위한 한가지 방법으로 소개된 Certificate Pinning 은 클라이언트 상에서 CA를 검증
하여 자신이 접근해야 할 사이트가 아니면 차단하는 방법으로 구현되어 있다.
여기서 가장 큰 문제점은 클라이언트 상에서 구현이 된다는 것이다. 리버싱을 통해 얼마든지 우회가 가능하다는 말이기 때문이다.
방법은 몇가지가 있다.
1) 클라이언트 리버싱 + 코드패칭
- 코드 분석 후 리버싱, 리패키징
2) 후킹을 통한 우회
- 주로 사용되는 통신 API 후킹, 오버라이드
- iOS / NSStream, CFStream, NSURLConnection
- Android / HttpsURLConnection
1번은 코드에 따라 다르니 알아서 우회하면 되고, 2번은 자동화 툴이 공개되어 있다.
- iOS / iOS SSL Kill Switch / https://github.com/iSECPartners/ios-ssl-kill-switch
- Andoid / Android SSL Bypass Tool / https://github.com/iSECPartners/android-ssl-bypass
상세 분석은 다음에~
'Android Hacking' 카테고리의 다른 글
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
---|---|
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
안드로이드 루팅 탐지 우회 (0) | 2015.08.07 |
안드로이드 프로젝트 기본 구조 (1) | 2012.11.27 |
안드로이드 프로젝트 기본 구조
안드로이드 프로젝트에서 사용되는 폴더 및 파일들에 대한 정리.
무엇이든 정리해 두는 것이 남는 것이다! +_+
[그림1] 안드로이드 프로젝트 기본 폴더
1) src : 실제 작성한 프로그램 코드위치
2) gen : 프로젝트 안의 각종 개체의 ID가 정의된 파일 ( 이클립스가 자동으로 편집, 직접 편집 X)
3) Android 2.2 / Android Dependencies : 안드로이드의 기본 라이브러리
4) asset : 리소스 폴더(비디오, 오디오 파일 등)
5) bin : 안드로이드 실행파일 생성 폴더
6) res-drawable : 프로그램에 사용되는 이미지 폴더
7) res-layout : 프로그램의 레이아웃이 저장된 파일(버튼 배치 등)
8) ress-values-strings.xml : 프로그램 내부 문자열 정의
9) AndroidManifest.xml : 프로그램의 이름, 구성정보 등을 기록. 버튼 등의 이름도 저장
10) Proguard.cfg : 디컴파일 방지 관련 설정
'Android Hacking' 카테고리의 다른 글
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
---|---|
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
안드로이드 루팅 탐지 우회 (0) | 2015.08.07 |
Bypass Certificate Pinning - iOS / Android (0) | 2015.01.27 |