eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: yashechka, Adler (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Пропатчить x86 DLL`ку (Без прота/пакера)
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 00:36 New!
Цитата · Личное сообщение · #1

Есть такая дллка 32-битная с хуком на ReadFile, для расшифровки архивов с моделями к игре GTA:SA.
Если вытащить дллку с клиента игры и заинжектить себе в процесс то хватаешь месседж боксы с нецензурной бранью, якобы автор намекает что это делать не стоит
Нашел я эти наги и пропатчил но не тут то было, схватил краш сразу после инжекта, до патча даже не смотря на наг всё равно ставился джамп на хук рид файла, правда он врядли бы сработал потому что хук ставится в одном потоке с dllmain откуда и вызывает эти наги.
Вопрос вот в чём, почему она крашит?
Вот скрин с моим патчем

P.S - Сама дллка ничем не запакована и не протекчена (проверенно несколькими PE-сканнерами).


{ Атач доступен только для участников форума } - equalizer.dll

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 10 января 2019 00:49 · Поправил: Boostyq New!
Цитата · Личное сообщение · #2

Так Смирнов это ты?
Вообще хорошо что он тебе месседжбоксы послал, а не дроппер
А если серьезно, дллка вполне может использовать функционал клиента гташки, из-за этого на вызовах этих функций (если ты пропатчил предшествующие проверки) может крашить

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 00:54 New!
Цитата · Личное сообщение · #3

Boostyq пишет:
Так Смирнов это ты?
Вообще хорошо что он тебе месседжбоксы послал, а не дроппер

Не знаю какому такому Смирнову это было адресовано но я орнул с нагов)
У меня свои цели на эту дллку, вот и спрашиваю почему мой патч крашит.

Добавлено спустя 3 минуты
Boostyq пишет:
А если серьезно, дллка вполне может использовать функционал клиента гташки, из-за этого на вызовах этих функций (если ты пропатчил предшествующие проверки) может крашить

Это маловероятно, у меня есть старый исходник реализации этого хука дешифрования и текущий код почти 1 в 1 похож за исключением самого алгоритма дешифровки, его немного изменили. Там лишь ставит хук на рид файл, затем включает его и всё, мб краш потому что где-то ещё проверка на офф.клиент хз.


Ранг: 206.6 (наставник)
Статус: Участник

Создано: 10 января 2019 00:58 New!
Цитата · Личное сообщение · #4

Возьми да хукни MessageBoxW и пусть хоть обмессаджбоксится.

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 01:00 New!
Цитата · Личное сообщение · #5

f13nd пишет:
Возьми да хукни MessageBoxW и пусть хоть обмессаджбоксится.

А это идея, спасибо! Вырежу сам показ бокса) а цикл не даст крашнутся, только я почему-то сомниваюсь что хук на рид файл сработает, ведь хук ставился выше а это один и тот же поток где цикл на этот наг, разве так прокатит?

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 10 января 2019 01:02 New!
Цитата · Личное сообщение · #6

0pc0d3R пишет:
включает его и всё, мб краш потому что где-то ещё проверка на офф.клиент хз.

Ну так адрес исключения нужно показывать, телепаты на другом форуме


Ранг: 206.6 (наставник)
Статус: Участник

Создано: 10 января 2019 01:05 New!
Цитата · Личное сообщение · #7

А да, не прокатит. Смотреть надо почему крашится, влезть в 501E1A30, увидеть что там за условие бесконечного цикла с мессаджбоксами.

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 01:20 New!
Цитата · Личное сообщение · #8

Boostyq пишет:
Ну так адрес исключения нужно показывать, телепаты на другом форуме

Убрал я цикл, поставил бряк железный и трасанул, оказывается крашит после выхода с dllmain на вот этом ретурне, адрес вообще какой то дало 00000001 чёт такое ACCESS_VIOLATION


Добавлено спустя 1 минуту
f13nd пишет:
А да, не прокатит. Смотреть надо почему крашится, влезть в 501E1A30, увидеть что там за условие бесконечного цикла с мессаджбоксами.

По этому адресу скорее всего функа ставящая хук на рид файл.


Ранг: 206.6 (наставник)
Статус: Участник

Создано: 10 января 2019 01:29 · Поправил: f13nd New!
Цитата · Личное сообщение · #9

У меня не крашит ничего, корректно выходит из LoadLibraryA. Если конечно не дать свернуть в ветку с мессаджбоксами про Смирнова. В 501E1A30 он тулхелп апями ищет какой-то поток, который должен засуспендить и порыться в его контексте, но не находит.

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 01:33 New!
Цитата · Личное сообщение · #10

f13nd пишет:
У меня не крашит ничего, корректно выходит из LoadLibraryA. Если конечно не дать свернуть в ветку с мессаджбоксами про Смирнова. В 501E1A30 он тулхелп апями ищет какой-то поток, который должен засуспендить и порыться в его контексте, но не находит.

Так у меня тоже не крашит если просто сделать цикл рекурсией на себя, чтобы месседж бокс не показывало но это же не решение проблемы, вот после ретурна и хватаю краш если прерву цикл.

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 10 января 2019 01:36 · Поправил: Boostyq New!
Цитата · Личное сообщение · #11

Мне больше интересно почему эти сообщения вообще выводятся
Code:
  1. .text:10003CB6                 mov     esi, ds:ReadFile
  2. .text:10003CBC                 push    offset dword_10020000
  3. .text:10003CC1                 push    offset sub_10002BA0
  4. .text:10003CC6                 push    esi
  5. .text:10003CC7                 call    sub_1000185A <-- возвращает 0 при удаче, иначе код ошибки
  6. .text:10003CCC                 test    eax, eax
  7. .text:10003CCE                 jnz     short loc_10003D23
  8. .text:10003CD0                 push    esi
  9. .text:10003CD1                 call    sub_10001A30 <-- возвращает 0 при удаче, иначе код ошибки
  10. .text:10003CD6                 test    eax, eax
  11. .text:10003CD8                 jnz     short loc_10003D23
  12. .text:10003CDA                 mov     esi, ds:MessageBoxW

Т.е. сообщения начинают спамится только если обе функи сработали без ошибок
Но обе нужны для корректного хука, получается что в нормальной ситуации эту функцию хукнуть не удается
Выходит ReadFile уже должен быть кем-то хукнут


Ранг: 206.6 (наставник)
Статус: Участник

Создано: 10 января 2019 01:37 New!
Цитата · Личное сообщение · #12

0pc0d3R пишет:
Сама дллка ничем не запакована и не протекчена (проверенно несколькими PE-сканнерами).

Это самопальная шляпа, набитая VirtualProtect'ами и VirtualQuery'ями, она сама не обязана быть упакованой, упаковано тело самого хука. Я бы посоветовал не маяться фигней, а дампить сам процесс гта с этой длл и от самого хука на ReadFile уже плясать.


Ранг: 1011.0 (!!!!)
Статус: Участник

Создано: 10 января 2019 01:37 · Поправил: reversecode New!
Цитата · Личное сообщение · #13

какой смыл этой длл ?
цикл расшифровки архивов с моделями к игре GTA:SA до смеха
Code:
  1.   for ( i = 0; i < szv12; ++i )
  2.     *(_BYTE *)(a5 + i) ^= CRC_byte_10020008[(unsigned __int64)((__int64)(__PAIR64__(v15, v8) + (int)i) % 1020)];
  3.  

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 01:38 · Поправил: 0pc0d3R New!
Цитата · Личное сообщение · #14

Boostyq пишет:
Т.е. сообщения начинают спамится только если обе функи сработали без ошибок
Но обе нужны для корректного хука, получается что в нормальной ситуации эти функции хукнуть не удается

Возможно так устроены возвраты в хуках, вот С++ сорц с реализацией установки данного хука, исходник почти 1 в 1 с этой дллкой, там разве что саму дешифровку чуток поменяли.


Ранг: 1011.0 (!!!!)
Статус: Участник

Создано: 10 января 2019 01:40 New!
Цитата · Личное сообщение · #15

ну т.е. хашкей генератор вы взять не хотите
а париться с хуками и крашами хотите
чудесно
давайте пацаны с ляба сделайте все за меня так ?

Ранг: 48.6 (посетитель)
Статус: Участник

Создано: 10 января 2019 01:41 New!
Цитата · Личное сообщение · #16

надо еще смотреть как именно пропатчили...
а то может код патча разместили по адресу помеченным в релоках.

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 10 января 2019 01:42 · Поправил: Boostyq New!
Цитата · Личное сообщение · #17

Ну я про это и говорю
Code:
  1. //MessageBox(NULL, "Craete Hook", NULL, NULL);
  2. // Create a hook for in disabled state.
  3. if (MH_CreateHook(&ReadFile, &DetourReadFile,
  4.          reinterpret_cast<LPVOID*>(&fpReadFile)) != MH_OK)
  5. {
  6.          return 1;
  7. }
  8.  
  9. //MessageBox(NULL, "Enable Hook", NULL, NULL);
  10. // Enable hook
  11. if (MH_EnableHook(&ReadFile) != MH_OK)
  12. {
  13.          return 1;
  14. }
  15.  
  16. // вот здесь он начинает спамить сообщениями
  17. //MessageBox(NULL, "Good Hook", NULL, NULL);

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 01:42 New!
Цитата · Личное сообщение · #18

reversecode пишет:
ну т.е. хашкей генератор вы взять не хотите
а париться с хуками и крашами хотите
чудесно
давайте пацаны с ляба сделайте все за меня так ?

Если бы мне хватило мозгов скейгенить это я бы вообще с длл не парился потому и прошу помощи.


Ранг: 1011.0 (!!!!)
Статус: Участник

Создано: 10 января 2019 01:44 New!
Цитата · Личное сообщение · #19

хаш выше ваших хуков считается
возьмите да переведите в сорсы
просто это все в другие раздело надо постить
а так можно устроить демагогию типа делаю все сам а мне подсказывают типа ?

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 01:46 New!
Цитата · Личное сообщение · #20

reversecode пишет:
хаш выше ваших хуков считается
возьмите да переведите в сорсы
просто это все в другие раздело надо постить
а так можно устроить демагогию типа делаю все сам а мне подсказывают типа ?

Мне достаточно было знать в каком направлении двигатся, никто не просит перевести в сорц вместо меня.

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 10 января 2019 01:47 · Поправил: Boostyq New!
Цитата · Личное сообщение · #21

0pc0d3R пишет:
Мне достаточно было знать в каком направлении двигатся, никто не просит перевести в сорц вместо меня.

Спойлер: никто и не переведет
По итогу дллка очень странная, там где в оригинальных исходниках пишется, что все удачно хукнуто, автор данной дллки решил написать, что юзер "SMIRNOV - PIDOR \nXYU TEBE, A NE DECRYPTOR"
Цикл расшифровки такой как и сказал reversecode
Так что вытаскивайте алго, если он вам нужен, расчет таблицы для ксора над хуком ReadFile, цикл расшифровки в самом хуке ReadFile
П.с. данная дллка не будет работать без клиента игры, т.к. игра вызывает чтение определенных файлов, которые не читает ваш процесс

Ранг: 3.1 (гость)
Статус: Участник

Создано: 10 января 2019 01:56 New!
Цитата · Личное сообщение · #22

Boostyq пишет:
По итогу дллка очень странная, там где в оригинальных исходниках пишется, что все удачно хукнуто, автор данной дллки решил написать, что юзер "SMIRNOV - PIDOR \nXYU TEBE, A NE DECRYPTOR"
Цикл расшифровки такой как и сказал reversecode
Так что вытаскивайте алго, если он вам нужен, расчет таблицы для ксора над хуком ReadFile, цикл расшифровки в самом хуке ReadFile
П.с. данная дллка не будет работать без клиента игры, т.к. игра вызывает чтение определенных файлов, которые не читает ваш процесс

Понял, спасибо!

Ранг: 48.6 (посетитель)
Статус: Участник

Создано: 10 января 2019 02:10 New!
Цитата · Личное сообщение · #23

И еще, так нельзя ставить хук...
&ReadFile не всегда указывает на начало реальной процедуры... (тут сильно зависит от компилятора).
иногда ReadFile может указывать просто на переходник, ну типа

ReadFile:
jmp dword ptr [iat_table_item]


Code:
  1. if (MH_CreateHook(&ReadFile, &DetourReadFile,
  2.          reinterpret_cast<LPVOID*>(&fpReadFile)) != MH_OK)
  3. {
  4.          return 1;
  5. }
  6.  
  7. //MessageBox(NULL, "Enable Hook", NULL, NULL);
  8. // Enable hook
  9. if (MH_EnableHook(&ReadFile) != MH_OK)
  10. {
  11.          return 1;
  12. }


надо так

Code:
  1. LPVOID lpReadFile = GetProcAddress(GetModuleHandleA("kernel32.dll"), "ReadFile");
  2. if (MH_CreateHook(lpReadFile, &DetourReadFile,
  3.          reinterpret_cast<LPVOID*>(&fpReadFile)) != MH_OK)
  4. {
  5.          return 1;
  6. }
  7.  
  8. // Enable hook
  9. if (MH_EnableHook(lpReadFile) != MH_OK)
  10. {
  11.          return 1;
  12. }

| Сообщение посчитали полезным: DimitarSerg



Ранг: 292.4 (наставник)
Статус: Участник

Создано: 10 января 2019 20:38 New!
Цитата · Личное сообщение · #24

0pc0d3R

> Вопрос вот в чём, почему она крашит?

А где штатная инфа по крэшу ?
Твои эти чёрные скрины никому не нужны.
Где статусный код, адрес инструкции и адрес выборки(если это #AV) ??

23 поста бреда и никто не задал конкретный вопрос по фолту.

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 10 января 2019 21:37 · Поправил: Boostyq New!
Цитата · Личное сообщение · #25

difexacaw пишет:
Где статусный код, адрес инструкции и адрес выборки(если это #AV) ??

23 поста бреда и никто не задал конкретный вопрос по фолту.


На самом деле их стало 24
Вопрос #6
Boostyq пишет:
Ну так адрес исключения нужно показывать

Вопрос #7
f13nd пишет:
Смотреть надо почему крашится

Ответ #8 на скрине
Видимо вы просто считаете посты, не читая их

Ранг: 48.6 (посетитель)
Статус: Участник

Создано: 10 января 2019 23:04 · Поправил: UniSoft New!
Цитата · Личное сообщение · #26

difexacaw
смотрим в книгу видим фигу
в 10-ом сообщении
на скрине все видно невооруженным глазом...
EIP на инструкции RET 0xC а в стеке 0x00000001
видно же что указатель стека съехал (либо повреждено содержимое)...
что же еще вам нужно?

Добавлено спустя 1 час 2 минуты
0pc0d3R
Только глянул код... хитро придумано...
тут нет обхода ругательских сообщений, и все происходит в DllMain::DLL_PROCESS_ATTACH
нет никаких условий.

Тут все дело в коде который и грузит эту самую dll...
Там скорее всего реализовано что-то типа такого:
Code:
  1. typedef int (WINAPI *LPMESSAGEBOXW)(HWND, LPCWSTR, LPCWSTR, UINT);
  2. LPMESSAGEBOXW fpMessageBoxW = NULL;
  3.  
  4. int __declspec(naked) WINAPI DetourMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
  5. {
  6.     __asm
  7.     {
  8.         CMP     DWORD PTR [ESP + 4], 0  ; hWnd
  9.         JNZ     NotFound
  10.         CMP     DWORD PTR [ESP + 10h], 10h ; uType
  11.         JNZ     NotFound
  12.         
  13.         MOV     EAX, [ESP + 0Ch]        ; lpCaption
  14.         TEST    EAX, EAX
  15.         JZ      NotFound
  16.         
  17.         CMP     DWORD PTR [EAX], 00690050h 
  18.         JNZ     NotFound
  19.         CMP     DWORD PTR [EAX+4], 002E0070h 
  20.         JNZ     NotFound
  21.         
  22.         ADD     ESP, 14h
  23.         XOR     EAX, EAX
  24.         INC     EAX
  25.         RETN    0Ch
  26.         
  27. NotFound:
  28.         JMP     fpMessageBoxW
  29.     }
  30. }
  31.  
  32. HMODULE LoadDll(void)
  33. {
  34.     MH_Initialize();
  35.     LPVOID lpMessageBoxW = GetProcAddress(LoadLibraryA("user32.dll"), "MessageBoxW");
  36.     MH_CreateHook(lpMessageBoxW, &DetourMessageBoxW, reinterpret_cast<LPVOID*>(&fpMessageBoxW));
  37.     MH_EnableHook(lpMessageBoxW);
  38.     HMODULE hModule = LoadLibraryA("equalizer.dll");
  39.     MH_DisableHook(lpMessageBoxW);
  40.     MH_Uninitialize();
  41.     return hModule;
  42. }

Ранг: 3.1 (гость)
Статус: Участник

Создано: 11 января 2019 01:59 New!
Цитата · Личное сообщение · #27

UniSoft пишет:
смотрим в книгу видим фигу
в 10-ом сообщении
на скрине все видно невооруженным глазом...
EIP на инструкции RET 0xC а в стеке 0x00000001
видно же что указатель стека съехал (либо повреждено содержимое)...
что же еще вам нужно?

Добавлено спустя 1 час 2 минуты
0pc0d3R
Только глянул код... хитро придумано...
тут нет обхода ругательских сообщений, и все происходит в DllMain::DLL_PROCESS_ATTACH
нет никаких условий.

Тут все дело в коде который и грузит эту самую dll...
Там скорее всего реализовано что-то типа такого:

Знаете что более обидно?) Я только что понял что эта длл создана для отвода глаз и она не используется для хука расшифровки, его переместили))) А я голову морочил


Ранг: 488.7 (мудрец)
Статус: Участник
_Вечный_Студент_

Создано: 11 января 2019 02:11 New!
Цитата · Личное сообщение · #28

0pc0d3R пишет:
А я голову морочил


не переживай! это с каждым может случиться, даже с самыми лучшими. Называется BRAIN FART.

Ранг: 48.6 (посетитель)
Статус: Участник

Создано: 11 января 2019 02:14 New!
Цитата · Личное сообщение · #29

0pc0d3R

О сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.


Ранг: 582.8 (!)
Статус: Модератор
Research & Development

Создано: 11 января 2019 13:46 New!
Цитата · Личное сообщение · #30

0pc0d3R пишет:
понял что эта длл создана для отвода глаз и она не используется для хука расшифровки


При этом тебе reversecode дал практически готовый код ))
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Пропатчить x86 DLL`ку (Без прота/пакера)

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS