بررسی و تشریح Image file checksum

بررسی و تشریح Image file checksum

نویسنده :

یاشار محمودنیا

بررسی و تشریح Image file checksum

در ساختار فایل های PE متغیری در بخش های IMAGE_OPTIONAL_HEADER32 و IMAGE_OPTIONAL_HEADER64 بنام CheckSum وجود دارد که وظیفه اعتبار سنجی درایور ها (sys.)، DLL های لود شده در زمان راه اندازی سیستم (Boot Time) و DLL های لود شده در پروسس های حیاتی سیستم را در زمان اجرا دارد.

وظیفه مقدار دهی صحیح Checksum به عهده لینکر می باشد که این مقدار از نوع DWORD و  در زمان Link شدن فایل محاسبه و نوشته می شود.

حالا سئوال اینجاست که آیا می توان از این قابلیت برای پیاده سازی File Integrity Check  استفاده کرد ؟

پاسخ مثبت است اما باید قبل از آن به نقاط قوت و ضعف این روش جهت پیاده سازی File Integrity Check دقت کنید.

  1. پیاده سازی آسان
  2. امنیت پایین
  3. محدودیت در استفاده از پکر ها و پروتکتور ها

برای به دست آوردن مقدار Checksum از Header و مقداری که محاسبه مجدد می شود، از فانکشن ()MapFileAndCheckSumA استفاده می کنیم.

				
					DWORD IMAGEAPI MapFileAndCheckSumA(
  [in]  PCSTR  Filename,
  [out] PDWORD HeaderSum,
  [out] PDWORD CheckSum
);
				
			

پارامتر اول : ورودی فایل از نوع PCSTR (مسیر به همراه اسم فایل) است.
پارامتر دوم : خروجی از نوع PDWORD جهت ذخیره مقدار Checksum که از Header فایل به دست آمده است.
پارامتر سوم : خروجی از نوع PDWORD برای ذخیره مقدار Checksum که مجدد محاسبه شده است.

پیاده سازی یک متد ساده از File integrity check در محیط ویژوال استادیو و زبان برنامه نویسی ++C

				
					#include <windows.h>
#include <stdio.h>
#include <ImageHlp.h>

#pragma comment(lib,"ImageHlp.lib")

void main()
{
    char szFileName[] = "";
    DWORD dwHeaderChecksum, dwCalculatedChecksum;

    if (MapFileAndCheckSumA(szFileName, &dwHeaderChecksum, &dwCalculatedChecksum) == CHECKSUM_SUCCESS)
    {
        printf("Header checksum %0x \n", dwHeaderChecksum);
        printf("Calculated checksum %0x \n", dwCalculatedChecksum);
    }

    system("PAUSE");
}
				
			
سایر نوشته های یاشار محمودنیا

آخرین دوره ها

آموزش مهندسی معکوس نرم افزار مقدماتی

آموزش مهندسی معکوس نرم افزار پیشرفته

آموزش مهندسی معکوس نرم افزار پیشرفته

آموزش تحلیل بدافزار

آموزش تحلیل بدافزار پیشرفته

آموزش برنامه نویسی سیستمی در ++C

آموزش برنامه نویسی سیستمی در ++C

اشتراک در
اطلاع از
guest
0 دیدگاه
بازخورد (Feedback) های اینلاین
View all comments