Skip to content

۵. دسترسی و تغییر فیلدها (متغیرهای کلاس) ​

فریدا از طریق Reflection عمل می‌کند، بنابراین شما می‌توانید حتی متغیرهای private را بخوانید و تغییر دهید.

سناریو: خواندن توکن امنیتی مخفی ​

کد جاوا:

java
package com.example.security

public class Config {
    /* متغیر استاتیک و خصوصی */    
    private static String API_KEY = "SECRET_123_XYZ"
    
    /* متغیر Instance */    
    public boolean isProVersion = false
}

کد فریدا:

javascript
Java.perform(function () {
    var Config = Java.use("com.example.security.Config")

    /* 1. خواندن/نوشتن فیلد استاتیک (بدون نیاز به نمونه کلاس) */    
    /* توجه: از .value برای دسترسی به مقدار استفاده کنید */    
    console.log("Old API Key: " + Config.API_KEY.value)
    Config.API_KEY.value = "HACKED_KEY_999"

    /* 2. تغییر فیلد Instance (نیاز به هوک کردن یک متد یا پیدا کردن نمونه فعال دارد) */    
    /* فرض کنید متدی داریم که صدا زده می‌شود: */    
    Config.someMethod.implementation = function() {
        /* تغییر متغیر isProVersion برای همین نمونه */        
        this.isProVersion.value = true
        console.log("[+] Pro Version Activated!")
        
        this.someMethod()
    }
})

خلاصه نکات کلیدی Java.use ​

عملیاتسینتکس فریداتوضیحات
تعریف کلاسvar MyClass = Java.use("pkg.Class")ایجاد wrapper
هوک متدMyClass.method.implementation = fnبازنویسی رفتار
هوک OverloadMyClass.method.overload('type').imp...وقتی نام متد تکراری است
هوک سازندهMyClass.$init.implementationمتد Constructor
دسترسی به فیلدthis.fieldName.valueخواندن/نوشتن متغیرها