Useful Patches
3.28K subscribers
2 files
18 links
Useful Patches for Reversing Android Apps and Games
by @MuhammadRidwan87
Main Channel @TDOhex
For feedback @TDOhex_Discussion
Download Telegram
Channel created
Useful Notes On Data types
With Patches of arm32/64


These notes are made for those people who not much familiar with coding and for those lazy modders that don't dig in depth.
━━━━━━━━━━━━━━━━━━━━━━
Boolean = 8-bit, C bool
true or false

👉 arm32
mov r0, 1
bx lr
Patch = 0100A0E31EFF2FE1

mov r0, 0
bx lr
Patch = 0000A0E31EFF2FE1

👉 arm64
mov w0, 1
ret
Patch = 20008052C0035FD6

mov w0, 0
ret
Patch = 00008052C0035FD6
━━━━━━━━━━━━━━━━━━━━━━
Void = type with an empty set of values

👉 arm32
nop
bx lr
Patch = 00F020E31EFF2FE1

👉 arm64
nop
ret
Patch = 1F2003D5C0035FD6
━━━━━━━━━━━━━━━━━━━━━━
void* pointer = addresses to data or code.
A void* pointer can be converted into any other type of data pointer.
https://en.cppreference.com/w/cpp/language/pointer#Pointers_to_void
━━━━━━━━━━━━━━━━━━━━━━
HalfByte = 4-bit (Nibble)
Range = -8 to 7 (signed)
Hexadecimal = 0x7
Decimal = 7
Binary = 111

👉 arm32
mov r0, 7
Patch = 0700A0E3

👉 arm64
mov w0, 7
Patch = E0008052
━━━━━━━━━━━━━━━━━━━━━━
Byte = 8-bit, C char, Swift Int8
Range = -128 to 127 (signed)
Hexadecimal = 0x7f
Decimal = 127
Binary = 1111111

👉 arm32
mov r0, #127
bx lr
Patch = 7F00A0E31EFF2FE1
Or
movs r0, 0x7f
bx lr
Patch = 7F00B0E31EFF2FE1

👉 arm64
mov w0, 0x7f
ret
Patch = E00F8052C0035FD6
━━━━━━━━━━━━━━━━━━━━━━
Halfword = 16-bit, C short, Swift Int16
Range = -32,768 to 32,767 (signed)
Hexadecimal = 0x7fff
Decimal = 32767
Binary = 111111111111111

👉 arm32
mov r0, #32767
bx lr
Patch = FF0F07E31EFF2FE1
Or
movt r0, 0x7fff
bx lr
Patch = FF0F47E31EFF2FE1

👉 arm64
mov w0, 0x7fff
ret
Patch = E0FF8F52C0035FD6
━━━━━━━━━━━━━━━━━━━━━━
Word = 32-bit, C int, Swift Int32
Range = -2,147,483,648 to 2,147,483,647 (signed)
Hexadecimal = 0x7fffffff
Decimal = 2147483647
Binary = 1111111111111111111111111111111

Note: If parameter is larger than 16 bytes then it is passed by address.

For passing this value 0x7fffffff
👉 arm32
mvn r0, #2147483647
bx lr
Patch = 0201A0E31EFF2FE1
Or
movw r0, 0xffff
movt r0, 0x7fff
bx lr
Patch = FF0F0FE3FF0F47E31EFF2FE1

👉 arm64
mov w0, 0xffff
movk w0, 0x7fff, lsl 16
ret
Patch = E0FF9F52E0FFAF72C0035FD6
Or
mov w0, 0x7fffffff
ret
Patch = 0000B012C0035FD6
━━━━━━━━━━━━━━━━━━━━━━
Doubleword = 64-bit, C long, Swift Int
Range = -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 (signed)
Hexadecimal = 0x7fffffffffffffff
Decimal = 9223372036854775807
Binary = 111111111111111111111111111111111111111111111111111111111111111

Note: Remember, If parameter is larger than 16 bytes then it is passed by address.

For passing this value 0xffffffff
👉 arm32
mvn r1, #2147483648
bx lr
Patch = 0211E0E31EFF2FE1
Or
movw r0, 0xffff
movt r0, 0xffff
bx lr
Patch = FF0F0FE3FF0F4FE31EFF2FE1

👉 arm64
Note: Use "x" ragister for 64-bit values

