Патчинг функции для вызова длл мейна

Тема в разделе "WASM.NT.KERNEL", создана пользователем accord, 4 мар 2020.

  1. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Всем привет пытаюсь вызвать длл мейн методом патчинга вин апи функции но что то не выходит приложение ложится вот код шелл кода и как я делаю может кто сможет помочь буду благодарен
    Код (C++):
    1.     BYTE shellcode[] = {  //hook
    2.                 0x00, 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xBA, 0x00, 0x00,
    3.                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x10, 0x48, 0xBA, 0x00, 0x00, 0x00, 0x00,
    4.                 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x50, 0x08, 0x48, 0x83, 0xEC, 0x28, 0x48, 0xBA, 0x01,
    5.                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x15, 0x02, 0x00, 0x00, 0x00, 0xEB, 0x08,
    6.                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x28, 0x48, 0x31, 0xC0,
    7.                 0xC6, 0x05, 0xAE, 0xFF, 0xFF, 0xFF, 0x01, 0xC3
    8.             };
    вот он в асм виде
    Код (ASM):
    1. 0:  00 48 b8                add    BYTE PTR [rax-0x48],cl
    2. ...
    3. b:  48 ba 00 00 00 00 00    movabs rdx,0x0
    4. 12: 00 00 00
    5. 15: 48 89 10                mov    QWORD PTR [rax],rdx
    6. 18: 48 ba 00 00 00 00 00    movabs rdx,0x0
    7. 1f: 00 00 00
    8. 22: 48 89 50 08             mov    QWORD PTR [rax+0x8],rdx
    9. 26: 48 83 ec 28             sub    rsp,0x28
    10. 2a: 48 ba 01 00 00 00 00    movabs rdx,0x1
    11. 31: 00 00 00
    12. 34: ff 15 02 00 00 00       call   QWORD PTR [rip+0x2]        # 0x3c
    13. 3a: eb 08                   jmp    0x44
    14. ...
    15. 44: 48 83 c4 28             add    rsp,0x28
    16. 48: 48 31 c0                xor    rax,rax
    17. 4b: c6 05 ae ff ff ff 01    mov    BYTE PTR [rip+0xffffffffffffffae],0x1        # 0x0
    18. 52: c3                      ret
    Код (C++):
    1.         PVOID PeekMessageW = (PVOID)PAGE_ALIGN(user32Dll.BaseImage + 105184);//GetProcAddress(user32Dll.BaseImage, "PeekMessageW");
    2.             LOG_WARNING("PeekMessageW in game %p", PeekMessageW);
    3.    
    4.             BYTE shellcode[] = {  //hook
    5.                 0x00, 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xBA, 0x00, 0x00,
    6.                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x10, 0x48, 0xBA, 0x00, 0x00, 0x00, 0x00,
    7.                 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x50, 0x08, 0x48, 0x83, 0xEC, 0x28, 0x48, 0xBA, 0x01,
    8.                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x15, 0x02, 0x00, 0x00, 0x00, 0xEB, 0x08,
    9.                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0x28, 0x48, 0x31, 0xC0,
    10.                 0xC6, 0x05, 0xAE, 0xFF, 0xFF, 0xFF, 0x01, 0xC3
    11.             };
    12.  
    13.             *(PVOID*)(&shellcode[3]) = PeekMessageW;
    14.        
    15.             TAEGET_MEMORY data = { 0 };
    16.             data.pId = InjectData.pId;
    17.             data.pAdress = (ULONGLONG)PeekMessageW;
    18.             data.iSize = sizeof(ULONG64);
    19.             data.pBuffer = (ULONGLONG)(&shellcode[13]);
    20.             status = ReadMemory(&data);
    21.  
    22.             data = { 0 };
    23.             data.pId = InjectData.pId;
    24.             data.pAdress = (ULONGLONG)PeekMessageW + sizeof(ULONG64);
    25.             data.iSize = sizeof(ULONG64);
    26.             data.pBuffer = (ULONGLONG)(&shellcode[26]);
    27.             status = ReadMemory(&data);
    28.  
    29.             *(PVOID*)(&shellcode[60]) = (PVOID)(allocateMemory.address + dllHeader->OptionalHeader.AddressOfEntryPoint);
    30.    
    31.             LOG_WARNING("AddressOfEntryPoint %p", (PVOID)(allocateMemory.address + dllHeader->OptionalHeader.AddressOfEntryPoint));
    32.  
    33.             data = { 0 };
    34.             data.pId = InjectData.pId;
    35.             data.pAdress = allocateMemory.address + allocateMemory.size - sizeof(shellcode);
    36.             data.iSize = sizeof(shellcode);
    37.             data.pBuffer = (ULONGLONG)(&shellcode);
    38.             status = WriteMemory(&data);
    39.  
    40.             BYTE jump[14] = { 0xFF, 0x25, 0x00, 0x00, 0x00, 0x00 };
    41.             *(PVOID*)(&jump[6]) = (PVOID)(data.pAdress + 1);
    42.  
    43.    
    44.  
    45.             SIZE_T ViewSize = 2 * sizeof(ULONG64);
    46.  
    47.             ULONG oldProt = 0;
    48.             status = ZwProtectVirtualMemory(ZwCurrentProcess(), &PeekMessageW, &ViewSize, PAGE_EXECUTE_READWRITE, &oldProt);
    49.             LOG_WARNING("ZwProtectVirtualMemory %p", status);
    50.  
    51.             data = { 0 };
    52.             data.pId = InjectData.pId;
    53.             data.pAdress = (ULONGLONG)PeekMessageW;
    54.             data.iSize = sizeof(jump);
    55.             data.pBuffer = (ULONGLONG)jump;
    56.             status = WriteMemory(&data);
    [​IMG]
    шелл код
    [​IMG]
     
    Последнее редактирование: 4 мар 2020
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    accord,

    Так а где падает и почему, инфа про фаулт ?
     
  3. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Проблему решил не верно высчитал смещение до функции как итог патчил не то что надо
     
  4. savoyard

    savoyard Member

    Публикаций:
    0
    Регистрация:
    16 янв 2020
    Сообщения:
    42
    accord, а можно более детальней описать, то что вы сделали? Ну т.е. выложить ту ДЛЛ, которую вы патчили и т.д. и т.п. Чтобы взять на практике все пробовать и получить\увидеть результат: что было до и что стало после. Если, конечно, это не что-то секретное и если вам это не в тягость.

    P.S. Извиняюсь, если что, за свое дилетантство - никогда такое не делал, но планирую. :)
     
  5. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Тут обычный remote hook
     
  6. savoyard

    savoyard Member

    Публикаций:
    0
    Регистрация:
    16 янв 2020
    Сообщения:
    42
    Я, конечно, понимаю, что краткость сестра таланта, но не до такой же степени. :)
    Мне еще у Инди нравится фраза, которую он раньше частенько использовал:
    "техзадание составлено неверно, поэтому вопрос смысла не имеет". :)
    Еще можно послать в гугл или сделать вид, что не заметил пост с вопросом.
    Да способов масса - было б желание, а способ и повод всегда можно найти и придумать. :)