زمان جاری: 08-23-2014, 09:44 PM
خوش آمدید مهمان گرامی! (ورودعضویت)

ارسال پاسخ 
 
رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
System Service Dispatch Table SSDT چیست؟
03-04-2012, 02:16 PM (آخرین تغییر در این ارسال: 03-05-2012 02:46 AM توسط مهرداد عباسی.)
ارسال: #1
System Service Dispatch Table SSDT چیست؟
کسی میدونه ssdt چیه؟
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
03-04-2012, 02:56 PM (آخرین تغییر در این ارسال: 03-04-2012 03:11 PM توسط مهرداد عباسی.)
ارسال: #2
RE: ssdt
با سلام

لطفا
You are not allowed to view links. Register or Login to view.
را به دقت مطالعه فرمایید

دوست عزیز لطفا سوالات خود را واضح تر بیان فرمایید

(SQL Server Data Tools(SSDT

(State Software Development Team(SSDT

(System Service Dispatch Table (SSDT

(Scottish Solicitors' Discipline Tribunal(SSDT

(Smart Start Driver Training(SSDT

(South Staffs Dog Training(SSDT

(Scottish Six Days Trial (SSDT

(School of Sustainable Development and Tourism (SSDT

Site Selection Diversity Transmission (SSDT

(Spoofed Secure Data Transfer (SSDT

(Simultaneous Sensing and Data Transmission (SSDT

(Safety Sensitive Drug Testing (SSDT

(Sim Safe Driver Training (SSDT

(Shanghai Superior Die Technology(SSDT

[تصویر: www.Mojsazan.com.gif]
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 تشکر شده توسط : worm mahmood0197 morteza ghaem
03-04-2012, 03:43 PM
ارسال: #3
RE: ssdt
System Service Dispatch Table

چون نمی دونم اصلا چیه چطور باید بفهمم کجا تایپیک بزنم!
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
03-05-2012, 12:23 AM (آخرین تغییر در این ارسال: 03-05-2012 03:19 AM توسط مهرداد عباسی.)
ارسال: #4
RE: ssdt
با سلام عنوان ویرایش شد !!!

(System Service Dispatch Table (SSDT یا سیستم خدمات اعزام جدول : یک جور سیستم فراخوانی داخلی که توسط شرکت ماکروسافت استفاده میشود

ساده تر بگم یک جور ارایه که آدرس سیستم کال ها (SystemCall) توش ذخیره میشه

نمیدونم میدونید system call جیه ؟ توی درس سیستم عامل وقفه ها را یادتون است وقفه ها یک جور system call هستند

حالا این که کاربردش چیه؟ خیلی کاربرد ها داره مثلا ویندوز سیستم کال ها را باش مدیریت میکنه کرنل سرویس های محلی را آدرس دهی میکنه بقیه مثل بیشتر روت کیت ها و انتی ویروس ها با هوک کردن این سرویس ازش استفاده میکنند

خوب ما باش میتونیم چی کار کنیم خیلی ساده میتونیم آدرس یکی از توابع خودمون را با آدرس یکی از توابع دیگه جایگزین کنیم (بماند که به همین مفتی ها هم نیست مثلا این سرویس فقط خواندی است و این سیستم دفاعی را باید دور بزنید D:)

این سورس را ببین یک روش هوک کردن SSDT است

کد PHP:
#include <wdm.h>
 
/****************/
/* Declarations */
/****************/
 
#pragma pack(1)
typedef struct ServiceDescriptorEntry {
    
unsigned int *ServiceTableBase;
    
unsigned int *ServiceCounterTableBase;
    
unsigned int NumberOfServices;
    
unsigned char *ParamTableBase;
SSDT_Entry;
#pragma pack()
 
__declspec(dllimportSSDT_Entry KeServiceDescriptorTable// We import KeServiceDescriptorTable (ntoskrnl.exe)
 
// SYSTEMSERVICE returns the address of the Nt* function corresponding to the Zw* function we put in argument
#define SYSTEMSERVICE(_func) \
  
KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1)]
 
typedef NTSTATUS (*ZWSETVALUEKEY)( // The type of the target function
    
HANDLE  KeyHandle,
    
PUNICODE_STRING  ValueName,
    
ULONG  TitleIndex  OPTIONAL,
    
ULONG  Type,
    
PVOID  Data,
    
ULONG  DataSize
);
 
ZWSETVALUEKEY ZwSetValueKeyOriginal
// We will call this function to call the original target 
//function when its address will be replaced by our hook 
//function address in the SSDT
 
 
/*******************/
/* The Hook Function */
/*******************/
 
// Our hook function will avoid values writing for "Run" and "RunOnce" key: 
//in this way it prevents malwares from writing their path in those keys in 
//order to open up at each reboot.
NTSTATUS ZwSetValueKeyHook(
    
IN HANDLE  KeyHandle,
    
IN PUNICODE_STRING  ValueName,
    
IN ULONG  TitleIndex  OPTIONAL,
    
IN ULONG  Type,
    
IN PVOID  Data,
    
IN ULONG  DataSize
)
{
    
PKEY_BASIC_INFORMATION pKeyInformation NULL;
    
int iflag 1;
    
NTSTATUS ret;
    
WCHAR targetKey1[] = L"Run"// first key target
    
WCHAR targetKey2[] = L"RunOnce"// second key target
    
unsigned long size 0sizeNeeded 0;
 
    
DbgPrint("[+] In da hook function =)\n");
 
    
ret ZwQueryKey(KeyHandleKeyBasicInformationpKeyInformationsize, &sizeNeeded);
    
// We use this function in order to get the current key name. If it Run or RunOnce we prevent from writing.
    
if((ret == STATUS_BUFFER_TOO_SMALL) || (ret == STATUS_BUFFER_OVERFLOW)) { 
    
// If size not enough => we allocate more space memory
        
size sizeNeeded;
        
pKeyInformation = (PKEY_BASIC_INFORMATIONExAllocatePoolWithTag(NonPagedPoolsizeNeeded'aaaa');
 
        
ret ZwQueryKey(KeyHandleKeyBasicInformationpKeyInformationsize, &sizeNeeded);
    }
 
    if(
ret != STATUS_SUCCESS)
        return 
ZwSetValueKeyOriginal(KeyHandleValueNameTitleIndexTypeDataDataSize);
 
    if( (
pKeyInformation->NameLength sizeof(WCHAR)) == 3) { // 3 == strlen("Run")
        
for(0strlen(targetKey1); i++) {
            if(
pKeyInformation->Name[i] != targetKey1[i]) { 
            
// if one character is different from Run key name, flag = 0
                
flag 0;
                break;
            }
        }
    }
    else if((
pKeyInformation->NameLength sizeof(WCHAR)) == 7) { // 7 == strlen("RunOnce")
        
for(0strlen(targetKey2); i++) {
            if(
pKeyInformation->Name[i] != targetKey2[i]) {
            
// if one character is different from RunOnce key name, flag = 0
                
flag 0;
                break;
            }
        }
    }
    else 
flag 0;
 
    if(!
flag// If flag == 0 => normal work ...
        
return ZwSetValueKeyOriginal(KeyHandleValueNameTitleIndexTypeDataDataSize);
 
    
DbgPrint("[+] Bypassing Run key writing\n");
 
    return 
STATUS_SUCCESS;
    
// ... else the function will not be executed so no value writing ...
}
 
/*****************/
/* SSDT Functions */
/*****************/
 
void HookSSDT()
{
    
DbgPrint("[+] SSDTHOOK: in HookSSDT()\n");
 
    
ZwSetValueKeyOriginal = (ZWSETVALUEKEYSYSTEMSERVICE(ZwSetValueKey); 
    
// We save target function address
 
    // unprotect CR0
    
__asm
    
{
        
push eax
        mov  eax
CR0
        
and  eax0FFFEFFFFh
        mov  CR0
eax
        pop  eax
    
}
    
//
 
    
SYSTEMSERVICE(ZwSetValueKey) = (unsigned long *) ZwSetValueKeyHook;
    
// We replace target function address by the address of our hook function
 
    // protect cr0
    
__asm
    
{
        
push eax
        mov  eax
CR0
        
or   eaxNOT 0FFFEFFFFh
        mov  CR0
eax
        pop  eax
    
}
    
//
 
}
 
void UnHookSSDT()
{
    
DbgPrint("[+] SSDTHOOK: in UnHookSSDT()\n");
 
    
// unprotect CR0
    
__asm
    
{
        
push eax
        mov  eax
CR0
        
and  eax0FFFEFFFFh
        mov  CR0
eax
        pop  eax
    
}
    
//
 
    
SYSTEMSERVICE(ZwSetValueKey) = (ZWSETVALUEKEYZwSetValueKeyOriginal;
    
// We delete hook by rewriting the good function address instead of our hook function address
 
    // protect cr0
    
__asm
    
{
        
push eax
        mov  eax
CR0
        
or   eaxNOT 0FFFEFFFFh
        mov  CR0
eax
        pop  eax
    
}
    
//
}
 
VOID unloadFunction(PDRIVER_OBJECT pDriverObject)
{
    
UnHookSSDT(); // unhook function
}
 
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObjectPUNICODE_STRING pRegistryPath)
{
    
HookSSDT(); // hook function
 
    
pDriverObject->DriverUnload unloadFunction;
 
    return 
STATUS_SUCCESS;

برای این که بهتر متوجه بشوید باید بدانید فراخوانی جداول یا Dispatch Table چیه ؟؟

این Dispatch Table به جدولی از اشاره گر ها هاست که به یک سری تابع و متد اشاره دارد

استفاده از این جداول توی برنامه نویسی بسیار متداوله

برای فهم بهتر مطلب یک سورس کد میزارم دقت کنید PERL
کد PHP:
#define the table using one anonymous code-ref and one named code-ref
 
my %dispatch = (
   
"-h" => sub {  return "hello\n"; },
   
"-g" => \&say_goodbye
 
);
 
 
sub say_goodbye {
   return 
"goodbye\n";
 }
 
 
#fetch the code ref from the table, and invoke it
 
my $sub $dispatch{$ARGV[0]};
 print 
$sub $sub->() : "unknown argument\n 
";


برای این که بهتر متوجه بشوید کاربرد این جداول چی هست
یک مثال دیگه در برنامه نویسی شی گرا میزنم تابع مجازی که میدونید چیه
هنگامی که شما یک تابع مجازی میسازید
کامپایلر به صورت خودکار یک Dispatch Table میسازه
بعد برای هر تماس به تابع مجازی از Dispatch Table استفاده میکنه به همین سادگی به همین خوشمزگی لبخند

موفق و پیروز باشید

You are not allowed to view links. Register or Login to view.

[تصویر: www.Mojsazan.com.gif]
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 تشکر شده توسط : mahmood0197 worm morteza ghaem
03-05-2012, 08:08 AM
ارسال: #5
RE: System Service Dispatch Table SSDT چیست؟
ممنونم.

برای دیدن اون جدول راهی وجود نداره؟

این سورس کد ها رو توی سایت های انگلیسی دیدم اما با c نتونستم کامپایلش کنم
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
03-05-2012, 11:32 AM (آخرین تغییر در این ارسال: 03-05-2012 11:44 AM توسط مهرداد عباسی.)
ارسال: #6
RE: System Service Dispatch Table SSDT چیست؟
با سلام

در صورتی که مطلبی که توسط کاربر دیگری ارسال شده از نظر شما مفید و جالب بوده ، و قصد تشکر از او را دارید , میتوانید از گزینه "سپاس" [تصویر: postbit_thx.gif]برای ابراز نظر خود استفاده کنید

بله شما میتوانید با خروجی گرفتن از متغییر KeServiceDescriptorTable به وسیله ntoskrnl.exe و تجزیه و تحلیل ساختار آن این کار را انجام دهید

[تصویر: www.Mojsazan.com.gif]
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 تشکر شده توسط : mahmood0197 worm
ارسال پاسخ 


موضوعات مشابه ...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  دستور while....wend چیست؟ Nikkhahan 5 1,044 05-04-2012 03:44 PM
آخرین ارسال: مهرداد عباسی
  فریم ورک چیست؟ (what is the Framework) مهرداد عباسی 0 1,518 12-17-2011 01:22 PM
آخرین ارسال: مهرداد عباسی
Lightbulb برنامهٔ کاربردی چیست؟ spooggie 0 901 04-28-2010 08:06 PM
آخرین ارسال: spooggie
Lightbulb Library چیست؟ spooggie 0 1,272 04-28-2010 07:55 PM
آخرین ارسال: spooggie
Lightbulb API چیست؟ spooggie 0 1,155 04-28-2010 07:44 PM
آخرین ارسال: spooggie
Lightbulb SDK چیست؟ spooggie 0 5,245 04-28-2010 07:35 PM
آخرین ارسال: spooggie
  برنامه نویسی چیست مهرداد عباسی 19 12,549 12-16-2009 01:50 AM
آخرین ارسال: مهرداد عباسی

پرش در انجمن: