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

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

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 바이트코드용 바이너리 인스트루먼테이션 프레임워크

저장소 보기
174315년 전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을 설치해야 합니다. 환경 변수가 다음과 같이 올바르게 설정되었는지 확인하십시오:

root@kitploit:~
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 기본 도구의 경로를 설정할 수 있습니다:

root@kitploit:~
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 바이너리를 볼 수 있습니다.

root@kitploit:~
$ make (clean)

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

root@kitploit:~
$ java -jar tools/apktool.jar if [proper platform file]

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

root@kitploit:~
$ make api

사용법

  • 도움말

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

root@kitploit:~
$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
  • unparse

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

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

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

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
  • identity

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

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

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

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
  • classes

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

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes

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

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

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

root@kitploit:~
$ 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가 얼마나 자주 사용되는지 확인할 수 있습니다.

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

예:

root@kitploit:~
$ 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 클래스 간의 전환을 출력합니다.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
  • call graph

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

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

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

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

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

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

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

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

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

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

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

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd
  • dependants

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

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

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

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd launcher
  • exported

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

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd exported
  • activity, service, provider, receiver

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

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd [activity | service | provider | receiver]
  • custom_views

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

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd custom_views
  • fragments

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

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd fragments
  • buttons

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

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

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

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd permissions
  • target SDK version

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

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd sdk

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

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

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

root@kitploit:~
$ ruby scripts/cmd.rb --cmd hello

내부를 확인하세요.

root@kitploit:~
$ dexdump -d results/classes.dex

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

root@kitploit:~
// 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)이 제공됩니다. 더 많은 기능이나 유틸리티를 추가하려면 다음과 같이 빌드하세요:

root@kitploit:~
$ cd logging
$ gradle copyDex
$ cd ..

그런 다음 다음 명령어를 사용하세요:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging

trim.py는 계측된 앱의 호출-반환 시퀀스를 캡처할 수 있습니다. (계측은 redexer를 사용하여 먼저 수행해야 합니다.)

로그가 충분히 짧아서 휴대폰(또는 에뮬레이터)이 모든 정보를 메모리에 보관할 수 있는 경우 스크립트의 오프라인 모드를 사용할 수 있습니다:

root@kitploit:~
$ ./scripts/trim.py -d

모든 명령줄 매개변수는 adb logcat으로 전달되며, 기본적으로 org.umd.logging:I *:S가 전달되어 관련 없는 로그를 필터링합니다.

로그가 넘치는 경우 온라인 모드를 사용해야 합니다:

root@kitploit:~
$ ./scripts/trim.py

스크립트는 키 인터럽트를 포착하므로 Ctrl+C로 로깅을 종료할 수 있습니다.

두 모드 모두 로그는 log.txt에 저장되며 한 번에 화면에 표시됩니다. 따라서 로그를 수집한 후 해당 파일을 이동해야 할 수 있습니다, 예:

root@kitploit:~
$ mv log.txt app.scenario.txt
  • logging user interactions

위의 로깅 기능은 메서드 수준에서 로깅할 내용을 지정할 수 있어 일반적입니다. (자세한 내용은 logging 모듈을 참조하세요.) 그러나 때로는 너무 장황하여 성능 저하를 유발할 수 있습니다. 이 기능은 사용자 상호작용만 로깅하도록 설계되었습니다. 이 기능을 사용하면 UI 관련 이벤트만 캡처할 수 있습니다. 마찬가지로 UI 로깅 라이브러리용 미리 빌드된 dex 파일(data/logging-ui.dex)이 제공됩니다. UI 정보의 장황함을 수정하려면 다음과 같이 빌드하세요:

root@kitploit:~
$ cd logging-ui
$ gradle copyDex
$ cd ..

그런 다음 다음 명령어를 사용하세요:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging_ui

로깅 라이브러리는 android a11y 서비스에서 상속되므로 사용자의 명시적 동의가 필요합니다. 따라서 다시 작성된 apk를 설치한 후 설정/접근성으로 이동하여 UI 로깅 서비스를 켜세요. (이 단계는 기기 디버깅 모드를 켜는 것과 유사합니다.) logcat에서 org.umd.logging_ui.* 태그가 있는 메시지는 사용자와 테스트 중인 앱 간의 상호작용입니다.

  • directed exploration

이 옵션은 대상 메서드 호출로 이어지는 구성 요소 전환 경로를 찾습니다.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd directed

data/directed.txt에서 호출할 대상 메서드를 지정할 수 있습니다.

이러한 구성 요소 전환 경로는 서드파티 라이브러리의 보안 취약점을 테스트하기 위해 앱을 구동하는 데 사용됩니다. 자세한 내용은 다음 논문에 설명되어 있습니다:

root@kitploit:~
* Brahmastra: Driving Apps to Test the Security of Third-Party Components.
R. Bhoraskar, et al., In 23rd Usenix Security Symposium (Security '14).

withTimeout.rb는 앱에 대한 건너뛰기 파일을 자동으로 빌드할 수 있습니다. 이 스크립트는 특정 시간 제한으로 cmd.rb를 실행하며, 단일 클래스를 계측하는 데 소요되는 시간을 제한하는 데 사용됩니다. 이는 계측 중에 루프에 빠지는 가끔 발생하는 클래스에 대한 임시 해결 방법입니다. 이 스크립트가 충돌하는 클래스를 발견하면 건너뛰기 파일에 추가하고 중단된 지점에서 계속합니다. withTimeout이 종료되면 data 디렉터리에 [apk 이름]-skip.txt 파일이 생성되며, 이 파일을 사용하여 해당 apk에 대해 완전히 계측된 앱을 빌드할 수 있습니다. withTimeout을 사용하려면 다음과 같이 호출하세요:

root@kitploit:~
$ ruby scripts/withTimeout.rb TIMEOUT COMMANDS

여기서 TIMEOUT은 원하는 시간 제한(초)이고 (300초 권장), COMMANDS는 apk에 대해 scripts/cmd.rb에 전달할 모든 일반 명령줄 입력입니다.

도구 다운로드