Download & Install

FridaLab 공식 홈페이지

사진에 FridaLab 공식 홈페이지 링크를 삽입하였으니, 사진 클릭을 하면 공식 사이트로 이동할 수 있다.

해당 공식 사이트에서 Download를 클릭 시 FridaLab.apk 파일을 다운로드 할 수 있다.

 

FridaLab.apk 설치

adb install 명령어를 통하여 FridaLab.apk를 설치하였다.

 

FridaLab

FridaLab을 실행한다면, 별 반응이 없을 것이다.

FridaLab의 기능은 화면 속 텍스트로 작성한 1~8번의 기능들이 우회가 되었는지 확인하는 것 뿐이다.

 

CHECK 박스를 클릭한다면, 우회가 되지 않은 기능들이 빨간색 글자로 변경이 된다.

Frida를 이용하여 각 기능들을 후킹을 통해 우회한다면, 초록색 글자로 변경이 된다.

 

AndroidManifest & MainActivity 분석

AndroidManifest.xml

jadx를 통해 FridaLab.apk의 AndroidManifest.xml와 MainActivity를 확인하였다.

 

AndroidManifest.xml에서 별다른 특별한 부분이 없어서 넘어갔다.

MainActivity에선 밑과 같이 코드 분석을 하였다.

 

public class MainActivity extends AppCompatActivity {
   public int[] completeArr = {0, 0, 0, 0, 0, 0, 0, 0};
   ...
   ...
   ...
   public void changeColors() {
       TextView textView = (TextView) findViewById(R.id.chall01txt);
       TextView textView2 = (TextView) findViewById(R.id.chall02txt);
       TextView textView3 = (TextView) findViewById(R.id.chall03txt);
       TextView textView4 = (TextView) findViewById(R.id.chall04txt);
       TextView textView5 = (TextView) findViewById(R.id.chall05txt);
       TextView textView6 = (TextView) findViewById(R.id.chall06txt);
       TextView textView7 = (TextView) findViewById(R.id.chall07txt);
       TextView textView8 = (TextView) findViewById(R.id.chall08txt);
       if (this.completeArr[0] == 1) {
           textView.setTextColor(-16711936);
       } else {
           textView.setTextColor(SupportMenu.CATEGORY_MASK);
       }
       if (this.completeArr[1] == 1) {
           textView2.setTextColor(-16711936);
       } else {
           textView2.setTextColor(SupportMenu.CATEGORY_MASK);
       }
       if (this.completeArr[2] == 1) {
           textView3.setTextColor(-16711936);
       } else {
           textView3.setTextColor(SupportMenu.CATEGORY_MASK);
       }
       if (this.completeArr[3] == 1) {
           textView4.setTextColor(-16711936);
       } else {
           textView4.setTextColor(SupportMenu.CATEGORY_MASK);
       }
       if (this.completeArr[4] == 1) {
           textView5.setTextColor(-16711936);
       } else {
           textView5.setTextColor(SupportMenu.CATEGORY_MASK);
       }
       if (this.completeArr[5] == 1) {
           textView6.setTextColor(-16711936);
       } else {
           textView6.setTextColor(SupportMenu.CATEGORY_MASK);
       }
       if (this.completeArr[6] == 1) {
           textView7.setTextColor(-16711936);
       } else {
           textView7.setTextColor(SupportMenu.CATEGORY_MASK);
       }
       if (this.completeArr[7] == 1) {
           textView8.setTextColor(-16711936);
       } else {
           textView8.setTextColor(SupportMenu.CATEGORY_MASK);
       }
   }
}
 

이와 같이 "completeArr"이라는 Array 변수에 저장된 각 인덱스의 값들이 각 기능의 우회 여부를 나타나는 값으로 표현이 되는 것으로 판단된다. 각 인덱스의 값들이 1인 경우에만, 초록색 글자로 출력된다.

 

이제 각 기능의 코드를 확인하여 어떻게 우회하면 completeArr의 값이 1로 변경되는지 확인하였다.

 

복사했습니다!