касперский и загрузка dll

Тема в разделе "WASM.BEGINNERS", создана пользователем vanilly_cpp, 17 дек 2007.

  1. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    В некий процесс внедряется код путем WriteProcessMemory/CreateRemouteThtead хуки снял вроде не палиться!
    А данный код в свою очередь подгружает dll в этот процесс!

    Вот тут-то каспер и начинает матерится!

    1) По средством чего каспер отслеживает данное действие?
    2) Что и где необходимо убрать, чтоб при подгрузке dll капер молчал?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    скорее всего нотификатор поставил на загрузку.
    PsSetLoad*
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Каспер меняет таблицу экспорта кернела и делает хук на LoadLibraryA. Врать не буду, но чисто имхо, если вызов библиотеки идет извне базы образа, тогда каспер ругается. Но опять-таки, второе - это только мои догадки.
     
  4. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    >>n0name

    PsSetLoad - функция экспортируется ядром?
    А как снять сей нотификатор?

    >>MSoft
    Если и действительно так тогда жесть! я ведь в другом процессе снять хук не смогу?
     
  5. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    Кто-нибудь вкурсе что конкретно нужно сделать, чтоб каспер перестал метериться на загрузку dll?
     
  6. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    vanilly_cpp
    ты в AppInit_Dlls посмотри =))
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    RTFMSDN по поводу PsSetCreateProccess(Thread,LoadImage)NotifyRoutine
     
  8. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    Спасибо я за него забыл! А есть еще какой нибудь вариант, ато во все процессы как-то нехочиться инжектиться!
     
  9. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Читай либу с диска и грузи своим собственным пе-лодером.
     
  10. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    А что мешает внедрить относительно большой шеллкод в др. процесс? Пусть этот шеллкод найдет нужные апи, поставит атрибуты записи на секцию экспорта кернела, восстановит экспорты в памяти, используя экспорты на винте :)

    По крайней мере, у мну так работало.
     
  11. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    vanilly_cpp
    внедряешь в процесс лоадер и грузишь длл
     
  12. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    Всем большое спасибо за ответы!

    сейчас у меня есть код:
    Код (Text):
    1. bool InjectDll(HANDLE Process, char* dll_name, HANDLE Thread)
    2. {
    3.  
    4. #pragma pack(1)
    5.     struct
    6.     {
    7.         BYTE PushCommand;
    8.         DWORD PushArgument;
    9.         WORD CallCommand;
    10.         DWORD CallAddr;
    11.         BYTE PushExitThread;
    12.         DWORD ExitThreadArg;
    13.         WORD CallExitThread;
    14.         DWORD CallExitThreadAddr;
    15.         LPVOID AddrLoadLibrary;
    16.         LPVOID AddrExitThread;
    17.         CHAR LibraryName[MAX_PATH + 1];
    18.     }Inject;
    19. #pragma pack()
    20.  
    21.     LPVOID Memory = VirtualAllocEx(Process,0,sizeof(Inject),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    22.     if(!Memory)
    23.         return FALSE;
    24.     DWORD Code = DWORD(Memory);
    25.     //Инициализация внедряемого кода:
    26.     Inject.PushCommand        = 0x68;
    27.     Inject.PushArgument       = Code + 0x1E;
    28.     Inject.CallCommand        = 0x15FF;
    29.     Inject.CallAddr           = Code + 0x16;
    30.     Inject.PushExitThread     = 0x68;
    31.     Inject.ExitThreadArg      = 0;
    32.     Inject.CallExitThread     = 0x15FF;
    33.     Inject.CallExitThreadAddr = Code + 0x1A;
    34.     HMODULE hKernel32         = GetModuleHandle("kernel32.dll");
    35.     Inject.AddrLoadLibrary    = GetProcAddress(hKernel32,"LoadLibraryA");
    36.     Inject.AddrExitThread     = GetProcAddress(hKernel32,"ExitThread");
    37.     lstrcpy(Inject.LibraryName,dll_name);
    38.     //Записать машинный код по зарезервированному адресу
    39.     WriteProcessMemory(Process,Memory,&Inject,sizeof(Inject),0);
    40.  
    41.     //Получаем текущий контекст первичной нити процесса
    42.    CONTEXT Context;
    43.     Context.ContextFlags = CONTEXT_FULL;
    44.     BOOL bResumed = FALSE;
    45.  
    46.         HANDLE hThread = CreateRemoteThread(Process,0,0,(LPTHREAD_START_ROUTINE)Memory,0,0,0);
    47.       if(!hThread)
    48.             return FALSE;
    49.         WaitForSingleObject(hThread,INFINITE);
    50.         CloseHandle(hThread);
    51. }
    Если я все правельно понял то:
    вместо структуры "Inject" мне необходимо внедрить предварительно скомпилированный код загручика dll?
     
  13. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    нашол код загрузчика dll, вроде работает нормально!

    Теперь моя задача научиться получать код функции в бинарном виде!?
    Чтобы торописать ее в адресное пространство целевого процесса!

    решил попробовать прочитать бин код ф-ии экспортируемой из dll и вызветь его из памяти, но снова грабли (((
    Код (Text):
    1. #include "windows.h"
    2.  
    3.  
    4. ///*
    5. //* Loading dll from memory
    6. //*
    7. //* Written by Vitaliy Shitts (vit@shittz.ru)
    8. //* Copyright (c) 2004 Vitaliy Shittz.
    9. //*
    10. //* THIS CODE IS PROVIDED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED
    11. //* OR IMPLIED. YOU USE AT YOUR OWN RISK. THE AUTHOR ACCEPTS NO LIABILITY
    12. //* IF IT CAUSES ANY DAMAGE TO YOU OR YOUR COMPUTER WHATSOEVER.
    13. //*
    14. //* Beware of bugs.
    15. //*/
    16. //
    17. ////#include "commonheaders.h"
    18. //
    19. //#ifdef DLL_FROM_RESOURCE
    20. //
    21. //#ifndef MIN
    22. #    define MIN(a,b) ((a)<(b)?(a):(b))
    23. //#endif
    24. //
    25. typedef BOOL (WINAPI *DLLMAIN)(HINSTANCE,DWORD,LPVOID);
    26. //
    27. //#pragma warning (push)
    28. //#pragma warning (disable: 4311; disable: 4312; disable: 4018)
    29.  
    30. void get_proc_code(PVOID* proc_entry);
    31. //
    32. DWORD GetSectionProtection(DWORD sc)
    33. {
    34.     DWORD dwResult=0;
    35.     if (sc & IMAGE_SCN_MEM_NOT_CACHED)
    36.         dwResult |= PAGE_NOCACHE;
    37.  
    38.     if (sc & IMAGE_SCN_MEM_EXECUTE)
    39.     {
    40.         if (sc & IMAGE_SCN_MEM_READ)
    41.         {
    42.             if (sc & IMAGE_SCN_MEM_WRITE)
    43.                 dwResult |= PAGE_EXECUTE_READWRITE;
    44.             else
    45.                 dwResult |= PAGE_EXECUTE_READ;
    46.         }
    47.         else
    48.         {
    49.             if (sc & IMAGE_SCN_MEM_WRITE)
    50.                 dwResult |= PAGE_EXECUTE_WRITECOPY;
    51.             else
    52.                 dwResult |= PAGE_EXECUTE;
    53.         }
    54.     }
    55.     else
    56.     {
    57.         if (sc & IMAGE_SCN_MEM_READ)
    58.         {
    59.             if (sc & IMAGE_SCN_MEM_WRITE)
    60.                 dwResult|=PAGE_READWRITE;
    61.             else
    62.                 dwResult|=PAGE_READONLY;
    63.         }
    64.         else
    65.         {
    66.             if (sc & IMAGE_SCN_MEM_WRITE)
    67.                 dwResult|=PAGE_WRITECOPY;
    68.             else
    69.                 dwResult|=PAGE_NOACCESS;
    70.         }
    71.     }
    72.    
    73.     return dwResult;
    74. }
    75. //
    76. inline BOOL IsImportByOrdinal(DWORD ImportDescriptor)
    77. {
    78.     return (ImportDescriptor & IMAGE_ORDINAL_FLAG32)!=0;
    79. }
    80. //
    81. //
    82. HMODULE MemLoadLibrary(PBYTE data)
    83. {
    84.     IMAGE_FILE_HEADER        *pFileHeader        = NULL;
    85.     IMAGE_OPTIONAL_HEADER    *pOptionalHeader    = NULL;
    86.     IMAGE_SECTION_HEADER    *pSectionHeader        = NULL;
    87.     IMAGE_IMPORT_DESCRIPTOR *pImportDscrtr        = NULL;
    88.     USHORT                    e_lfanew            = *((USHORT*)(data+0x3c));
    89.     PCHAR                    ImageBase            = NULL;
    90.     PCHAR                    SectionBase            = NULL;
    91.  
    92.     DWORD dwSize, dwOldProt, ImageBaseDelta;
    93.     int i;
    94.  
    95.     pFileHeader = (IMAGE_FILE_HEADER *)(data+e_lfanew+4);
    96.     pOptionalHeader = (IMAGE_OPTIONAL_HEADER *)(data+e_lfanew+4+sizeof(IMAGE_FILE_HEADER));
    97.     if (pOptionalHeader->Magic!=IMAGE_NT_OPTIONAL_HDR32_MAGIC)
    98.         return NULL;
    99.  
    100.     //    Let's try to reserv memory
    101.     ImageBase = (PCHAR)VirtualAlloc(
    102.         (PVOID)pOptionalHeader->ImageBase,
    103.         pOptionalHeader->SizeOfImage,
    104.         MEM_RESERVE,PAGE_NOACCESS);
    105.  
    106.     if(ImageBase==NULL)
    107.     {
    108.         ImageBase=(PCHAR)VirtualAlloc(NULL,
    109.             pOptionalHeader->SizeOfImage,
    110.             MEM_RESERVE,PAGE_NOACCESS);
    111.         if(ImageBase==NULL)
    112.             return NULL;
    113.     }
    114.  
    115.     //    copy the header
    116.     SectionBase=(PCHAR)VirtualAlloc(ImageBase,
    117.         pOptionalHeader->SizeOfHeaders,
    118.         MEM_COMMIT,PAGE_READWRITE);
    119.     memcpy(SectionBase,data,pOptionalHeader->SizeOfHeaders);
    120.     //    Do headers read-only (to be on the safe side)
    121.     VirtualProtect(SectionBase,pOptionalHeader->SizeOfHeaders,PAGE_READONLY,&dwOldProt);
    122.  
    123.     //    find sections ...
    124.     pSectionHeader = (IMAGE_SECTION_HEADER *)(pOptionalHeader+1);
    125.     for (i=0; i<pFileHeader->NumberOfSections; i++)
    126.     {
    127.         SectionBase = (PCHAR)VirtualAlloc(
    128.             ImageBase+pSectionHeader[i].VirtualAddress,
    129.             pSectionHeader[i].Misc.VirtualSize,
    130.             MEM_COMMIT,PAGE_READWRITE);
    131.         if (SectionBase==NULL)
    132.         {
    133.             VirtualFree(ImageBase, 0, MEM_RELEASE);
    134.             return NULL;
    135.         }
    136.         //    ... and copy initialization data
    137.         SectionBase = ImageBase+pSectionHeader[i].VirtualAddress;
    138.         dwSize = MIN(pSectionHeader[i].SizeOfRawData,pSectionHeader[i].Misc.VirtualSize);
    139.         memcpy(SectionBase, data+pSectionHeader[i].PointerToRawData,dwSize);
    140.     }
    141.  
    142.     //    check addersses
    143.     ImageBaseDelta = (DWORD)ImageBase-pOptionalHeader->ImageBase;
    144.     if (ImageBaseDelta!=0 &&
    145.         pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress!=0
    146.         )
    147.     {
    148.         IMAGE_BASE_RELOCATION    *pBaseReloc    = (IMAGE_BASE_RELOCATION *)(ImageBase+
    149.             pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);
    150.         IMAGE_BASE_RELOCATION    *pBaseReloc0    = pBaseReloc;
    151.         WORD *wPointer = NULL;
    152.         DWORD dwModCount;
    153.         int i;
    154.  
    155.         while ((DWORD)pBaseReloc0-(DWORD)pBaseReloc < pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size)
    156.         {
    157.             dwModCount = (pBaseReloc0->SizeOfBlock-sizeof(pBaseReloc))/2;
    158.             wPointer = (WORD *)(pBaseReloc+1);
    159.             for (i=0; i<dwModCount; i++, wPointer++)
    160.                 if ((*wPointer & 0xf000) !=0)
    161.                 {
    162.                     PDWORD pdw = (PDWORD)(ImageBase+pBaseReloc0->VirtualAddress+((*wPointer)&0xfff));
    163.                     (*pdw)+=ImageBaseDelta;
    164.                 }
    165.                 pBaseReloc = (IMAGE_BASE_RELOCATION *)wPointer;
    166.         }
    167.     }
    168.     else if (ImageBaseDelta!=0)
    169.     {
    170.         VirtualFree(ImageBase, 0, MEM_RELEASE);
    171.         return NULL;
    172.     }
    173.  
    174.     pImportDscrtr = (IMAGE_IMPORT_DESCRIPTOR *)(ImageBase+
    175.         pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
    176.  
    177.     for (;pImportDscrtr->Name!=0; pImportDscrtr++)
    178.     {
    179.         PCHAR pLibName        = (PCHAR)(ImageBase+pImportDscrtr->Name);
    180.         PCHAR pImortName    = NULL;
    181.         HMODULE hLibModule    = LoadLibrary(pLibName);
    182.         DWORD    *pImport    = NULL,
    183.             *pAddress    = NULL;
    184.         DWORD ProcAddress;
    185.  
    186.         pAddress=(DWORD *)(ImageBase+pImportDscrtr->/*Original*/FirstThunk);
    187.         if (pImportDscrtr->TimeDateStamp==0)
    188.             pImport=(DWORD *)(ImageBase+pImportDscrtr->FirstThunk);
    189.         else
    190.             pImport=(DWORD *)(ImageBase+pImportDscrtr->OriginalFirstThunk);
    191.         for (i=0; pImport[i]!=0; i++)
    192.         {
    193.             if (IsImportByOrdinal(pImport[i]))
    194.                 ProcAddress=(DWORD)GetProcAddress(hLibModule, (PCHAR)(pImport[i]&0xFFFF));
    195.             else  // import by name
    196.             {
    197.                 pImortName=(PCHAR)(ImageBase+(pImport[i])+2);
    198.                 ProcAddress=(DWORD)GetProcAddress(hLibModule, pImortName);
    199.             }
    200.             pAddress[i]=ProcAddress;
    201.         }
    202.     }
    203.  
    204.     //    set section protection
    205.     for (i=0; i<pFileHeader->NumberOfSections; i++)
    206.         VirtualProtect((PVOID)(ImageBase+pSectionHeader[i].VirtualAddress),
    207.         pSectionHeader[i].Misc.VirtualSize,
    208.         GetSectionProtection(pSectionHeader[i].Characteristics),
    209.         &dwOldProt);
    210.  
    211.     //    call DLLMain
    212.     if (pOptionalHeader->AddressOfEntryPoint!=0)
    213.     {
    214.         DLLMAIN dllMain=(DLLMAIN)(ImageBase+pOptionalHeader->AddressOfEntryPoint);
    215.         if (!dllMain((HMODULE)ImageBase, DLL_PROCESS_ATTACH, NULL))
    216.         {
    217.             VirtualFree(ImageBase, 0, MEM_RELEASE);
    218.             return NULL;
    219.         }
    220.     }
    221.  
    222.     return (HMODULE)ImageBase;
    223. }
    224. //
    225. //
    226. BOOL MemFreeLibrary(HMODULE hDll)
    227. {
    228.     PIMAGE_DOS_HEADER        pDosHeader        = NULL;
    229.     PIMAGE_FILE_HEADER        pFileHeader        = NULL;
    230.     PIMAGE_OPTIONAL_HEADER    pOptionalHeader    = NULL;
    231.    
    232.     pDosHeader=(PIMAGE_DOS_HEADER)hDll;
    233.     pFileHeader=(PIMAGE_FILE_HEADER)(((PBYTE)hDll)+pDosHeader->e_lfanew+4);
    234.     pOptionalHeader=(PIMAGE_OPTIONAL_HEADER)(pFileHeader+1);
    235.  
    236. //    Call to DllMain
    237.     if (pOptionalHeader->AddressOfEntryPoint!=0)
    238.     {
    239.         DLLMAIN dllMain=(DLLMAIN)((PBYTE)hDll+pOptionalHeader->AddressOfEntryPoint);
    240.         dllMain(hDll, DLL_PROCESS_DETACH, NULL);
    241.     }
    242. //    free loaded librares    
    243.     PIMAGE_IMPORT_DESCRIPTOR pImportDscrtr = (IMAGE_IMPORT_DESCRIPTOR *)((PBYTE)hDll+
    244.         pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
    245.     for (;pImportDscrtr->Name!=0; pImportDscrtr++)
    246.     {
    247.         PCHAR pLibName = (PCHAR)((PBYTE)hDll+pImportDscrtr->Name);
    248.         HMODULE hLib = GetModuleHandle(pLibName);
    249.         FreeLibrary(hLib);
    250.     }
    251.  
    252.     return VirtualFree((PVOID)hDll, 0, MEM_RELEASE);
    253. }
    254. //
    255. FARPROC MemGetProcAddress(HMODULE hDll, LPCTSTR fname)
    256. {
    257.     PIMAGE_DOS_HEADER        pDosHeader        = NULL;
    258.     PIMAGE_FILE_HEADER        pFileHeader        = NULL;
    259.     PIMAGE_OPTIONAL_HEADER    pOptionalHeader    = NULL;
    260.  
    261.     pDosHeader=(PIMAGE_DOS_HEADER)hDll;
    262.     pFileHeader=(PIMAGE_FILE_HEADER)(((PBYTE)hDll)+pDosHeader->e_lfanew+4);
    263.     pOptionalHeader=(PIMAGE_OPTIONAL_HEADER)(pFileHeader+1);
    264.  
    265.     DWORD dwExpRVA = pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;
    266.     PBYTE pb = (PBYTE)hDll;
    267.     PIMAGE_EXPORT_DIRECTORY pExportDir=(PIMAGE_EXPORT_DIRECTORY)(pb+dwExpRVA);
    268.     PDWORD pNamesRVA=(PDWORD)(pb+pExportDir->AddressOfNames);
    269.     PDWORD pFuncRVA=(PDWORD)(pb+pExportDir->AddressOfFunctions);
    270.     PWORD ord=(PWORD)(pb+pExportDir->AddressOfNameOrdinals);
    271.  
    272.     DWORD dwFunc=pExportDir->NumberOfNames;
    273.     for (int i=0; i<dwFunc; i++)
    274.     {
    275.         PCHAR name =((PCHAR)(pb+pNamesRVA[i]));
    276.         if (0==strcmp(fname, name))
    277.             return (FARPROC)(pb+pFuncRVA[ord[i]]);
    278.     }
    279.  
    280.     return NULL;
    281. }
    282. //
    283. //#pragma warning (pop)
    284. //
    285. //#endif
    286. void get_proc_code(PVOID proc_entry, PBYTE buf)
    287. {
    288.  
    289.     PUCHAR ppp = (PUCHAR)proc_entry;
    290.  
    291.     for(ULONG i = 0;i < 100000; i++)
    292.     {
    293.         if(*ppp == 0xC3)
    294.         {
    295.             buf[i] = *ppp;
    296.             break;
    297.         }
    298.         buf[i] = *ppp;
    299.         ppp ++;
    300.     }
    301.  
    302.  
    303. }
    304.  
    305. extern "C"  bool test();
    306. typedef bool (*TEST)();
    307.  
    308.  
    309. TEST _test;
    310. TEST _test2;
    311.  
    312. void main()
    313. {
    314.         HANDLE  hFile = CreateFile("../dll/debug/dll.dll",GENERIC_READ,NULL,NULL,OPEN_EXISTING,NULL,NULL);          
    315.         DWORD dw;
    316.         int size = GetFileSize(hFile, &dw);
    317.         PBYTE buf = new BYTE[size];
    318.         ReadFile(hFile,buf,size,&dw,NULL);
    319.  
    320.         PBYTE pb = new BYTE[100000];
    321.  
    322.         HMODULE dll = MemLoadLibrary(buf);
    323.         _test =(TEST) MemGetProcAddress(dll, "test");
    324.         get_proc_code((VOID*)_test, pb);
    325.  
    326.        // _test2 = (TEST)pb;
    327.        // _test2();
    328.         _asm call pb;
    329.  
    330.  
    331.         MemFreeLibrary(dll);
    332.         CloseHandle(hFile);    
    333.         delete [] buf;
    334.         delete [] pb;
    335.  
    336. }
    337.  
    338. //********************************************
    339. //dll code
    340. // dll.cpp : Defines the entry point for the DLL application.
    341. //
    342.  
    343. #include "stdafx.h"
    344.  
    345.  
    346. extern "C" __declspec(dllexport)void test();
    347.  
    348. int WINAPI DllMain(HINSTANCE hInstance, DWORD fdReason, PVOID pvReserved)
    349. {
    350.     switch(fdReason)
    351.     {
    352.     case DLL_PROCESS_ATTACH:
    353.           MessageBox(NULL, "hook dll loded", "good", MB_OK);
    354.         break;
    355.  
    356.     case DLL_PROCESS_DETACH:
    357.  
    358.         MessageBox(NULL, "hook dll unloded", "good", MB_OK);
    359.         break;
    360.     }
    361.  
    362.     return true;
    363. }
    364.  
    365. void test()
    366. {
    367.     MessageBox(NULL, "fun test", "dll", MB_OK);
    368. }
    при отработки строки
    _test2();

    либо

    _asm call pb;

    вижу диалоговое окно с надписью:

    Unhandled exception at 0x0045fc63 in dll_load.exe: 0xC0000005: Access violation reading location 0xffffffff.

    я чувствую что очень сильно туплю!
    Товариши, направте на путь истенный!
     
  14. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Отладчик тебе поможет)
     
  15. deadly83

    deadly83 New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2007
    Сообщения:
    71
    кстати, у каспера есть какая то либа .dll не помню какая, так вот даже после того как сам центр убит (т.е ехе терминирован и процесса нету) эта либа продолжает работать и в IDA pro что либо отлаживать бесполезно она останавливается на этой dll каспера, тока полный унисталл дал спокойно работать с IDA.
     
  16. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    Проблема:

    Есть некая ф-я в моем .exe,
    В этом же .exe мне необходимо прочитать ее бин код!
    Это вообще возможно?

    Пытаюсь делать так есть ф-я

    Код (Text):
    1. void fun()
    2. {
    3.     _asm mov eax, 0x0F;
    4.     _asm mov ebx, eax;
    5. }
    6. тело  ф-ии в bin виде выглядит так:
    7. B80F000000 8BD8
    далее беру адрес ф-ии, и читаю от него память в надежде найти тело ф-ии, но тешно
    Код (Text):
    1.    
    2. PUCHAR ppp = (PUCHAR)fun;
    3.  
    4.     for(ULONG i = 0;i < 100000; i++)
    5.     {
    6.         if(*ppp == 0xB8)
    7.         {
    8.              ppp ++;
    9.             if(*ppp == 0x0F)
    10.            {  
    11.                 printf("good");
    12.            }
    13.         ppp ++;
    14.         }
    15.     }
    Где и как искать это само тело ф-ии?
     
  17. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    Могу спросить еще конкретней:
    Как мне внедрить код найденного мною dll лодера в процесс?
     
  18. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    чем WriteMemory/remoteThread не устраивает?
     
  19. vanilly_cpp

    vanilly_cpp New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2007
    Сообщения:
    68
    устраивает полностью!

    просто я пытался создать акцент в вопросе на реализации внедряемого кода, думал будет видно по моим предидущим постам!

    Ну ладно! Это уже неважно!

    //*****************************************
    Проблема от туда же, но уже конкретней:

    почему так работает?
    Код (Text):
    1.    
    2. typedef HANDLE (_stdcall *CREATEFILE)(char*, DWORD, DWORD,DWORD,DWORD,DWORD,DWORD);
    3. CREATEFILE cf;
    4.  
    5.     DWORD create_file = 0x7c801a24;
    6.  
    7.     DWORD dw;
    8.     DWORD handle;
    9.     cf = (CREATEFILE)create_file;
    10.     cf("fuck.fk",GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,NULL,NULL);
    А так нет?
    Код (Text):
    1.     char f_namep[] = {'f','u','c','k','.','f',0};
    2.  
    3.     DWORD create_file = 0x7c801a24;
    4.  
    5.     DWORD dw;
    6.     DWORD handle;
    7.  
    8.     _asm
    9.     {
    10.         push NULL
    11.         push NULL    
    12.         push CREATE_ALWAYS
    13.         push NULL
    14.         push NULL
    15.         push GENERIC_WRITE
    16.         push f_namep
    17.         call create_file
    18.         mov handle, eax
    19.     }
    ЗЫ: В асме не силен!
     
  20. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    call dword ptr [create_file]