1. 서론
Android 어플 진단에서 빠질 수 없는 부분이 smali파일 변조입니다.
smali파일 변조에는 여러 가지 방법도 있고 종류도 가지가지지만 간단한 몇 가지 방법들이 있습니다.
여기에서 다룰 주제는 루팅 탐지 우회이므로 SU파일 탐지 우회만을 다루도록 하겠습니다.
smali파일 말고도 xml파일도 있는데 간단한 용어 정리를 하고 넘어가도록 하겠습니다.
smali : smali란 ‘An assembler/disassembler for Android's dex format’의 약자인데, DEX 바이너리를 사람이 읽을 수 있도록 쉽게 표현한 것입니다. C와 어셈블리어의 관계와 같다고 생각하면 됩니다.
xml : XML(Extensible Markup Language)은 W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는 경우에 사용하도록 권장하는 다목적 마크업 언어이다.
xml에 대한 자세한 성명을 아래의 링크를 들어가시면 확인할 수 있습니다.
링크 : https://ko.wikipedia.org/wiki/XML
2. 준비
기본적인 진단 환경(NOX, ADB, apk easy tool, notepad++이 설치된 환경), Astro어플, Android 파일 관리자
3. 방법
SU파일 탐지하는 방법으로는 여러 가지가 있겠지만 앞서 이를 진단할 수 있는 환경을 만들어 주는 것도 중요합니다.
우선 진단할 어플을 Nox에 설치해줍니다.(notepad++로 보기 전까지의 과정은 APKAPK 파일을 전달받은 상황에서의 진단이라서 생략할 수 있습니다.)
그런 후 루팅 탐지를 하는지 여부를 확인하기 위해 실행시켜줍니다.
만약 정상적인 루팅 탐지를 하고 있다면 지금부터 루팅 탐지 우회를 해봅시다. (물론,(물론 Nox는 root 켜기를 체크한 상황이어야 합니다.)
물론 다른 파일 백업 어플도 존재하지만 저 같은 경우는 astro가 편해서 사용했습니다.
들어가면서 권한허용을 한 뒤 상단의 어플 탭을 눌러 들어가면 설치된 앱 들이 보일 것입니다.
그 중 진단하고자 하는 어플을 길게 누르면 왼쪽에 체크표시가 뜨고 우측 상단에 보면 점 세 개가 보일 텐데 그걸 누르면 백업 탭이 있습니다.
백업을 하고 나면 핸드폰 내에 백업 파일이 저장됩니다. 하지만 백업을 했다고 핸드폰 내에서 분석을 할 수 없으니 컴퓨터로 옮겨 줘야겠죠?
만약 단말기를 사용 중이라면 백업된 폴더에 가서 adb pull로 빼주시면 됩니다.
단말기의 백업파일 위치는 아래에 두겠습니다.
백업파일 위치 : /storage/emulated/legacy/backups/apps
위의 위치에 가면 백업 파일을 확일할 수 있습니다. adb를 이용하는 경우에는 바로 윈도우로 옮길 수 있지만 파일 관리자는 백업 파일을 옮겨주셔야 합니다.
파일관리자에서 해당 파일을 체크하고 옮길 디렉터리에서 붙이기를 하면 됩니다.
옮길 위치 : /mnt/shared/App
여기로 옮겨주시면 되는데 해당 디렉터리에 간 다음 Nox의 하단 좌측을 보면 점세개가 있습니다.
그 탬을 누르면 선택항목 이동이라는 탭을 누르면 해당 파일이 이동됩니다.
(여기에서의 실행환경은 Nox Android 5.1.1을 대상으로 하며 버전에 따라 다를 수 있습니다. 해당 업무는 꼭 root 켜기를 체크한 상태에서 진행해야 합니다.)
이렇게 하면 Nox의 백업파일이 윈도우로 옮겨집니다.
옮겨진 백업파일 위치 : C:\Users\<사용자 명>\Nox_share\AppShare
이전 글에서 말씀드린 바와 같이 옮겨진 백업 APK파일을 APK easy tool을 이용해 디컴파일 해주시면 됩니다. (디컴파일이 안되면 option/apktool에서 Don't decode resources.arsc를 체크해주시면 됩니다. 해당 설정은 리소스 파일을 디컴파일하지 않는다는 설정이고 해당 체크 시manifest.xml은 분석이 불가하니 참고하세요.)
※여기에서부터 중요합니다.※
여기부터는 루팅 체크를 어느 activity에서 하는지 확인하는 작업입니다.
우선 cmd 창을 켜고 abd연결을 해줍니다.
(앞에서 여러 번 adb연결을 설명했으니 참고하세요.)
그런 후 Nox에뮬레이터와 cmd창을 준비해 주시고 Nox 에뮬레이터에서 분석하려는 해당 어플을 실행하면서 아래의 명령어를 cmd창에서 실행해 주시면 됩니다.
실행시킬 명령어 : adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
위의 명령어를 앱 실행과 동시에 실행시켜 주시면 현재 에뮬레이터에서 실행 중인 어플의 액티비티를 알 수 있습니다.
보통 어플의 Activity의 양이 어마어마하게 많은 반면에 이렇게 실행중인 Activity를 알 수 있다면 분석이 훨씬 수월할 수 있을 것입니다.
이렇게 현재 실행중인 어플의 액티비티의 위치를 알게 되었다면 notepad++로 분석하고 탐지하는 부분의 코드를 변경해 주시면 됩니다.
대부분의 SU 파일 탐지는 manifest.xml에서 하는 반면에 몇몇의 어플의 탐지는 백신을 통해서 하는 경우도 대부분입니다.
method와 Class설명을 통해 말씀드리는 것도 중요하지만 실제 점검 방법에 치중을 두고 있으므로 생략하도록 하겠습니다.(앞으로 페이지를 추가하여 이론적인 설명을 할 예정입니다.)
찾는 방법은 여러 가지가 있지만 제가 애용하는 방법은 Ctrl+F입니다.
찾기에서 SU, Changed, Check 등과 같은 키워드를 찾아보시고 알맞은 부분을 찾아가 고쳐주기만 하면 됩니다.
루팅 탐지를 우회시키는 방법 중 SU 탐지 우회는 Ctrl+F로 SU를 찾으면 SU에 관한 탐지하는 코드를 찾을 수 있습니다.
대부분 이 코드를 이름을 바꾸어 저장하고 SU가 아닌 다른 파일을 탐지하게 함으로써 우회하는 방식을 사용합니다.
이러한 방식을 이용하면 쉽게 루팅을 우회시킬 수 있습니다.
이후 고친 코드를 저장해주고 APK easy tool을 활용해 리컴파일해줍니다.
코드를 무리하게 수정하면 어플의 코드가 비장상 적인 동작을 할 수 있으므로 문구를 탐지하는 부분만 수정하고 다른 부분은 최대한 건드리지 않는 것을 추천합니다.
또한 전에 APK 파일을 지정하여 디컴파일 하면서 자동으로 파일이 지정되었고 다른 APK파일을 디컴파일 하지 않았다면 바로 리컴파일 버튼을 눌러주면 바로 시행됩니다.
이후 리컴파일된 APK 파일을 루팅된 단말기에 설치하여 실행하면 루팅 우회 여부를 확인 할 수 있습니다.
만약 코드를 잘못 수정했거나 처음부터 다시 하고 싶다면 다시 디컴파일하면 바로 돌아옵니다.
4. 요약
1) APK easy tool을 이용해 APK파일을 디컴파일한다.
2) 만약 나인패치 에러가 발생한다면 리소스 파일을 제외하고 디컴파일 해준다.
3) 앱을 실행시킴과 동시에 ADB코드를 실행시켜 루팅을 탐지하는 Activity를 찾아준다.
4) 해당 Activity와 Manifest.xml파일 내부에서 SU탐지 코드를 찾아 탐지하는 문구를 바꾸어 준다.
5) APK 파일을 리컴파일 해주고 루팅된 단말기에 설치하여 루팅 우회 여부를 확인한다.
'Android' 카테고리의 다른 글
frida와 frida-server 진단환경 구성 (0) | 2019.11.05 |
---|---|
Smali 파일 변조 (루팅 탐지코드 변조) (0) | 2019.10.19 |
안드로이드 진단 환경 구성 (0) | 2019.09.22 |
불필요한 Activity 점검 *am명령어 활용 (0) | 2019.09.21 |
로컬파일을 변경하여 루팅 우회 (0) | 2019.09.19 |