mobile-app-security-testing
10
总安装量
2
周安装量
#30054
全站排名
安装命令
npx skills add https://github.com/ed1s0nz/cyberstrikeai --skill mobile-app-security-testing
Agent 安装分布
amp
1
opencode
1
kimi-cli
1
codex
1
github-copilot
1
codebuddy
1
Skill 文档
ç§»å¨åºç¨å®å ¨æµè¯
æ¦è¿°
ç§»å¨åºç¨å®å ¨æµè¯æ¯ç¡®ä¿ç§»å¨åºç¨å®å ¨æ§çéè¦ç¯èãæ¬æè½æä¾ç§»å¨åºç¨å®å ¨æµè¯çæ¹æ³ãå·¥å ·åæä½³å®è·µï¼æ¶µçAndroidåiOSå¹³å°ã
æµè¯èå´
1. åºç¨å®å ¨
æ£æ¥é¡¹ç®ï¼
- ä»£ç æ··æ·
- åç¼è¯é²æ¤
- è°è¯é²æ¤
- è¯ä¹¦ç»å®
2. æ°æ®å®å ¨
æ£æ¥é¡¹ç®ï¼
- æ°æ®å å¯
- å¯é¥ç®¡ç
- æææ°æ®åå¨
- æ°æ®ä¼ è¾
3. è®¤è¯ææ
æ£æ¥é¡¹ç®ï¼
- è®¤è¯æºå¶
- Token管ç
- çç©è¯å«
- ä¼è¯ç®¡ç
4. éä¿¡å®å ¨
æ£æ¥é¡¹ç®ï¼
- TLS/SSLé ç½®
- è¯ä¹¦éªè¯
- APIå®å ¨
- ä¸é´äººæ»å»é²æ¤
Androidå®å ¨æµè¯
éæåæ
使ç¨APKToolï¼
# åç¼è¯APK
apktool d app.apk
# æ¥çAndroidManifest.xml
cat app/AndroidManifest.xml
# æ¥çSmali代ç
find app/smali -name "*.smali"
使ç¨Jadxï¼
# åç¼è¯APK
jadx -d output app.apk
# æ¥çJavaæºç
find output -name "*.java"
使ç¨MobSFï¼
# å¯å¨MobSF
docker run -it -p 8000:8000 opensecurity/mobsf
# ä¸ä¼ APKè¿è¡åæ
# è®¿é® http://localhost:8000
卿åæ
使ç¨Fridaï¼
// Hook彿°
Java.perform(function() {
var MainActivity = Java.use("com.example.MainActivity");
MainActivity.onCreate.implementation = function(savedInstanceState) {
console.log("[*] onCreate called");
this.onCreate(savedInstanceState);
};
});
使ç¨Objectionï¼
# å¯å¨Objection
objection -g com.example.app explore
# Hook彿°
android hooking watch class_method com.example.MainActivity.onCreate
使ç¨Burp Suiteï¼
# é
置代ç
# Android设置代çæåBurp Suite
# å®è£
Burpè¯ä¹¦
å¸¸è§æ¼æ´
硬ç¼ç å¯é¥ï¼
// ä¸å®å
¨ç代ç
String apiKey = "1234567890abcdef";
String password = "admin123";
ä¸å®å ¨çåå¨ï¼
// SharedPreferencesåå¨æææ°æ®
SharedPreferences prefs = getSharedPreferences("data", MODE_WORLD_READABLE);
prefs.edit().putString("password", password).apply();
è¯ä¹¦éªè¯ç»è¿ï¼
// ä¸éªè¯è¯ä¹¦
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
}
};
iOSå®å ¨æµè¯
éæåæ
使ç¨class-dumpï¼
# 导åºå¤´æä»¶
class-dump app.ipa
# æ¥ç头æä»¶
find app -name "*.h"
使ç¨Hopperï¼
# 使ç¨Hopperåæ±ç¼
# æå¼appäºè¿å¶æä»¶
# åææ±ç¼ä»£ç
使ç¨otoolï¼
# æ¥çMach-Oä¿¡æ¯
otool -L app
# æ¥çå符串
strings app | grep -i "password\|key\|secret"
卿åæ
使ç¨Fridaï¼
// Hook Objective-Cæ¹æ³
var className = ObjC.classes.ViewController;
var method = className['- login:password:'];
Interceptor.attach(method.implementation, {
onEnter: function(args) {
console.log("[*] Login called");
console.log("Username: " + ObjC.Object(args[2]).toString());
console.log("Password: " + ObjC.Object(args[3]).toString());
}
});
使ç¨Cycriptï¼
# éå å°è¿ç¨
cycript -p app
# æ§è¡å½ä»¤
[UIApplication sharedApplication]
å¸¸è§æ¼æ´
硬ç¼ç å¯é¥ï¼
// ä¸å®å
¨ç代ç
NSString *apiKey = @"1234567890abcdef";
NSString *password = @"admin123";
ä¸å®å ¨çåå¨ï¼
// Keychainåå¨ä¸å½
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:password forKey:@"password"];
è¯ä¹¦éªè¯ç»è¿ï¼
// ä¸éªè¯è¯ä¹¦
- (void)connection:(NSURLConnection *)connection
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]
forAuthenticationChallenge:challenge];
}
å·¥å ·ä½¿ç¨
MobSF
# å¯å¨MobSF
docker run -it -p 8000:8000 opensecurity/mobsf
# ä¸ä¼ åºç¨è¿è¡åæ
# æ¯æAndroidåiOS
Frida
# å®è£
Frida
pip install frida-tools
# è¿è¡èæ¬
frida -U -f com.example.app -l script.js
Objection
# å®è£
Objection
pip install objection
# å¯å¨Objection
objection -g com.example.app explore
Burp Suite
é 置代çï¼
- é ç½®Burp Suiteçå¬å¨
- ç§»å¨è®¾å¤è®¾ç½®ä»£ç
- å®è£ Burpè¯ä¹¦
- æ¦æªååææµé
æµè¯æ¸ å
åºç¨å®å ¨
- ä»£ç æ··æ·æ£æ¥
- åç¼è¯é²æ¤
- è°è¯é²æ¤
- è¯ä¹¦ç»å®
æ°æ®å®å ¨
- æ°æ®å 坿£æ¥
- å¯é¥ç®¡ç
- æææ°æ®åå¨
- æ°æ®ä¼ è¾å®å ¨
è®¤è¯ææ
- è®¤è¯æºå¶æµè¯
- Token管ç
- ä¼è¯ç®¡ç
- çç©è¯å«
éä¿¡å®å ¨
- TLS/SSLé ç½®
- è¯ä¹¦éªè¯
- APIå®å ¨æµè¯
- ä¸é´äººæ»å»é²æ¤
常è§å®å ¨é®é¢
1. 硬ç¼ç å¯é¥
é®é¢ï¼
- APIå¯é¥ç¡¬ç¼ç
- å¯ç 硬ç¼ç
- å å¯å¯é¥ç¡¬ç¼ç
ä¿®å¤ï¼
- 使ç¨å¯é¥ç®¡çæå¡
- 使ç¨ç¯å¢åé
- 使ç¨å®å ¨åå¨
2. ä¸å®å ¨çåå¨
é®é¢ï¼
- ææåå¨æææ°æ®
- 使ç¨ä¸å®å ¨çå卿¹å¼
- æ°æ®æªå å¯
ä¿®å¤ï¼
- 使ç¨å å¯åå¨
- 使ç¨Keychain/Keystore
- 宿½æ°æ®å å¯
3. è¯ä¹¦éªè¯ç»è¿
é®é¢ï¼
- ä¸éªè¯SSLè¯ä¹¦
- æ¥åèªç¾åè¯ä¹¦
- è¯ä¹¦åºå®æªå®æ½
ä¿®å¤ï¼
- 宿½è¯ä¹¦åºå®
- éªè¯è¯ä¹¦é¾
- 使ç¨ç³»ç»è¯ä¹¦åå¨
4. è°è¯ä¿¡æ¯æ³é²
é®é¢ï¼
- æ¥å¿å 嫿æä¿¡æ¯
- éè¯¯ä¿¡æ¯æ³é²
- è°è¯æ¨¡å¼æªç¦ç¨
ä¿®å¤ï¼
- ç§»é¤è°è¯ä»£ç
- éå¶æ¥å¿è¾åº
- ç产ç¯å¢ç¦ç¨è°è¯
æä½³å®è·µ
1. 代ç å®å ¨
- 宿½ä»£ç æ··æ·
- ç¦ç¨è°è¯åè½
- 宿½åè°è¯ä¿æ¤
- 使ç¨è¯ä¹¦ç»å®
2. æ°æ®å®å ¨
- å å¯æææ°æ®
- 使ç¨å®å ¨åå¨
- 宿½å¯é¥ç®¡ç
- éå¶æ°æ®è®¿é®
3. éä¿¡å®å ¨
- 使ç¨TLS/SSL
- 宿½è¯ä¹¦åºå®
- éªè¯æå¡å¨è¯ä¹¦
- 使ç¨å®å ¨API
4. 认è¯å®å ¨
- 宿½å¼ºè®¤è¯
- å®å ¨Token管ç
- 宿½ä¼è¯ç®¡ç
- 使ç¨çç©è¯å«
注æäºé¡¹
- ä» å¨ææç¯å¢ä¸è¿è¡æµè¯
- éµå®æ³å¾æ³è§
- 注æä¸åå¹³å°çå·®å¼
- ä¿æ¤ç¨æ·éç§