This guide provides a complete, practical method to bypass SSL pinning in Flutter applications using:
- System CA certificate installation
- Forced proxy routing (iptables)
- Burp Suite interception
- Optional Frida-based dynamic analysis
Flutter apps:
- Use BoringSSL (native layer)
- Often ignore Android proxy settings
- May implement certificate pinning internally
π Solution:
- Trust Burp CA at system level
- Force traffic via proxy using iptables
- (Optional) Use Frida for deeper analysis
- Rooted Android emulator (Recommended: Genymotion)
- Burp Suite installed on host machine
- ADB installed and working
- OpenSSL installed
- Target APK
- Launch Genymotion emulator
adb devicesIn Burp:
- Proxy β Settings β Import / Export CA certificate
- Export as DER format (.cer/.der)
openssl x509 -inform DER -in cacert.der -out cacert.crtopenssl x509 -inform PEM -subject_hash_old -in cacert.crtExample output:
9a5ba575
rename cacert.crt 9a5ba575.0adb push 9a5ba575.0 /sdcard/adb shell
su
mount -o rw,remount /
mv /sdcard/9a5ba575.0 /system/etc/security/cacerts/chmod 644 /system/etc/security/cacerts/9a5ba575.0
chown root:root /system/etc/security/cacerts/9a5ba575.0rebootExample:
192.168.1.5
adb shell settings put global http_proxy <YOUR_IP>:8080Example:
adb shell settings put global http_proxy 192.168.1.5:8080Flutter apps ignore proxy β we force redirect.
adb shell
su
iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination <YOUR_IP>:8080
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination <YOUR_IP>:8080iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination <YOUR_IP>:8080In Burp Suite:
-
Proxy β Options:
- β Enable Invisible proxying
- β Enable Support non-proxy clients
- Open target app
- Perform actions (login/search/API call)
- Check Burp
β You should now see:
- HTTPS requests
- API endpoints
- Headers and payloads
adb shell
su
iptables -t nat -F
adb shell settings put global http_proxy :0frida -U -f com.target.app -l script.js --no-pause- SSL bypass (if needed)
- API tracing
- Function hooking
- Ensure iptables rules applied
- Check Burp listener running on port 8080
- Certificate not installed in system store
- Wrong permissions (must be 644)
- Incorrect certificate format
- Wrong system mount
π Expected β Flutter ignores proxy β iptables solves this
- Flutter uses native TLS (BoringSSL)
- Proxy bypass is intentional behavior
- iptables interception is most reliable method
| Step | Purpose |
|---|---|
| Install CA | Trust Burp |
| Set proxy | Base routing |
| iptables | Force interception |
| Burp config | Handle traffic |
- Mobile application security testing
- API reverse engineering
- Dynamic analysis (MobSF / manual)
- Penetration testing
flutter β’ ssl-pinning β’ frida β’ android-security β’ burp-suite β’ pentesting