├── .github └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── Makefile ├── README.md ├── app ├── build.gradle ├── keystore │ └── rifsxd_keystore.jks ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── xposed_init │ ├── java │ └── com │ │ └── rifsxd │ │ └── processhook │ │ ├── deviceInfo.java │ │ ├── deviceProperties.java │ │ └── processHook.java │ └── res │ ├── mipmap-anydpi-v26 │ └── ic_launcher.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ ├── ic_launcher_adaptive_back.png │ └── ic_launcher_adaptive_fore.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ ├── ic_launcher_adaptive_back.png │ └── ic_launcher_adaptive_fore.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ ├── ic_launcher_adaptive_back.png │ └── ic_launcher_adaptive_fore.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_adaptive_back.png │ └── ic_launcher_adaptive_fore.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_adaptive_back.png │ └── ic_launcher_adaptive_fore.png │ └── values │ └── strings.xml ├── assets └── process-hook.png ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew └── settings.gradle /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Debug CI Build 2 | on: 3 | push: 4 | branches: 5 | - main 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout code 14 | uses: actions/checkout@v4 15 | 16 | - name: Set up JDK 17 17 | uses: actions/setup-java@v4 18 | with: 19 | java-version: '17' 20 | distribution: 'adopt' 21 | cache: gradle 22 | 23 | - name: Grant execute permission for gradlew 24 | run: chmod +x gradlew 25 | 26 | - name: Set up environment variables for keystore 27 | run: | 28 | echo "KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> $GITHUB_ENV 29 | echo "KEY_ALIAS=${{ secrets.KEY_ALIAS }}" >> $GITHUB_ENV 30 | echo "KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> $GITHUB_ENV 31 | 32 | - name: Build debug APK 33 | run: ./gradlew assembleDebug --stacktrace 34 | 35 | - name: Get App Version Name 36 | id: version 37 | run: echo "::set-output name=app_version::$(grep versionName app/build.gradle | sed -n 's/.*versionName \"\([0-9.]*\)\".*/\1/p')" 38 | 39 | - name: Rename APK 40 | run: mv app/build/outputs/apk/debug/app-debug.apk process-hook-v${{ steps.version.outputs.app_version }}-debug.apk 41 | 42 | - name: Upload APK 43 | uses: actions/upload-artifact@v4 44 | with: 45 | name: Process Hook 46 | path: process-hook-v${{ steps.version.outputs.app_version }}-debug.apk 47 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Build 2 | on: [workflow_dispatch] 3 | 4 | jobs: 5 | build: 6 | runs-on: ubuntu-latest 7 | 8 | steps: 9 | - name: Checkout code 10 | uses: actions/checkout@v4 11 | 12 | - name: Set up JDK 17 13 | uses: actions/setup-java@v4 14 | with: 15 | java-version: '17' 16 | distribution: 'adopt' 17 | cache: gradle 18 | 19 | - name: Grant execute permission for gradlew 20 | run: chmod +x gradlew 21 | 22 | - name: Set up environment variables for keystore 23 | run: | 24 | echo "KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> $GITHUB_ENV 25 | echo "KEY_ALIAS=${{ secrets.KEY_ALIAS }}" >> $GITHUB_ENV 26 | echo "KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> $GITHUB_ENV 27 | 28 | - name: Build with Gradle 29 | run: ./gradlew build 30 | 31 | - name: Get App Version Name 32 | id: version 33 | run: echo "::set-output name=app_version::$(grep versionName app/build.gradle | sed -n 's/.*versionName \"\([0-9.]*\)\".*/\1/p')" 34 | 35 | - name: Rename APK 36 | run: mv app/build/outputs/apk/release/app-release.apk process-hook-v${{ steps.version.outputs.app_version }}-release.apk 37 | 38 | - name: Upload APK 39 | uses: actions/upload-artifact@v4 40 | with: 41 | name: Process Hook 42 | path: process-hook-v${{ steps.version.outputs.app_version }}-release.apk 43 | 44 | - name: Create Release 45 | id: create_release 46 | uses: actions/create-release@v1 47 | with: 48 | tag_name: ${{ steps.version.outputs.app_version }} 49 | release_name: ${{ steps.version.outputs.app_version }} 50 | prerelease: false 51 | env: 52 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 53 | 54 | - name: Upload Release Assets 55 | run: | 56 | release_id=${{ steps.create_release.outputs.id }} 57 | asset_url=$(curl -X POST \ 58 | -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 59 | -H "Content-Type: application/octet-stream" \ 60 | --data-binary "@process-hook-v${{ steps.version.outputs.app_version }}-release.apk" \ 61 | "https://uploads.github.com/repos/${{ github.repository }}/releases/$release_id/assets?name=process-hook-v${{ steps.version.outputs.app_version }}-release.apk") 62 | echo "Uploaded asset: $asset_url" 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | build 3 | install.sh 4 | build.sh 5 | setenv.sh -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "java.configuration.updateBuildConfiguration": "automatic" 3 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Rifat Azad 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Define variables 2 | SDK_PATH := $(HOME)/android-sdk 3 | APK_PATH := $(CURDIR)/app/build/outputs/apk/debug/app-debug.apk 4 | SETENV_PATH := $(CURDIR)/setenv.sh # Path to setenv.sh in the same directory as the Makefile 5 | 6 | # Set the environment variable for ANDROID_HOME 7 | export ANDROID_HOME := $(SDK_PATH) 8 | 9 | # Define the default target 10 | all: build 11 | 12 | # Target to build the APK 13 | build: 14 | @if [ -f $(SETENV_PATH) ]; then \ 15 | . $(SETENV_PATH); \ 16 | else \ 17 | echo "Warning: setenv.sh not found. Continuing with the build without environment settings."; \ 18 | fi; \ 19 | ./gradlew build 20 | 21 | # Check if a device is connected, then install the APK 22 | install: build 23 | @if adb devices | grep -w "device" >/dev/null; then \ 24 | echo "Device found, installing APK..."; \ 25 | adb install $(APK_PATH); \ 26 | else \ 27 | echo "Error: No Android device found. Please connect a device and try again."; \ 28 | fi 29 | 30 | # Optional clean target 31 | clean: 32 | ./gradlew clean 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Process Hook 2 | 3 |

