ايران ويج

نسخه‌ی کامل: چندتا سوال درباره سطح کرنل (Ring 0)
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام

من چندتا سوال درباره درایورها و برنامه های سطح کرنل داشتم :

1-چه جوری می شه یک درایور رو نصب کرد؟

2-چه جوری می شه یک فایل EXE رو در سطح کرنل اجرا کرد؟

3-چه جوری می شه بین یک برنامه و یک درایور ارتباط برقرار کرد؟

تشکر
یک درایور رو میتونی به سادگی با دستور shellexcute نصب کنی
مثال زیر به دلفی میباشد

کد:
var
  instance: HINST;
begin
  instance := ShellExecute(hParent,
    PChar('open'),
    PChar('rundll32.exe'),
    PChar('setupapi,InstallHinfSection DefaultInstall 132 ' + PathName),
    nil,
    SW_HIDE) ;

  Result := instance > 32;
end;
با تشکر از شما آقای لرد
(۱۱-دى-۱۳۸۷, ۰۱:۰۵:۵۰)lord_viper نوشته است: [ -> ]یک درایور رو میتونی به سادگی با دستور shellexcute نصب کنی
مثال زیر به دلفی میباشد

کد:
var
instance: HINST;
begin
instance := ShellExecute(hParent,
PChar('open'),
PChar('rundll32.exe'),
PChar('setupapi,InstallHinfSection DefaultInstall 132 ' + PathName),
nil,
SW_HIDE) ;

Result := instance > 32;
end;

اینم سورس ویژوال بیسیکش :

کد:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub InstallDriver(DriverPath As String)
ShellExecute Me.hwnd, "Open", "rundll32.exe", "setupapi,InstallHinfSection DefaultInstall 132 " + DriverPath, vbNullString, vbHide
End Sub

اگه می تونید توی قسمت دو هم کمک کنید :

نقل قول: چه جوری می شه یک فایل EXE رو در سطح کرنل اجرا کرد؟

چون Nod32 روی کامپیوتر من دو تا تروجان پیدا کرده بود که در سطح کرنل فعالیت می کردند

و هیچ گونه درایوری نداشتند

هر دو تاشون هم با پسوند EXE بودند

مثلا من می خوام برنامه ای بنویسم که در سطح کرنل باشه و هر 1 دقیقه یک پیغام برای کاربر نمایش بده

یعنی می شه با تغییر SubSystem اون این کار رو انجام داد؟
همیشه درایورها به صورت فایلهای sys نیستن بلکه ممکن است داخل فایلهای exe باشند
به مثال زیر توجه کن که یه mini driver هست

کد:
unit miniDriver;
//kongfoo/2005.4.16

interface

uses
  Windows, WinSvc, SysUtils;

type
  aCallGate = packed record
    aDword : Dword;
    aWord : Word;
  end;

