۱. هوک کردن توابع بدون نام (Signature/Pattern Scanning)
وقتی یک فایل .so را در IDA Pro باز میکنید، متوجه میشوید بسیاری از توابع نام ندارند و به صورت sub_1A2B نمایش داده میشوند. اگر آدرس این توابع به دلیل تغییر نسخه اپلیکیشن عوض شود، اسکریپت ما از کار میافتد.
راه حل هوشمندانه، استفاده از Memory.scan برای پیدا کردن یک الگوی ثابت از بایتها (Signature) است که منحصر به آن تابع باشد.
کد فریدا (پیدا کردن تابع با جستجوی بایت):
javascript
function hookByPattern() {
/* الگوی بایتهای تابع مورد نظر (مثلا شروع تابع در اسمبلی) */
/* علامت ?? یعنی این بایت میتواند هر چیزی باشد (Wildcard) */
var pattern = "FF 43 00 D1 ?? ?? ?? 7F 01 00 80 D2";
var module = Process.getModuleByName("libnative-lib.so");
Memory.scan(module.base, module.size, pattern, {
onMatch: function (address, size) {
console.log("[+] Pattern found at: " + address);
/* حالا که آدرس را پیدا کردیم، آن را هوک میکنیم */
Interceptor.attach(address, {
onEnter: function (args) {
console.log("[*] Function hooked via pattern!");
}
});
return 'stop'; // توقف اسکن بعد از اولین پیدا شدن
},
onComplete: function () {
console.log("[*] Scan complete.");
}
});
}