۲. کار با رجیسترهای CPU (Advanced Context)
در معماری ARM (که قلب اندروید است)، آرگومانهای تابع در رجیسترهای خاصی قرار میگیرند.
- در ARM64: رجیسترهای
x0تاx7ورودیها هستند. - در ARM32: رجیسترهای
r0تاr3ورودیها هستند.
با استفاده از this.context در فریدا، شما قدرت ابرانسانی پیدا میکنید! میتوانید دقیقا قبل از اجرای یک دستور اسمبلی، مقدار داخل رجیستر را عوض کنید.
سناریو: بایپس چک کردن مقدار حساس در CPU
فرض کنید تابعی دارید که یک عدد را چک میکند. اگر عدد درون رجیستر x0 برابر ۱ باشد، شما را روت تشخیص میدهد. ما در لحظه ورود، x0 را به صفر تبدیل میکنیم.
کد فریدا (دستکاری مستقیم رجیستر):
javascript
var funcPtr = Module.findExportByName("libsecure.so", "check_security");
Interceptor.attach(funcPtr, {
onEnter: function (args) {
/* دسترسی به رجیسترهای CPU بر اساس معماری دستگاه */
/* این کد برای ARM64 است */
var x0_value = this.context.x0;
console.log("[*] Initial X0 value: " + x0_value);
if (x0_value.toInt32() === 1) {
/* تغییر مقدار رجیستر در لحظه */
this.context.x0 = ptr(0);
console.log("[+] X0 register modified to 0 to bypass check.");
}
}
});