var
  NewCallGate : aCallGate;

  //this driver is from MGF
  drvFile : array [0..$5FF] of byte =
  (
  $4D,$5A,$90,$00,$03,$00,$00,$00,$04,$00,$00,$00,$FF,$FF,$00,$00,
  $B8,$00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$A8,$00,$00,$00,
  $0E,$1F,$BA,$0E,$00,$B4,$09,$CD,$21,$B8,$01,$4C,$CD,$21,$54,$68,
  $69,$73,$20,$70,$72,$6F,$67,$72,$61,$6D,$20,$63,$61,$6E,$6E,$6F,
  $74,$20,$62,$65,$20,$72,$75,$6E,$20,$69,$6E,$20,$44,$4F,$53,$20,
  $6D,$6F,$64,$65,$2E,$0D,$0D,$0A,$24,$00,$00,$00,$00,$00,$00,$00,
  $5D,$17,$1D,$DB,$19,$76,$73,$88,$19,$76,$73,$88,$19,$76,$73,$88,
  $E5,$56,$61,$88,$18,$76,$73,$88,$52,$69,$63,$68,$19,$76,$73,$88,
  $00,$00,$00,$00,$00,$00,$00,$00,$50,$45,$00,$00,$4C,$01,$02,$00,
  $91,$C8,$2B,$42,$00,$00,$00,$00,$00,$00,$00,$00,$E0,$00,$0E,$01,
  $0B,$01,$05,$0C,$00,$02,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00,
  $00,$10,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$00,$40,$00,
  $00,$10,$00,$00,$00,$02,$00,$00,$04,$00,$00,$00,$00,$00,$00,$00,
  $04,$00,$00,$00,$00,$00,$00,$00,$00,$30,$00,$00,$00,$02,$00,$00,
  $A9,$75,$00,$00,$02,$00,$00,$20,$00,$00,$10,$00,$00,$10,$00,$00,
  $00,$00,$10,$00,$00,$10,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$20,$00,$00,$08,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $2E,$74,$65,$78,$74,$00,$00,$00,$4C,$00,$00,$00,$00,$10,$00,$00,
  $00,$02,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$20,$00,$00,$60,$2E,$72,$65,$6C,$6F,$63,$00,$00,
  $0C,$00,$00,$00,$00,$20,$00,$00,$00,$02,$00,$00,$00,$04,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$42,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $90,$90,$90,$90,$9C,$60,$52,$0F,$01,$44,$24,$FE,$5A,$8B,$C2,$B9,
  $E0,$03,$00,$00,$81,$7C,$11,$02,$E8,$03,$00,$EC,$74,$27,$C6,$02,
  $C3,$66,$89,$04,$11,$C1,$E8,$10,$66,$89,$44,$11,$06,$C7,$44,$11,
  $02,$E8,$03,$00,$EC,$C7,$44,$11,$08,$FF,$FF,$00,$00,$C7,$44,$11,
  $0C,$00,$9A,$CF,$00,$61,$9D,$33,$C0,$C2,$08,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  );

  procedure ExtractTheDriver;
  procedure LoadService;

implementation

procedure LoadService;
var hSCM,hSvc:SC_HANDLE;
begin
  NewCallGate.aDword:=0;
  NewCallGate.aWord:=$3e3;
  hSCM:=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
  hSvc:=CreateService(hSCM,'Matrix1.0','Matrix service 1.0',$00010030,1,3,0,
                      PChar(ExtractFilePath(GetModuleName(0))+'Matrix.sys'),
                      0,0,0,0,0);//00010030=SERVICE_START OR SERVICE_STOP OR DELETE
  if GetLastError=ERROR_SERVICE_EXISTS then
  begin
    hSvc:=OpenService(hSCM,'Matrix1.0',SERVICE_ALL_ACCESS);
    DeleteService(hSvc);
    CloseServiceHandle(hSvc);
    hSvc:=CreateService(hSCM,'Matrix1.0','Matrix service 1.0',$00010030,1,3,0,
                        PChar(ExtractFilePath(GetModuleName(0))+'Matrix.sys'),0,0,0,0,0);
  end;
  asm
    push 0
    push 0
    push hSvc
    call StartService
  end;
  DeleteService(hSvc);
  CloseServiceHandle(hSvc);
  CloseServiceHandle(hSCM);
  DeleteFile('Matrix.sys');
end;

procedure ExtractTheDriver;
var hFile:THandle;
    rtn:dword;
