Skip to content

۲. سناریو عملی: استخراج اطلاعات زنده کاربر ​

فرض کنید کاربر در اپلیکیشن لاگین کرده است. اطلاعات این کاربر در یک شیء به نام UserSession در حافظه نگهداری می‌شود. با Java.use نمی‌توانیم به این اطلاعات برسیم چون آن شیء قبلا ساخته شده. اما با choose می‌توانیم آن را پیدا کنیم.

سناریو: دزدیدن توکن Session فعال ​

کد جاوا (کلاس موجود در حافظه):

java
package com.example.app

public class UserSession {
    private String username
    private String sessionToken

    /* این شیء قبلا ساخته شده و در حافظه است */    
    public UserSession(String user, String token) {
        this.username = user
        this.sessionToken = token
    }
}

کد فریدا (پیدا کردن و خواندن):

javascript
Java.perform(function () {
    Java.choose("com.example.app.UserSession", {
        onMatch: function (instance) {
            console.log("[*] Found UserSession!")
            
            /* دسترسی به فیلدها با .value */            
            console.log("User: " + instance.username.value)
            console.log("Token: " + instance.sessionToken.value)
            
            /* چون معمولا فقط یک Session داریم، جستجو را متوقف می‌کنیم */            
            return 'stop'
        },
        onComplete: function () {
            console.log("[*] Done searching.")
        }
    })
})

نکته حرفه‌ای (توقف جستجو)

اگر دنبال یک شیء خاص (مثلا Singleton) هستید و آن را پیدا کردید، نیازی نیست جستجو ادامه پیدا کند. می‌توانید در پایان onMatch عبارت return 'stop' را بنویسید تا اسکن متوقف شود و فشار روی CPU کم شود.