├── .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 |
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 | [](https://github.com/rifsxd/process-hook/blob/master/LICENSE)
14 | 
15 | 
16 | [](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)
--------------------------------------------------------------------------------