For passing this value 0x7fffffffff
mov x0, 0xffff
movk x0, 0xffff, lsl 16
movk x0, 0x7f, lsl 32
ret
Patch = E0FF9FD2E0FFBFF2E00FC0F2C0035FD6
Or
orr x0, xzr, 0x7fffffffff
ret
Patch = E09B40B2C0035FD6
━━━━━━━━━━━━━━━━━━━━━━
Q. How to apply patches?
A. Follow the steps
1. Copy patche from snippets
2. Run any hex editor
3. Go to your offset
4. Paste your patche
Or
5. Enter this command if you are using radare2

wx CopyPastePatchHere @ 0xYourOffset

Example:
cd /sdacard
r2 -w mylib.so
wx 20008052C0035FD6 @ 0xa1234

━━━━━━━━━━━━━━━━━━━
♻️ Join Channel: @Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
👍1714
Notes on android.view setVisibility

👉 Visible = The View is visible to the user
XML attribute: android:visibility="visible"
Java code: view.setVisibility(View.VISIBLE);
Integer Type: 0x0
Constant Value: 0

👉 Invisible = The View is hidden to the user, but still takes up space in the layout
XML attribute: android:visibility="invisible"
Java code: view.setVisibility(View.INVISIBLE);
Integer Type: 0x4
Constant Value: 1

👉 Gone =  The View is completely hidden, and it does not take up space in the layout
XML attribute: android:visibility="gone"
Java code: view.setVisibility(View.GONE);
Integer Type: 0x8
Constant Value: 2
━━━━━━━━━━━━━━━━━━━
♻️ Join Channel: @Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
10👍7👏4😱1
1. High-level Patch for Disabling Ads from Android Apps and Games

For description of this patch
https://t.me/TDOhex/383
━━━━━━━━━━━━━━━━━━━━━━
VoidSearch:
(invoke(?!.*(close|Deactiv|Destroy|Dismiss|Disabl|error|player|remov|expir|fail|hide|skip|stop|Throw)).*/(adcolony|admob|ads|adsdk|aerserv|appbrain|applovin|appodeal|appodealx|appsflyer|bytedance/sdk/openadsdk|chartboost|flurry|fyber|hyprmx|inmobi|ironsource|mbrg|mbridge|mintegral|moat|mobfox|mobilefuse|mopub|my/target|ogury|Omid|onesignal|presage|smaato|smartadserver|snap/adkit|snap/appadskit|startapp|taboola|tapjoy|tappx|vungle)/.*>(request.*|(.*(activat|Banner|build|Event|exec|header|html|initAd|initi|JavaScript|Interstitial|load|log|MetaData|metri|Native|onAd|propert|report|response|Rewarded|show|trac|url|(fetch|refresh|render|video)Ad).*)|.*Request)\(.*\)V)

VoidReplace: nop
━━━━━━━━━━━━━━━━━━━━━━
BooleanSearch:
(invoke(?!.*(close|Deactiv|Destroy|Dismiss|Disabl|error|player|remov|expir|fail|hide|skip|stop|Throw)).*/(adcolony|admob|ads|adsdk|aerserv|appbrain|applovin|appodeal|appodealx|appsflyer|bytedance/sdk/openadsdk|chartboost|flurry|fyber|hyprmx|inmobi|ironsource|mbrg|mbridge|mintegral|moat|mobfox|mobilefuse|mopub|my/target|ogury|Omid|onesignal|presage|smaato|smartadserver|snap/adkit|snap/appadskit|startapp|taboola|tapjoy|tappx|vungle)/.*>(request.*|(.*(activat|Banner|build|Event|exec|header|html|initAd|initi|JavaScript|Interstitial|load|log|MetaData|metri|Native|(can|get|is|has|was)Ad|propert|report|response|Rewarded|show|trac|url|(fetch|refresh|render|video)Ad).*)|.*Request)\(.*\)Z\n\n\s{4})move-result\s([pv]\d+)

