보안/android

[앱][리버싱] 악성앱 분석 - InsecureBankv2 (2)

y00&z1 2021. 11. 12. 19:04

frida를 이용한 rooting 탐지 우회하기 

( ※ frida 설치 과정 : https://y0on-it.tistory.com/28 )

 

 

1. 환경구축, 구동

  • 루트 권한 필요 
  • 디컴파일 도구 (apktool, dex2jar, bytecode-viewer, jd-gui, jadx 등)
  • 테스트 대상 앱 

*루트권한 설정하기 

>adb root

 

*환경구동 

>adb devices

 

>adb shell 

#./data/local/tmp/frida-server-15.1.3-android-x86 &

# ps | grep frida-server

 

frida 서버 구동

>frida-ps -U

 

>frida-ls-devices //해당 명령어로 잘 연결되었는지 확인

+)루팅된 상태로 테스트 앱 열어봐도 탐지가 안된다.. 다른 앱은 정상적으로 되는데??

 

 

2. 디컴파일 & 분석

(환경구축 포스팅에서 기본적인 작업 해두었다 - https://y0on-it.tistory.com/33 )

dex-tools 이용하여 jar 파일 생성 후 ,

InsecureBankv2-dex2jar 파일을 jd-gui로 오픈 

 

우회할 부분 찾기  -> root/Root로 검색! 

search 메뉴에서 해당 키워드를 입력하니까 금방 찾을 수 있었다.

 

-> root_status 라는 TextView 발견. 

 

-> Root 탐지 관련 함수 발견. 

 

 

두번째 if절 진입 전에 bool 값이 fasle 값이어야 한다! == bool 값이 true면 루팅 탐지 

 

그렇다면, true가 되는 조건은??? - 첫번째 if절 통과 (아래 조건 중 하나만 만족해도 통과)

 -doesSuperuserApkExist 함수 반환 값이 true 

 -doesSUexist 함수 반환 값이 true 

 

-> 둘 다 false 값이 반환되도록 해야한다. 

 

 

 

if절에서 호출한 함수들 확인하기! 

 - doesSuperuserApkExist 함수 확인 

/system/app/Superuser.apk 파일이 존재하지 않으면 false로 / 존재하면 true로 ! 

adb shell 에서 해당 파일을 찾아 보았지만 루팅 탐지가 제대로 안돼서 아직 생성이 안된 듯 하다. 

 

==> 이미 생성되었다고 가정하면, apk 파일 이름을 바꾸거나 삭제하면 되지 않을까? 

 

 

 

- doesSUexist 함수 확인


Runtime.getRuntime().exec("시스템 명령어"); //문자열 배열로 전달!! 


Runtime.getRuntime().exec(new String[] { "/system/xbin/which", "su" });

//실행프로그램 : /system/xbin/which , 전달할 인수 : su

-> 즉, su 명령어를 cmd 창에서 입력하는 것과 동일한 프로세스 생성됨. 

 

String str = bufferedReader.readLine(); -> 버퍼에 입력된 값을 str로 가져옴

null이 아니면 (su 파일이 있으면) 처음에 true로 선언했던 bool 변수 바로 return !!  -> 결국 true 가 return 되는 것

 

==> str에 null 값 넣도록 정의 ? 

==> 아니면 두 함수 모두 return false; 로 재정의하기 ? 

 

 

+)

ShowRootStatus 함수가 어디서 호출되는지 알아보기위해서 함수명으로 검색. 

->onCreate 안에서 호출되고 있고, setcontentView()메소드 다음으로 바로 호출됨을 확인할 수 있다. 

 

 

일단

/system/app/Superuser.apk

 

 

3. 우회 스크립트 작성

4. 결과 확인