1. 개요악성앱(피싱앱) 분석을 하던 중 동적 덱스 로딩 기법이 적용된 앱을 분석하게 되어 정리해둔다. 2. DEX 파일 복호화샘플 앱의 경우, '/assets' 경로 내 동적 로딩을 위한 .dex 파일이 위치하고 있으며, 내용은 암호화되어 있음을 확인한다. 앱 내부에서만 접근 가능한 저장소에 암호화한 dex 파일을 저장하고 배포하여 설치 시에 복호화 후 로드하는 "동적 DEX 로딩(Dynamic DEX Loading)" 방식이다. 코드에서 해당 경로(assets/)에 접근하여 파일을 복호화하고 복사하는 과정이 있을 것이므로 문자열로 검색하여 사용하고 있는 부분을 파악한다. assets 경로에는 앱 실행에 필요한 다른 리소스 또한 포함되어 있으므로 해당 기능을 제외하면 다음의 결과를 확인할 수 있다..
1. 자바와 네이티브 코드안드로이드에서 JNI(Java Native Interface)는 자바, 코틀린에서 컴파일하는 바이트코드가 C/C++로 작성된 네이티브 코드와 상호작용하는 방법을 정의한다. 자바 언어와 자바언어가 아닌 코드가 상호작용할 수 있도록 하는 프레임워크이다. 자바는 플랫폼 독립적인 언어이지만, 자바로 모든 기능을 구현하기엔 어렵기 때문에 네이티브 코드와의 상호작용이 필요하다. 자바가 성능 면에서 부족한 경우, 운영체제나 하드웨어에 특화된 기능을 사용해야할 때, 이미 잘 검증된 네이티브 라이브러리를 재사용함으로써 개발 시간을 단축할 수 있다. 하지만 단점도 존재하는데, 자바와 네이티브 코드 간의 상호작용은 복잡하며, 개발자가 직접 메모리 관리와 같은 저수준 작업을 신경써야 한다. 2. 안..
개요 JEB 디컴파일러에서 프리다 후킹스크립트를 생성하는 스크립트를 설치하고 사용한다. 다운로드 및 설치 깃허브 페이지: https://github.com/Hamz-a/jeb4frida GitHub - Hamz-a/jeb4frida: Generate Frida hooks directly from JEB! Generate Frida hooks directly from JEB! Contribute to Hamz-a/jeb4frida development by creating an account on GitHub. github.com 압축파일로 받으면 폴더에 'Jeb4frida.py' 파일이 스크립트 파일이다. 해당 파일을 JEB가 설치된 경로의 '/scripts' 에 복사한다. 사용 JEB를 재시작 한 후 ..
사전지식 패스트부트(Fastboot) 부트로더 언락 등의 작업을 수행할 수 있으며 system, boot, recovery 등 다양한 영역의 펌웨어를 교체작업할 수 있는 엔지니어링 프로토콜이다. 부트로더가 허용하는 경우에만 시스템을 플래싱할 수 있으며, 부트로더는 기본적으로 잠겨 있다. 부트로더를 잠금해제 할 수는 있지만 해제하는 시점에 개인정보보호를 위해 저장된 사용자 데이터는 모두 삭제된다. 삼성 단말기에서는 패스트부트라는 용어 대신 다운로드 모드(download mode)라는 명칭을 사용한다. Magisk 동작원리 systemless working boot.img에 'init' 파일이 빌드되어 있기 때문에 boot.img 파일을 수정하는 것이 필요하며, /system 경로의 파일은 수정할 필요가 없..
안드로이드 취약점진단에서 루팅 탐지 우회와 관련있는 매지스크 모듈인 Zygisk의 동작 원리에 대해 정리한다. Zygote 프로세스 개요 안드로이드 앱은 자바 코드로 작성되어 있고 가상머신인 안드로이드 런타임(ART)에서 동작한다. 앱이 실행될 따마다 가상머신을 초기화하고 자원을 할당하는 작업은 실행을 느리게 하는 원인이 된다. Zygote(자이고트) 프로세스는 앱이 실행되기 이전에 실행된 가상 머신의 코드 및 메모리 정보를 공유함으로써 실행시간을 단축한다. 리눅스의 fork() 시스템 콜의 동작 원리와 비슷하다. 자식 프로세스 'A'를 생성할 때 부모 프로세스의 메모리 구성 정보 및 공유 라이브러리에 대한 링크 정보를 공유한다. 부모 프로세스에는 이미 이러한 정보들을 가지고 있으므로 링크 정보만 매핑하..
직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다. 공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항) 학습자료 apk파일은 https://github.com/colfax0483/Vulnerable_apk 에서 clone할 수 있습니다. 개요 동적분석을 실시하기 위해 앱을 설치하고 실행할 단말기 또는 에뮬레이터 등 분석환경을 준비한다. 실제 단말기를 사용하는 경우 루팅된 기기를 준비하며, 실습에서는 안드로이드 스튜디오를 이용한 에뮬레이터 단말 환경을 준비한다. 1. 동적 분석 환경 준비 안드로이드 스튜디오는 구글에서 제공하는 공식 홈페이지(https://developer.android.c..
직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다. 공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항) 개요 안드로이드 취약점 진단을 수행함에 있어 정적분석과 동적분석은 떼어놓을 수 없는 필수적인 과정이다. 앱을 분석하기 위해서는 앱의 실제 실행 여부에 따라 코드를 분석하는 정적분석, 앱을 실행하면서 전달되는 데이터나 행위를 분석하는 동적 분석 두 단계로 나눌 수 있다. 각각의 단계에서 얻을 수 있는 정보가 다르고 서로 상호보완적으로 정보를 제공하기 때문에 하나씩 살펴보아야 한다. 이 포스트에서는 두 가지 분석 방법에 대해 알아본다. 정적 분석 정적 분석은 앱을 설치하지 않고 확인할 수 ..
안드로이드 로그캣(logcat)을 볼 수 있는 뷰어인 'lognote'를 소개한다. 주요 기능 온/오프라인 로그캣 뷰어 정규표현식 필터 지원 aging test(로그 라인 단위로 파일 분할 저장 가능) 다운로드 깃허브 페이지(https://github.com/cdcsgit/lognote)에서 내용을 확인할 수 있으며, 다운로드는 배포(release)페이지(https://github.com/cdcsgit/lognote/releases)에서 가능하다. 실행 자바 JDK가 설치되어 있어야함 Windows : start javaw -Dfile.encoding=utf8 -Xmx1024m -jar LogNote.jar 또는 압축파일 내 lognote.bat 실행 Linux : java -Dfile.encoding=..
들어가며 주로 안드로이드 빌드 시스템과 OEM 상품을 만들기 위해 프레임워크의 개발이 필요한데, 이에 대한 정보가 많이 없어 리서치가 어려웠다. 여기저기 파편화된 정보들이 있었고 어느 정도 정리가 된 상태여서 포스트로 작성한다. 안드로이드 빌드를 위해 코드를 다운받으면, 단일 브랜치의 소스코드 용량만 해도 100GB가 넘는데다가 빌드 과정과 내부 리소스도 복잡하게 얽혀있다. 그만큼 역사도 길고 수많은 패치와 커밋의 결과물이기 때문이다. 빌드 순서 Android 7.0 이전 Android 7.0 이전에는 안드로이드를 빌드할 때 GNU make 도구를 사용했다. 모든 빌드 구성 규칙은 'Makefile'이라는 파일에 작성되었으며, make 도구는 이 파일의 지침에 따라 코드를 컴파일 한다. make는 자동화..
이전 포스트에서 이어지는 글입니다. 2023.09.16 - [Security/Mobile] - [AOSP] Ubuntu에서 안드로이드 13 빌드하기 빌드하기 소스코드를 다운받은 경로로 이동하여 build/envsetup.sh를 실행하는데 빌드하고자 하는 디바이스를 지정해야 한다. https://source.android.google.cn/docs/setup/build/running?hl=ko 에서 모델별로 빌드 구성 코드명을 선택할 수 있다. 구글이 벤더인 기기(픽셀, 넥서스 등)은 공장 출고 시 이미지를 공개하고 있다. 본문에서는 Pixel 4a 단말을 위한 빌드를 구성한다. 빌드 구성은 aosp_sunfish_userdebug가 된다. 코드에서 지원하는 빌드 구성은 다운받은 상태이며, /device/..