BooleanReplace: const/4 $9, 0x0
━━━━━━━━━━━━━━━━━━━━━━
StringSearch:
"(http.*|//.*)(61\.145\.124\.238|/2mdn\.net|-ads\.|\.5rocks\.io|\.ad\.|\.adadapted|\.admitad\.|\.admost\.|\.ads\.|\.aerserv\.|\.airpush\.|\.batmobil\.|\.chartboost\.|\.cloudmobi\.|\.conviva\.|\.dov-e\.com|\.fyber\.|\.mng-ads\|\.mydas\.|\.predic\.|\.talkingdata\.|\.tapdaq\.|\.tele\.fm|\.unity3d\.|\.unity\.|\.wapstart\.|\.xdrig\.|\.zapr\.|\/ad\.|\/ads|a4\.tl|accengage|ad4push|ad4screen|ad-mail|ad\..*_logging|ad\.api\.kaffnet\.|ad\.cauly\.co\.|adbuddiz|adc3-launch|adcolony|adfurikun|adincube|adinformation|adkmob|admax\.|admixer|admob|admost|ads\.mdotm\.|adsafeprotected|adservice|adsmogo|adsrvr|adswizz|adtag|adtech\.de|advert|adwhirl|adz\.wattpad\.|alimama\.|alta\.eqmob\.|amazon-.*ads|amazon\..*ads|amobee|analytics|anvato|appboy|appbrain|applovin|applvn|appmetrica|appnext|appodeal|appsdt|appsflyer|apsalar|avocarrot|axonix|banners-slb\.mobile\.yandex\.net|banners\.mobile\.yandex\.net|brightcove\.|burstly|cauly|cloudfront|cmcm\.|com\.google\.android\.gms\.ads\.identifier\.service\.START|comscore|contextual\.media\.net|crashlytics|crispwireless|criteo\.|dmtry\.|doubleclick|duapps|dummy|flurry|fwmrm|gad|getads|gimbal|glispa|google\.com\/dfp|googleAds|googleads|googleapis\..*\.ad-.*|googlesyndication|googletagmanager|greystripe|gstatic|heyzap|hyprmx|iasds01|inmobi|inneractive|instreamatic|integralads|jumptag|jwpcdn|jwpltx|jwpsrv|kochava|localytics|madnet|mapbox|mc\.yandex\.ru|media\.net|metrics\.|millennialmedia|mixpanel|mng-ads\.com|moat\.|moatads|mobclix|mobfox|mobpowertech|moodpresence|mopub|native_ads|nativex\.|nexage\.|ooyala|openx\.|pagead|pingstart|prebid|presage\.io|pubmatic|pubnative|rayjump|saspreview|scorecardresearch|smaato|smartadserver|sponsorpay|startappservice|startup\.mobile\.yandex\.net|statistics\.videofarm\.daum\.net|supersonicads|taboola|tapas|tapjoy|tapylitics|target\.my\.com|teads\.|umeng|unityads|vungle|zucks).*"

StringReplace: "127.0.0.1"
━━━━━━━━━━━━━━━━━━━━━━
11👍11🔥2👏2😱2
2. Moderate-level Patch for Disabling Ads from Android Apps and Games

For description of this patch
https://t.me/TDOhex/383
━━━━━━━━━━━━━━━━━━━━━━
VoidSearch:
(invoke(?!.*(close|Destroy|Dismiss|Disabl|error|player|remov|expir|fail|hide|skip|stop)).*/(adcolony|admob|ads|adsdk|aerserv|appbrain|applovin|appodeal|appodealx|appsflyer|bytedance/sdk/openadsdk|chartboost|flurry|fyber|hyprmx|inmobi|ironsource|mbrg|mbridge|mintegral|moat|mobfox|mobilefuse|mopub|my/target|ogury|Omid|onesignal|presage|smaato|smartadserver|snap/adkit|snap/appadskit|startapp|taboola|tapjoy|tappx|vungle)/.*>((.*(Banner|initAd|Interstitial|load|Native|onAd|Rewarded|show|(fetch|refresh|render|request|video)Ad).*))\(.*\)V)

VoidReplace: nop
━━━━━━━━━━━━━━━━━━━━━━
BooleanSearch:
(invoke(?!.*(close|Destroy|Dismiss|Disabl|error|player|remov|expir|fail|hide|skip|stop)).*/(adcolony|admob|ads|adsdk|aerserv|appbrain|applovin|appodeal|appodealx|appsflyer|bytedance/sdk/openadsdk|chartboost|flurry|fyber|hyprmx|inmobi|ironsource|mbrg|mbridge|mintegral|moat|mobfox|mobilefuse|mopub|my/target|ogury|Omid|onesignal|presage|smaato|smartadserver|snap/adkit|snap/appadskit|startapp|taboola|tapjoy|tappx|vungle)/.*>((.*(Banner|initAd|Interstitial|load|Native|(can|get|has|is|was)Ad|Rewarded|show|(fetch|refresh|render|request|video)Ad).*))\(.*\)Z\n\n\s{4})move-result\s([pv]\d+)

