۳. جادوی Stacktrace (چه کسی مرا صدا زد؟)
این احتمالا مفیدترین تکنیک در مهندسی معکوس است. فرض کنید متدی را هوک کردهاید که کار رمزنگاری را انجام میدهد. آرگومانها را میبینید، اما سوال اصلی اینجاست: "کدام دکمه یا کدام کلاس این متد را صدا زد؟"
برای فهمیدن این موضوع، باید "Stacktrace" (مسیر فراخوانی) را چاپ کنیم. در جاوا، با ساختن یک شیء Exception جدید، میتوانیم تاریخچه فراخوانی را بیرون بکشیم.
کد فریدا (چاپ Stacktrace):
javascript
Java.perform(function () {
var Utils = Java.use("com.example.app.Utils")
/* کلاسهای مورد نیاز برای تولید Stacktrace */
var Log = Java.use("android.util.Log")
var Exception = Java.use("java.lang.Exception")
Utils.sensitiveMethod.implementation = function () {
console.log("[*] sensitiveMethod called!")
/* 1. ساخت یک Exception فیک */
/* 2. استفاده از Log.getStackTraceString برای تبدیل آن به متن */
var trace = Log.getStackTraceString(Exception.$new())
console.log("\n[Stacktrace Output]:\n" + trace)
return this.sensitiveMethod()
}
})تحلیل خروجی
خروجی این کد لیستی از متدهاست که از پایین به بالا اجرا شدهاند تا به متد فعلی رسیدهاند. با دنبال کردن این مسیر، میتوانید منطق بیزنس اپلیکیشن را مهندسی معکوس کنید.