Android Root 방법 원리 분석 및 Hook (1) adbd 구멍
구멍 은 Android 소스 코드 의 adb. c 파일 에 있 습 니 다. 중.
int main(){
...
setuid(AIL_SHELL); //위 와 같다
...
int main(){
...
...
setgid(AIL_SHELL); //
setuid(AIL_SHELL); //
...
...
}
adbd 프로 세 스 가 시 작 됩 니 다. 시작 할 때 루트 권한 으로 초기 화 작업 을 수행 한 후 현재 셸 사용자 권한 으로 내 려 갑 니 다. 그러나 내 려 가기 에 실패 하면 adbd 프로 세 스 가 종료 되 지 않 고 시작 합 니 다. 이때 루트 권한 의 adbd 프로 세 스 입 니 다.
공격 코드 원리:
끊임없이 fork 서브 프로 세 스 (사실은 손 프로 세 스) 를 종료 하고 좀 비 프로 세 스 를 생 성하 여 현재 셸 사용자 의 pid 수 를 상한 에 이 르 게 한 다음 에 kill 에서 adbd 프로 세 스 를 제거 합 니 다. 나중에 하나 더 빠르게 fork 를 사용 하여 상한 선 에 도달 하면 현재 사용자 에 게 프로 세 스 를 만 들 수 없습니다.
시간 이 지나 면 init 프로 세 스 는 현재 adbd 프로 세 스 가 없 음 을 감지 하고 adb. c 를 실행 합 니 다. 구멍 을 이용 하여 루트 권한 을 가 진 adbd 프로 세 스 입 니 다.
[cpp] view plain copy print ?
...
{
exit(0);
else if(p<0){
}
...
}
...
for(;;)
{
if ((p=fork())==0){
exit(0);
}
else if(p<0){
...
}
else{
...
}
}
...
Myhook code:
logcat 출력
[cpp] view plain copy print ?
#include
...
LOGE("failed to setgid for shell user");
}
LOGE("failed to setuid for shell user");
}
#include <cutils/log.h>
#define LOG_TAG "adb hooker"
int main(){
...
...
if(setgid(AIL_SHELL)!=0){
LOGE("failed to setgid for shell user");
exit(0);
}
if(setuid(AIL_SHELL)!=0){
LOGE("failed to setuid for shell user");
exit(0);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.