티스토리 뷰

오랜만에 포스팅을 합니다.

거두절미하고 본론부터 가겠습니다.

Magisk로 루팅된 단말기에 magiskhide라는 아주 좋은 툴이 있는데

루팅탐지 방법에 따라 제대로 숨기지 못하여 어쩔 수 없이 후킹을 해야하는 상황이 발생합니다.

그래서 우회해야할 특정 클래스의 특정 함수를 후킹해야합니다.

우선 준비물은

1. Xposed Framework가 설치된 루팅된 단말기

 - Magisk Manager에 들어가서 download 탭을 누르고 다운 받으면 됩니다.

 

2. Xposed Installer(앱)

 - 공격할 모듈을 로드하기 위한 필수 앱

 

3. 후킹 대상이 될 테스트 앱(package : kr.hanssomi.fake1)

 - 후킹 대상이 될 테스트 앱 특정 클래스의 함수

 

4. 후킹할 앱(package : kr.hanssomi.fake1.hooking)

 - 후킹 대상이 될 테스트 앱 특정 클래스의 함수를 공격할 모듈

==============================================

공격 대상이 될 안드로이드 앱을 만듭니다.

간단하게 성공 시 키를 토스트로 띄우고 그렇지 않으면 failed!! 토스트를 띄우며 앱을 종료합니다.

다음과 같이 만들었습니다.

 

package kr.hanssomi.fake1;

...............

...............

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if(check()) {
    Toast.makeText(getApplicationContext(), "Success!!", Toast.LENGTH_LONG).show();
        if(isRooted()) {
        Toast.makeText(getApplicationContext(), "The key is 'You are Best!'", Toast.LENGTH_LONG).show();
    }
        else {
            Toast.makeText(getApplicationContext(), "Success, but key is ......", Toast.LENGTH_LONG).show();

            finish();
        }
    }
    else {
        Toast.makeText(getApplicationContext(), "failed!!", Toast.LENGTH_LONG).show();

        finish();        
    }
}

public boolean check() {
    return false;
}

public boolean isRooted() {
    return false;
}

정말 간단한 앱입니다.

정상적인(후킹이 되기 전) 내용은 failed!! 토스트를 띄우고 앱을 종료합니다.

Success!!를 띄우고 키를 토스트로 띄웁니다.

==============================================

다음은 공격할 앱을 만듭니다.

우선 AndroidManifest.xml과 assests/xposed_init 파일을 다음과 같이 만듭니다.

build.gradle 파일 수정

AndroidManifest.xml 파일

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data
        android:name="xposedmodule"
        android:value="true" />
    <meta-data
        android:name="xposeddescription"
        android:value="powered by hanssomi" />
    <meta-data
        android:name="xposedminversion"
        android:value="30" />

.......

</application>

 

app/src/main/assests/xposed_init 파일

kr.hanssomi.fake1.hooking.Hook

 

이 파일이 가장 중요한데요.

kr.hanssomi.fake1.hooking.Hook 클래스를 로드 시켜 대상 Class - function을 후킹하는 역할을 합니다.

 

build.gradle 파일

dependencies {
    provided files('lib/XposedBridgeApi-54.jar')
}

이 파일은 xposed 프로젝트에서 다운 받을 수 있습니다.

==============================================

 

그럼 이제 실제 후킹하는 코드를 만들어 볼겁니다.

kr.hanssomi.fake1.hooking 패키지에 Hook.java 클래스를 만듭니다.

package kr.hanssomi.fake1.hooking;

public class Hook implements IXposedHookLoadPackage {

    @Override
    public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {

        if(!lpparam.packageName.equals("kr.hanssomi.fake1")) {
            Log.e("ERROR ======", "==========================> ERROR!!!!!!!!!!!!!");
            return;
        }
        else {
            XposedBridge.log("Loaded app: " + lpparam.packageName);
        }

        findAndHookMethod("kr.hanssomi.fake1.MainActivity", lpparam.classLoader, "check", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                param.setResult(true); // check 함수의 리턴값을 true로 변경
            }
        });

        findAndHookMethod("kr.hanssomi.fake1.MainActivity", lpparam.classLoader, "isRooted", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                param.setResult(true); // isRooted 함수의 리턴값을 true로 변경
            }
        });
    }
}

생각보다 간단한 코드이니 굳이 설명은 안하겠습니다.

위 코드를 넣고 build를 하면 XPosed Installer에서 인식을 하고 모듈을 로드합니다.

(다만, 디바이스를 재시작해야 적용이되니 참고하시고요.)

 

그럼 이제 테스트를 해볼까요?

 

간단하게 공격 대상이 되는 앱의 특정 Class - Function을 후킹해보았습니다.

(다음은 좀 더 진중한 내용을 다뤄볼께요. override 된 함수라던지 jni라던지)

다음 포스팅에는 MobileSubstrate를 이용하여 탈옥감지우회트윅(iPhone Class functions hooking)을 간단히 만들어보겠습니다.

그 날이 언제가 될지는 저도 미지수라........

조만간 jailbreak bypass 로 찾아뵙겠습니다.

허접한 글 봐주셔서 감사합니다.

참고로 해당 문서는 참고 및 테스트 용도로만 이용해주세요.

댓글
댓글쓰기 폼
Total
198,094
Today
1
Yesterday
40
«   2019/10   »
    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 31    
글 보관함