
안드로이드 앱을 위한 침투 테스트 및 감사 툴킷.
Android 앱 보안 테스트를 더 빠르고, 더 쉽고, 더 효율적으로 수행할 수 있도록 도와주는 Java 도구입니다. AndroTickler는 Android 앱 침투 테스트의 대부분의 측면을 다루는 정보 수집, 정적 및 동적 검사의 다양한 기능을 제공합니다. 또한 침투 테스터가 테스트 중에 필요로 하는 여러 기능을 제공합니다. AndroTickler는 Frida와 통합되어 메소드 추적 및 조작을 지원합니다. 이전에는 Tickler라는 이름으로 배포되었습니다.
AndroTickler는 Linux 호스트와 USB 포트에 연결된 루팅된 Android 기기가 필요합니다. 이 도구는 Android 기기에 아무것도 설치하지 않으며, /sdcard에 Tickler 디렉토리만 생성합니다. AndroTickler는 Android SDK에 의존하여 기기에서 명령을 실행하고 앱의 데이터를 호스트의 TicklerWorkspace 디렉토리에 복사하여 추가 분석을 수행합니다. TicklerWorkspace는 AndroTickler의 작업 디렉토리이며, 각 앱은 TicklerWorkspace 내에 별도의 하위 디렉토리를 가지며, 여기에는 다음 항목이 포함될 수 있습니다(사용자 작업에 따라 다름):
libs 디렉토리와 Tickler.conf 설정 파일은 jar 파일과 동일한 디렉토리에 있습니다. 설정 파일은 호스트의 TicklerDir 디렉토리와 Android 기기의 /sdcard에 있는 Tickler 디렉토리의 위치를 설정합니다. 설정 파일이 없거나 이 두 디렉토리가 설정되지 않은 경우 기본값(각각 현재 디렉토리의 Tickler_workspace 및 /sdcard/Tickler)이 사용됩니다. Tickler_lib 디렉토리에는 AndroTickler에서 사용하는 일부 Java 라이브러리 및 외부 도구(apktool, dex2jar 등)가 포함되어 있습니다.
AndroTickler는 다음 도구에 크게 의존하므로 사용하기 전에 해당 도구가 시스템에 설치되어 있어야 합니다:
일부 기능에는 다른 도구가 필요하지만, AndroTickler는 해당 도구 없이도 실행될 수 있습니다:
소스 코드로부터 도구 빌드
gradle build
AndroTickler.jar를 Tickler_lib 디렉토리 및 Tickler.conf 파일과 동일한 디렉토리로 이동(build/libs에 자동 생성됨)
dex2jar를 실행 가능하도록 설정(libs/notJars//dex2jar-2.1/d2j-dex2jar.sh 및 libs/notJars//dex2jar-2.1/d2j_invoke.sh)
테스트할 애플리케이션이 설치된 Android 기기 연결
참고: 소스 코드 빌드가 실패하는 경우 릴리스 탭에서 최신 컴파일된 릴리스를 다운로드할 수 있습니다.
현재 버전은 다음 기능을 수행합니다:
java -jar AndroTickler.jar -h
기기에 설치된 앱 나열:
java -jar AndroTickler.jar -pkgs
기기에 설치된 앱(패키지) 중 패키지 이름에 searchKey가 포함된 앱 검색:
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [other options]
-pkg 옵션이 포함된 명령(다음 옵션 중 하나와 함께 사용하든 아니든)은 이전에 수행되지 않은 경우 다음 작업을 수행합니다:
java -jar AndroTickler.jar -pkg <package> -info
다음 정보 반환:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
디컴파일된 앱의 Java 코드에서 다음 항목을 가져옵니다:
예상대로 출력이 일반적으로 방대하므로 명령 출력을 파일로 리디렉션하는 것이 좋습니다.
short 개발자 소유의 디컴파일된 코드만 스퀴즈합니다. 예를 들어, 앱의 패키지 이름이 com.notEnaf.myapp인 경우 squeeze short는 com/notEnaf 디렉토리의 코드만 스퀴즈합니다.
codeLocation 디렉토리의 코드만 스퀴즈합니다. 검색 범위를 제한하거나 소스 코드를 사용할 수 있는 경우 스퀴즈하는 데 유용합니다.
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
앱의 모든 구성 요소 나열
-exp 내보낸 구성 요소만 표시
-v 각 구성 요소에 대한 더 자세한 정보 제공:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
기본적으로 모든 -db 명령은 검사를 실행하기 전에 호스트의 앱 데이터 저장소 디렉토리를 업데이트합니다.
속성 없음 또는 e 앱의 데이터베이스가 암호화되었는지 테스트합니다. -db 플래그 뒤에 옵션이 제공되지 않은 경우 기본 동작입니다. l 앱의 모든 데이터베이스를 나열합니다. 암호화된 데이터베이스는 감지되지 않을 수 있습니다. d 암호화되지 않은 데이터베이스 중 하나의 sqlite 덤프를 가져옵니다. nu noUpdate: 앱의 데이터 디렉토리를 호스트에 업데이트하지 않고 위 옵션 중 하나를 실행합니다.
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
앱의 데이터 저장소 디렉토리를 복사한 후(DataDirOld로) 사용자에게 원하는 작업을 수행하라는 메시지를 표시하고 완료되면 Enter를 누르도록 요청합니다. 그런 다음 데이터 저장소 디렉토리를 다시 복사하고(DataDir로) 이들 간의 diff를 실행하여 추가, 삭제 또는 수정된 파일을 표시합니다.
d|detailed 일반 -diff 명령과 동일하게 수행하며, 텍스트 파일 및 암호화되지 않은 데이터베이스에서 정확히 변경된 내용도 표시합니다.
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
다음 위치에서 key를 검색합니다:
검색은 대소문자를 구분하지 않습니다.
디컴파일된 Java 코드 위치를 사용자 지정 위치로 대체합니다.
java -jar AndroTickler.jar -pkg <package> -sd <key>
앱의 데이터 저장소 디렉토리에서 주어진 키를 검색합니다
앱의 구성 요소를 가능한 모든 인텐트 조합으로 트리거합니다. 예를 들어, 액티비티에 2개의 가능한 액션과 3개의 데이터 URI 스키마가 있는 인텐트 필터가 있는 경우 AndroTickler는 이 액티비티를 이 인텐트의 모든 가능한 조합으로 트리거합니다. 또한 AndroTickler는 구성 요소에 해당하는 Java 클래스에서 언급된 인텐트 엑스트라를 캡처하여 더미 값을 할당하고 가능한 인텐트 조합에 추가합니다. boolean, string, int 및 float 유형의 엑스트라만 지원됩니다.
-exp 옵션을 사용하면 구성 요소가 루트 권한 없이 또는 특별한 권한 없이 트리거됩니다. 그렇지 않으면 구성 요소가 루트 권한으로 트리거됩니다. 이는 일반 권한 또는 높은 권한의 공격자에 대해 앱을 테스트하는 두 가지 시나리오에 도움이 됩니다.
구성 요소를 트리거하기 전에 AndroTickler는 실행될 모든 명령을 출력합니다. 그런 다음 각 명령에 대해 구성 요소를 트리거하고 명령을 출력한 후 사용자를 기다립니다. 이렇게 하면 사용자가 명령 실행 후 추가 검사를 수행할 충분한 시간을 얻을 수 있습니다. 사용자가 다음 명령으로 넘어가기 전에 PoC 문서화를 위해 기기의 스크린샷을 캡처할 수 있는 옵션이 제공됩니다.
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
target은 list 명령에서 설명한 대로 다음과 같을 수 있습니다:
값이 없으면 대상은 위의 모든 것
[-comp] <component_name> 하나의 구성 요소만 지정합니다. -comp 플래그 없이 *<component_name>*을 직접 사용할 수도 있습니다. -exp AndroTickler는 일반 권한을 사용하여 내보낸 대상만 트리거합니다. -all 기본 옵션입니다. AndroTickler는 루트 권한을 사용하여 내보낸 대상을 트리거합니다. -log 트리거 세션 중에 생성된 모든 logcat 메시지를 캡처합니다. 로그 파일은 logs 하위 디렉토리에 저장됩니다.
호스트 시스템에 Frida가 설치되어 있어야 합니다. 또한 Android 기기의 Frida 서버 위치가 Tickler.conf 파일의 Frida_server_path 항목에 추가되어야 합니다.
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
이 메소드의 인수 및 반환 값(기본 데이터 유형 및 String만)을 표시합니다
reuse vals 및 set 옵션의 경우 Frida는 해당 기능의 Frida 스크립트를 생성/업데이트합니다. 생성된 스크립트를 원하는 대로 수정한 다음 AndroTickler를 통해 실행하려면 -reuse 옵션을 사용하여 덮어쓰지 않도록 합니다.
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
인수 번호 NumberOfArgToModify를 newValue로 설정합니다(기본 데이터 유형 및 String만). NumberOfArgToModify는 0부터 시작합니다: 첫 번째 인수 --> NumberOfArgToModify = 0, ... 등 반환 값을 수정하려면 NumberOfArgToModify를 ret으로 설정합니다.
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
호스트의 scriptPath에 있는 Frida JS 스크립트를 실행합니다.
로드된 클래스 열거:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
앱의 디버그 가능 버전을 생성하며, 이 버전은 기기에 설치할 수 있고 외부 도구를 사용하여 디버그할 수 있습니다. AndroTickler에는 디버그 가능 apk에 서명할 키스토어가 함께 제공되지만, 호스트에 jarsigner 도구가 필요합니다.
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
디렉토리에서 apk 파일을 빌드하고 서명한 후 설치합니다.
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
기기가 촬영한 백그라운드 스냅샷을 bgSnapshots 하위 디렉토리에 복사합니다(-pkg 옵션 유무에 관계없이 작동).
데이터 저장소 디렉토리 복사:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
데이터 저장소 디렉토리를 DataDir로 복사합니다. dest 대상 디렉토리의 선택적 이름이며, transfers 하위 디렉토리에 위치합니다.
파일/디렉토리 복사:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Android 기기에서 파일/디렉토리를 복사합니다.
dest 옵션이 제공되지 않으면 디렉토리 이름은 트랜잭션의 타임스탬프가 됩니다.
java -jar AndroTickler.jar [-pkg <package>] -screen
-pkg 옵션이 필요하지 않은 옵션의 경우 데이터는 Tickler_Dir/NoPackage에 저장됩니다.
java -jar AndroTickler.jar -pkg <package> -t -act -exp
내보낸 액티비티를 트리거합니다.
java -jar AndroTickler.jar -pkg <package> -t -prov -log
모든 콘텐츠 프로바이더를 쿼리하고 도구 실행이 중지될 때까지 logcat 메시지를 저장합니다.
java -jar AndroTickler.jar -pkg <package> -t <component_name>
구성 요소를 트리거하며, 트리거 유형은 구성 요소 유형에 따라 다릅니다.
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
메소드 "myMethod"(2개의 인수 있음)에 후크하여 첫 번째 인수(args[0])의 값을 "newValue"로 변경합니다.
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
메소드 "myMethod"(2개의 인수 있음)에 후크하여 반환 값을 boolean false로 변경합니다.