BooleanReplace: const/4 $9, 0x0
━━━━━━━━━━━━━━━━━━━━━━
StringSearch:
"(http.*|//.*)(61\.145\.124\.238|/2mdn\.net|-ads\.|\.5rocks\.io|\.ad\.|\.adadapted|\.admitad\.|\.admost\.|\.ads\.|\.aerserv\.|\.airpush\.|\.batmobil\.|\.chartboost\.|\.cloudmobi\.|\.conviva\.|\.dov-e\.com|\.fyber\.|\.mng-ads\|\.mydas\.|\.predic\.|\.talkingdata\.|\.tapdaq\.|\.tele\.fm|\.unity3d\.|\.unity\.|\.wapstart\.|\.xdrig\.|\.zapr\.|\/ad\.|\/ads|a4\.tl|accengage|ad4push|ad4screen|ad-mail|ad\..*_logging|ad\.api\.kaffnet\.|ad\.cauly\.co\.|adbuddiz|adc3-launch|adcolony|adfurikun|adincube|adinformation|adkmob|admax\.|admixer|admob|admost|ads\.mdotm\.|adsafeprotected|adservice|adsmogo|adsrvr|adswizz|adtag|adtech\.de|advert|adwhirl|adz\.wattpad\.|alimama\.|alta\.eqmob\.|amazon-.*ads|amazon\..*ads|amobee|analytics|anvato|appboy|appbrain|applovin|applvn|appmetrica|appnext|appodeal|appsdt|appsflyer|apsalar|avocarrot|axonix|banners-slb\.mobile\.yandex\.net|banners\.mobile\.yandex\.net|brightcove\.|burstly|cauly|cloudfront|cmcm\.|com\.google\.android\.gms\.ads\.identifier\.service\.START|comscore|contextual\.media\.net|crashlytics|crispwireless|criteo\.|dmtry\.|doubleclick|duapps|dummy|flurry|fwmrm|gad|getads|gimbal|glispa|google\.com\/dfp|googleAds|googleads|googleapis\..*\.ad-.*|googlesyndication|googletagmanager|greystripe|gstatic|heyzap|hyprmx|iasds01|inmobi|inneractive|instreamatic|integralads|jumptag|jwpcdn|jwpltx|jwpsrv|kochava|localytics|madnet|mapbox|mc\.yandex\.ru|media\.net|metrics\.|millennialmedia|mixpanel|mng-ads\.com|moat\.|moatads|mobclix|mobfox|mobpowertech|moodpresence|mopub|native_ads|nativex\.|nexage\.|ooyala|openx\.|pagead|pingstart|prebid|presage\.io|pubmatic|pubnative|rayjump|saspreview|scorecardresearch|smaato|smartadserver|sponsorpay|startappservice|startup\.mobile\.yandex\.net|statistics\.videofarm\.daum\.net|supersonicads|taboola|tapas|tapjoy|tapylitics|target\.my\.com|teads\.|umeng|unityads|vungle|zucks).*"

StringReplace: "127.0.0.1"
━━━━━━━━━━━━━━━━━━━━━━
9👍8🔥2🥰1
3. Low-level Patch for Disabling Ads from Android Apps and Games

☛ For description of this patch
https://t.me/TDOhex/383
━━━━━━━━━━━━━━━━━━━━━━
VoidSearch:
(invoke(?!.*(close|Destroy|Dismiss|Disabl|error|player|remov|expir|fail|hide|skip|stop)).*/(adcolony|admob|ads|adsdk|aerserv|appbrain|applovin|appodeal|appodealx|appsflyer|bytedance/sdk/openadsdk|chartboost|flurry|fyber|hyprmx|inmobi|ironsource|mbrg|mbridge|mintegral|moat|mobfox|mobilefuse|mopub|my/target|ogury|Omid|onesignal|presage|smaato|smartadserver|snap/adkit|snap/appadskit|startapp|taboola|tapjoy|tappx|vungle)/.*>(.*(load|show).*)\(.*\)V)

