Setup HTTP Toolkit, Frida, and LDPlayer to Monitor SSL Certificate Pinned Android Apps
Aaron Lin
February 19, 2023
4 min read
Prerequisites
#- Python
- 7zip
For more context, this tutorial is following similar steps to this post originally from HttpToolkit blogspot, however under Windows
The endgoal of this tutorial is to be able to look into HTTPS requests for an Android app that has been SSL certificate pinned.
LDPlayer9 Installation
#First we're going to need an Android emulator
Download and install LDPlayer9 OR use the direct download link
Open the emulator, and it should look like this when started, minus the apps I have already installed
Once you have it installed, go to the Settings
page under the gear icon on the right side menu. It should open up to a screen like this
Under Other settings
, set the following options:
Root permission: Enable
ADB debugging: Open local connection
Click Save settings
and it'll ask you to restart the emulator
Finally, you should drag and drop your .apk
file into anywhere on the emulator screen.
Once it appears on your home screen, open up the application.
Frida
#TL;DR: Frida allows us to bypass SSL certificate pinning
Clone this repository: https://github.com/httptoolkit/frida-android-unpinning
bash1git clone git@github.com:httptoolkit/frida-android-unpinning.git
Change directory into the cloned repository
bash1cd frida-android-unpinning
Create a virtual environment
bash1python -m venv frida
Activate the virtual environment
bash1frida\Scripts\activate.bat
Install frida-tools
bash1pip install frida-tools
Make sure frida-tools
was installed by running frida-ps
bash1frida-ps
ADB Tools
#Install SDK Platform-Tools for Windows
from this link
Double check that it installed and is working properly
bash1adb
Frida Server
#Install Frida Android server from here or check the most up-to-date version from https://github.com/frida/frida/releases
The current version as of this tutorial is 16.0.10
.
We're using x86_64
version because we're going to be using LDPlayer9
on Windows
Unzip the .xz
file using 7zip
Drop the unzipped file into frida-android-unpinning
folder
It should look like the following after everything
Make sure your emulator is visible
bash1adb devices -l
Start the emulator as root
bash1adb root
bash1adb push frida-server-16.0.10-android-x86_64 /data/local/tmp/frida-server
bash1adb shell "chmod 755 /data/local/tmp/frida-server"
Start the frida server. You shouldn't see any errors if it started correctly
bash1adb shell "/data/local/tmp/frida-server &"
Open up another terminal
Find the app identifier after opening the app
bash1frida-ps -U -a
In my case, it is com.p1.mobile.putong
. Now run the following command
bash1frida -U -l ./frida-script.js -f com.p1.mobile.putong
HTTP Toolkit
#Install the community edition of HTTP Toolkit: https://httptoolkit.com/download/win-exe/
It should automatically start downloading
Once installed it should look like this
Click Android device via ADB
Go to LDPlayer9, and allow the connection to be made
Open the app you want to monitor traffic for again
Finally, you should the requests populate on HTTP HttpToolkit
Shortened Steps After Installation
#Open LDPlayer9
Open HTTP Toolkit
Click Android device via ADB
Open up a terminal and change directory into the cloned repository
bash1cd frida-android-unpinning
Open up a terminal and start the emulator as root
bash1adb root
Start the Frida server
bash1adb shell "/data/local/tmp/frida-server &"
Open up another terminal
Activate the virtual environment
bash1frida\Scripts\activate.bat
Find the app identifier after opening the app
bash1frida-ps -U -a
bash1frida -U -l ./frida-script.js -f com.p1.mobile.putong
Monitor traffic
Troubleshooting
#If Frida was suddenly stopped but the address is already in use when trying to start the server again
Run the following command. This starts the shell inside the Android emulator, kills the PID tied to frida-server and then exits out
bash1adb shell "ps -e | grep frida-server | awk '{print $2}' | xargs kill -9 && exit"
If you're getting this error
Failed to spawn: need Gadget to attach on jailed Android; its default location is: C:\Users\Aaron\AppData\Local\Microsoft\Windows\INetCache\frida\gadget-android-arm64.so
You haven't started the frida server
bash1adb root
bash1adb shell "/data/local/tmp/frida-server &"