상세 컨텐츠

본문 제목

[mobile] fridaLab_frida challenge 8 write up

기술보안/Mobile:Android

by about_SC 2020. 1. 6. 16:57

본문

[mobile] fridaLab_frida challenge 8 write up

 

- 08. check 버튼의 텍스트를 Confirm으로 변경하기
: 화면에 출력되는 데이터를 수정하는 것이 포인트

 

소스코드를 보며 문제 8번을 보면
findViewById()를 통해 Activity에서 XML의 View를 매칭하고,
//8.0(Oreo)부터는 TypeCasting을 하지 않은 findViewById를 사용할 수 있게되어 Button 타입을 따로 정의해주지 않아도된다. 참고만하도록.
http://devstory.ibksplatform.com/2018/06/android-findviewbyid.html


getText()를 이용하여 이를 텍스트형태로 가져온다.

이 후, equals()를 이용해 해당 문자가 Confirm과 일치하는지 확인하고,
일치할 경우 True 값을 반환하게 된다.

 

사실 그냥 Java.use를 사용한 후 해당 메소드를 재작성하여 true 값을 반환하는 스크립트를 작성해도 문제가 풀리게된다.
하지만, 이는 출제자의 의도에 어긋나기도 해서 그냥 알고만 있자.

 

먼저, Java.choose 함수를 이용하여 인스턴스화 된 객체에 접근 후 findViewById()를 이용해 해당 값(2131...)을 가져온다.
그 후, Java.cast 함수를 이용해 이전에 구한 값을 버튼 객체화 시켜 버튼과 관련된 텍스트 값을 수정할 수 있다.

Java.cast 함수를 이용하기 위해서는 Java.use 함수를 이용해 구한 클래스 객체가 필요하게 되며,
이는 두번째 인자값으로 사용된다.

//Java.cast(handle, klass)
:

Java.use ()에서 반환된대로 주어진 클래스를 처리하여 기존 인스턴스를 부여한 JavaScript 래퍼를 작성합니다.
그러한 래퍼 또한 클래스에 대한 래퍼를 얻기 위한 클래스 속성과 클래스 이름의 문자열 표현을 얻기 위한 클래스 이름 속성을 가지고 있습니다.

간단하게 설명하면, handle 값에 Java.use를 통해 얻어온 객체(klass)를 투영시켜 객체화 시키는 것을 의미합니다.



해당 스크립트를 실행해보자.

 

스크립트 실행 시 아래와 같은 에러를 확인할 수 있다.
setText() 함수에서 에러가 발생하였으며, argument type이 일치하지 않아 발생한 에러이다.
아래에 제시되는 몇몇의 것들이 setText와 매치될 수 있는 argument type이다.

String과 관련된 객체는 java.lang.String이 있는데,
아래에서 제시되는 java.lang.String을 사용하면 java.lang.CharSequence과 동일하게 사용될 수 있다.

이를 이용해 스크립트를 재작성해보자.

 

string.$new()을 사용하여 "Confirm" 문자열을 인스턴스화 시켜서 적용해야 정상적으로 스크립트를 수행할 수 있다.
해당 스크립트를 실행해보자.

 

문제풀이가 성공적으로 이루어진다.

All Clear!!

관련글 더보기