
Mobile App Pentest 치트 시트는 특정 모바일 애플리케이션 침투 테스트 주제에 대한 고가치 정보의 간결한 모음집을 제공하기 위해 작성되었습니다.
## 모바일 애플리케이션 침투 테스트 치트 시트
모바일 앱 침투 테스트(Pentest) 치트 시트는 특정 모바일 애플리케이션 침투 테스트 주제와 체크리스트에 대한 고가치 정보를 간결하게 수집하기 위해 제작되었으며, 침투 테스트 수행을 위한 OWASP Mobile Risk Top 10에 매핑되어 있습니다.
- [Mobile Application Security Testing Distributions](#mobile-application-security-testing-distributions)
- [All-in-one Mobile Security Frameworks](#all-in-one-mobile-security-frameworks)
- [Android Application Penetration Testing](#android-application-penetration-testing)
- [Reverse Engineering and Static Analysis](#reverse-engineering-and-static-analysis)
- [Dynamic and Runtime Analysis](#dynamic-and-runtime-analysis)
- [Network Analysis and Server Side Testing](#network-analysis-and-server-side-testing)
- [Bypassing Root Detection and SSL Pinning](#bypassing-root-detection-and-ssl-pinning)
- [Security Libraries](#security-libraries)
- [iOS Application Penetration Testing](#ios-application-penetration-testing)
- [Access Filesystem on iDevice](#access-filesystem-on-idevice)
- [Reverse Engineering and Static Analysis](#reverse-engineering-and-static-analysis)
- [Dynamic and Runtime Analysis](#dynamic-and-runtime-analysis)
- [Network Analysis and Server Side Testing](#network-analysis-and-server-side-testing)
- [Bypassing Root Detection and SSL Pinning](#bypassing-root-detection-and-ssl-pinning)
- [Security Libraries](#security-libraries)
- [Mobile Penetration Testing Lab](#mobile-penetration-testing-lab)
- [Contribution](#contribution)
- [License](#license)
### 모바일 애플리케이션 보안 테스트 배포판
* [Appie](https://manifestsecurity.com/appie) - Android 침투 테스트를 위한 휴대용 소프트웨어 패키지이자 기존 가상 머신의 훌륭한 대안입니다.
* [Android Tamer](https://androidtamer.com/) - Android Tamer는 Android 보안 전문가를 위한 가상/라이브 플랫폼입니다.
* [Androl4b](https://github.com/sh4hin/Androl4b) - Android 애플리케이션 평가, 리버스 엔지니어링 및 악성코드 분석을 위한 가상 머신입니다.
* [Vezir Project](https://github.com/oguzhantopgul/Vezir-Project) - 모바일 애플리케이션 침투 테스트 및 악성코드 분석 환경입니다.
* [Mobexler](https://mobexler.com/) - Mobexler는 Android 및 iOS 애플리케이션의 침투 테스트를 돕기 위해 설계된 맞춤형 가상 머신입니다.
### 올인원 모바일 보안 프레임워크
* [Mobile Security Framework - MobSF](https://github.com/ajinabraham/Mobile-Security-Framework-MobSF) - Mobile Security Framework는 정적 및 동적 분석을 수행할 수 있는 지능형 올인원 오픈소스 모바일 애플리케이션(Android/iOS) 자동화 침투 테스트 프레임워크입니다.
* `python manage.py runserver 127.0.0.1:1337`
* [Needle](https://github.com/mwrlabs/needle) - Needle는 바이너리 분석, 정적 코드 분석, Cycript 및 Frida 후킹을 이용한 런타임 조작 등 iOS 앱의 보안 평가 프로세스를 간소화하는 오픈소스 모듈형 프레임워크입니다.
* [Objection](https://github.com/sensepost/objection) - Objection은 Frida 기반의 런타임 모바일 탐색 툴킷입니다. 탈옥(jailbreak)되거나 루팅된 모바일 장치 없이도 모바일 애플리케이션과 그 보안 상태를 평가하는 데 도움을 주기 위해 만들어졌습니다.
* [RMS-Runtime-Mobile-Security](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - FRIDA 기반의 Runtime Mobile Security(RMS)는 런타임에서 Android 및 iOS 앱을 조작할 수 있도록 도와주는 강력한 웹 인터페이스입니다.
### Android 애플리케이션 침투 테스트
#### 리버스 엔지니어링 및 정적 분석
* [APKTool](http://ibotpeaches.github.io/Apktool/) - 타사 폐쇄형 바이너리 Android 앱을 리버스 엔지니어링하기 위한 도구입니다. 리소스를 거의 원래 형태로 디코딩할 수 있으며 일부 수정 후 다시 빌드할 수 있습니다.
* Android apk 파일 디스어셈블
* `apktool d <apk file>`
* 디코딩된 리소스를 인증서 서명과 함께 바이너리 APK/JAR로 다시 빌드
* `apktool b <modified folder>`
* `keytool -genkey -v -keystore keys/test.keystore -alias Test -keyalg RSA -keysize 1024 -sigalg SHA1withRSA -validity 10000`
* `jarsigner -keystore keys/test.keystore dist/test.apk -sigalg SHA1withRSA -digestalg SHA1 Test`
* [Bytecode Viewer](https://github.com/Konloch/bytecode-viewer) - Bytecode Viewer는 고급 경량 Java 바이트코드 뷰어로, 완전히 Java로 작성되었으며 오픈소스입니다.
* [Jadx](https://github.com/skylot/jadx) - Dex to Java 디컴파일러: Android Dex 및 Apk 파일에서 Java 소스 코드를 생성하기 위한 명령줄 및 GUI 도구입니다.
* [APK Studio](https://github.com/vaibhavpandeyvpz/apkstudio) - Android 애플리케이션 패키지를 리버스 엔지니어링하기 위한 오픈소스 크로스 플랫폼 Qt 기반 IDE입니다.
* [Oat2dex](https://github.com/testwhat/SmaliEx) - .oat 파일을 .dex 파일로 변환하는 도구입니다.
* 부트 클래스 디최적화 (출력은 "odex" 및 "dex" 폴더에 저장됩니다)
* `java -jar oat2dex.jar boot <boot.oat file>`
* 애플리케이션 디최적화
* `java -jar oat2dex.jar <app.odex> <boot-class-folder output from above>`
* oat에서 odex 가져오기
* `java -jar oat2dex.jar odex <oat file>`
* oat/odex에서 odex smali(최적화된 opcode 포함) 가져오기
* `java -jar oat2dex.jar smali <oat/odex file>`
* [Spotbugs](https://github.com/spotbugs/spotbugs) - SpotBugs는 FindBugs의 후속 버전입니다. Java 코드의 버그를 찾기 위한 정적 분석 도구입니다.
* [Qark](https://github.com/linkedin/qark) - 이 도구는 소스 코드 또는 패키징된 APK에서 여러 보안 관련 Android 애플리케이션 취약점을 찾도록 설계되었습니다.
* [SUPER](https://github.com/SUPERAndroidAnalyzer/super) - SUPER는 Windows, MacOS X 및 Linux에서 사용할 수 있는 명령줄 애플리케이션으로, 취약점을 찾기 위해 .apk 파일을 분석합니다. APK의 압축을 풀고 일련의 규칙을 적용하여 취약점을 탐지합니다.
* [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) - AndroBugs Framework는 개발자나 해커가 Android 애플리케이션에서 잠재적인 보안 취약점을 찾는 데 도움이 되는 효율적인 Android 취약점 스캐너입니다. Windows에 설치할 필요가 없습니다.
* [Simplify](https://github.com/CalebFenton/simplify) - Android 패키지를 Classes.dex로 난독화 해제하는 도구로, Dex2jar와 JD-GUI를 사용하여 dex 파일의 내용을 추출할 수 있습니다.
* `simplify.jar -i "input smali files or folder" -o <output dex file>`
* [ClassNameDeobfuscator](https://github.com/HamiltonianCycle/ClassNameDeobfuscator) - apktool이 생성한 .smali 파일을 파싱하여 .source 어노테이션 라인을 추출하는 간단한 스크립트입니다.
* [Android backup extractor](https://github.com/nelenkov/android-backup-extractor) - adb backup(ICS+)으로 생성된 Android 백업을 추출하고 다시 패키징하는 유틸리티입니다. 대부분 AOSP의 BackupManagerService.java를 기반으로 합니다.
팁!! "adb backup" 명령은 다음 명령으로 애플리케이션 패키지를 추출하는 데에도 사용할 수 있습니다:
* `adb backup <package name>`
* `dd if=backup.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > backup.tar`
* [GDA(GJoy Dex Analysizer)](https://github.com/charles2gan/GDA-android-reversing-Tool) - GDA는 C++로 구현된 새로운 Dalvik 바이트코드 디컴파일러로, 더 빠른 분석 속도와 낮은 메모리 및 디스크 소비, 그리고 APK, DEX, ODEX, OAT 파일(3.79부터 JAR, CLASS 및 AAR 파일 지원)에 대한 더 강력한 디컴파일 기능이라는 장점이 있습니다.
#### 동적 및 런타임 분석
* [Cydia Substrate](http://www.cydiasubstrate.com/) - Android용 Cydia Substrate를 사용하면 개발자가 대상 프로세스 메모리에 주입되는 Substrate 확장 기능으로 기존 소프트웨어를 변경할 수 있습니다.
* [Xposed Framework](http://forum.xda-developers.com/xposed/xposed-installer-versions-changelog-t2714053) - Xposed 프레임워크를 사용하면 Android 애플리케이션 패키지(APK)를 수정하거나 다시 플래시하지 않고도 런타임에서 시스템 또는 애플리케이션의 측면과 동작을 수정할 수 있습니다.
* [PID Cat](https://github.com/JakeWharton/pidcat) - 특정 애플리케이션 패키지의 프로세스에 대한 로그 항목만 표시하는 Jeff Sharkey의 훌륭한 logcat 컬러 스크립트 업데이트 버전입니다.
* [Inspeckage](https://github.com/ac-pm/Inspeckage) - Inspeckage는 Android 애플리케이션의 동적 분석을 제공하기 위해 개발된 도구입니다. Android API 함수에 후크를 적용함으로써 Inspeckage는 Android 애플리케이션이 런타임에서 수행하는 작업을 이해하는 데 도움을 줍니다.
* [Frida](http://www.frida.re/) - 이 툴킷은 클라이언트-서버 모델로 작동하며 Android뿐만 아니라 iOS, Windows, Mac에서도 실행 중인 프로세스에 주입할 수 있습니다.
* [Diff-GUI](https://github.com/antojoseph/diff-gui) - 사용 가능한 모듈로 인스트루멘테이션을 시작하고, 네이티브에 후킹하며, Frida를 사용해 JavaScript를 주입할 수 있는 웹 프레임워크입니다.
* [Fridump](https://github.com/Nightbringer21/fridump) - Fridump는 Frida 프레임워크를 사용하여 지원되는 모든 플랫폼에서 접근 가능한 메모리 주소를 덤프합니다. Windows, Linux 또는 Mac OS X 시스템에서 iOS, Android 또는 Windows 애플리케이션의 메모리를 덤프하는 데 사용할 수 있습니다.
* [House](https://github.com/nccgroup/house) - Frida 기반의 웹 GUI를 갖춘 런타임 모바일 애플리케이션 분석 툴킷으로, 동적 함수 후킹과 인터셉트를 구현하여 모바일 애플리케이션 평가를 돕고 Frida 스크립트 작성을 최대한 간단하게 만드는 것을 목표로 합니다.
* [AndBug](https://github.com/swdunlop/AndBug) - AndBug는 리버스 엔지니어와 개발자를 대상으로 Android 플랫폼의 Dalvik 가상 머신을 겨냥한 디버거입니다.
* adb shell을 사용하여 애플리케이션 프로세스 식별
* `adb shell ps | grep -i "App keyword"`
* 로드된 클래스를 식별하기 위해 AndBug로 애플리케이션 접근
* `andbug shell -p <process number>`
* 특정 클래스 추적
* `ct <package name>`
* jdb로 디버깅
* `adb forward tcp:<port> jdwp:<port>`
* `jdb -attach localhost:<port>`
* [Cydia Substrate: Introspy-Android](https://github.com/iSECPartners/Introspy-Android) - Android 애플리케이션이 런타임에서 수행하는 작업을 이해하고 잠재적인 보안 문제 식별을 돕는 블랙박스 도구입니다.
* [Drozer](https://github.com/FSecureLABS/drozer) - Drozer를 사용하면 앱의 역할을 수행하고 Dalvik VM, 다른 앱의 IPC 엔드포인트 및 기본 OS와 상호 작용하여 앱과 장치에서 보안 취약점을 검색할 수 있습니다.
* 세션 시작
* `adb forward tcp:31415 tcp:31415`
* `drozer console connect`
* 패키지 정보 검색
* `run app.package.list -f <app name>`
* `run app.package.info -a <package name>`
* 공격 표면 식별
* `run app.package.attacksurface <package name>`
* Activity 악용
* `run app.activity.info -a <package name> -u`
* `run app.activity.start --component <package name> <component name>`
* Content Provider 악용
* `run app.provider.info -a <package name>`
* `run scanner.provider.finduris -a <package name>`
* `run app.provider.query <uri>`
* `run app.provider.update <uri> --selection <conditions> <selection arg> <column> <data>`
* `run scanner.provider.sqltables -a <package name>`
* `run scanner.provider.injection -a <package name>`
* `run scanner.provider.traversal -a <package name>`
* Broadcast Receiver 악용
* `run app.broadcast.info -a <package name>`
* `run app.broadcast.send --component <package name> <component name> --extra <type> <key> <value>`
* `run app.broadcast.sniff --action <action>`
* Service 악용
* `run app.service.info -a <package name>`
* `run app.service.start --action <action> --component <package name> <component name>`
* `run app.service.send <package name> <component name> --msg <what> <arg1> <arg2> --extra <type> <key> <value> --bundle-as-obj`
#### 네트워크 분석 및 서버 측 테스트
* [Tcpdump](http://www.androidtcpdump.com) - 명령줄 패킷 캡처 유틸리티입니다.
* [Wireshark](https://www.wireshark.org/download.html) - 오픈소스 패킷 분석기입니다.
* 실시간 라이브 패킷 캡처
* `adb shell "tcpdump -s 0 -w - | nc -l -p 4444"`
* `adb forward tcp:4444 tcp:4444`
* `nc localhost 4444 | sudo wireshark -k -S -i –`
* [Mallory](https://intrepidusgroup.com/insight/mallory/) - 모바일 장치 및 애플리케이션의 트래픽을 모니터링하고 조작하는 데 사용되는 중간자 공격(MiTM) 도구입니다.
* [Burp Suite](https://portswigger.net/burp/download.html) - Burp Suite는 애플리케이션의 보안 테스트를 수행하기 위한 통합 플랫폼입니다.
* Android N+의 경우 Android OS 수준(루트 장치/에뮬레이터)에 신뢰할 수 있는 CA를 설치하는 방법은 다음과 같습니다:
* `openssl x509 -inform PEM -subject_hash -in BurpCA.pem | head -1`
* `cat BurpCA.pem > 9a5ba580.0`
* `openssl x509 -inform PEM -text -in BurpCA.pem -out /dev/null >> 9a5ba580.0`
* `adb root`
* `abd remount`
* `adb push 9a5ba580.0 /system/etc/security/cacerts/`
* `adb shell “chmod 644 /system/etc/security/cacerts/9a5ba580.0”`
* `adb shell “reboot”`
* 설정 > 보안 > 신뢰할 수 있는 자격 증명 > 시스템에서 새로 추가된 CA가 나열되어 있는지 확인하세요.
* [Burp Suite Mobile Assistant](https://portswigger.net/burp/documentation/desktop/mobile-testing) - Burp Suite Mobile Assistant는 Burp Suite로 iOS 앱을 테스트하는 것을 용이하게 하는 도구입니다. iOS 장치의 시스템 전체 프록시 설정을 수정하여 HTTP(S) 트래픽을 실행 중인 Burp 인스턴스로 쉽게 리디렉션할 수 있으며, 선택한 앱에서 SSL 인증서 핀닝을 우회하여 Burp Suite가 HTTPS 연결을 끊고 모든 트래픽을 가로채고 검사하고 수정할 수 있게 합니다.
* [OWASP ZAP](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project) - OWASP Zed Attack Proxy Project는 오픈소스 웹 애플리케이션 보안 스캐너입니다. 애플리케이션 보안에 처음 입문하는 사람부터 전문 침투 테스터까지 모두 사용할 수 있도록 설계되었습니다.
* [Proxydroid](https://play.google.com/store/apps/details?id=org.proxydroid) - Android 시스템용 글로벌 프록시 앱입니다.
* [mitmproxy](https://github.com/mitmproxy/mitmproxy) - HTTP/1, HTTP/2 및 WebSockets용 콘솔 인터페이스를 갖춘 대화형 SSL/TLS 지원 인터셉팅 프록시입니다.
#### 루트 탐지 및 SSL 핀닝 우회
* [Magisk](https://github.com/topjohnwu/Magisk) - Magisk 제품군은 장치에 루트 액세스를 제공하고, 모듈 설치를 통해 읽기 전용 파티션을 수정할 수 있는 기능을 제공하며, 루트 탐지/시스템 무결성 검사로부터 Magisk를 숨깁니다.
* [Xposed Module: Just Trust Me](https://github.com/Fuzion24/JustTrustMe) - SSL 인증서 핀닝을 우회하는 Xposed 모듈입니다.
* [Xposed Module: SSLUnpinning](https://github.com/ac-pm/SSLUnpinning_Xposed) - SSL 인증서 검증(인증서 핀닝)을 우회하는 Android Xposed 모듈입니다.
* [Cydia Substrate Module: Android SSL Trust Killer](https://github.com/iSECPartners/Android-SSL-TrustKiller) - 장치에서 실행되는 대부분의 애플리케이션에 대한 SSL 인증서 핀닝을 우회하는 블랙박스 도구입니다.
* [Cydia Substrate Module: RootCoak Plus](https://github.com/devadvance/rootcloakplus) - 일반적으로 알려진 루트 징후에 대한 루트 검사를 패치합니다.
* [Android-ssl-bypass](https://github.com/iSECPartners/android-ssl-bypass) - 인증서 핀닝이 구현된 경우에도 SSL 우회 및 기타 디버깅 작업에 사용할 수 있는 Android 디버깅 도구입니다. 이 도구는 대화형 콘솔로 실행됩니다.
* [Apk-mitm](https://github.com/shroudedcode/apk-mitm) - HTTPS 검사를 위해 Android APK 파일을 자동으로 준비하는 CLI 애플리케이션입니다.
* [Frida CodeShare](https://codeshare.frida.re/) - Frida CodeShare 프로젝트는 전 세계의 개발자들이 한 가지 목표, 즉 새롭고 혁신적인 방식으로 Frida의 한계를 넓히기 위해 함께 협력하는 프로젝트입니다.
* 루트 탐지 우회
* `frida --codeshare dzonerzy/fridantiroot -f YOUR_BINARY`
* SSL 핀닝 우회
* `frida --codeshare pcipolloni/universal-android-ssl-pinning-bypass-with-frida -f YOUR_BINARY`
#### 보안 라이브러리
* [PublicKey Pinning](https://www.owasp.org/images/1/1f/Pubkey-pin-android.zip) - Android에서 핀닝은 커스텀 X509TrustManager를 통해 구현할 수 있습니다. X509TrustManager는 핀닝 구성을 수행하는 것 외에도 일반적인 X509 검사를 수행해야 합니다.
* [Android Pinning](https://github.com/moxie0/AndroidPinning) - Android에서 인증서 핀닝을 위한 독립형 라이브러리 프로젝트입니다.
* [Java AES Crypto](https://github.com/tozny/java-aes-crypto) - 문자열 암호화 및 복호화를 위한 간단한 Android 클래스로, 대부분의 유사 클래스가 겪는 전형적인 실수를 피하는 것을 목표로 합니다.
* [Proguard](http://proguard.sourceforge.net/) - ProGuard는 무료 Java 클래스 파일 축소기, 최적화기, 난독화기 및 사전 검증기입니다. 사용하지 않는 클래스, 필드, 메서드 및 속성을 감지하여 제거합니다.
* [SQL Cipher](https://www.zetetic.net/sqlcipher/sqlcipher-for-android/) - SQLCipher는 SQLite의 오픈소스 확장 기능으로, 데이터베이스 파일의 투명한 256비트 AES 암호화를 제공합니다.
* [Secure Preferences](https://github.com/scottyab/secure-preferences) - Shared Preferences의 키와 값을 암호화하는 Android Shared Preference 래퍼입니다.
* [Trusted Intents](https://github.com/guardianproject/TrustedIntents) - Android 앱 간의 유연한 신뢰 상호 작용을 위한 라이브러리입니다.
* [RootBeer](https://github.com/scottyab/rootbeer) - 유용한 루트 검사 라이브러리 및 샘플 앱입니다.
* [End-to-end encryption](https://github.com/google/capillary) - Capillary는 Java 기반 애플리케이션 서버에서 Android 클라이언트로 종단 간 암호화된 푸시 메시지를 보내는 것을 간소화하는 라이브러리입니다.
### iOS 애플리케이션 침투 테스트
#### iDevice 파일시스템 접근
* [FileZilla](https://filezilla-project.org/download.php?show_all=1) - FTP, SFTP 및 FTPS(SSL/TLS를 통한 FTP)를 지원합니다.
* [Cyberduck](https://cyberduck.io) - Mac 및 Windows용 Libre FTP, SFTP, WebDAV, S3, Azure 및 OpenStack Swift 브라우저입니다.
* [itunnel](https://code.google.com/p/iphonetunnel-usbmuxconnectbyport/downloads/list) - USB를 통해 SSH를 포워딩하는 데 사용합니다.
* [iProxy](https://github.com/tcurdt/iProxy) - 노트북을 iPhone에 연결하여 웹을 탐색할 수 있게 해줍니다.
* [iFunbox](http://www.i-funbox.com) - iPhone, iPad 및 iPod Touch용 파일 및 앱 관리 도구입니다.#### 리버스 엔지니어링 및 정적 분석
* [otool](http://www.unix.com/man-page/osx/1/otool/) - otool 명령은 객체 파일 또는 라이브러리의 지정된 부분을 표시합니다.
* [Clutch](http://cydia.radare.org/) - 애플리케이션을 복호화하고 지정된 bundleID를 바이너리 또는 .ipa 파일로 덤프합니다.
* [Dumpdecrypted](https://github.com/stefanesser/dumpdecrypted) - 암호화된 iPhone 애플리케이션에서 복호화된 mach-o 파일을 메모리에서 디스크로 덤프합니다. 이 도구는 보안 연구자들이 암호화 내부를 들여다볼 수 있게 하는 데 필요합니다.
* `iPod:~ root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan`
* [class-dump](http://stevenygard.com/projects/class-dump/) - Mach-O 파일에 저장된 Objective-C 런타임 정보를 검사하기 위한 명령줄 유틸리티입니다.
* [dsdump](https://github.com/DerekSelander/dsdump) - 개선된 nm + objc/swift class-dump입니다.
* [Weak Classdump](https://github.com/limneos/weak_classdump) - 전달된 클래스에 대한 헤더 파일을 생성하는 Cycript 스크립트입니다. 바이너리가 암호화되어 있는 경우 등 classdump나 dumpdecrypted를 사용할 수 없을 때 가장 유용합니다.
* `iPod:~ root# cycript -p Skype weak_classdump.cy; cycript -p Skype`
* `#cy weak_classdump_bundle([NSBundle mainBundle],"/tmp/Skype")`
* [Fridpa](https://github.com/tanprathan/Fridpa) - iOS 애플리케이션(IPA 파일)을 패치하고 탈옥하지 않은 기기에서 작동하도록 하는 자동화된 래퍼 스크립트입니다.
* [Frida-iOS-Dump](https://github.com/AloneMonkey/frida-ios-dump) - 탈옥된 기기에서 복호화된 IPA를 가져옵니다.
* [bagbak](https://github.com/ChiChou/bagbak) - 또 다른 frida 기반 iOS dumpdecrypted로, 앱 확장 프로그램 복호화를 지원하며 SSH가 필요 없습니다.
* [bfinject](https://github.com/BishopFox/bfinject) - bfinject는 실행 중인 App Store 앱에 임의의 dylib를 로드합니다. App Store 앱 복호화를 기본 지원하며 iSpy 및 Cycript가 함께 번들로 제공됩니다.
* 간단한 테스트
* `bash bfinject -P Reddit -L test`
* App Store 앱 복호화
* `bash bfinject -P Reddit -L decrypt`
* Cycript
* `bash bfinject -P Reddit -L cycript `
* [HopperApp](http://hopperapp.com/) - Hopper는 OS X 및 Linux용 리버스 엔지니어링 도구로, 32/64비트 Intel Mac, Linux, Windows 및 iOS 실행 파일을 디스어셈블, 디컴파일, 디버그할 수 있습니다.
* [hopperscripts](https://github.com/Januzellij/hopperscripts) - Hopperscripts는 HopperApp에서 Swift 함수 이름을 디맹글링하는 데 사용할 수 있습니다.
* [Radare2](http://www.radare.org/) - Radare2는 유닉스 계열의 리버스 엔지니어링 프레임워크이자 명령줄 도구입니다.
* [XReSign](https://github.com/xndrs/XReSign) - XReSign을 사용하면 해당 개인 키를 보유한 인증서로 암호화되지 않은 ipa 파일을 서명하거나 다시 서명할 수 있습니다. 개발자, ad-hoc 및 엔터프라이즈 배포에 대해 확인되었습니다.
#### 동적 및 런타임 분석
* [cycript](http://www.cycript.org) - Cycript는 구문 강조 및 탭 완성 기능을 갖춘 대화형 콘솔을 통해 Objective-C++와 JavaScript 구문의 하이브리드를 사용하여 iOS 또는 Mac OS X에서 실행 중인 애플리케이션을 탐색하고 수정할 수 있게 해줍니다.
* 현재 표시 중인 뷰 컨트롤러 표시
* `cy# UIApp.keyWindow.rootViewController.visibleViewController`
* 내비게이션 스택의 최상위 뷰 컨트롤러 표시
* `cy# UIApp.keyWindow.rootViewController.topViewController`
* 특정 클래스의 기존 객체 배열 가져오기
* `cy# choose(UIViewController)`
* UI 덤프, UIViews에 대한 많은 설명을 잘라냅니다.
* `cy# [[UIApp keyWindow] _autolayoutTrace].toString()`
* UIViews 및 nextResponders를 건너뛰고 ViewControllers를 직접 가져옵니다.
* `cy# [[[UIApp keyWindow] rootViewController] _printHierarchy].toString()`
* 런타임에 메서드 나열
* `cy# classname.messages` 또는
``
cy# function printMethods(className, isa) {
var count = new new Type("I");
var classObj = (isa != undefined) ? objc_getClass(className)->isa : objc_getClass(className);
var methods = class_copyMethodList(classObj, count);
var methodsArray = [];
for(var i = 0; i < *count; i++) {
var method = methods[i];
methodsArray.push({selector:method_getName(method), implementation:method_getImplementation(method)});
}
free(methods);
return methodsArray;
}
``
*
* `cy# printMethods("<classname>")`
* 모든 인스턴스 변수 출력
* `cy# a=#0x15d0db80`
* `cy# *a` 또는
* ```cy# function tryPrintIvars(a){ var x={}; for(i in *a){ try{ x[i] = (*a)[i]; } catch(e){} } return x; }```
* `cy# a=#0x15d0db80`
* `cy# tryPrintIvars(a)`
* 속성을 통한 조작
* `cy# [a pinCode]`
* `cy# [a setPinCode: @"1234"]` 또는 `cy# a.setPinCode= @"1234"`
* 인스턴스 메서드에 대한 메서드 스위즐링
* `cy# [a isValidPin]`
* `cy# <classname>.prototype.isValidPin = function(){return 1;}`
* 클래스 메서드에 대한 메서드 스위즐링
* `cy# [Pin isValidPin]`
* `cy# Pin.contructor.prototype.['isValidPin'] = function(){return 1;}`
* [iNalyzer](https://appsec-labs.com/cydia/) - AppSec Labs iNalyzer는 iOS 애플리케이션을 조작하고 매개변수와 메서드를 변조하기 위한 프레임워크입니다.
* [Grapefruit](https://github.com/ChiChou/grapefruit) - iOS용 런타임 애플리케이션 인스트루먼트로, 이전 명칭은 Passionfruit입니다.
* [Introspy-iOS](https://github.com/iSECPartners/Introspy-iOS) - iOS 애플리케이션이 런타임에 수행하는 작업을 이해하고 잠재적인 보안 문제를 식별하는 데 도움을 주는 블랙박스 도구입니다.
* [Apple configurator 2](https://itunes.apple.com/app/apple-configurator-2/id1037126344) - iDevice에서 라이브 시스템 로그를 보는 데 사용할 수 있는 유틸리티입니다.
* [keychaindumper](http://cydia.radare.org/) - iOS 기기가 탈옥된 후 공격자가 사용할 수 있는 키체인 항목을 확인하는 도구입니다.
* [BinaryCookieReader](http://securitylearn.net/wp-content/uploads/tools/iOS/BinaryCookieReader.py) - 바이너리 Cookies.binarycookies 파일에서 모든 쿠키를 덤프하는 도구입니다.
#### 네트워크 분석 및 서버 측 테스트
* [Mallory](https://intrepidusgroup.com/insight/mallory/) - 모바일 기기 및 애플리케이션의 트래픽을 모니터링하고 조작하는 데 사용되는 중간자 공격(MiTM) 도구입니다.
* [Burp Suite](https://portswigger.net/burp/download.html) - Burp Suite는 애플리케이션 보안 테스트를 수행하기 위한 통합 플랫폼입니다.
* [OWASP ZAP](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project) - OWASP Zed Attack Proxy Project는 오픈소스 웹 애플리케이션 보안 스캐너입니다. 애플리케이션 보안에 처음 입문하는 사람부터 전문 침투 테스터까지 모두 사용할 수 있도록 설계되었습니다.
* [Charles Proxy](http://www.charlesproxy.com) - HTTP 프록시 / HTTP 모니터 / 리버스 프록시로, 개발자가 자신의 머신과 인터넷 사이의 모든 HTTP 및 SSL/HTTPS 트래픽을 볼 수 있게 해줍니다.
#### 루트 탐지 및 SSL 고정 우회
* [SSL Kill Switch 2](https://github.com/nabla-c0d3/ssl-kill-switch2) - iOS 및 OS X 앱 내에서 SSL 인증서 검증(인증서 고정 포함)을 비활성화하는 블랙박스 도구입니다.
* [iOS TrustMe](https://github.com/intrepidusgroup/trustme) - iOS 기기에서 인증서 신뢰 검사를 비활성화합니다.
* [tsProtector](http://cydia.saurik.com/package/kr.typostudio.tsprotector8/) - 탈옥 탐지를 우회하는 또 다른 도구입니다.
* [JailProtect](http://julioverne.github.io/) - 탈옥 탐지 우회 외에도 iOS 펌웨어 버전을 쉽게 스푸핑할 수 있게 해줍니다.
* [Shadow](https://ios.jjolano.me) - Shadow는 많은 App Store 앱이 사용하는 기본 탐지 방법을 무력화하여 탈옥 탐지를 우회하는 트윅입니다.
* [Frida CodeShare](https://codeshare.frida.re/) - Frida CodeShare 프로젝트는 전 세계 개발자들이 한 가지 목표를 위해 함께 작업하는 커뮤니티입니다. 새롭고 혁신적인 방식으로 Frida의 한계를 확장하는 것입니다.
* SSL 고정 우회
* `frida --codeshare lichao890427/ios-ssl-bypass -f YOUR_BINARY`
* `frida --codeshare dki/ios10-ssl-bypass -f YOUR_BINARY`
#### 보안 라이브러리
* [PublicKey Pinning](https://www.owasp.org/images/9/9a/Pubkey-pin-ios.zip) - iOS 고정은 NSURLConnectionDelegate를 통해 수행됩니다. 델리게이트는 connection:canAuthenticateAgainstProtectionSpace: 및 connection:didReceiveAuthenticationChallenge:를 구현해야 합니다. connection:didReceiveAuthenticationChallenge: 내에서 델리게이트는 일반적인 X509 검사를 수행하기 위해 SecTrustEvaluate를 호출해야 합니다.
* [Swiftshield](https://github.com/rockbruno/swiftshield) - SwiftShield는 클래스 덤프 및 Cycript와 같이 iOS 앱을 리버스 엔지니어링하는 도구로부터 앱을 보호하기 위해 iOS 프로젝트의 객체(Pods 및 Storyboards 포함)에 대해 되돌릴 수 없는 암호화된 이름을 생성하는 도구입니다.
* [IOSSecuritySuite](https://github.com/securing/IOSSecuritySuite) - iOS Security Suite는 순수 Swift로 작성된 고급이고 사용하기 쉬운 플랫폼 보안 및 무결성 보호(안티 태머링) 라이브러리입니다! iOS용 개발을 하고 있고 OWASP MASVS 표준 8장에 따라 앱을 보호하려는 경우 이 라이브러리가 많은 시간을 절약해 줄 수 있습니다.
* [OWASP iMAS](https://project-imas.github.com/) - iMAS는 MITRE Corporation의 협업 연구 프로젝트로, 오픈소스 iOS 보안 컨트롤에 중점을 둡니다.
### 모바일 침투 테스트 랩
* [WaTF Bank](https://github.com/WaTF-Team/WaTF-Bank) - What-a-Terrible-Failure Mobile Banking Application (WaTF-Bank)은 Java, Swift 4, Objective-C 및 백엔드 서버용 Python(Flask 프레임워크)으로 작성되었으며, OWASP Mobile Top 10 위험을 기반으로 30개 이상의 취약점을 포함하는 "실제 세계"의 웹 서비스 지원 모바일 뱅킹 애플리케이션을 시뮬레이션하도록 설계되었습니다.
* [InsecureBankv2](https://github.com/dineshshetty/Android-InsecureBankv2) - 이 취약한 Android 애플리케이션은 "InsecureBankv2"라는 이름으로, 보안 애호가와 개발자가 이 취약한 애플리케이션을 테스트하며 Android의 불안전성을 배울 수 있도록 만들어졌습니다. 백엔드 서버 구성 요소는 Python으로 작성되었습니다.
* [DVIA-v2](https://github.com/prateek147/DVIA-v2) - Damn Vulnerable iOS App(DVIA)은 매우 취약한 iOS 애플리케이션입니다. 주요 목표는 모바일 보안 애호가/전문가 또는 학생들에게 합법적인 환경에서 iOS 침투 테스트 기술을 시험할 수 있는 플랫폼을 제공하는 것입니다.
* [DIVA Android](https://github.com/payatu/diva-android) - DIVA(Damn insecure and vulnerable App)는 의도적으로 불안전하게 설계된 앱입니다. 이 앱의 목표는 개발자/QA/보안 전문가에게 부실하거나 안전하지 않은 코딩 관행으로 인해 앱에서 일반적으로 발생하는 결함을 가르치는 것입니다.
* [DVHMA](https://github.com/logicalhacking/DVHMA) - Damn Vulnerable Hybrid Mobile App(DVHMA)은 의도적으로 취약점을 포함하는 하이브리드 모바일 앱(Android용)입니다. 그 목적은 보안 전문가가 자신의 도구와 기술을 합법적으로 테스트할 수 있게 하고, 개발자가 하이브리드 모바일 앱을 안전하게 개발할 때 흔히 범하는 실수를 더 잘 이해하도록 돕는 것입니다.
* [MSTG Hacking Playground](https://github.com/OWASP/MSTG-Hacking-Playground) - 의도적으로 불안전하게 구축된 iOS 및 Android 모바일 앱 모음입니다. 이 앱들은 OWASP Mobile Security Testing Guide에서 설명하는 다양한 취약점을 시연하는 예제로 사용됩니다.
* [UnCrackable Mobile Apps](https://github.com/OWASP/owasp-mstg/tree/master/Crackmes) - Android 및 iOS용 UnCrackable Apps는 모바일 리버스 엔지니어링 챌린지 모음입니다. 이러한 챌린지는 Mobile Security Testing Guide 전체에서 예제로 사용됩니다.
* [OWASP iGoat](https://github.com/OWASP/igoat) - Goat는 iOS 개발자(iPhone, iPad 등)와 모바일 앱 침투 테스터를 위한 학습 도구입니다. WebGoat 프로젝트에서 영감을 얻었으며 유사한 개념적 흐름을 가지고 있습니다.
### 기여
여러분의 기여와 제안을 환영합니다.
### 라이선스
[](http://creativecommons.org/licenses/by/4.0/)
이 저작물은 [크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스](http://creativecommons.org/licenses/by/4.0/)에 따라 이용 허락을 받았습니다.