일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- custom packer
- v8 optimizing
- v8 tracing
- android inject
- linux debugging
- 난독화
- uftrace
- tracerpid
- TLS
- apm
- Linux custom packer
- Linux packer
- OSR
- thread local storage
- pinpoint
- LLVM Obfuscator
- anti debugging
- Injection
- on stack replacement
- LLVM
- 안티디버깅
- linux thread
- Obfuscator
- on-stack replacement
- LLVM 난독화
- pthread
- initial-exec
- Android
- tracing
- so inject
- Today
- Total
목록Knowledge/Android (17)
Why should I know this?
가장 강력하고 높은 수준으로 Android OS를 제어하고자 한다면 자체 빌드한 AOSP를 기기에 설치하는 것보다 좋은 방법은 없다. 다음은 grouper(넥서스 7)용 커널의 빌드 방법을 cmd 순서로 정리한 내용이다. export ARCH=arm export CROSS_COMPILE=`pwd`/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-make tegra3_android_defconfig http://dmitry.gr/?r=06.%20Thoughts&proj=04.%20Android%20M%20on%20Grouper #get Android M AOSP into folder called M mkdir L mkdir M cd M repo init..
Android에서 특별한 목적으로 shared object를 injection하고자 할 때, 사용할 수 있는 가장 쉬운 방법이다. 아래처럼 app_main.cpp 소스를 수정하여 zygote가 app_process를 실행하기 전에 LD_PRELOAD 환경을 지정하여 shared object를 우선적으로 로드하도록 만들 수 있고 여러 재밌는 행위를 할 수 있다. frameworks/base/cmds/app_process/app_main.cpp:166 char value[PROPERTY_VALUE_MAX]; property_get("ro.kernel.qemu", value, ""); bool is_qemu = (strcmp(value, "1") == 0); if ((getenv("NO_ADDR_COMPAT_..
0. 개요 이 글의 내용은 DEX를 메모리에서 로드하는 기법을 다루고 있습니다. 제가 2018년 고안하였으며 이 글은 2019년에 글을 작성되었습니다. 그간 비공개로 해놨으며, github를 통해 다음 프로젝트처럼 동일 기법이 오픈소스로 공개되어 있는것을 확인되어 공개로 전환합니다. https://github.com/yongyecc/dexshellerInMemory GitHub - yongyecc/dexshellerInMemory: android APK一键DEX加固脚本(内存加载DEX) android APK一键DEX加固脚本(内存加载DEX). Contribute to yongyecc/dexshellerInMemory development by creating an account on GitHub. githu..
Android 파헤치기 0. 시작하기 전에...'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다. 1. Android의 어플리케이션 구동 구조Android의 Application이 구동하는 구조는 다소 복잡하다. 이렇게 복잡한 구성을 갖게 된 이유는 Android가 OS의 필요성에 따라 여러 상태로 전환되야 하기 때문이다. 그리고 Android의 응용 어플리케이션은 가상머신에서 동작하기 때문에 가상머신을 Process에 녹여내는 기술도 함께 포함이 되어있다. 이 부분은 굉장히 재미있는 요소가 많은데 예를..
Android 파헤치기 0. 시작하기 전에...'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다. 1. 다양한 Class Load path 전 글에서 언급했듯이, Class는 Android 가상머신의 핵심 중에 핵심이며 Class가 로드, 링킹되는 과정만 이해해도 사실상 안드로이드의 대부분은 이해했다고 해도 무리가 아니다. 그만큼 Class를 로드하는 일은 매우 높은 빈도로 다양한 곳에서 많이 발생한다. 이처럼 Class를 로드하는 Path가 다양한 이유는 다음과 같다. -. System Class와 F..
Android 파헤치기 0. 시작하기 전에...'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다. 1. 가상머신?Android는 흔히 알다시피 가상머신이다. 가상머신이라는 개념에 대해 아주 간단히 설명드리자면, 기존의 프로그래밍 패러다임은 '하나의 언어에 하나의 머신'으로 시작됐다. 여기서 언어는 고도화되어 C가 등장하여 공용어라는 개념이 생겨났으며 머신은 OS로 대체되어 플랫폼이 되었다. 하지만 C++이 등장하여 여러 Standard 라이브러리들이 제공되고, 여러 아키텍처와 플랫폼으로 크로스컴파일 및 ..
안드로이드 혹은 리눅스에서 디버깅을 탐지하는 방법 중에 TracerPid를 읽는 방법이 있는데, 이것은 커널 코드를 수정하여 우회할 수 있다.(참고 : https://die4taoam.tistory.com/15) 다른 방법으로 Shared Object를 injection하여 (참고 : https://die4taoam.tistory.com/11) API를 hooking하는 방법도 있다. Android에서 안티디버깅을 위한 쉬운 트릭으로 현재 프로세스에서 fork를 한 뒤에 프로세스의 상태 변화를 모니터링 하는 방법과 그것에 추가로 ptrace의 PTRACE_TRACEME 를 사용하여 디버거의 attach를 미연에 방지하는 방법이 있다. 이 두 방식 모두 굉장히 쉽게 우회가 가능하다. 방법은 간단한데, -...