티스토리 뷰

안녕하세요.

광주아이입니다.

https://hanssomi.kr/247

 

Android functions hooking with XPosed

오랜만에 포스팅을 합니다. 거두절미하고 본론부터 가겠습니다. Magisk로 루팅된 단말기에 magiskhide라는 아주 좋은 툴이 있는데 루팅탐지 방법에 따라 제대로 숨기지 못하여 어쩔 수 없이 후킹을 해야하는 상황..

hanssomi.kr

https://hanssomi.kr/248

 

iPhone functions hooking with MobileSubstrate

안녕하세요. 광주아이입니다. 어제 안드로이드에 이어 iPhone 함수 후킹 방법에 대해서 얘기좀 해볼까 합니다. 저는 주로 금융권 앱들 탈옥(jailbreak) 탐지 우회를 목적으로 후킹을 합니다. iOS binary는 mach-o..

hanssomi.kr

요 두 녀석 때문에 다시 한 번 글을 쓰게 되네요.

죄송한 말씀이지만 의뢰 또는 소스는 공개할 수 없는 점 이해해주시리라 믿겠습니다.

다시 말씀드리지만 금융거래가 이루어지는 앱에서

연구 목적(루팅/탈옥, VPN탐지, 무경성체크, SSL Pinning 등)으로 우회 시도를 할 뿐 저는 나쁜놈이 절대 아닙니다.

꼭 이해해주세요.

본론으로 들어가겠습니다.

저는 앱 취약점 진단을 목적으로 연구하고 있으며, 루팅/탈옥이 된 실제 단말기에서 테스트를 진행하고 있습니다.

그 이유는 슈퍼유저(root) 권한이 있어야지만 취약점 진단이 가능한 내용이 있습니다.

일반 사용자 권한으로는 접근이 어렵습니다.

메모리(스캔, 변조), 무결성, 저장된 데이터 확인, SSL, VPN, Proxy 등 이 내용들을 파헤쳐 보려면

루팅/탈옥 탐지 우회가 선행 연구돼야 합니다.

그래서 루팅/탈옥이 된 안드로이드폰(갤럭시 S6), 아이폰(iOS 11.4.1)으로 테스트를 합니다.

준비물은 앞서 게시물에 작성했듯이

공통 : 루팅/탈옥이 된 단말기, Trace가 가능한 디버거

안드로이드 : Xposed Framework

아이폰 : Mobile Substrate

가 필요합니다.

직접적으로 후킹도 할 수는 있지만

안드로이드의 경우 특정 시스템 라이브러리의 함수를 후킹하면

이름으로만 후킹이 진행되기 때문에 모든 앱에게 의도하지 않은 악영향을 줄 수 있습니다.

Xposed Framework(Android), Mobile Substrate(iOS for Cydia)를 이용합니다.

두 디바이스 모두 특정 패키지 이름으로 된 앱만을 검색하게 되며

특정 클래스의 함수를 후킹하게 됩니다.

보통 루팅/탈옥 함수의 원형을 보자하면

private(public) boolean isRooting

private(public) boolean isJailbreak

보시다시피 boolean 형태의 참과 거짓으로만 판단하는 앱이 다반수이며

물론 그렇지 않은 앱들도 많습니다.

시스템 라이브러리의 ptrace, pthread_create, fork, fopen(su, sshd 등) 함수 등으로 

누군가 나를 Attach 하거나 자식프로세스가 생성이 되거나 혹은 루팅/탈옥 시 필요한 슈퍼유저 권한의 파일들이 존재하거나

입니다.

이 시스템 함수를 만지는 사용자 함수를 건드리거나

혹은 앱을 구동시킬 시 onCreate 함수에서 직접 호출 할 경우

위 함수들의 리턴값을 원하는 값으로 직접 변경을 해줘야 합니다. 

예를 들면

사용자 함수에서 pthread_create 함수 호출

 

pthread_create 함수 원형

 

정상적인 디바이스에서는 슈퍼유저의 권한이 없기 때문에 에러코드를 리턴할 것이고,

루팅/탈옥이 된 디바이스에서는 Thread를 식별할 수 있는 코드를 저장 후 0을 리턴하게 됩니다.

 

실제 루팅/탈옥이 된 단말기에서 위와 같은 사용자 함수가 실행이 될 경우

0이 리턴되더라도 Thread 식별 코드가 존재하지 않기 때문에 디바이스는 정상폰이다 라고 판단하게 되는거지요.

정리하자면

정상적인 사용자함수를 건드려

pthread_create 값을 강제로 0 또는 에러값으로 변경하게 되면 된다는 것입니다.

다른 시스템 함수도 마찬가지로 에러값이 아닌 정상값이 떨어질 경우 루팅/탈옥폰이다

인지를 하게되어 앱이 종료되어 진다(?) 판단하게 되는 것이지요.

그러면 루팅/탈옥 탐지 우회를 막으려면 도대체 어떻게 해야할까요?

정답은..............

...

...

...

...

...

...

...

...

...

...

안타깝게도 없습니다.

왜 없는지는 다음 포스팅에서 알려드리겠습니다. 

댓글
댓글쓰기 폼
Total
198,798
Today
9
Yesterday
16
«   2019/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함