4 | Process Hook 5 |

6 | 7 | ## Unlock hidden features and options 8 | Hook specific process/apps/games to spoof your device as different model/device to unlock hidden features and options. Check list of support - [Supported Lists](#supported-debug-apps) 9 | 10 | 11 |
12 | 13 | [![GitHub license](https://img.shields.io/github/license/rifsxd/process-hook?logo=apache&label=License&style=flat)](https://github.com/rifsxd/process-hook/blob/master/LICENSE) 14 | ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/rifsxd/process-hook/total?logo=github&label=Downloads&style=flat) 15 | ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/rifsxd/process-hook?style=flat&label=Code%20Size) 16 | [![GitHub Debug CI Status](https://img.shields.io/github/actions/workflow/status/rifsxd/process-hook/ci.yml?logo=github&label=Debug%20CI&style=flat)](https://github.com/rifsxd/process-hook/actions/workflows/ci.yml) 17 | 18 |
19 | 20 | 21 | ## Features 22 | 23 | - Device spoofing for enhanced gaming experiences. 24 | - Display refreshrate spoofing to unlock higher framerate options. ( To test this spoof install any app from the [Debug Lists](#supported-debug-apps) and check display specifications ) 25 | - Compatibility with a wide range of popular gaming applications. 26 | - Easy installation and no extra configuration. 27 | 28 | ## High End Devices 29 | 30 | The following is the current list of devices that Process Hook will spoof your device into for supported games and apps. Click on the device names to view the corresponding profile in the code: 31 | 32 | - [ROG_PHONE_8](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L37) 33 | - [SAMSUNG_S24_ULTRA](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L53) 34 | - [BLACKSHARK_5_PRO](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L69) 35 | - [REALME_GT6_5G](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L85) 36 | - [ONEPLUS_12](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L101) 37 | - [VIVO_IQOO_11_PRO](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L117) 38 | - [POCO_F6_PRO](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L133) 39 | - [MI_14_PRO](app/src/main/java/com/rifsxd/processhook/deviceProperties.java#L149) 40 | 41 | ## Table of Contents 42 | 43 | - [Getting Started](#getting-started) 44 | - [Usage](#usage) 45 | - [License](#license) 46 | - [Contributing](#contributing) 47 | 48 | ## Getting Started 49 | 50 | To get started with Process Hook, follow these steps: 51 | 52 | 1. Ensure that your Android device is rooted. 53 | 54 | 2. Install the Xposed/Lsposed Framework on your device. 55 | 56 | 3. Download the Process Hook module from the [releases section](https://github.com/rifsxd/process-hook/releases) of this repository. 57 | 58 | 4. Install the downloaded apk : 59 | - Open Xposed/Lsposed Manager. 60 | - Go to the "Modules" section. 61 | - Search "Process Hook" and enable the module. 62 | - The supported process/apps/games are auto added to the scope. 63 | - Force Stop the added game manually to take effect. 64 | 65 | ## Usage 66 | 67 | Once you've installed and activated the Process Hook module, it will automatically spoof your device information for supported process/apps/games. There's no additional configuration required. Simply force stop and open the process/apps/games you want to run and enjoy the benefits of device spoofing. 68 | 69 | You can untick the game you don't want to spoof for the module scope. Force stop and relaunch is required. 70 | 71 | **Note:** Keep in mind that device spoofing may violate the terms of service for some games or apps. 72 | 73 | Report any suggestions/issues with games [here](https://github.com/rifsxd/process-hook/issues) 74 | 75 | ## Supported Debug Apps 76 | 77 |
78 | Click to expand the list of supported apps 79 | 80 | - [Aida64](https://play.google.com/store/apps/details?id=com.finalwire.aida64&hl=en) 81 | - [Device Info](https://play.google.com/store/apps/details?id=com.ytheekshana.deviceinfo&hl=en) 82 | - [Device Info HW](https://play.google.com/store/apps/details?id=ru.andr7e.deviceinfohw&hl=en) 83 | 84 |
85 | 86 | ## Supported Games 87 | 88 |
89 | Click to expand the list of supported games 90 | 91 | - [Apex Legends Mobile](https://play.google.com/store/apps/details?id=com.ea.gp.apexlegendsmobilefps&hl=en&gl=US) 92 | - [Asphalt 9: Legends](https://play.google.com/store/apps/details?id=com.gameloft.android.ANMP.GloftA9HM&hl=en&gl=US) 93 | - [Battlegrounds Mobile India](https://play.google.com/store/apps/details?id=com.pubg.imobile&hl=en&gl=US) 94 | - [Black Desert Mobile](https://play.google.com/store/apps/details?id=com.pearlabyss.blackdesertm.gl&hl=en&gl=US) 95 | - [Call Of Duty: Mobile VN](https://play.google.com/store/apps/details?id=com.vng.codmvn&hl=en&gl=US) 96 | - [Call of Duty: Mobile](https://play.google.com/store/apps/details?id=com.activision.callofduty.shooter&hl=en&gl=US) 97 | - [Call of Duty®: Mobile - Garena](https://play.google.com/store/apps/details?id=com.garena.game.codm&hl=en&gl=US) 98 | - [Clash of Clans](https://play.google.com/store/apps/details?id=com.supercell.clashofclans&hl=en&gl=US) 99 | - [Cyber Hunter](https://play.google.com/store/apps/details?id=com.netease.lztgglobal&hl=en&gl=US) 100 | - [Dead by Daylight: Mobile](https://play.google.com/store/apps/details?id=com.netease.dbdena&hl=en) 101 | - [EA SPORTS FC™ Mobile Soccer](https://play.google.com/store/apps/details?id=com.ea.gp.fifamobile&hl=en&gl=US) 102 | - [Farlight 84](https://play.google.com/store/apps/details?id=com.miraclegames.farlight84&hl=en) 103 | - [Fortnite Portal](https://play.google.com/store/apps/details?id=com.epicgames.portal&hl=en&gl=US) 104 | - [Fortnite](https://play.google.com/store/apps/details?id=com.epicgames.fortnite&hl=en&gl=US) 105 | - [Free Fire MAX](https://play.google.com/store/apps/details?id=com.dts.freefiremax&hl=en&gl=US) 106 | - [Free Fire](https://play.google.com/store/apps/details?id=com.dts.freefireth&hl=en&gl=US) 107 | - [Genshin Impact](https://play.google.com/store/apps/details?id=com.miHoYo.GenshinImpact) 108 | - [Honor of Kings](https://play.google.com/store/apps/details?id=com.levelinfinite.sgameGlobal&hl=en&gl=US) 109 | - [Honor of Kings](https://play.google.com/store/apps/details?id=com.tencent.tmgp.sgame&hl=en&gl=US) 110 | - [LMHT: Tốc Chiến](https://play.google.com/store/apps/details?id=com.riotgames.league.wildriftvn&hl=en&gl=US) 111 | - [League of Legends](https://play.google.com/store/apps/details?id=com.riotgames.league.wildrift&hl=en&gl=US) 112 | - [Mobile Legends: Bang Bang VNG](https://play.google.com/store/apps/details?id=com.vng.mlbbvn&hl=en&gl=US) 113 | - [Mobile Legends: Mi](https://global.app.mi.com/details?lo=ID&la=en&id=com.mobilelegends.mi&hl=en&gl=US) 114 | - [Mobile Legends](https://play.google.com/store/apps/details?id=com.mobile.legends&hl=en&gl=US) 115 | - [Need for Speed: No Limits](https://play.google.com/store/apps/details?id=com.ea.game.nfs14_row&hl=rn&gl=US) 116 | - [PUBG MOBILE:絕地求生M](https://play.google.com/store/apps/details?id=com.rekoo.pubgm&hl=en&gl=US) 117 | - [PUBG Mobile Beta](https://play.google.com/store/apps/details?id=com.tencent.ig&hl=en&gl=US) 118 | - [PUBG Mobile VN](https://play.google.com/store/apps/details?id=com.vng.pubgmobile&hl=en&gl=US) 119 | - [PUBG Mobile](https://play.google.com/store/apps/details?id=com.pubg.krmobile&hl=en&gl=US) 120 | - [PUBG Mobile: Lite](https://play.google.com/store/apps/details?id=com.tencent.iglite&hl=en) 121 | - [PUBG: Exhilarating Battlefield](https://play.google.com/store/apps/details?id=com.tencent.tmgp.pubgmhd&hl=en&gl=US) 122 | - [Shadowgun Legends: Online FPS](https://play.google.com/store/apps/details?id=com.madfingergames.legends&hl=en&gl=US) 123 | - [Tower of Fantasy](https://play.google.com/store/apps/details?id=com.levelinfinite.hotta.gp&hl=en&gl=US) 124 | - [World of Tanks: Blitz](https://play.google.com/store/apps/details?id=net.wargaming.wot.blitz&hl=en&gl=US) 125 | - [《英雄聯盟:激鬥峽谷》](https://play.google.com/store/apps/details?id=com.riotgames.league.wildrifttw&hl=en&gl=US) 126 | - [검은사막 모바일](https://play.google.com/store/apps/details?id=com.pearlabyss.blackdesertm&hl=en&gl=US) 127 | - [콜 오브 듀티: 모바일](https://play.google.com/store/apps/details?id=com.tencent.tmgp.kr.codm&hl=en&gl=US) 128 | 129 |
130 | 131 | ## License 132 | 133 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 134 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | compileSdkVersion 35 7 | buildToolsVersion "35.0.0" 8 | 9 | defaultConfig { 10 | applicationId "com.rifsxd.processhook" 11 | minSdkVersion 28 12 | targetSdkVersion 35 13 | versionCode 5 14 | versionName "1.3.1" 15 | } 16 | 17 | signingConfigs { 18 | release { 19 | storeFile file('keystore/rifsxd_keystore.jks') 20 | storePassword System.getenv("KEYSTORE_PASSWORD") 21 | keyAlias System.getenv("KEY_ALIAS") 22 | keyPassword System.getenv("KEY_PASSWORD") 23 | } 24 | } 25 | 26 | buildTypes { 27 | release { 28 | signingConfig signingConfigs.release 29 | minifyEnabled true 30 | proguardFiles 'proguard-rules.pro' 31 | } 32 | } 33 | 34 | compileOptions { 35 | sourceCompatibility JavaVersion.VERSION_17 36 | targetCompatibility JavaVersion.VERSION_17 37 | } 38 | 39 | dependenciesInfo.includeInApk false 40 | namespace 'com.rifsxd.processhook' 41 | } 42 | 43 | dependencies { 44 | compileOnly 'de.robv.android.xposed:api:82' 45 | implementation 'androidx.appcompat:appcompat:1.6.1' 46 | implementation 'com.google.android.material:material:1.9.0' 47 | } 48 | -------------------------------------------------------------------------------- /app/keystore/rifsxd_keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/keystore/rifsxd_keystore.jks -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | -keep class com.rifsxd.processhook.processHook 24 | 25 | -dontwarn sun.misc.** 26 | 27 | -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { 28 | long producerIndex; 29 | long consumerIndex; 30 | } 31 | 32 | -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { 33 | rx.internal.util.atomic.LinkedQueueNode producerNode; 34 | } 35 | 36 | -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { 37 | rx.internal.util.atomic.LinkedQueueNode consumerNode; 38 | } 39 | 40 | -dontnote rx.internal.util.PlatformDependent 41 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 14 | 17 | 20 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/assets/xposed_init: -------------------------------------------------------------------------------- 1 | com.rifsxd.processhook.processHook 2 | -------------------------------------------------------------------------------- /app/src/main/java/com/rifsxd/processhook/deviceInfo.java: -------------------------------------------------------------------------------- 1 | package com.rifsxd.processhook; 2 | 3 | /** 4 | * The {@code deviceInfo} class stores device-specific information 5 | * such as manufacturer, brand, and model, which can be used to simulate 6 | * or override device properties in various applications. 7 | */ 8 | public final class deviceInfo { 9 | 10 | // Fields representing different device properties 11 | String manufacturer; 12 | String brand; 13 | String product; 14 | String device; 15 | String model; 16 | String hardware; 17 | String board; 18 | String bootloader; 19 | String refreshrate; 20 | String username; 21 | String hostname; 22 | String fingerprint; 23 | // String template; // Optional field if needed in the future 24 | 25 | /** 26 | * Constructs a new {@code deviceInfo} object with the specified properties. 27 | * 28 | * @param manufacturer Manufacturer of the device (e.g., "asus"). 29 | * @param brand Brand of the device (e.g., "samsung"). 30 | * @param product Product identifier (e.g., "WW_AI2401"). 31 | * @param device Device name (e.g., "AI2401"). 32 | * @param model Model identifier (e.g., "ASUS_AI2401"). 33 | * @param hardware Hardware identifier (e.g., "qcom"). 34 | * @param board Board identifier (can be null if not applicable). 35 | * @param bootloader Bootloader version (can be null if not applicable). 36 | * @param refreshrate Refresh rate of the device screen (e.g., "120"). 37 | * @param username Username associated with the device (optional). 38 | * @param hostname Hostname of the device (optional). 39 | * @param fingerprint Device fingerprint (optional). 40 | */ 41 | public deviceInfo( 42 | String manufacturer, 43 | String brand, 44 | String product, 45 | String device, 46 | String model, 47 | String hardware, 48 | String board, 49 | String bootloader, 50 | String refreshrate, 51 | String username, 52 | String hostname, 53 | String fingerprint 54 | // String template // Placeholder for future use 55 | ) { 56 | // Initialize all fields with provided values 57 | this.manufacturer = manufacturer; 58 | this.brand = brand; 59 | this.product = product; 60 | this.device = device; 61 | this.model = model; 62 | this.hardware = hardware; 63 | this.board = board; 64 | this.bootloader = bootloader; 65 | this.refreshrate = refreshrate; 66 | this.username = username; 67 | this.hostname = hostname; 68 | this.fingerprint = fingerprint; 69 | // this.template = template; // Uncomment if template is needed 70 | } 71 | } -------------------------------------------------------------------------------- /app/src/main/java/com/rifsxd/processhook/deviceProperties.java: -------------------------------------------------------------------------------- 1 | package com.rifsxd.processhook; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * The {@code deviceProperties} class contains predefined device profiles 8 | * and a mapping of specific applications to those profiles. These profiles 9 | * simulate different device properties for use in testing or device-specific 10 | * optimizations in apps. 11 | */ 12 | public final class deviceProperties { 13 | 14 | // Map that holds associations between app package names and deviceInfo objects 15 | public static final Map DEVICE_MAP = new HashMap<>(); 16 | 17 | // Predefined Debug Profile 18 | public static final deviceInfo DEBUG_1 = new deviceInfo( 19 | 20 | "DEBUG_MAUFACTURER", // Manufacturer for the debug profile 21 | "DEBUG_BRAND", // Brand for the debug profile 22 | "DEBUG_PRODUCT", // Product identifier 23 | "DEBUG_DEVICE", // Device name 24 | "DEBUG_MODEL", // Model number 25 | "DEBUG_HARDWARE", // Hardware identifier 26 | "DEBUG_BOARD", // Board identifier 27 | "DEBUG_BOOTLOADER", // Bootloader version 28 | "120.00", // Refresh rate (Hz) 29 | "DEBUG_USER", // Username property 30 | "DEBUG_HOST", // Hostname property 31 | "brand/product/model:15/VP1A:220924.014/R.202409241234:user/release-keys" // Fingerprint identifier 32 | ); 33 | 34 | // Predefined Device Profiles 35 | 36 | // ROG Phone 8 Profile 37 | public static final deviceInfo ROG_PHONE_8 = new deviceInfo( 38 | "asus", // Manufacturer 39 | "asus", // Brand 40 | "WW_AI2401", // Product 41 | "AI2401", // Device 42 | "ASUS_AI2401", // Model 43 | "qcom", // Hardware 44 | null, // Board (optional, null if not available) 45 | null, // Bootloader (optional) 46 | "165", // Refresh rate (Hz) 47 | null, // Username (optional) 48 | null, // Hostname (optional) 49 | null // Fingerprint (optional) 50 | ); 51 | 52 | // Samsung Galaxy S24 Ultra Profile 53 | public static final deviceInfo SAMSUNG_S24_ULTRA = new deviceInfo( 54 | "samsung", // Manufacturer 55 | "samsung", // Brand 56 | "e3qxeea", // Product 57 | "SM-S928B", // Device 58 | "SM-S928B", // Model 59 | "qcom", // Hardware 60 | null, // Board (optional) 61 | null, // Bootloader (optional) 62 | "120", // Refresh rate (Hz) 63 | null, // Username (optional) 64 | null, // Hostname (optional) 65 | null // Fingerprint (optional) 66 | ); 67 | 68 | // Black Shark 5 Pro Profile 69 | public static final deviceInfo BLACKSHARK_5_PRO = new deviceInfo( 70 | "blackshark", // Manufacturer 71 | "blackshark", // Brand 72 | "KTUS-A0", // Product 73 | "KTUS-A0", // Device 74 | "Shark KTUS-A0", // Model 75 | "qcom", // Hardware 76 | null, // Board (optional) 77 | null, // Bootloader (optional) 78 | "120", // Refresh rate (Hz) 79 | null, // Username (optional) 80 | null, // Hostname (optional) 81 | null // Fingerprint (optional) 82 | ); 83 | 84 | // Realme GT6 5G Profile 85 | public static final deviceInfo REALME_GT6_5G = new deviceInfo( 86 | "realme", // Manufacturer 87 | "realme", // Brand 88 | "RMX3800", // Product 89 | "RE5C4FL1", // Device 90 | "RMX3800", // Model 91 | "qcom", // Hardware 92 | null, // Board (optional) 93 | null, // Bootloader (optional) 94 | "120", // Refresh rate (Hz) 95 | null, // Username (optional) 96 | null, // Hostname (optional) 97 | null // Fingerprint (optional) 98 | ); 99 | 100 | // OnePlus 12 Profile 101 | public static final deviceInfo ONEPLUS_12 = new deviceInfo( 102 | "oneplus", // Manufacturer 103 | "oneplus", // Brand 104 | "CPH2581", // Product 105 | "CPH2581", // Device 106 | "CPH2581", // Model 107 | "qcom", // Hardware 108 | null, // Board (optional) 109 | null, // Bootloader (optional) 110 | "120", // Refresh rate (Hz) 111 | null, // Username (optional) 112 | null, // Hostname (optional) 113 | null // Fingerprint (optional) 114 | ); 115 | 116 | // Vivo iQOO 11 Pro Profile 117 | public static final deviceInfo VIVO_IQOO_11_PRO = new deviceInfo( 118 | "vivo", // Manufacturer 119 | "vivo", // Brand 120 | "V2243A", // Product 121 | "V2243A", // Device 122 | "V2243A", // Model 123 | "qcom", // Hardware 124 | null, // Board (optional) 125 | null, // Bootloader (optional) 126 | "120", // Refresh rate (Hz) 127 | null, // Username (optional) 128 | null, // Hostname (optional) 129 | null // Fingerprint (optional) 130 | ); 131 | 132 | // Poco F6 Pro Profile 133 | public static final deviceInfo POCO_F6_PRO = new deviceInfo( 134 | "xiaomi", // Manufacturer 135 | "xiaomi", // Brand 136 | "vermeer", // Product 137 | "23113RKC6G", // Device 138 | "23049PCD8G", // Model 139 | "qcom", // Hardware 140 | null, // Board (optional) 141 | null, // Bootloader (optional) 142 | "120", // Refresh rate (Hz) 143 | null, // Username (optional) 144 | null, // Hostname (optional) 145 | null // Fingerprint (optional) 146 | ); 147 | 148 | // Xiaomi 14 Pro Profile 149 | public static final deviceInfo MI_14_PRO = new deviceInfo( 150 | "xiaomi", // Manufacturer 151 | "xiaomi", // Brand 152 | "shennong", // Product 153 | "23116PN5BG", // Device 154 | "23116PN5BG", // Model 155 | "qcom", // Hardware 156 | null, // Board (optional) 157 | null, // Bootloader (optional) 158 | "120", // Refresh rate (Hz) 159 | null, // Username (optional) 160 | null, // Hostname (optional) 161 | null // Fingerprint (optional) 162 | ); 163 | 164 | // Static block to populate DEVICE_MAP with device profiles mapped to specific apps 165 | static { 166 | 167 | // Debug device mapping 168 | DEVICE_MAP.put("com.ytheekshana.deviceinfo", DEBUG_1); 169 | DEVICE_MAP.put("ru.andr7e.deviceinfohw", ROG_PHONE_8); 170 | DEVICE_MAP.put("com.finalwire.aida64", SAMSUNG_S24_ULTRA); 171 | 172 | // Populate device map for ROG Phone 8 apps 173 | String[] rogPhoneApps = { 174 | "com.gameloft.android.ANMP.GloftA9HM", 175 | "com.activision.callofduty.shooter", 176 | "com.activision.callofudty.warzone", 177 | "com.ea.game.nfs14_row", 178 | "net.wargaming.wot.blitz", 179 | "com.pearlabyss.blackdesertm.gl", 180 | "com.pearlabyss.blackdesertm", 181 | "com.madfingergames.legends" 182 | }; 183 | addToDeviceMap(rogPhoneApps, ROG_PHONE_8); 184 | 185 | // Populate device map for Samsung Galaxy S24 Ultra apps 186 | String[] samsungApps = { 187 | "com.ea.gp.fifamobile", 188 | "com.miraclegames.farlight84", 189 | "vng.games.revelation.mobile", 190 | "com.tencent.tmgp.pubgmhd", 191 | "com.pubg.imobile", 192 | "com.miHoYo.GenshinImpact", 193 | "com.netease.dbdena", 194 | "com.netease.lztgglobal" 195 | }; 196 | addToDeviceMap(samsungApps, SAMSUNG_S24_ULTRA); 197 | 198 | // Populate device map for Black Shark 5 Pro apps 199 | String[] blackSharkApps = { 200 | "com.proximabeta.mf.uamo", 201 | "com.tencent.tmgp.kr.codm", 202 | "com.vng.codmvn", 203 | "com.vng.pubgmobile", 204 | "com.pubg.krmobile", 205 | "com.rekoo.pubgm", 206 | "com.tencent.ig" 207 | }; 208 | addToDeviceMap(blackSharkApps, BLACKSHARK_5_PRO); 209 | 210 | // Populate device map for Vivo iQOO 11 Pro apps 211 | String[] vivoApps = { 212 | "com.tencent.tmgp.gnyx", 213 | "com.tencent.tmgp.cod", 214 | "com.tencent.tmgp.cf", 215 | "com.tencent.KiHan", 216 | "com.tencent.iglite" 217 | }; 218 | addToDeviceMap(vivoApps, VIVO_IQOO_11_PRO); 219 | 220 | // Populate device map for Realme GT6 5G apps 221 | String[] realmeApps = { 222 | "com.riotgames.league.teamfighttacticsvn", 223 | "com.riotgames.league.teamfighttacticstw", 224 | "com.riotgames.league.teamfighttactics", 225 | "com.garena.game.lmjx", 226 | "com.ngame.allstar.eu", 227 | "com.epicgames.fortnite", 228 | "com.epicgames.portal" 229 | }; 230 | addToDeviceMap(realmeApps, REALME_GT6_5G); 231 | 232 | // Populate device map for OnePlus 12 apps 233 | String[] onePlusApps = { 234 | "com.mojang.minecraftpe", 235 | "com.YoStar.AetherGazer", 236 | "com.riotgames.league.wildriftvn", 237 | "com.riotgames.league.wildrifttw", 238 | "com.riotgames.league.wildrift", 239 | "com.tencent.lolm", 240 | "jp.konami.pesam" 241 | }; 242 | addToDeviceMap(onePlusApps, ONEPLUS_12); 243 | 244 | // Populate device map for Poco F6 Pro apps 245 | String[] pocoApps = { 246 | "com.dts.freefiremax", 247 | "com.dts.freefire", 248 | "com.garena.game.codm", 249 | "com.garena.game.kgvn" 250 | }; 251 | addToDeviceMap(pocoApps, POCO_F6_PRO); 252 | 253 | // Populate device map for Xiaomi 14 Pro apps 254 | String[] mi14Apps = { 255 | "com.levelinfinite.sgameGlobal", 256 | "com.tencent.tmgp.sgame", 257 | "com.ea.gp.apexlegendsmobilefps", 258 | "com.levelinfinite.hotta.gp", 259 | "com.supercell.clashofclans", 260 | "com.mobilelegends.mi", 261 | "com.vng.mlbbvn" 262 | }; 263 | addToDeviceMap(mi14Apps, MI_14_PRO); 264 | } 265 | 266 | /** 267 | * Adds an array of app package names to the DEVICE_MAP associated with a specific device profile. 268 | * 269 | * @param apps An array of application package names 270 | * @param deviceInfo The {@code deviceInfo} object containing the device properties 271 | */ 272 | private static void addToDeviceMap(String[] apps, deviceInfo deviceInfo) { 273 | 274 | for (String app : apps) { 275 | DEVICE_MAP.put(app, deviceInfo); 276 | } 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /app/src/main/java/com/rifsxd/processhook/processHook.java: -------------------------------------------------------------------------------- 1 | package com.rifsxd.processhook; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.view.Display; 5 | import android.os.Build; 6 | import android.util.Log; 7 | 8 | import java.lang.reflect.Field; 9 | 10 | import de.robv.android.xposed.callbacks.XC_LoadPackage; 11 | import de.robv.android.xposed.IXposedHookLoadPackage; 12 | import de.robv.android.xposed.XC_MethodHook; 13 | import de.robv.android.xposed.XposedBridge; 14 | 15 | /** 16 | * processHook class implements IXposedHookLoadPackage to modify device properties 17 | * and refresh rate for specific applications. 18 | */ 19 | @SuppressLint("DiscouragedPrivateApi") 20 | public class processHook implements IXposedHookLoadPackage { 21 | 22 | private final String TAG = processHook.class.getSimpleName(); 23 | 24 | /** 25 | * This method is called when a package is loaded. It checks if the package 26 | * is one that we want to modify and applies the necessary spoofing. 27 | * 28 | * @param loadPackageParam The parameters for the loaded package. 29 | */ 30 | @Override 31 | public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) { 32 | String packageName = loadPackageParam.packageName; 33 | deviceInfo properties = deviceProperties.DEVICE_MAP.get(packageName); 34 | 35 | // Check if the package is in our device properties map 36 | if (properties != null) { 37 | // Spoof device properties and refresh rate 38 | spoofDeviceProperties(properties); 39 | spoofRefreshRate(properties); 40 | XposedBridge.log("Spoofed " + packageName + " as " + properties.device); 41 | } 42 | } 43 | 44 | /** 45 | * Spoofs device-related properties using reflection to set values in the Build class. 46 | * 47 | * @param properties The deviceInfo object containing spoof values. 48 | */ 49 | private void spoofDeviceProperties(deviceInfo properties) { 50 | setPropValue("MANUFACTURER", properties.manufacturer); 51 | setPropValue("BRAND", properties.brand); 52 | setPropValue("PRODUCT", properties.product); 53 | setPropValue("DEVICE", properties.device); 54 | setPropValue("MODEL", properties.model); 55 | setPropValue("HARDWARE", properties.hardware); 56 | setPropValue("BOARD", properties.board); 57 | setPropValue("BOOTLOADER", properties.bootloader); 58 | setPropValue("USER", properties.username); 59 | setPropValue("HOST", properties.hostname); 60 | setPropValue("FINGERPRINT", properties.fingerprint); 61 | } 62 | 63 | /** 64 | * Spoofs the refresh rate of the device display. 65 | * Hooks into the getRefreshRate method to return a custom value. 66 | * 67 | * @param properties The deviceInfo object containing the desired refresh rate. 68 | */ 69 | private void spoofRefreshRate(deviceInfo properties) { 70 | if (properties.refreshrate != null) { 71 | try { 72 | // Parse the refresh rate to a float 73 | float spoofedRefreshRate = Float.parseFloat(properties.refreshrate); 74 | // Hook the getRefreshRate method of Display class 75 | XposedBridge.hookAllMethods(Display.class, "getRefreshRate", new XC_MethodHook() { 76 | @Override 77 | protected void afterHookedMethod(MethodHookParam param) { 78 | // Set the result to our spoofed refresh rate 79 | param.setResult(spoofedRefreshRate); 80 | XposedBridge.log("Spoofed refresh rate to " + spoofedRefreshRate + " Hz"); 81 | } 82 | }); 83 | } catch (NumberFormatException e) { 84 | XposedBridge.log("Invalid refresh rate value: " + properties.refreshrate); 85 | } 86 | } 87 | } 88 | 89 | /** 90 | * Sets a device property value using reflection. 91 | * This method accesses the static fields of the Build class to modify their values. 92 | * 93 | * @param key The property name to be set (e.g., MANUFACTURER, BRAND). 94 | * @param value The new value for the property. 95 | */ 96 | private void setPropValue(String key, Object value) { 97 | if (value != null) { 98 | try { 99 | Log.d(TAG, "Defining prop " + key + " to " + value); 100 | // Access the field in the Build class 101 | Field field = Build.class.getDeclaredField(key); 102 | field.setAccessible(true); // Bypass access checks 103 | field.set(null, value); // Set the value 104 | field.setAccessible(false); // Revert access checks 105 | } catch (NoSuchFieldException | IllegalAccessException e) { 106 | XposedBridge.log("Failed to set prop: " + key + "\n" + Log.getStackTraceString(e)); 107 | } 108 | } 109 | } 110 | } -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Process Hook 3 | Hook specific process/apps/games to spoof your device as different model/device to unlock hidden features and options 4 | 5 | com.activision.callofduty.shooter 6 | com.activision.callofudty.warzone 7 | com.miraclegames.farlight84 8 | com.ea.game.nfs14_row 9 | com.dts.freefiremax 10 | com.dts.freefireth 11 | com.ea.gp.apexlegendsmobilefps 12 | com.ea.gp.fifamobile 13 | com.epicgames.fortnite 14 | com.epicgames.portal 15 | com.finalwire.aida64 16 | com.gameloft.android.ANMP.GloftA9HM 17 | com.garena.game.codm 18 | com.garena.game.kgvn 19 | com.garena.game.lmjx 20 | com.levelinfinite.hotta.gp 21 | com.levelinfinite.sgameGlobal 22 | com.madfingergames.legends 23 | com.miHoYo.GenshinImpact 24 | com.mobile.legends 25 | com.mobilelegends.mi 26 | com.mojang.minecraftpe 27 | com.netease.dbdena 28 | com.netease.lztgglobal 29 | com.ngame.allstar.eu 30 | com.pearlabyss.blackdesertm.gl 31 | com.pearlabyss.blackdesertm 32 | com.proximabeta.mf.uamo 33 | com.pubg.imobile 34 | com.pubg.krmobile 35 | com.pubg.newstate 36 | com.rekoo.pubgm 37 | com.riotgames.league.teamfighttactics 38 | com.riotgames.league.teamfighttacticstw 39 | com.riotgames.league.teamfighttacticsvn 40 | com.riotgames.league.wildrift 41 | com.riotgames.league.wildrifttw 42 | com.riotgames.league.wildriftvn 43 | com.supercell.clashofclans 44 | com.tencent.KiHan 45 | com.tencent.ig 46 | com.tencent.iglite 47 | com.tencent.lolm 48 | com.tencent.tmgp.cf 49 | com.tencent.tmgp.cod 50 | com.tencent.tmgp.gnyx 51 | com.tencent.tmgp.kr.codm 52 | com.tencent.tmgp.pubgmhd 53 | com.tencent.tmgp.sgame 54 | com.vng.codmvn 55 | com.vng.mlbbvn 56 | com.vng.pubgmobile 57 | com.YoStar.AetherGazer 58 | com.ytheekshana.deviceinfo 59 | jp.konami.pesam 60 | net.wargaming.wot.blitz 61 | ru.andr7e.deviceinfohw 62 | vng.games.revelation.mobile 63 | 64 | 65 | -------------------------------------------------------------------------------- /assets/process-hook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/assets/process-hook.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' version '8.6.0' apply false 3 | } 4 | 5 | task clean(type: Delete) { 6 | delete rootProject.buildDir 7 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rifsxd/process-hook/d79d38c04b1e9adb2156308e3d68809b220a7738/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip 3 | distributionPath=wrapper/dists 4 | zipStorePath=wrapper/dists 5 | zipStoreBase=GRADLE_USER_HOME 6 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Copyright © 2015-2021 the original authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | # 21 | # Gradle start up script for POSIX generated by Gradle. 22 | # 23 | # Important for running: 24 | # 25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is 26 | # noncompliant, but you have some other compliant shell such as ksh or 27 | # bash, then to run this script, type that shell name before the whole 28 | # command line, like: 29 | # 30 | # ksh Gradle 31 | # 32 | # Busybox and similar reduced shells will NOT work, because this script 33 | # requires all of these POSIX shell features: 34 | # * functions; 35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», 36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; 37 | # * compound commands having a testable exit status, especially «case»; 38 | # * various built-in commands including «command», «set», and «ulimit». 39 | # 40 | # Important for patching: 41 | # 42 | # (2) This script targets any POSIX shell, so it avoids extensions provided 43 | # by Bash, Ksh, etc; in particular arrays are avoided. 44 | # 45 | # The "traditional" practice of packing multiple parameters into a 46 | # space-separated string is a well documented source of bugs and security 47 | # problems, so this is (mostly) avoided, by progressively accumulating 48 | # options in "$@", and eventually passing that to Java. 49 | # 50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, 51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; 52 | # see the in-line comments for details. 53 | # 54 | # There are tweaks for specific operating systems such as AIX, CygWin, 55 | # Darwin, MinGW, and NonStop. 56 | # 57 | # (3) This script is generated from the Groovy template 58 | # https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt 59 | # within the Gradle project. 60 | # 61 | # You can find Gradle at https://github.com/gradle/gradle/. 62 | # 63 | ############################################################################## 64 | 65 | # Attempt to set APP_HOME 66 | 67 | # Resolve links: $0 may be a link 68 | app_path=$0 69 | 70 | # Need this for daisy-chained symlinks. 71 | while 72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path 73 | [ -h "$app_path" ] 74 | do 75 | ls=$( ls -ld "$app_path" ) 76 | link=${ls#*' -> '} 77 | case $link in #( 78 | /*) app_path=$link ;; #( 79 | *) app_path=$APP_HOME$link ;; 80 | esac 81 | done 82 | 83 | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit 84 | 85 | APP_NAME="Gradle" 86 | APP_BASE_NAME=${0##*/} 87 | 88 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 89 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 90 | 91 | # Use the maximum available, or set MAX_FD != -1 to use that value. 92 | MAX_FD=maximum 93 | 94 | warn () { 95 | echo "$*" 96 | } >&2 97 | 98 | die () { 99 | echo 100 | echo "$*" 101 | echo 102 | exit 1 103 | } >&2 104 | 105 | # OS specific support (must be 'true' or 'false'). 106 | cygwin=false 107 | msys=false 108 | darwin=false 109 | nonstop=false 110 | case "$( uname )" in #( 111 | CYGWIN* ) cygwin=true ;; #( 112 | Darwin* ) darwin=true ;; #( 113 | MSYS* | MINGW* ) msys=true ;; #( 114 | NONSTOP* ) nonstop=true ;; 115 | esac 116 | 117 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 118 | 119 | 120 | # Determine the Java command to use to start the JVM. 121 | if [ -n "$JAVA_HOME" ] ; then 122 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 123 | # IBM's JDK on AIX uses strange locations for the executables 124 | JAVACMD=$JAVA_HOME/jre/sh/java 125 | else 126 | JAVACMD=$JAVA_HOME/bin/java 127 | fi 128 | if [ ! -x "$JAVACMD" ] ; then 129 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 130 | 131 | Please set the JAVA_HOME variable in your environment to match the 132 | location of your Java installation." 133 | fi 134 | else 135 | JAVACMD=java 136 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 137 | 138 | Please set the JAVA_HOME variable in your environment to match the 139 | location of your Java installation." 140 | fi 141 | 142 | # Increase the maximum file descriptors if we can. 143 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then 144 | case $MAX_FD in #( 145 | max*) 146 | MAX_FD=$( ulimit -H -n ) || 147 | warn "Could not query maximum file descriptor limit" 148 | esac 149 | case $MAX_FD in #( 150 | '' | soft) :;; #( 151 | *) 152 | ulimit -n "$MAX_FD" || 153 | warn "Could not set maximum file descriptor limit to $MAX_FD" 154 | esac 155 | fi 156 | 157 | # Collect all arguments for the java command, stacking in reverse order: 158 | # * args from the command line 159 | # * the main class name 160 | # * -classpath 161 | # * -D...appname settings 162 | # * --module-path (only if needed) 163 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. 164 | 165 | # For Cygwin or MSYS, switch paths to Windows format before running java 166 | if "$cygwin" || "$msys" ; then 167 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) 168 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) 169 | 170 | JAVACMD=$( cygpath --unix "$JAVACMD" ) 171 | 172 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 173 | for arg do 174 | if 175 | case $arg in #( 176 | -*) false ;; # don't mess with options #( 177 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath 178 | [ -e "$t" ] ;; #( 179 | *) false ;; 180 | esac 181 | then 182 | arg=$( cygpath --path --ignore --mixed "$arg" ) 183 | fi 184 | # Roll the args list around exactly as many times as the number of 185 | # args, so each arg winds up back in the position where it started, but 186 | # possibly modified. 187 | # 188 | # NB: a `for` loop captures its iteration list before it begins, so 189 | # changing the positional parameters here affects neither the number of 190 | # iterations, nor the values presented in `arg`. 191 | shift # remove old arg 192 | set -- "$@" "$arg" # push replacement arg 193 | done 194 | fi 195 | 196 | # Collect all arguments for the java command; 197 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of 198 | # shell script including quotes and variable substitutions, so put them in 199 | # double quotes to make sure that they get re-expanded; and 200 | # * put everything else in single quotes, so that it's not re-expanded. 201 | 202 | set -- \ 203 | "-Dorg.gradle.appname=$APP_BASE_NAME" \ 204 | -classpath "$CLASSPATH" \ 205 | org.gradle.wrapper.GradleWrapperMain \ 206 | "$@" 207 | 208 | # Use "xargs" to parse quoted args. 209 | # 210 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. 211 | # 212 | # In Bash we could simply go: 213 | # 214 | # readarray ARGS < <( xargs -n1 <<<"$var" ) && 215 | # set -- "${ARGS[@]}" "$@" 216 | # 217 | # but POSIX shell has neither arrays nor command substitution, so instead we 218 | # post-process each arg (as a line of input to sed) to backslash-escape any 219 | # character that might be a shell metacharacter, then use eval to reverse 220 | # that process (while maintaining the separation between arguments), and wrap 221 | # the whole thing up as a single "set" statement. 222 | # 223 | # This will of course break if any of these variables contains a newline or 224 | # an unmatched quote. 225 | # 226 | 227 | eval "set -- $( 228 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | 229 | xargs -n1 | 230 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | 231 | tr '\n' ' ' 232 | )" '"$@"' 233 | 234 | exec "$JAVACMD" "$@" 235 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | mavenCentral() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | maven { 14 | url = "https://api.xposed.info" 15 | } 16 | } 17 | } 18 | rootProject.name = "processhook" 19 | include ':app' 20 | 21 | def sdkDir = file("~/android-sdk") 22 | System.setProperty('sdk.dir', sdkDir.absolutePath) --------------------------------------------------------------------------------