begin
  hFile:=CreateFile(PChar(ExtractFilePath(GetModuleName(0))+'Matrix.sys'),
                    GENERIC_WRITE,FILE_SHARE_WRITE,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  WriteFile(hFile,drvFile,$600,rtn,0);
  CloseHandle(hFile);
end;

end.
خوب اینم که در آخر با یک فایل Sys کارهاش رو انجام می ده
و سورس درایور توی برنامه ست و پس از اجرا درایور نوشته و به عنوان یک Service_Driver نصب می شه
و اینا می شه با ویژوال بیسیک هم پیاده سازی کرد
سورس درایوری که به صورت بایتی توی برنامه ست با چه زبانی نوشته شده؟
و در کل این درایور چی کار می کنه؟
============================================
یعنی تنها راهی که یک برنامه در سطح کرنل اجرا بشه نصب یک داریور است؟
============================================
برای نوشتن درایور هم به DDK نیازه که روی ++VC پیاده می شه و کار رو ساده تر می کنه
============================================
اگه تنها راه رفتن در سطح کرنل نوشتن درایور با پسوند Sys باشه من یک راه دیگه هم دارم (قابل اجرا در پاوربیسیک) :
پاوربیسیک برای نوشتن درایور ساخته نشده اما این کار با برنامه های جانبی امکان پذیره
اول ما درایور را با پاوربیسیک نوشته و با پسوند EXE کامپایل می کنیم
بعد با برنامه Subsystem Editor برنامه را به صورت درایور دلخواه در آورده و پسوند آن را به Sys تغییر می دهیم
بعدشم نصبش می کنیم و حالش رو می بریم
البته این برنامه Subsystem Editor فقط روی برنامه های پاوربیسیک کار می ده
راه بالا که مشکلی نداره؟
من تا حالا روی درایور های مختلف این کار رو انجام دادم،و نتیجه مثبت گرفتم
ویروسی که شما میخواهی بنویسی نیاز به درایور نداره چون مبخث روتکیتها با مبحث ویروسهای polymorfic متفاوت هست
برای رفتن به رینگ 0 چند راه هست 1 استفاده از درایور 2 استفاده از باگهای موجود در نرم افزارهایی که درایور نصب میکنن(قدیما تو کارت صداها یه باگی بود که با اون میشد دسترسی رو در guest به admin و بالاتر رسوند)
استفاده مستقیم از کد(یه کد به اسمبلی دیده بودم که نویسندشگفته بود که cpu رو به ring 0 میبره )
شما در زمینه درایور بهتره از جناب ویسکرمی کمک بگیرین ایشون تو این زمینه یه سری تحقیقات انجام داده بودن

اونها هم کدهای hex کامپایل شده هستن

از اون چیزهای دیگه که احتیاج دارین اینه که چطور بتونین طول توابع و مکان توابع رو تو یه pe به دست بیارین و چطور به یک پروسه یا dll اینجکت کنین
و برای ویروس polymorfic به یه چی تو مایه های disasm که بتونین کدهای فایلهای pe رو به دنبال یک میزبان خوب بگردین
آقای لرد کی حرف از ویروس زد!
ولی هنوز شما متوجه نشیدید که من چه ویروسی می خوام بنویسم
چون این ویروس حتما نیاز به دسترسی به سطح کرنل داره
==========================================
فکر کنم تنها راه چاره همون راهیه که گفتم
==========================================
حالا چه جوری می شه بین یک برنامه و یک درایور ارتباط برقرار کرد؟
میشه اون نمونه ویروسهایی که در شطح کرنل فعالیت میکردن رو جایی اپلود کنینو لینک بدین؟
(۱۱-دى-۱۳۸۷, ۲۳:۰۰:۵۱)lord_viper نوشته است: [ -> ]میشه اون نمونه ویروسهایی که در شطح کرنل فعالیت میکردن رو جایی اپلود کنینو لینک بدین؟

Nod32 پاکشون کرده فقط اطلاعاتشون هست :

[attachment=1973]

[attachment=1974]
سلام.


چطور میشه یک فایل exe رو توی کرنل اجرا کرد؟؟؟

مثلا یک کد vb رو!!!!!!!!!!!!!!!

شاید خنده داره اما راهی وجود داره فقط نمی دونم چطور
کرنل چیز خاصی نیست که تو یا بیرون داشته باشه بلکه یک سطح امنیتی در ویندوز هست مثل Administrator یا guest
با این تفاوت که دستورات در این سطح بطور مستقیم اجرا میشوند
فایل exe در سطح کرنل اجرا نمیشه بلکه برای این کار باید از یک Driver استفاده کنید یعنی با sDK که مایکروسافت در اختیارتون قرار میده با زبانهایی مثل اسمبلی یا c/c++ یک درایور بنویسید بعد با برنامه Exe خودتون اونو نصب و از توابع درون درایور که در سطح کرنل قرار داره مثل Dll در برنامتون استفاده کنید