VoidReplace: nop
━━━━━━━━━━━━━━━━━━━━━━
BooleanSearch:
(invoke(?!.*(close|Destroy|Dismiss|Disabl|error|player|remov|expir|fail|hide|skip|stop)).*/(adcolony|admob|ads|adsdk|aerserv|appbrain|applovin|appodeal|appodealx|appsflyer|bytedance/sdk/openadsdk|chartboost|flurry|fyber|hyprmx|inmobi|ironsource|mbrg|mbridge|mintegral|moat|mobfox|mobilefuse|mopub|my/target|ogury|Omid|onesignal|presage|smaato|smartadserver|snap/adkit|snap/appadskit|startapp|taboola|tapjoy|tappx|vungle)/.*>(.*(load|show).*)\(.*\)Z\n\n\s{4})move-result\s([pv]\d+)

BooleanReplace: const/4 $6, 0x0
━━━━━━━━━━━━━━━━━━━━━━
StringSearch:
"(http.*|//.*)(61\.145\.124\.238|/2mdn\.net|-ads\.|\.5rocks\.io|\.ad\.|\.adadapted|\.admitad\.|\.admost\.|\.ads\.|\.aerserv\.|\.airpush\.|\.batmobil\.|\.chartboost\.|\.cloudmobi\.|\.conviva\.|\.dov-e\.com|\.fyber\.|\.mng-ads\|\.mydas\.|\.predic\.|\.talkingdata\.|\.tapdaq\.|\.tele\.fm|\.unity3d\.|\.unity\.|\.wapstart\.|\.xdrig\.|\.zapr\.|\/ad\.|\/ads|a4\.tl|accengage|ad4push|ad4screen|ad-mail|ad\..*_logging|ad\.api\.kaffnet\.|ad\.cauly\.co\.|adbuddiz|adc3-launch|adcolony|adfurikun|adincube|adinformation|adkmob|admax\.|admixer|admob|admost|ads\.mdotm\.|adsafeprotected|adservice|adsmogo|adsrvr|adswizz|adtag|adtech\.de|advert|adwhirl|adz\.wattpad\.|alimama\.|alta\.eqmob\.|amazon-.*ads|amazon\..*ads|amobee|analytics|anvato|appboy|appbrain|applovin|applvn|appmetrica|appnext|appodeal|appsdt|appsflyer|apsalar|avocarrot|axonix|banners-slb\.mobile\.yandex\.net|banners\.mobile\.yandex\.net|brightcove\.|burstly|cauly|cloudfront|cmcm\.|com\.google\.android\.gms\.ads\.identifier\.service\.START|comscore|contextual\.media\.net|crashlytics|crispwireless|criteo\.|dmtry\.|doubleclick|duapps|dummy|flurry|fwmrm|gad|getads|gimbal|glispa|google\.com\/dfp|googleAds|googleads|googleapis\..*\.ad-.*|googlesyndication|googletagmanager|greystripe|gstatic|heyzap|hyprmx|iasds01|inmobi|inneractive|instreamatic|integralads|jumptag|jwpcdn|jwpltx|jwpsrv|kochava|localytics|madnet|mapbox|mc\.yandex\.ru|media\.net|metrics\.|millennialmedia|mixpanel|mng-ads\.com|moat\.|moatads|mobclix|mobfox|mobpowertech|moodpresence|mopub|native_ads|nativex\.|nexage\.|ooyala|openx\.|pagead|pingstart|prebid|presage\.io|pubmatic|pubnative|rayjump|saspreview|scorecardresearch|smaato|smartadserver|sponsorpay|startappservice|startup\.mobile\.yandex\.net|statistics\.videofarm\.daum\.net|supersonicads|taboola|tapas|tapjoy|tapylitics|target\.my\.com|teads\.|umeng|unityads|vungle|zucks).*"

