نمایش نتایج 1 تا 11 از 11

نام تاپیک: GetProcAddress

  1. #1
    کاربر دائمی آواتار amir_civil
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    452

    GetProcAddress

    با سلام
    دوستان کسی میتونه در مورد نحوه کارکرد این تابع اطلاعاتی بده و اینکه چه جوری ادرس رو پیدا میکنه
    ممنون
    FARPROC WINAPI GetProcAddress(
    __in HMODULE hModule,
    __in LPCSTR lpProcName
    );

  2. #2
    کاربر تازه وارد آواتار Naruto
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    تهران
    پست
    79

    نقل قول: GetProcAddress

    به کمک این تابع میتونید تابع هایی را که تو یه dll قرار دارن فراخوانی کنید.
    پارامتر اول Handle مربوط به ماژول هست که با کمک تابع LoadLibrary بدست میارید.
    دومی هم اسم تابعی هست که تو dll قرار داره و میخواهید ازش استفاده کنید.

  3. #3
    کاربر دائمی آواتار amir_civil
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    452

    نقل قول: GetProcAddress

    سلام
    دوست من من منظورم این بود که به چه صورت کار میکنه و اگر بهخاهیم یه چنین تابعی بنویسیم باید چه کار کنیم

  4. #4
    کاربر تازه وارد آواتار Sh4DoVV
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    مشهد الرضا (ع)
    پست
    65

    نقل قول: GetProcAddress

    با سلام
    در زبان VB به این صورت استفاده میشه

    Dim lb as Long
    Dim fnc as long
    lb=LoadLibrary("user32")
    fnc=GetProcAddress(lb,"MessageBoxA")

    که در این مثال آدرس تابه MessageBoxA رو در متغیر fnc میریزه
    اگر زبان برنامه نویسی خاصی دیگه در نظرته بگو تا اونم بگیم
    یا علی

  5. #5
    کاربر دائمی آواتار amir_civil
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    452

    نقل قول: GetProcAddress

    سلام
    اگر زبان برنامه نویسی خاصی دیگه در نظرته بگو تا اونم بگیم
    ممنون من خودم بلدم شما منظور من رو اشتباه متوجه شدید
    که در این مثال آدرس تابه MessageBoxA رو در متغیر fnc میریزه
    خوب این ادرس رو چه جوری پیدا میکنه منظور من این بود نه نحوه استفاده از تابع
    ممنون

  6. #6

    نقل قول: GetProcAddress

    هر فایل DLL یک جدول از توابع Export شده نگهداری میکنه. این تابع میتونه با مراجعه به اون جدول، و پیدا کردن مدخل مربوط به اون تابع، آدرس تابع را از جدول پیدا کنه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7
    کاربر دائمی آواتار amir_civil
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    452

    نقل قول: GetProcAddress

    سلام
    دسترسی به این جدول چگونه است؟

  8. #8

    نقل قول: GetProcAddress

    دسترسی به این جدول چگونه است؟
    درباره ساختار فایل های PE تحقیق کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  9. #9
    کاربر دائمی آواتار amir_civil
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    452

    نقل قول: GetProcAddress

    ممنون
    این سورس هم تونستم پیدا کنم
    .386
    .model flat, stdcall
    option casemap:none

    include \masm32\include\comctl32.inc
    includelib \masm32\lib\comctl32.lib


    .code
    DLLStart dd 0
    KernelStart dd 0
    ExportStart dd 0
    PEStart dd 0
    LoadLib dd 0
    shell32 db "User32.dll",0
    text db "Test, Test, 1,2,3",0

    start:
    invoke InitCommonControls

    mov edx, [esp] ;; Offset of function in Kernel32.dll
    xor dx, dx ;; Align to 1000h
    @Label:
    sub edx, 1000h ;; search next page
    cmp word ptr [edx], 'ZM' ;; MZ header?
    jne @Label ;; If not, then keep searching

    mov KernelStart, edx

    mov ebx, 0A216A185h
    call FindAPI
    mov LoadLib, eax

    push OFFSET shell32
    call LoadLib

    mov ebx, 9A9C4525h
    mov edx, eax
    call FindAPI

    push edx

    push 0
    push OFFSET text
    push OFFSET text
    push 0
    call eax

    mov ebx, 0B36E72B3h
    mov edx, KernelStart
    call FindAPI

    call eax
    ret


    ;; EDX must hold the offset of the MZ header, EBX the checksum
    FindAPI:
    push edx
    mov DLLStart, edx
    mov ecx, [edx+3Ch] ;; PE header
    add ecx, edx ;; Normalize offset
    mov PEStart, ecx
    mov ecx, [ecx+78h] ;; Pointer to Export Table
    add ecx, edx ;; Normalize offset
    mov ExportStart, ecx
    mov edx, [ecx+18h] ;; Number of Exports
    mov ecx, [ecx+20h] ;; Pointer To Pointer to Exports Names
    add ecx, DLLStart ;; Normalize offset
    @Loop:
    xor edi, edi
    mov esi, [ecx] ;; Pointer To Export #n
    add esi, DLLStart ;; Normalize offset
    xor eax, eax
    push ecx
    @Loop2:
    lodsb ;; Load char of API name into esi
    mov ecx, eax
    add edi, eax ;; checksum of API name - Part 1
    rol edi, cl ;; checksum of API name - Part 2
    test eax, eax
    jne @Loop2
    pop ecx
    cmp edi, ebx ;; Checksum found ?
    je @Found ;; API found

    add ecx, 4 ;; Next pointer to API Name
    dec edx ;; Still APIs to go?
    jne @Loop ;; If so, jump
    pop edx
    xor eax, eax
    ret

    @Found:
    mov eax, DLLStart
    mov ecx, ExportStart
    mov ebx, [ecx+18h] ;; Number of Exports
    mov ecx, [ecx+24h] ;; Pointer To Ordinals
    add ecx, eax ;; Normalize offset
    sub ebx, edx ;; EBX = Number of Ordinals - API we want

    shl ebx, 1
    add ecx, ebx

    movzx ebx, word ptr [ecx] ;; Ordinal of our API

    mov ecx, ExportStart
    mov ecx, [ecx+1Ch] ;;
    add ecx, eax ;; Normalize offset
    shl ebx, 2 ;; Expand to DWORD size
    add ecx, ebx ;; Point to offset where our API begins
    add eax, [ecx] ;; Add that offset to Kernel32.dll start
    pop edx
    ret
    end start

  10. #10
    کاربر دائمی آواتار saeedIRHA
    تاریخ عضویت
    بهمن 1383
    محل زندگی
    Eclipse
    سن
    38
    پست
    605

    نقل قول: GetProcAddress

    اين هم کد اين برنامه که نوشتم با ++C برای دوستان علاقمند

    /*
    * File: DLL-Proc-Addr.cpp
    * Written by: SaEeD
    * Obtaining Hex address of function in DLL
    * Output:
    * D:\NetBeansProjects\DLL-Loader>DLL-Proc-Addr.exe kernel32 LoadLibraryA
    * [+]Obtaining Module Handle from DLL
    * [+]Process Name: LoadLibraryA
    * [+]Get Process Address: 0x7c801d7b
    * [+]Termintating application.
    */

    #include <stdlib.h>
    #include <windows.h>
    #include <iostream>
    using namespace std;
    int main(int argc, char** argv)
    {
    HINSTANCE hInstance = NULL;
    HMODULE hModule = NULL;
    DWORD value;

    if(argc != 3 )
    {
    cerr << "[-]Usage: " << argv[0] << " <DLL File> <Proccess Name>" << endl;
    exit(1);
    }
    hModule = LoadLibrary(argv[1]);
    if(hModule == NULL)
    {
    cout << "[!]Error in Loading Library: " << GetLastError() << endl;
    exit(1);
    }
    cout << "[+]Obtaining Module Handle from DLL "<< endl;
    value = (DWORD)GetProcAddress(hModule,argv[2]);

    if(value == 0)
    {
    cout << "[!]Error in Process : " << GetLastError() << endl;
    exit(1);
    }
    cout << "[+]Process Name: " << argv[2] << endl;
    printf("[+]Get Process Address: 0x%x\n" , value );
    cout << "[+]Termintating application." << endl;

    return (EXIT_SUCCESS);
    }



  11. #11
    کاربر دائمی آواتار amir_civil
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    452

    نقل قول: GetProcAddress

    value = (DWORD)GetProcAddress(hModule,argv[2]);

    شما توسط تابعGetProcAddress ادرس رو بدست اوردید ولی بدون اون چی؟
    از دوستان کسی لطف میکنه و اون کد اسمبلی رو به سی++ تبدیل کنه؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •