Recording the Process of Removing Folo Google Service Verification

2 min

Although there is already Miniflux deployed on Serv00, which is very convenient and not blocked, I still want to experience the Android version of Folo.

I have tried Folo on Windows before, and the effect was pretty good. I am not completely satisfied with any RSS reader on Android. At that time, Folo had not released the Android version. Recently, I saw that it came out and wanted to experience it.

There is no compiled Android version on Github release. After searching around, it seems that only the Google Play Store has it. I did not enable the Google suite (mainly to save battery, it should save some battery, right). I usually use Aurora Store directly, but for some reason, installing Folo failed. So I installed it from APKPure.

After opening it, I found that a pop-up window saying “Something went wrong” would appear after a few seconds, which is a prompt for missing Google services. After closing it, the software would exit.

First, I used MT Manager to extract the installation package, and then converted the xapk to apk. There was no shelling or obfuscation, which was great.

I searched for method names and found many isGooglePlayServicesAvailable checks, and modified all of them to return true. However, it still didn’t work.

Through Algorithm Assistant Pro, I located the pop-up window and found com.pairip.licensecheck.LicenseClient.connectToLicensingService.

Google Play App Integrity (formerly known as App Licensing / LVL) advanced protection scheme, usually referred to as PairIP.

I modified the LicenseClient class.

  1. Abandoned the connection request (connectToLicensingService) This method is the entry point for starting the authorization check. We let it end directly at startup, without connecting to the Google Play Store at all.

After modification:

.method private connectToLicensingService()V
    .registers 1

    # 直接返回,什么都不做
    return-void
.end method
  1. Abandoned the error handling (retryOrThrow) The application calls this method to pop up a window when the connection fails or the verification fails. Found .method ... retryOrThrow(...)V.

After modification:

.method private retryOrThrow(Lcom/pairip/licensecheck/LicenseCheckException;)V
    .registers 2

    # 哪怕报错了,也直接返回,不准弹窗,不准退出
    return-void
.end method

Test it, and now there will be no pop-up window.