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 |