Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
redexer — Redexer Dalvik 바이트코드용 바이너리 인스트루먼테이션 프레임워크 | Kitploit
도구/GitHubGitHub/plum-umd/redexer
Android SecurityStatic AnalysisDynamic Analysis (Sandboxing)Reverse EngineeringBinary AnalysisPapers & ResearchLearning & Education
GitHubplum-umd/redexer

redexer

Redexer Dalvik 바이트코드용 바이너리 인스트루먼테이션 프레임워크

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Build Status

redexer

Redexer는 Android 앱 바이너리를 조작하는 재공학 도구입니다.
이 도구는 DEX 파일을 메모리 내 데이터 구조로 파싱하고, 앱이 특정 권한을 어떤 매개변수와 함께 사용하는지 추론하며(이 기능을 RefineDroid이라고 함), 해당 데이터 구조를 수정 및 역파싱하여 출력 DEX 파일을 생성합니다(이 기능들을 Dr. Android라고 하며, Dalvik Rewriting for Android의 약자입니다).

출판물

  • Dr. Android and Mr. Hide: Android 애플리케이션의 세분화된 권한.
    Jinseong Jeon, Kristopher K. Micinski, Jeffrey A. Vaughan, Ari Fogel, Nikhilesh Reddy, Jeffrey S. Foster, Todd Millstein.
    ACM CCS Workshop on Security and Privacy in Smartphones and Mobile Devices (SPSM '12), 2012년 10월.

요구 사항

  • OCaml 및 Ruby

이 도구는 OCaml 4.09.0 및 Ruby 1.8.6(7)에서 테스트되었으므로 이를 (또는 더 높은 버전을) 설치해야 합니다.

  • OCaml 패키지/라이브러리 관리자 및 SHA 라이브러리

DEX 형식의 SHA-1 서명(해시)을 조작하기 위해 OCaml SHA 라이브러리를 ocamlfind/findlib (OCaml 라이브러리 관리자)를 통해 활용합니다. 둘 모두를 설치하는 가장 쉬운 방법은 OPAM (OCaml 패키지 관리자)을 사용하는 것이며, 이 패키지 관리자는 두 패키지(OPAM ocamlfind 및 OPAM sha)를 포함합니다.

두 패키지를 직접 빌드하거나 설치할 수도 있습니다. Linux 시스템을 사용하는 경우 배포판을 쉽게 찾을 수 있습니다.

그렇지 않은 경우, 예를 들어 Mac을 사용하는 경우 직접 빌드해야 합니다. 원본 소스 코드는 여기에서 찾을 수 있습니다. make를 실행하여 빌드하고 결과 디렉터리를 ocamlfind의 루트 site-lib 디렉터리에 링크하거나 sudo make install을 실행하십시오.

PC를 사용하는 경우 먼저 ocamlfind/findlib 및 FlexDLL을 설치해야 합니다. 환경 변수가 다음과 같이 올바르게 설정되었는지 확인하십시오:

OCAMLLIB=C:\OCaml\lib
CAML_LD_LIBRARY_PATH=%OCAMLLIB%\stublibs
FLEXLINKFLAGS=-L%MinGW%\lib -L%MinGW%\lib\gcc\mingw32\N.N.N
  • OPAM 패키지:

    • sha
    • str
    • ppx_deriving
    • ppx_deriving_yojson
    • yojson
  • Android SDK (또는 소스)

APK 파일을 압축 해제하고 다시 패킹하기 위해 apktool (오픈소스 APK 재공학 도구)을 사용합니다. 이 도구는 Android Asset Packaging Tool인 aapt를 사용하므로 Android SDK 또는 소스를 설치해야 합니다. 또한, 다시 작성된 앱을 최적화하기 위해 Android SDK에도 포함된 zipalign을 사용합니다.

프로필에 다음을 추가하여 Android 기본 도구의 경로를 설정할 수 있습니다:

ANDROID_HOME=$HOME/android-sdk    # your own path here!
export ANDROID_HOME

PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools/19.0.0    # installed version number
export PATH
  • RubyGems 및 Nokogiri

주요 스크립트는 Ruby로 작성되었으며 Ruby 패키지 관리자인 RubyGems과 매니페스트 파일을 조작하기 위한 XML 라이브러리인 Nokogiri가 필요합니다.

  • (선택 사항) graphviz dot

그래프(예: 호출 그래프, 제어 흐름 그래프, 지배자 트리 등)를 보려면 graphviz dot을 설치해야 합니다.

빌드

redexer를 빌드하려면 그냥 make를 실행하세요! 최상위 수준에서 redexer 바이너리를 볼 수 있습니다.

$ make (clean)

도구를 사용하기 전에 사용자가 apktool의 최신 플랫폼 파일을 설치해야 합니다. 예를 들어 다음과 같이 해야 합니다:

$ java -jar tools/apktool.jar if [proper platform file]

HTML 형식의 API 문서도 생성할 수 있습니다.

$ make api

사용법

  • 도움말

도구가 제공하는 모든 옵션을 볼 수 있습니다:

$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
  • unparse

Android SDK의 dexdump처럼 redexer는 주어진 dex 파일의 내부를 YAML 형식으로 볼 수 있게 합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd unparse [--to blah.yml]
  • dump method

이 옵션은 지정된 메서드의 명령어를 덤프합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
  • identity

이 기능은 redexer의 파싱 및 덤프 모듈을 테스트하기 위한 것입니다. 동일한 dex 파일을 생성할 가능성이 높습니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd id [--to blah.dex]
  • info

dex 파일에 대한 기본 통계(예: 명령어 수)도 볼 수 있습니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
  • classes

이 옵션은 dex 파일에 정의된 모든 클래스 이름을 출력합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes

특정 서드파티 라이브러리를 검색하는 데 유용할 수 있습니다, 예:

$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes | egrep 'apache'
  • api

이 옵션은 dex 파일의 API 사용을 출력합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd api [--sdk android.]
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api --sdk com.facebook.
  • opcode statistics

Dalvik 바이트코드에서 일부 opcode가 얼마나 드물게 사용되는지 궁금하지 않으신가요? 전체 opcode의 히스토그램을 보여주거나, 주어진 앱에서 특정 opcode가 얼마나 자주 사용되는지 확인할 수 있습니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd opstat [--op opcode1,opcode2,...]

예:

$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat --op div-int/lit16,nop
  • Intent resolution analysis

이 옵션은 전파 기반 Intent 해석 분석을 수행하고 Activity 클래스 간의 전환을 출력합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
  • call graph

이 옵션은 주어진 파일의 호출 그래프를 나타내는 pdf 파일을 생성합니다. pdf 이름을 지정하지 않으면 cg.pdf가 사용됩니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd cg [--to blah.pdf] [--no-pdf]
  • control-flow graph

이 옵션은 주어진 메서드의 제어 흐름 그래프를 보여주는 pdf 파일을 생성합니다. 클래스 이름 뒤에 점으로 메서드 이름을 추가합니다: class_name.method_name

$ ruby scripts/cmd.rb target.(apk|dex) --cmd cfg --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • (post) dominator tree

이 옵션은 위 기능과 유사하지만, (사후) 지배자 트리를 나타냅니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd (p)dom --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • liveness analysis

이 옵션은 고전적인 역방향 데이터 흐름 분석을 수행합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd live --mtd cls.mtd
  • constant-propagation analysis

이 옵션은 고전적인 순방향 데이터 흐름 분석을 수행합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd const --mtd cls.mtd
  • reaching definition analysis

이 옵션은 고전적인 순방향 데이터 흐름 분석을 수행합니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd
  • dependants

이 옵션은 클래스 의존성을 찾습니다.

$ ruby scripts/cmd.rb target.(apk|dex) --cmd dependants --mtd cls.mtd
  • launcher activity

이 옵션은 주어진 apk의 런처 액티비티 이름을 출력합니다.

$ ruby scripts/cmd.rb target.apk --cmd launcher
  • exported

이 옵션은 외부에 노출된 구성 요소를 알려줍니다.

$ ruby scripts/cmd.rb target.apk --cmd exported
  • activity, service, provider, receiver

이 옵션들은 매니페스트에 선언된 Android 기본 구성 요소를 출력합니다.

$ ruby scripts/cmd.rb target.apk --cmd [activity | service | provider | receiver]
  • custom_views

이 옵션은 리소스의 레이아웃 정의를 탐색하고 사용자 정의 뷰를 출력합니다.

$ ruby scripts/cmd.rb target.apk --cmd custom_views
  • fragments

이 옵션은 리소스의 레이아웃 정의를 탐색하고 Fragment 요소를 출력합니다.

$ ruby scripts/cmd.rb target.apk --cmd fragments
  • buttons

이 옵션은 리소스의 레이아웃 정의를 탐색하고 버튼과 해당 ID(또는 텍스트) 및 콜백 메서드(있는 경우)를 출력합니다.

$ ruby scripts/cmd.rb target.apk --cmd buttons
  • permissions declared in the app's manifest

이 옵션은 apk가 사용하는 권한을 출력합니다.

$ ruby scripts/cmd.rb target.apk --cmd permissions
  • target SDK version

이 옵션은 apk가 요구하는 SDK 버전을 출력합니다.

$ ruby scripts/cmd.rb target.apk --cmd sdk

apk 파일을 압축 풀고 싶지 않다면, 실제로 명령어 조합으로 동일한 작업을 할 수 있습니다:

$ aapt dump badging target.apk | grep 'targetSdkVersion' | tr -dc 0-9.\\n
  • Hello, DEX

이 옵션은 간단한 메시지를 출력하는 dex 파일을 생성합니다. 해당 dex 파일은 redexer의 API만을 사용하여 만들어집니다.

$ ruby scripts/cmd.rb --cmd hello

내부를 확인하세요.

$ dexdump -d results/classes.dex

관심이 있다면 다음과 같이 dex 파일을 테스트할 수 있습니다. ANDROID_SDK 경로가 설정되어 있다고 가정합니다.

// create a temporary jar suitable for dalvik VM
$ aapt add temp.jar results/classes.dex

// (optional) if you didn't make an avd, then make it.
$ android create avd -n myAVD1 -t android-8

// launch your emulator
$ emulator -avd myAVD1 &

// push the temporary jar
$ adb push temp.jar /data

// connect to adb shell
$ adb shell

// at last, run the dex
# /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar \
 -classpath /data/temp.jar Hello
Hello, DEX
#
  • logging

이는 재작성 기능의 변형입니다. 이 기능을 사용하면 특정 관점에서 앱 동작을 로깅할 수 있습니다. 로깅 라이브러리용 미리 빌드된 dex 파일(data/logging.dex)이 제공됩니다. 더 많은 기능이나 유틸리티를 추가하려면 다음과 같이 빌드하세요:

$ cd logging
$ gradle copyDex
$ cd ..
도구 다운로드