1. 서론
앞서 올려드린 Smali파일 변조에서 디컴파일 부분과 SU파일 탐지에 관한 우회 방법을 설명해 드렸습니다.
하지만 어플을 개발하는 기술이 발전해 가면서 루팅을 탐지하는 방법도 바뀌어 갔습니다.
요즘은 대부분 디바이스 스캔을 하여 루팅을 탐지한 후 어플 변조 여부를 판단하여 어플이 실행되는 과정을 거칩니다.(전부 그런 것은 아닙니다.)
오늘 포스팅 할 내용은 SU파일 탐지가 아닌 루팅 스캔을 우회하고 어플 위변조 스캔을 우회하는 방법을 소개해 드리겠습니다.
2. 도구
앞에 올려드린 SU 탐지 우회의 환경과 같습니다.
3. 방법
말씀드리기에 앞서 어플을 디컴파일하는 과정과 이후의 과정은 동일한 과정을 반복하므로 생략하고 notepad++을 통한 코드 수정 부분만 포스틍하겠습니다.
디컴파일하고 난 후 ADB명령어를 어플 실행과 동시에 입력하여 실행중인 Activity의 위치를 알아냅니다.
실행시킬 명령어 : adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
위의 명령어를 통해 현재 루팅을 탐지하고 있는 Activity를 찾을 수 있습니다.
어플의 루팅 탐지 방법은 어플을 개발하는 회사가 어떤 방식을 채택하냐 와 어떤 보안업체와 협업을 하는가에 따라 달자지지만 저는 제가 아는 부분에서 포스팅을 하는 것이니 이해해 주시기 바랍니다.
실행중인 Activity를 notepad++로 확인하면 Main Activity인 경우들이 많지만 이들 중 Main Activity에서 직접 탐지하는 경우와 다른 하위 Activity로 연동하여 탐지하는 경우가 존재합니다.
Smali코드는 처음 보는 분들은 이해하기 어려우실 수도 있습니다. 하지만 아래의 방법만 따라하신다면 굳이 엄청 잘 알지 않더라도 우회가 충분히 가능합니다.
main Activity에서 직접 탐지하는 경우 main Activity에 탐지 코드가 남는 것은 당연할 것입니다. 하지만 이것을 찾는 것은 쉬운 일이 아닙니다. 저는 난독화 되어 알아보기 어려운 메소드의 경우에는 구획을 나누어 진행을 하고 메소드 명이 노출되어 있는 경우에는 직접 rooting, Changed, protect 등의 메소드와 실행 코드를 찾아 코드 변경을 진행합니다.
간혹 난독화를 하진 않았지만 실제 실행 코드가 아닌 더미코드를 집어 넣어놓은 경우도 존재합니다. 이러한 경우에 찾는 방법은 APK 파일을 동적 분석을 동해 알아내거나 코드를 읽어 찾아야 하지만 지금은 쉬운 방법을 설명드리고 차차 난이도를 높여가며 포스팅 해보도록하겠습니다. (저도 아직 공부해야할 부분이 많습니다.ㅠㅠ)
여기에서 어떤 부분을 어떻게 고치는 것인지 궁금해 하는 분들이 많으리라 생각됩니다.
의외로 코드를 변경하는 것은 매우 간단합니다.
if문에 따르는 eqz, nez ne, eq, l, g, t, e를 보신 적이 있으실 것이라 생각합니다.
앞에 말씀드린 것은 만약 같다면, 같지 않다면, 작다면, 크다면, 시작수를 포함하지 않고(미안, 초과), 시작수를 포함하고(이상, 이하)의 개념입니다. 아래에 간단하게 정리해 드리겠습니다.
eqz, eq => 같다, nez, ne => 같지 않다, lt => 미만, le => 이하, ge => 이상, gt =>초과
위의 방식은 매우 간단합니다.
만약 검증 코드를 찾은 부분의 if문이 ge(이상)로 탐지를 한다면 기존에 탐지하던 부분과 반대로 탐지하게 해야 루팅이 정상적인 동작으로 통과될 것이므로 lt(미만)로 고쳐주면 됩니다.
분명 다른 방법도 있습니다. 하지만 저로써는 이 방법이 가장 쉬웠습니다.
이러한 방식으로 코드를 변경해주고 저장하여 리컴파일 후 설치하여 실행시키는 과정을 방복하면 됩니다.
만약 루팅이 우회되었다면 표시되는 Alert창이 변경되거나 어플 변조에 관한 경고문이 발생될 것입니다.
어플이 변조되었다는 경고문을 보거나 루팅 우회가 된 것을 확인하셨다면 앞에 말씀드린 ADB코드를 다시 실행하여 어플변조 탐지코드를 찾아 변경해주시면 됩니다.
방법은 루팅 탐지코드 우회와 같은 방법으로 진행 해주시면 손쉽게 따라하실 수 있습니다.
만약 하위 Activity에서 탐지코드사 실행되는 경우는 메소드의 실행 경로와 동적분석을 통한 실행 경로를 찾아 주셔야하는데 이 부분은 올리디버거나 IDA, ,drozer 등 여러 어플를 활용하여 할 수 있습니다.
위의 방법은 나중에 따로 포스팅 해 드리도록 하겠습니다.
※뽀나쓰※
뽀나쓰로 Android 어플의 위변조 테스트에 관해 말씀드리려고 합니다.
Android 어플의 위변조 테스트는 정~~~~~~~말 간!단!합니다.
필요한 어플은 HxD가 끝입니다.
HxD를 이용해 APK파일을 연 후 가운데 부분의 Hex값을 바꾸어 테스트하면 됩니다.
이 방법이 좀 싫거나 걸리시는 분은 앞에 Smali변조하여 리컴파일하여 앱이 정상적으로 설치 및 실행된다면 위변조 탐지를 하고 있지 않은 것입니다.
이방법으로 테스트 하면되고 이렇게 취약이라고 쓰는 것이 애매하다 생각한다면 Smali변조를 통해 루팅 우회가 성공했다면 덤으로 위변조 탐지로 하지않고 있는 앱이라는 것이 증명된것입니다. (smali파일을 변조하여 루팅을 우회했지만 정상적인 실행과 더불어 루팅 우회까지 성공한 경우이기 때문입니다.)
정말 간단한 방법이니 만약 확인해 보신다면 정말 쉽다고 느끼실 것입니다. (IOS 어플도 바이너리파일만 Hex값 바꾸어 넣는식으로 확인합니다.)
단! 어플의 마지막 부분의 0000000000으로 표기된 Hex값을 바꾸어 넣는 것은 검증범위 밖에 어플에 영향을 주지 않는부분일 수 있습니다.
'Android' 카테고리의 다른 글
인증서 설치를 통한 SSL Pinning 우회 (0) | 2019.12.23 |
---|---|
frida와 frida-server 진단환경 구성 (0) | 2019.11.05 |
Smali 파일 변조 (SU 탐지 우회) (0) | 2019.10.14 |
안드로이드 진단 환경 구성 (0) | 2019.09.22 |
불필요한 Activity 점검 *am명령어 활용 (0) | 2019.09.21 |