Skip to content

۲. دسترسی به آرگومان‌ها و فراخوانی متد اصلی ​

گاهی نمی‌خواهیم کل منطق را تغییر دهیم، بلکه فقط می‌خواهیم ورودی‌ها را ببینیم (Sniffing) یا آن‌ها را قبل از رسیدن به متد اصلی تغییر دهیم.

سناریو: استخراج نام کاربری و رمز عبور ​

کد جاوا:

java
package com.example.app

public class LoginManager {
    public void validateLogin(String username, String password) {
        if (username.equals("admin") && password.equals("12345")) {
            /* Login success */            
        }
    }
}

کد فریدا:

javascript
Java.perform(function () {
    var LoginManager = Java.use("com.example.app.LoginManager")

    LoginManager.validateLogin.implementation = function (usr, pwd) {
        /* لاگ کردن آرگومان‌ها */        
        console.log("[*] Login attempt detected:")
        console.log("    Username: " + usr)
        console.log("    Password: " + pwd)

        /* تغییر آرگومان قبل از ارسال به متد اصلی (اختیاری) */        
        var newPassword = "12345" 

        /* فراخوانی متد اصلی با آرگومان‌های (احتمالا تغییر یافته) */        
        /* this به نمونه جاری کلاس اشاره دارد */        
        this.validateLogin(usr, newPassword)
    }
})