Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
assethook — Android의 AssetManager를 위한 LD_PRELOAD 마법 | Kitploit
도구/GitHubGitHub/nccgroup/assethook
Android SecurityDynamic Analysis (Sandboxing)Mobile App PentestingReverse EngineeringPenetration TestingUtilities & Frameworks
GitHubnccgroup/assethook

assethook

Android의 AssetManager를 위한 LD_PRELOAD 마법

저장소 보기
82164년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

(A)AssetHook

(A)AssetHook은 APK를 수정하지 않고도 APK 에셋 파일을 동적으로 교체할 수 있게 해주는 LD_PRELOAD 기반 후킹 라이브러리입니다. 또한 Rust로 작성되었습니다. 에셋 파일 로드를 Android 기기의 /data/local/tmp/assethook/com.pkg.name 아래에 있는 파일 경로로 리디렉션합니다. 말할 필요도 없이, 이 때문에(정확히는 이제 앱의 /data/local/tmp 접근을 차단하는 SEAndroid의 터무니없는 DRM 체계 때문에) AssetHook은 현재 SELinux 모드가 permissive로 설정되어 있어야 합니다. 원본 에셋 경로(일반적으로 assets/path/to/file.name)가 해당 패키지의 AssetHook 경로 아래에 존재하면 교체 파일이 대신 로드됩니다. AssetHook은 두 개의 별도 LD_PRELOAD 후크 구현으로 구성됩니다. 하나는 "공개" C API용이고 다른 하나는 내부 C++ API용입니다. 일반적으로 C++ 후크를 사용하세요. 하지만 새 Android 버전에서 문제가 발생하면 C 후크를 시도해 보세요(단, 아래 설명된 제한 사항에 유의하세요).

왜?

React Native와 같은 도구는 네이티브 에셋 매니저 API를 사용하는데, 이 API는 Xposed와 같은 도구로는 후킹할 수 없기 때문입니다.

C++ API (cppapi_assethook) 후크

공개 C API와 Java API 등에서 호출하는 기본 C++ 에셋 구현을 후킹하는 "상대적으로 안정적인" LD_PRELOAD 기반 후크입니다. 이 하위 수준 API는 때때로 다른 내부 Android 코드가 APK에서 다른 정적 리소스를 로드/확인하는 데 사용되므로, assets/가 아닌 APK 경로 아래에 교체 파일을 배치하여 해당 파일을(이 API를 통해 읽히는 경우) 교체하는 데에도 사용할 수 있습니다.

참고: res/layout/activity_main.xml과 같은 파일은 이 API를 통해 최소한 열리기는 하지만 이 API로 읽히지는 않으므로 AssetHook으로 런타임에 교체할 수 없습니다.

레거시 C API (capi_aassethook) 후크

("aasset"의 'a'가 두 개임에 유의하세요)

Java 수준의 android.content.res.AssetManager를 후킹하지 않는 "보수적인" LD_PRELOAD 기반 후크입니다. 후킹 대상인 C API(AAsset*)는 공개 API이므로, 내부 C++ 구현의 새로운 변경으로 C++ API 후크가 깨질 경우 사용할 수 있는 안정적인 후크입니다. 이 후크를 사용하면 /data/local/tmp/assethook/com.example.name/assets/ 아래의 파일만 후킹할 수 있습니다.

사용법

  1. AAssetHook을 설치하고 특정 앱 패키지에 대해 활성화합니다.

  2. 교체 파일을 (shell 사용자로 푸시하여 파일이 모든 사용자가 읽을 수 있도록 합니다):

    root@kitploit:~
    adb push index.android.bundle.mod /data/local/tmp/assethook/com.pkg.name/assets/index.android.bundle
    
  3. 후킹된 앱을 재시작합니다.

빌드

참고: 32비트 및 64비트 arm용 공유 객체가 저장소에 포함되어 있습니다.

참고: C API를 후킹하는 AAssetHook은 엄청난 양의 상용구(boilerplate)를 줄이기 위해 일부 rust 구문 확장을 사용하므로 rust nightly로 컴파일해야 합니다. 2016-12-05의 커밋 daf8c1dfc에서 rust로 빌드되는 것으로 알려져 있습니다(rust 컴파일러의 내부 변경으로 빌드가 깨지는 경우에 대비).

  1. Android NDK를 설치합니다.

  2. rustup(https://github.com/rust-lang-nursery/rustup.rs)을 통해 rust를 설치합니다.

  3. 다음 명령을 실행합니다:

    root@kitploit:~
    rustup install nightly # C API hook only
    rustup default nightly # C API hook only
    rustup target add aarch64-linux-android
    rustup target add arm-linux-androideabi
    rustup target add i686-linux-android # AVD/HAXM
    mkdir ~/.cargo/toolchains
    cd ~/.cargo/toolchains
    /path/to/ndk/build/tools/make-standalone-toolchain.sh \
      --platform=android-22 --toolchain=arm-linux-android-4.9 \
      --install-dir=android-22-arm-toolchain`
    /path/to/ndk/build/tools/make-standalone-toolchain.sh \
      --platform=android-22 --toolchain=aarch64-linux-android-4.9 \
      --install-dir=android-22-aarch64-toolchain`
    /path/to/ndk/build/tools/make-standalone-toolchain.sh \
      --platform=android-22 --toolchain=x86-linux-android-4.9 \
      --install-dir=android-22-x86-toolchain`
    
  4. ~/.cargo/config에 다음을 추가합니다.

    root@kitploit:~
    [target.arm-linux-androideabi]
    linker = "/path/to/home/.cargo/toolchains/android-22-arm-toolchain/bin/clang"
    
    [target.aarch64-linux-android]
    linker = "/path/to/home/.cargo/toolchains/android-22-aarch64-toolchain/bin/clang"
    
    [target.i686-linux-android]
    linker = "/path/to/home/.cargo/toolchains/android-22-x86-toolchain/bin/clang"
    

참고: cppapi 디렉터리의 build.sh 스크립트가 마지막 세 명령을 수행합니다.

설치

참고: capi 구현으로 폴백하는 경우 cppapi의 모든 항목을 capi로 바꾸세요.

먼저 F-Droid 또는 MrBIMC/SELinuxModeChanger에서 SELinuxModeChanger를 설치하고 permissive 모드로 설정하세요.

참고: 매번 부팅 후 /system/bin/setenforce 0을 실행하기만 해도 됩니다.

root@kitploit:~
cd cppapi
./install.sh

활성화

참고: capi 구현으로 폴백하는 경우 cppapi의 모든 항목을 capi로 바꾸세요.

root@kitploit:~
cd cppapi
./hook.sh <pkg.name> <32|64|unhook>

향후 작업

  • SEAndroid 비활성화의 필요성을 우회하기 위해 후크 파일 저장을 앱의 로컬 파일 디렉터리로 마이그레이션
  • 리소스 후킹
도구 다운로드
cd /path/to/aassethook/cppapi
  • cargo build --target=arm-linux-androideabi --release

  • cargo build --target=aarch64-linux-android --release

  • cargo build --target=i686-linux-android --release