StringReplace: "127.0.0.1"
━━━━━━━━━━━━━━━━━━━━━━
🔥24👍134👎2
Patch for Overriding SharedPreferences
━━━━━━━━━━━━━━━━━━━━━━
Usage:
👉 1. Copy snippet and paste into onCreate method of Launcher Activity
(It would be better if you create new method and paste snippet then call it in onCreate of Launcher Activity)
👉 2. Increase 4 digits in registers of that method in which you put this snippet
and increase 5 digits if you want to use snippet of long data
👉 For Video Tutorial
https://t.me/TDOhex/387
━━━━━━━━━━━━━━━━━━━━━━
👉 1. For Storing Boolean Data

const-string v0, "yourSPName" # Put the name of that SharedPreferences which you want to edit.

    const/4 v1, 0x0

    invoke-virtual {p0, v0, v1}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;

    move-result-object p0

    invoke-interface {p0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object p0

    const/4 v2, 0x1 # Boolean value, put the value as your requirement.

    const-string v3, "isAppBought" # Boolean key, put your keyword that you find out.

    invoke-interface {p0, v3, v2}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;

    invoke-interface {p0}, Landroid/content/SharedPreferences$Editor;->apply()V

━━━━━━━━━━━━━━━━━━━━━━
👉 For Storing Integer Data

const-string v0, "yourSPName" # Put the name of that SharedPreferences which you want to edit.

    const/4 v1, 0x0

    invoke-virtual {p0, v0, v1}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;

    move-result-object p0

    invoke-interface {p0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object p0

    const v2, 0x7fffffff # Integer value, put the value as your requirement.

    const-string v3, "userDiamonds" # Integer key, put your keyword that you find out.

    invoke-interface {p0, v3, v2}, Landroid/content/SharedPreferences$Editor;->putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;

    invoke-interface {p0}, Landroid/content/SharedPreferences$Editor;->apply()V

━━━━━━━━━━━━━━━━━━━━━━
👉 For Storing String Data

const-string v0, "yourSPName" # Put the name of that SharedPreferences which you want to edit.

    const/4 v1, 0x0

    invoke-virtual {p0, v0, v1}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;

    move-result-object p0

    invoke-interface {p0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object p0

    const-string v2, "active" # String value, put the value as your requirement.

    const-string v3, "subStatus" # String key, put your keyword that you find out.

    invoke-interface {p0, v3, v2}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    invoke-interface {p0}, Landroid/content/SharedPreferences$Editor;->apply()V

━━━━━━━━━━━━━━━━━━━━━━
👉 For Storing Long Data

const-string v0, "yourSPName" # Put the name of that SharedPreferences which you want to edit.

    const/4 v1, 0x0

    invoke-virtual {p0, v0, v1}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;

    move-result-object p0

    invoke-interface {p0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object p0

    const-wide v3, 0x7fffffffffffffffL # Long value, put the value as your requirement.

    const-string v2, "userCoins" # Long key, put your keyword that you find out.

    invoke-interface {p0, v2, v3, v4}, Landroid/content/SharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;

    invoke-interface {p0}, Landroid/content/SharedPreferences$Editor;->apply()V

━━━━━━━━━━━━━━━━━━━
♻️ Join Channel: @Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
👍127🥰3🤯1
Index:
👉 Useful Notes On Data types
With Patches of arm32/64

https://t.me/Android_Patches/18

👉 Notes on android.view setVisibility
https://t.me/Android_Patches/19

👉 1. High-level Patch for Disabling Ads from Android Apps and Games
https://t.me/Android_Patches/20

👉 2. Moderate-level Patch for Disabling Ads from Android Apps and Games
https://t.me/Android_Patches/21

👉 3. Low-level Patch for Disabling Ads from Android Apps and Games
https://t.me/Android_Patches/22

👉 Patch for Overriding SharedPreferences
https://t.me/Android_Patches/24

👉 How to Fix Google Maps in Mod Apps
https://t.me/Android_Patches/26

👉 Patch to Inject Fake Build Prop into Any App/Game
https://t.me/Android_Patches/27

━━━━━━━━━━━━━━━━━━━
♻️ Join Channel: @Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
👍4👏21
How to Fix Google Maps in Mod Apps
━━━━━━━━━━━━━━━━━━━━━━
1. Create a new Google Cloud project in the Cloud Console

For creating new project:
https://console.cloud.google.com/projectcreate
━━━━━━━━━━━━━━━━━━━━━━
2. To use Google Maps Platform, you must enable the APIs or SDKs you plan to use with your project

For enabling Maps SDK for Android:
https://console.cloud.google.com/apis/library/maps-android-backend.googleapis.com

For enabling Geocoding API:
https://console.cloud.google.com/apis/library/geocoding-backend.googleapis.com

For enabling Places API:
https://console.cloud.google.com/apis/library/places-backend.googleapis.com
━━━━━━━━━━━━━━━━━━━━━━
3. Go to the credentials page and create new api key

For creating new api key:
A. Go to the Google Maps Platform > Credentials page.
https://console.cloud.google.com/apis/credentials

B. On the Credentials page, click Create credentials > API key.
The API key created dialog displays your newly created API key.

C. Click Close.

The new API key is listed on the Credentials page under API keys.
(Remember to restrict the API key before using it in production.)
━━━━━━━━━━━━━━━━━━━━━━
4. To restrict an API key:

A. Go to the Google Maps Platform > Credentials page.
https://console.cloud.google.com/project/_/google/maps-apis/credentials

B. Select the API key that you want to set a restriction on. The API key property page appears.

C. Under Key restrictions, set the following restrictions:

Application restrictions:
-- Select Android apps.

API restrictions:
-- Click Restrict key
-- Select Maps SDK for Android, Geocoding API, Place API from Select APIs dropdown
-- To finalize your changes, click Save
━━━━━━━━━━━━━━━━━━━━━━
5. Go to Manifest or Resources of the target mod and find key of
com.google.android.geo.API_KEY
OR
com.google.android.maps.v2.API_KEY
Then replace with your api key.
━━━━━━━━━━━━━━━━━━━━━━
👉 For Practical Tutorial
https://t.me/TDOhex/389

Documentations:
https://developers.google.com/maps/documentation/android-sdk/cloud-setup#enabling-apis

https://developers.google.com/maps/documentation/android-sdk/get-api-key#restrict_key
━━━━━━━━━━━━━━━━━━━
♻️ Join Channel: @Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
81👍16🔥4🥰32👎1
Patch to Inject Fake Build Prop into Any App/Game
━━━━━━━━━━━━━━━━━━━
For description of this patch
https://t.me/TDOhex/391
━━━━━━━━━━━━━━━━━━━
Build Property
Information about the current build, extracted from system properties
Documentation:
https://developer.android.com/reference/android/os/Build
━━━━━━━━━━━━━━━━━━━
Manufacturer
The manufacturer of the product/hardware.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->MANUFACTURER:Ljava/lang/String;
Replace:
const-string $1, "Xiaomi"
━━━━━━━━━━━━━━━━━━━
Brand
The consumer-visible brand with which the product/hardware will be associated, if any.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->BRAND:Ljava/lang/String;
Replace:
const-string $1, "Xiaomi"
━━━━━━━━━━━━━━━━━━━
Model
The end-user-visible name for the end product.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->MODEL:Ljava/lang/String;
Replace:
const-string $1, "Redmi K20 Pro"
━━━━━━━━━━━━━━━━━━━
Product
The name of the overall product.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->PRODUCT:Ljava/lang/String;
Replace:
const-string $1, "raphael"
━━━━━━━━━━━━━━━━━━━
Device
The name of the industrial design.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->DEVICE:Ljava/lang/String;
Replace:
const-string $1, "raphael"
━━━━━━━━━━━━━━━━━━━
Board
The name of the underlying board, like "goldfish".

Search:
sget-object ([pv]\d+), Landroid/os/Build;->BOARD:Ljava/lang/String;
Replace:
const-string $1, "raphael"
━━━━━━━━━━━━━━━━━━━
Radio
The radio firmware version number.

Search:
invoke-static \{\}, Landroid/os/Build;->getRadioVersion\(\)Ljava/lang/String;\n\n    move-result-object ([pv]\d+)

Or
Search:
sget-object ([pv]\d+), Landroid/os/Build;->RADIO:Ljava/lang/String;

Replace:
const-string $1, "Unknown"
━━━━━━━━━━━━━━━━━━━
Hardware
The name of the hardware (from the kernel command line or /proc).

Search:
sget-object ([pv]\d+), Landroid/os/Build;->HARDWARE:Ljava/lang/String;
Replace:
const-string $1, "qcom"
━━━━━━━━━━━━━━━━━━━
Bootloader
The system bootloader version number.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->BOOTLOADER:Ljava/lang/String;
Replace:
const-string $1, "Unknown"
━━━━━━━━━━━━━━━━━━━
Fingerprint
A string that uniquely identifies this build. Do not attempt to parse this value.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->FINGERPRINT:Ljava/lang/String;
Replace:
const-string $1, "Xiaomi/raphael/raphael:11/RKQ1.200826.002/V12.5.4.0.RFKCNXM:user/release-keys"
━━━━━━━━━━━━━━━━━━━
ID
Either a changelist number, or a label like "M4-rc20".

Search:
sget-object ([pv]\d+), Landroid/os/Build;->ID:Ljava/lang/String;
Replace:
const-string $1, "RKQ1.200826.002"
━━━━━━━━━━━━━━━━━━━
Serial
A hardware serial number, if available. Alphanumeric only, case-insensitive. This field is always set to Build#UNKNOWN.

Search:
sget-object ([pv]\d+), Landroid/os/Build;->SERIAL:Ljava/lang/String;
Replace:
const-string $1, "Unknown"
━━━━━━━━━━━━━━━━━━━
♻️ Join Channel: @Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
👍19🔥153
Useful Patches pinned «Index: 👉 Useful Notes On Data types With Patches of arm32/64 https://t.me/Android_Patches/18 👉 Notes on android.view setVisibility https://t.me/Android_Patches/19 👉 1. High-level Patch for Disabling Ads from Android Apps and Games https://t.me/Android_Patches/20…»
How to Reach Place to Patch Trough revenuecat
━━━━━━━━━━━━━━━━━━━
Points:
1. Determining the subscription status of a user can be done using the CustomerInfo (Also known an PurchaserInfo)  and EntitlementInfo objects.
2. The EntitlementInfo object gives you access to all of the information about the status of a user's entitlements.
3. "pro" access will be granted if user has active entitlement.
4. CustomerInfo will be empty if no purchases have been made and no transactions have been synced.
━━━━━━━━━━━━━━━━━━━
Codes:
// Check if the specified entitlement is active
        if (customerInfo.getEntitlements().get(<my_entitlement_identifier>).isActive()) {
           
            // Grant user "pro" access

            // We can reach the actual location through the code flow here, where we can apply our patch.
       
        }

━━━━━━━━━━━━━━━━━━━
Documentations:
1. https://www.revenuecat.com/docs/making-purchases
2. https://www.revenuecat.com/docs/customer-info#checking-if-a-user-is-subscribed
3. https://www.revenuecat.com/docs/getting-started#%EF%B8%8F-check-subscription-status
4. https://www.revenuecat.com/docs/purchaserinfo#section-get-entitlement-information
━━━━━━━━━━━━━━━━━━━
Class
Lcom/revenuecat/purchases/CustomerInfo;
Or
Lcom/revenuecat/purchases/PurchaserInfo;

Method
getEntitlements()

Regex to Search:
invoke-virtual \{([pv]\d+)\}, Lcom/revenuecat/purchases/(CustomerInfo|PurchaserInfo);->getEntitlements\(\)Lcom/revenuecat/purchases/EntitlementInfos;([\w\W])*?move-result-object ([pv]\d+)

Note: Sometime it will be obfuscated. So, that time this keyword will help you.

Keyword: activeEntitlements: .

👉 For Practical Video on this Method
https://t.me/TDOhex/415
━━━━━━━━━━━━━━━━━━━
♻️ Join Channel: @Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
👍26🔥117👏4👌3
❤️
17🥰4
🚀 Introducing SigTool: APK Signature Analyzer Pro 

SigTool is an open-source tool designed for developers and security analysts to perform in-depth APK signature analysis. It offers:

- Signature Extraction & Hash Calculation
- Java-style HashCode Calculation
- PEM Certificate Generation

🔗 GitHub Repository:
https://github.com/muhammadrizwan87/sigtool
Requirements: pkg install python aapt openssl-tool
📦 Install: pip install sigtool
💡 Usage: sigtool -h

Your feedback and contributions are welcome! If you find it helpful, don’t forget to star the repo and share it with your peers.
━━━━━━━━━━━━━━━━━━━
♻️ Join Channel:
@Android_Patches
📣 Second Channel:
@TDOhex
💬 Discussion Group:
@TDOhex_Discussion
━━━━━━━━━━━━━━━━━━━
👍133🔥2🫡1