Back in the days, it was really easy to sniff the network traffic made by the Apps in Android. You could do it in a few minutes by adding mitmproxy’s certificate and setting the HTTP proxy on your wifi network settings. That was it. But things have changed (for good) and that’s no longer the case. However, I still want to sniff the network traffic made by the Apps in Android.
How? Well, I can no longer use my smartphone to do it, but I can set up the Android emulator, install the application via the Google Play Store and sniff the network traffic it generates on my PC \o/
Let’s get started. First, install the Android SDK and create an Android virtual
device using Android API 30 and x86 architecture (any API and any architecture
is fine). However, we need an image without Google Play Store preinstalled as
we need a writable
/system folder to inject mitmproxy’s certificate later.
That’s okay, because we’ll install the Play Store manually.
echo no | ./Android/Sdk/tools/bin/avdmanager create avd -n Pixel_5_API_30 --abi google_apis/x86 --package 'system-images;android-30;google_apis;x86'
Start the virtual device with the additional
-writable-system flag which
permits us to make
/system writable. I also have to unset
because I’m on wayland and the emulator doesn’t support it.
QT_QPA_PLATFORM= ./Android/Sdk/emulator/emulator @Pixel_5_API_30 -writable-system
Now let’s download the OpenGAPPs that match our API and architecture.
pico variant because we don’t need anything else, just the Play Store.
curl -OL 'https://master.dl.sourceforge.net/project/opengapps/x86/20220503/open_gapps-x86-11.0-pico-20220503.zip'
We’ve to decompress it in order to get and push
Phonesky.apk to the virtual
device. We also need to whitelist its permissions (thank you to the MinMicroG
unzip open_gapps-x86-11.0-pico-20220503.zip lzip -d Core/vending-x86.tar.lz tar xf vending-x86.tar adb root adb shell avbctl disable-verification # adb disable-verity makes the emulator crash adb reboot adb wait-for-device adb root adb remount adb push vending-x86/nodpi/priv-app/Phonesky/Phonesky.apk /system/priv-app/ curl -O https://raw.githubusercontent.com/FriendlyNeighborhoodShane/MinMicroG/master/res/system/etc/permissions/com.android.vending.xml adb push com.android.vending.xml /system/etc/permissions/
Now, create a dedicated user to run mitmproxy as it’s written in the documentation:
sudo useradd --create-home mitmproxyuser sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitmproxyuser --dport 80 -j REDIRECT --to-port 8080 sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitmproxyuser --dport 443 -j REDIRECT --to-port 8080 sudo -u mitmproxyuser -H bash -c 'mitmproxy --mode transparent --showhost --set block_global=false'
Mandatory copy’n’paste from the mitmproxy documentation page: > Note, as soon as you add the iptables rules, you won’t be able to perform successful network calls until you start mitmproxy.
At this point we are almost there, we just need another step to add the mitmproxy certificate as it’s written in the documentation page:
hashed_name=`sudo openssl x509 -inform PEM -subject_hash_old -in ~mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.cer | head -1` sudo adb push ~mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.cer /system/etc/security/cacerts/$hashed_name.0 adb shell chmod 664 /system/etc/security/cacerts/$hashed_name.0 adb reboot
You should now have the Play Store, login with your Google account and install the App you need.
That’s it! Happy sniffing!
Tags: android, privacy, howto