MCPcopy Index your code
hub / github.com/ahmedmani/pairipfix

github.com/ahmedmani/pairipfix @v1.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2 ↗ · + Follow
32 symbols 68 edges 9 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

pairipfix

This LSPosed module bypasses the "Get this app from Play" screen when installing Android apps as an APK instead of from the Google Play Store.

image

why does this happen?

This is a security measure made by Google called "pairipcore" based on the binary file it runs from libpairpcore.so. Basically, it’s used to prevent abuse during app runtime. It mainly does three things: - Validate app was installed from Google Play (this is what the module bypasses) - Validates app signature to prevent resigning/repackaging - Detects and blocks Frida hooks and debuggers such as GDB

how does it work?

Pairip works by attaching itself to the app resources that it cannot run without it, this is done through rewriting some of the app methods in encrypted? or obfuscated? VM code. each time a protected method is called a vm code file is loaded from the app storage and executed inside the pairip VM. preventing these calls would simply crash the app, due to missing resources.

alternative solutions

Currently the module is detected on some devices, while it works flawlessly on others, if the app instant crashes when you open it, try BetterKnownInstalled.

Extension points exported contracts — how you extend this code

AfterHookCallback (Interface)
(no doc)
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
ReplaceCallback (Interface)
(no doc)
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java

Core symbols most depended-on inside this repo

hookDoNothing
called by 14
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
buildArgs
called by 4
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
classExists
called by 3
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
hookReturnConstant
called by 3
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
getName
called by 2
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
findClass
called by 2
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
apply
called by 1
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java
init
called by 1
app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java

Shape

Method 24
Class 6
Interface 2

Languages

Java100%

Modules by API surface

app/src/main/java/io/github/ahmedmani/pairipfix/BaseHook.java18 symbols
app/src/main/java/io/github/ahmedmani/pairipfix/hooks/SignatureBypass.java3 symbols
app/src/main/java/io/github/ahmedmani/pairipfix/hooks/LicenseResponseBypass.java3 symbols
app/src/main/java/io/github/ahmedmani/pairipfix/hooks/LicenseClientBypass.java3 symbols
app/src/main/java/io/github/ahmedmani/pairipfix/hooks/LicenseActivityBypass.java3 symbols
app/src/main/java/io/github/ahmedmani/pairipfix/mainHook.java2 symbols

For agents

$ claude mcp add pairipfix \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page