Android/Tech SO 인젝션 동작 순서 Android/Tech 2020. 9. 18. SO 인젝션 동작 순서 1. 인젝션할 SO파일을 /data/local/tmp 또는 샌드박싱 영역(/data/data/패키지명)에 옮긴다. 낮은 버전의 안드로이드면 로드가 되겠지만 같은 uid, context(selinux) 권한 맞춰줘야 된다. 2. /proc/%d/cmdline 폴더를 순회하면서 zygote 프로세스명을 찾고 해당 프로세스의 pid값을 알아낸다. 3. zygote 함수를 사용하여 해당 프로세스에 ptrace로 어태치한다. 4. libc.so의 mmap 함수의 위치를 알아낸다. 5. read/write 권한을 인자로 주어 mmap 함수를 호출한다. 6. libc.so의 mprotect 함수의 위치도 알아낸다. 7. mmap으로 만든 메모리 영역에 READ/EXEC 권한으로 변경해준다. 8.. Android OKHTTP SSL Pinning 적용하기 (certificate pinning) Android/Tech 2020. 5. 1. https 통신을 사용하더라도 위 그림과 같이 공격자가 중간자 공격(MITM)을 수행한다면 전송하는 패킷을 탈취 및 변조가 가능하다.어떻게 중간자 공격이 가능할까? Burp Suite 프록시툴을 예로 들어 설명해보겠다.클라이언트는 프록시를 지정해놓은 뒤 특정 서버로 접속할 때 프록시와 SSL 연결을 맺게 되고, 프록시는 클라이언트를 대신해서 특정 서버와의 SSL 연결이 맺게 된다. 클라이언트는 프록시와 SSL 연결을 맺기 때문에 접속하려는 해당 서버의 인증서가 아닌 Burp Suite가 만든 사설 인증서를 받게 되는데, 일반 단말기의 경우 해당 사설 인증서의 CA 인증서가 없기 때문에 통신에 실패한다. 그러나 단말기에 직접 Burp CA 사설인증서를 등록시켜놓으면 인증서를 신뢰하여 통신이 가능하다. .. 안드로이드 OLLVM 빌드 방법 Android/Tech 2019. 12. 17. 윈도우에서 OLLVM 빌드하는 방법 1) mingw-w64 설치 https://sourceforge.net/projects/mingw-w64/ 설치 세팅 - C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin 경로 등록 - cmd -> "gcc" 입력해보기 2) cmake 설치 http://www.cmake.org/cmake/resources/software.html - windows 버전으로 설치 (.msi) - Release Candidate (3.14) 3) OLLVM 설치 git clone https://github.com/ilee/llvm-obfuscator mkdir build cd build cmake -DCM.. 안드로이드 안티디버깅 앱 우회 실습 - IDA 동적 분석 방법 Android/Tech 2019. 12. 15. 실습 앱 다운로드 환경 설정 - IDA - anti_debug_ptrace1.apk - LD 에뮬레이터 - 린엔진 or Frida (둘을 비교해볼 것) IDA 동적 디버깅 - 가장 먼저 IDA 폴더 -> dbgsrv 폴더로 들어간 뒤 android_x86_server 파일을 /data/local/tmp 폴더로 이동시켜 준다. - 윈도우에서 구동하는 에뮬레이터이기 때문에 x86 아키텍처의 IDA 서버를 설치하는 것이다. 안드로이드 루팅 단말기에 넣을경우에는 ARM 아키텍처의 android_server 를 넣어주면 된다. 단말기가 64bit도 지원하며 앱이 ARM64(64bit) 라이브러리가 포함되어 있을 경우에는 android_server64 파일을 넣어주면 된다. adb push "C:\Program F.. 안드로이드 안티디버깅 기술과 우회 기법 Android/Tech 2019. 12. 8. 디버깅 안티디버깅 방법을 소개하기 전에 리눅스의 디버깅의 원리 부터 알고 넘어가도록 하자. 리눅스에서는 ptrace 라는 시스템 콜을 이용하여 어태치한 프로세스의 상태와 발생되는 시그널을 추적할 수 있으며 레지스터, 메모리를 읽거나 쓸 수 있다. 주로 개발자가 의도한 대로 정상적으로 작동하는지 흐름을 파악하거나 프로그램 내 버그를 찾는 용도등으로 사용된다. 리눅스 프로그래밍 시 자주 사용하던 디버깅 툴인 GDB 또한 ptrace 시스템 콜을 사용하여 개발되었다. 하지만 개발자만이 디버깅을 하는게 아닌 해커들 또한 악의적인 의도로 디버깅(일명 동적 분석)하는 경우도 존재 한다. 전체적인 동작 흐름을 분석하여 중요한 핵심 코드들을 찾고 발견한 코드들을 원래의 흐름과 다르게 동작하도록 변경하거나 데이터를 .. [안드로이드] ARM 후킹 기법 Android/Tech 2019. 9. 9. 이번편에는 안드로이드 후킹 기술에 대하여 살펴보려고 합니다. "Hook"이라는 단어만 들었을때에는 갈고리가 먼저 생각이 나는데, 단어 그대로 갈고리로 낚아채는 방법이라고 생각하시면 이해가 쉽습니다. 갈고리 처럼 특정 함수 코드를 가로채서 원하는 행위를 한 뒤 원래의 코드로 돌려주는 기법이 후킹입니다. 예를 하나 들어보겠습니다. 윈도우에서 통신 라이브러리인 "ws2_32.dll"의 함수인 send()를 후킹하면 패킷을 가로채서 인자값을 확인 또는 변조, 전송등을 자기가 하고 싶은 행위들로 직접 조작할 수 있습니다. 또한 send() 함수를 호출되는 코드를 역으로 따라가다보면 암/복호화 로직도 발견할 수 있으며, 패킷을 전송하는 실제 코드까지도 발견할 수 있습니다. 이렇듯 후킹은 다양한 변조가 가능하기 때문.. [안드로이드] 유니티 게임 메모리 덤프 방법 Android/Tech 2019. 9. 9. 이번 편은 안드로이드 전체 이미지에 대한 덤프가 아닌 특정 프로세스의 메모리 영역을 덤프 하여 유니티 게임에서 사용되는 "Assembly-CSharp.dll" 또는 "libil2cpp.so" 파일을 추출하는 방법을 설명드리려고 합니다. 해당 방법은 게임 보호 솔루션에 의해 암호화된 파일을 복원하기 위해 복호화 로직을 일일이 직접 분석하기보다는 덤프를 이용하여 쉽게 원본 파일을 확보할 수 있습니다. 1. gdb gcore 우선 가장 보편적으로 알려져 있는 방법으로는 gdb의 gcore 명령어를 이용하여 해당 프로세스의 모든 메모리를 덤프한 뒤 WinHex의 "File Recovery by Type" 기능을 이용하여 PE 구조인 파일을 리스트업하고 원본 "Assembly-CSharp.dll" 추출하는 방법이.. 안드로이드 Relocation Table 분석 Android/Tech 2019. 3. 16. 이전에 작성했던 글인 '안드로이드(ARM) 후킹 기술' 본문에 GOT(Global Offset Table)가 어느 시점에 Write 되는지 글로 따로 작성드린다고 말씀 드렸었는데요. 이 부분에 대해서 dlopen 소스코드를 분석하면서 제대로 살펴보려고 합니다. 우선 구글은 AOSP(Android Open Source Project)라고 해서 안드로이드 소스 코드를 오픈 소스로 관리하고 있습니다. 그러다 보니 libc, libdl 등 다양한 라이브러리 코드를 확인할 수 있는데요. 저희는 이 코드를 통해 dlopen() 소스코드를 확인하고 GOT가 어떻게 쓰여지는지 확인해보겠습니다. 다음 URL (https://android.googlesource.com/platform/bionic/+refs)을 통해 각각.. 이전 1 2 다음