Android/Androgoat

Binary Patching

Analysis

Binary Patching 항목을 눌러보면 다음과 같이 액세스 권한이 없어서 기능을 사용할 수 없다는 문구와 비활성화되어있는 버튼을 확인할 수 있다.

 

code

onCreate

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView((int) R.layout.activity_binary_patching);
        if (this.isAdmin) {
            TextView textView = (TextView) _$_findCachedViewById(R.id.isAdminText);
            Intrinsics.checkExpressionValueIsNotNull(textView, "isAdminText");
            textView.setText("You are Admin Now");
            Button button = (Button) _$_findCachedViewById(R.id.adminButton);
            Intrinsics.checkExpressionValueIsNotNull(button, "adminButton");
            button.setEnabled(true);
        }
        ((Button) _$_findCachedViewById(R.id.adminButton)).setOnClickListener(new BinaryPatchingActivity$onCreate$1(this));
    }

onCreate() 함수를 확인해보면 isAdmin() 함수 반환값이 True로 반환해야 "You are Admin Now"라는 문자열이 설정되거나 ADMINISTRATION버튼이 활성화되는 것을 확인할 수 있다.

 

isAdmin

public final class BinaryPatchingActivity extends AppCompatActivity {
    private final boolean isAdmin;

    public final boolean isAdmin() {
        return this.isAdmin;
    }

isAdmin() 함수는 isAdmin이라는 변수 값을 반환하는 함수임을 확인할 수 있다.

 

Exploit

Smali

Admin권한을 활성화 하기 위해 smali 코드 변조를 진행한다.

먼저 smali 변조할 코드를 찾기 위해 디컴파일을 진행한다. (해당 과정은 이전 글을 통해 확인할 수 있다.)

디컴파일 완료 후 smali → owasp → sat → goat 경로를 따라가면 BinaryPatchingActivity.smali 코드를 확인할 수 있다.

 

찾은 smali 파일을 열어준 후 onCreate() 함수를 찾는다.

함수를 찾으면 다음과 같이 isAdmin 값과 1을 비교한 후 같지 않다면 cond_0으로 이동하는 코드를 확인할 수 있다.

 

여기서 Admin권한을 활성화 하기 위해서는 cond_0으로 이동하지 않고 이후 코드를 진행해야 하기 때문에 다음과 같이 비교문을 바꾸어 주는 것으로 권한을 획득할 수 있다.

 

이후 컴파일 및 설치를 진행한 다음 확인해보면 다음과 같이 ADMINISTRATION 버튼이 활성화되었으며, 누르면 "You clicked on Administration button"이라는 문구를 확인할 수 있다.

 

'Android > Androgoat' 카테고리의 다른 글

Network Intercepting  (0) 2021.09.20
Emulator Detection  (0) 2021.09.20
Root Detection  (0) 2021.09.20