Сейчас на форуме: tyns777, bezumchik, Lohmaty (+6 невидимых)

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

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

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

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

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


537a_10.01.2019_EXELAB.rU.tgz - equalizer.dll




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

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

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

-----
В облачке многоточия




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

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

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

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

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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

-----
2 оттенка серого




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

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

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

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




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

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

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

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

-----
В облачке многоточия





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

-----
2 оттенка серого




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

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

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

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


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

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

-----
2 оттенка серого




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

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

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

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





Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 10 января 2019 01:36 · Поправил: Boostyq
· Личное сообщение · #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 уже должен быть кем-то хукнут

-----
В облачке многоточия





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

-----
2 оттенка серого





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 10 января 2019 01:37 · Поправил: reversecode
· Личное сообщение · #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 (гость)
Активность: 0.020
Статус: Участник

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

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

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

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

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




Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

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

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




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 10 января 2019 01:42 · Поправил: Boostyq
· Личное сообщение · #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 (гость)
Активность: 0.020
Статус: Участник

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

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

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

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

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



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

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

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

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




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

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

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

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

-----
В облачке многоточия




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

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

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

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




Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 10 января 2019 02:10
· Личное сообщение · #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


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

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

0pc0d3R

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

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

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

-----
vx





Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

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

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

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


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

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

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

-----
В облачке многоточия





Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 10 января 2019 23:04 · Поправил: UniSoft
· Личное сообщение · #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 (гость)
Активность: 0.020
Статус: Участник

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

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

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

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

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




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

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

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


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

-----
Give me a HANDLE and I will move the Earth.





Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

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

0pc0d3R

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




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

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

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


При этом тебе reversecode дал практически готовый код ))

-----
EnJoy!



. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Пропатчить x86 DLL`ку (Без прота/пакера)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати