مقدمه ای بر فریدا برای مهندسی معکوس

مقدمه ای بر فریدا برای مهندسی معکوس
فریدا یک ابزار ابزار پویا است که به طور گسترده در حوزه مهندسی معکوس، تحقیقات امنیتی و آزمایش برنامه استفاده می شود. این به محققان و توسعه دهندگان اجازه می دهد تا اسکریپت های خود را به فرآیندهای در حال اجرا تزریق کنند تا رفتار خود را در زمان اجرا تجزیه و تحلیل و دستکاری کنند. این قابلیت قدرتمند برای درک نحوه عملکرد نرم افزار، شناسایی آسیب پذیری ها یا دور زدن محدودیت های خاص بدون تغییر باینری واقعی بسیار ارزشمند است، که به ویژه در سیستم های بسته یا اختصاصی مفید است.
مزایای استفاده از فریدا برای مهندسی معکوس
فریدا از پلتفرم های مختلفی از جمله ویندوز، لینوکس، macOS، iOS، اندروید و QNX پشتیبانی می کند. این پشتیبانی بین پلتفرمی برای تجزیه و تحلیل برنامههایی که در چندین پلتفرم در دسترس هستند، حیاتی است.
فریدا با اتصال به فرآیندهای موجود یا با ایجاد فرآیندهای جدید کار می کند. این نیازی به هیچ تغییری در خود باینری ندارد، که آن را به ابزاری ایده آل برای تجزیه و تحلیل باینری های تولید تبدیل می کند.
فریدا از جاوا اسکریپت (یا TypeScript) برای اسکریپت نویسی استفاده می کند که نوشتن و درک آن آسان است. این مانع ورود را کاهش می دهد و امکان نمونه سازی سریع و استقرار قلاب ها و دستکاری های پیچیده را فراهم می کند.
Frida یک API غنی ارائه می دهد که امکان دستکاری عمیق و قابلیت های نظارت را فراهم می کند. این شامل دسترسی به حافظه، رهگیری فراخوانی تابع، تغییر رجیسترها و فراخوانی پویا توابع بومی است.
یک جامعه پر جنب و جوش در اطراف فریدا وجود دارد که به مخزن بزرگی از اسکریپت ها و برنامه های افزودنی کمک می کند. این اکوسیستم یافتن راه حل یا کمک گرفتن برای مشکلات خاص را آسان تر می کند.
نمونه های پیشرفته استفاده از فریدا برای مهندسی معکوس
مثال 1: رهگیری و اصلاح آرگومان های تابع
فرض کنید در حال تجزیه و تحلیل یک تابع رمزگذاری اختصاصی در یک برنامه اندروید هستید و میخواهید اطلاعات ارسال شده به این تابع را مشاهده کنید. شما می توانید از Frida برای قطع فراخوانی تابع، ثبت آرگومان ها و حتی اصلاح آنها استفاده کنید.
Java.perform(function () {
var TargetClass = Java.use("com.example.app.EncryptionUtils");
TargetClass.encrypt.implementation = function (data) {
console.log("Original data: " + data);
// Modify the argument
var modifiedData = "modified_" + data;
console.log("Modified data: " + modifiedData);
// Continue with modified data
return this.encrypt(modifiedData);
};
});
این اسکریپت دادههای رمزگذاری شده را تغییر میدهد، که میتواند برای آزمایش نحوه مدیریت برنامه ورودیهای غیرمنتظره یا دور زدن بررسیهای امنیتی مفید باشد.
دور زدن سنجاق SSL در iOS
پین کردن SSL یک اقدام امنیتی است که برای کاهش حملات انسان در وسط با اعتبارسنجی گواهی سرور در برابر یک نسخه خوب شناخته شده تعبیه شده در برنامه استفاده می شود. از فریدا می توان برای دور زدن این موضوع با رهگیری بررسی های SSL مربوطه استفاده کرد.
ObjC.schedule(ObjC.mainQueue, function () {
var NSURLSessionDelegate = ObjC.protocols.NSURLSessionDelegate;
// Override the method that validates the server trust
Interceptor.attach(ObjC.classes.YourAppClass['- validateServerTrust:'].implementation, {
onEnter: function (args) {
// Log the server trust validation attempt
console.log("Server trust validation function called");
// Always return true for the validation result
args[2] = ptr("0x1");
}
});
});
این اسکریپت تابع اعتبار سنجی را مجبور می کند همیشه برگردد true
، به طور موثر پین SSL را دور می زند.
تجزیه و تحلیل دینامیک یک برنامه ویندوز
فرض کنید می خواهید استفاده از یک API ویندوز خاص را در یک برنامه ردیابی کنید تا نحوه تعامل آن با سیستم را درک کنید. Frida اتصال این تماسهای API و ثبت پارامترها و نتایج آنها را آسان میکند.
const kernel32 = Module.load("kernel32.dll");
const createFile = Module.findExportByName("kernel32.dll", "CreateFileW");
Interceptor.attach(createFile, {
onEnter: function (args) {
this.path = args[0].readUtf16String();
console.log("CreateFile called with path: " + this.path);
},
onLeave: function (retval) {
if (parseInt(retval, 16) !== -1) {
console.log("File opened successfully");
} else {
console.log("Failed to open file");
}
}
});
این اسکریپت قلاب CreateFileW
عملکرد در kernel32.dll
، مسیرهای دسترسی به فایل را ثبت می کند و در مورد موفقیت آمیز بودن عملیات باز کردن فایل گزارش می دهد.
چند نمونه برنامه نویسی اندروید:
- اسکریپت برای دور زدن تشخیص ریشه:
Java.perform(function() {
var targetClass = Java.use("com.example.RootDetectionClass");
targetClass.isRooted.implementation = function() {
console.log("Bypassing root detection...");
return false; // Always return false to bypass root detection
};
});
- اسکریپت برای اتصال و رمزگشایی رشته های رمزگذاری شده:
Java.perform(function() {
var targetClass = Java.use("com.example.EncryptionClass");
targetClass.decryptString.overload("java.lang.String").implementation = function(encryptedString) {
var decryptedString = this.decryptString(encryptedString);
console.log("Encrypted String: " + encryptedString);
console.log("Decrypted String: " + decryptedString);
return decryptedString;
};
});
- اسکریپت برای دور زدن پین SSL:
Java.perform(function() {
var CertificatePinner = Java.use("okhttp3.CertificatePinner");
CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function(hostname, certificates) {
console.log("Bypassing SSL pinning for hostname: " + hostname);
// Do nothing to bypass SSL pinning
};
});
مطمئن شوید که نام کلاس ها را جایگزین کنید (com.example.RootDetectionClass
، com.example.EncryptionClass
) و نام روش ها با نام های مناسب از برنامه هدف مورد تجزیه و تحلیل شما. این اسکریپت ها فقط نمونه هایی هستند و ممکن است نیاز به تنظیم بر اساس کد واقعی داشته باشند که شما مهندسی معکوس می کنید.
نتیجه
فریدا یک ابزار فوق العاده همه کاره برای مهندسی معکوس است که توانایی بازرسی، اصلاح و دور زدن عملکردهای داخلی یک برنامه نرم افزاری را به صورت پویا در چندین پلتفرم ارائه می دهد. با درک و استفاده از قابلیتهای فریدا از طریق اسکریپتهایی مانند نمونههای ارائهشده، محققان و توسعهدهندگان میتوانند بینش عمیقی در مورد رفتار نرمافزار به دست آورند، تستهای امنیتی را افزایش دهند و حتی وصلهها یا پیشرفتهایی را برای برنامههای موجود توسعه دهند.