Kye0m's Security

[injuredandroid.apk] smali 변조를 통한 안드로이드 앱 변조 본문

앱 모의해킹/Injuredandroid.apk

[injuredandroid.apk] smali 변조를 통한 안드로이드 앱 변조

Kye0m 2022. 9. 12. 01:03

smali 변조를 통한 안드로이드 앱 변조

Injuredandroid.apk

injuredandroid.apk는 안드로이드 취약점 공부를 위해서 CTF 형식으로 제작된 애플리케이션이다.
구글 플레이스토어를 통해 앱을 설치한다.

이 글에서는 해당 앱을 변조하여, 간단한 문구를 띄워보는 것을 실습해 볼 예정이다.

디컴파일

실습을 위해서 디컴파일을 진행해야한다.

pm list packages -f | grep "injured"

디컴파일을 진행하기 위해서 pm명령어를 통해서 injuredandroid.apk의 설치경로를 알아낸다.

명령어 실행 결과

위를 통해서 package:/data/app/b3nac.injuredandroid-1/base.apk=b3nac.injuredandroid 위치에 있는 것을 확인할 수 있다.

해당 경로를 통해서, nox에 있는 앱을 분석환경으로 가져와야한다.

adb pull "package:/data/app/b3nac.injuredandroid-1/base.apk"

adb pull 명령어를 이용하여 앱을 가져오도록 한다.

해당 앱을 가져온 후에는 'APK Easy Tool'을 사용한다.
'APK Easy Tool'은 모바일 어플리케이션의 컴파일 및 디컴파일을 도와주는 도구이다.

APK Easy Tool 화면

방금 가져온 앱의 경로를 설정하고 Decompile 버튼을 누르면

해당 경로에 디컴파일 된다

다음과 같은 경로에, 디컴파일되어 저장된 것을 볼 수 있다.

 

smali 변조

안드로이드는 MainActivity의 onCreate 함수를 시작으로 동작한다.

jadx로 MainActivity를 확인하여 원하는 값을 변조해보도록 하자.

<activity android:name="b3nac.injuredandroid.MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

AndroidManifest.xml 파일을 확인해보면 위와같은 코드를 확인할 수 있다. intent.action이 해당하는 값이 MAIN이므로,

b3nac.injuredandroid.MainActivity 가 MainActivity임을 알 수 있다.

'디컴파일된 폴더'\smali\b3nac\injuredandroid에 가보면 MainActivity 파일이 있는것을 확인할 수 있다.

onCreate 함수를 변조하기 위해서 에디터로 MainActivity.smali 파일을 열고 onCreate함수를 아래와 같이 변조한다.

.method public onCreate(Landroid/os/Bundle;)V
    .locals 1 // 변수를 사용하기 위해서 locals 값을 1로 설정함

    invoke-super {p0, p1}, Landroidx/appcompat/app/c;->onCreate(Landroid/os/Bundle;)V

    const p1, 0x7f0b0031

    invoke-virtual {p0, p1}, Landroidx/appcompat/app/c;->setContentView(I)V

    invoke-direct {p0}, Lb3nac/injuredandroid/MainActivity;->F()V

    const-string p1, "ccit test" // p1에 "ccit test"라는 변수값 입력

    const/4 v0, 0x1

    invoke-static {p0, p1, v0},
    Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object p0

    invoke-virtual {p0}, Landroid/widget/Toast;->show()V

    return-void
.end method

파일을 저장 후, APK Easy Tool에서 다시 컴파일을 진행시킨다. 이후,

adb install "컴파일된 변조 앱 경로"

를 입력해주면 성공적으로 앱이 변조된 것을 확인할 수 있다.

앱 변조 성공