Сейчас на форуме: vsv1, r0lka, -Sanchez-, testrev1337, johnniewalker, Kybyx (+4 невидимых)

 eXeL@B —› Крэки, обсуждения —› Непонятная ошибка открытия драйвера FEnteDev (hardlock.sys) смахивает на защиту
Посл.ответ Сообщение


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

Создано: 02 апреля 2010 01:06 · Поправил: DenCoder
· Личное сообщение · #1

Доброго всем времени суток! Прошу опытных и не очень кодеров, реверсеров и крякеров помочь разобраться. Нонсенс какой-то и в интернете что-то ссылей поубавилось раз в 1000 или и не было вовсе. Толком ничего нет ни о FEnteDev, ни о hardlock.sys.

Пытаюсь запустить игру от фирмы LLC STRIKE из-под своего загрузчика. Игра защищена HASP. Не выходит, хотя без него пашет нормально. Разобрался с логами, причина этому - не может открыть "\.\FEnteDev" в n-ый раз, получает INVALID_HANDLE_VALUE и выводит "Error 1009: Cannot open HASP HL Drivers". Добавил для таких случаев GetLastError и прогнал еще раз. Вышло так:

Thread: 000000C4
Begin call CreateFileA(
lpFileName = "\.\FEnteDev"
dwDesiredAccess = C0000000
dwSharedMode = 00000003
lpSecurityAttributes = 00000000
dwCreationDisposition = 00000003
dwFlagsAndAttributes = 00000000
hTemplateFile = 00000000)
Return: [bshell32.dll].11C4C2F1

Thread: 000000C4
CreateFileA end
Result: FFFFFFFF
Error: 87(ERROR_INVALID_PARAMETER)

Точно такой же, аналогичный вызов CreateFile до этого проходит без ошибок. Разница в вызовах лишь в том, что в предыдущем адрес возврата в exe-модуль и потоки разные... ну и открытие в последнем случае из DllMain (или DllEntryPoint), MessageBox за ним там же. И в итоге LoadLibrary("bshell32.dll") возвращает 0, Last Error = 1114. Как такое может быть? - Моя тулза здесь ничего не подменяет, если б драйвер не был закрыт, код ошибки был бы другой... У кого какие идеи есть? Может, кто-то уже сталкивался с подобным?

P.S. Форумом не допускается двойной слеш ))) \

-----
IZ.RU




Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 02 апреля 2010 01:35
· Личное сообщение · #2

посмотри
www.woodmann.com/forum/archive/index.php/t-2210.html
bugs.etersoft.ru/show_bug.cgi?id=3066
ediusforum.grassvalley.com/forum/showthread.php?t=2106




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

Создано: 02 апреля 2010 01:41 · Поправил: DenCoder
· Личное сообщение · #3

1 и 3 мимо. 2 уже читал, тоже не то. Спасибо.

________________________________________
Даю описание алгоритма, что делается.

1) Перехватывается GetProcAddress;

2) Сравнивается имя ф-ции, если CreateFileA или CreateFileW, выделяется память под код перехватчика, компилится маленький кодик перехватчика в зависимости от условий, в map заносится пара адресов, оригинальный и перехватчика, возвращаемый адрес подменяется на Entry этого кода, дабы не установить хук дважды. Память выделяется VirtualAlloc, если ни в какой выделенной ранее странице нет достаточного места (свой менеджер памяти);

3) Программа, получающая адрес, получает новый адрес;

...

4) Вызов CreateFileA или CreateFileW попадает на код перехватчика, в котором до реального вызова вызывается преобработчик со всеми параметрами и с адресом возврата в вызвающую программу. В преобработчике вызывается:

- GetModuleHandleEx для определения хендла модуля, из которого совершен вызов ф-ции;

- GetModuleFileName для определения имени модуля, strrchr урезает его полный путь;

- sprintf форматирует строку для передачи серверу (msvcr90x.dll не используется);

- Подготавливается буфер для передачи текста и дается сигнал серверу ф-цией SetEvent. Для каждого потока программы предварительно создана пара именованных Event'ов;

- Ожидается ответный сигнал от сервера после обработки сообщения;

- Сервер читает из переданного ему ранее (при создании потока) входного буфера в исследуемом процессе ф-цией ReadProcessMemory, затем в выходной буфер пишет ответ (WriteProcessMemory) и дает сигнал о продолжении работы потока;

5) управление возвращается в код перехватчика, который передает все параметры ф-ции;

6) После отработки ф-ции управление возвращается в перехватчик и вызывается постобработчик;

7) В постобработчике действия, как и в пре-, только без GetModuleHandleEx и GetModuleFileName, результат ф-ции возврашается вызывающей программе.

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

________________________________________________________________

Нашел, как игра переключает видеорежим. Это ChangeDisplaySettingsEx с параметром CDS_FULLSCREEN. Также, как блокируется Alt-TAB. Это SetWindowsHookEx с типом хука WH_KEYBOARD_LL (0x0D). Так что, не дожидаясь ответа, попробую перехватить то, что нужно, подменить параметры, брякнкнуться на CreateFile и подцепиться Олей...

-----
IZ.RU





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

Создано: 03 апреля 2010 07:47 · Поправил: DenCoder
· Личное сообщение · #4

Не, докопался до NtCreateFile, дальше ВСЁ...

Вот такие аргументы передаются этой ф-ции
Code:
  1. [OUT]PHANDLE pFileHandle = 0x12EA10;
  2. //                          0x80000000     0x40000000      0x00100000    0x00000080
  3. [IN]ACCESS_MASK DesiredAccess = GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE | FILE_READ_ATTRIBUTES;
  4. [IN]POBJECT_ATTRIBUTES pObjectAttributes = 0012E9B0;
  5. {
  6.   ULONG Length = 0x18;
  7.   HANDLE RootDirectory = NULL;
  8.   PUNICODE_STRING pObjectName = 0x0012E9F0;
  9.   {
  10.     USHORT Length = 0x18;
  11.     USHORT MaximumLength = 0x1A;
  12.     PWSTR Buffer = 0x275E28;// "\??\FEnteDev"
  13.   }
  14.   ULONG Attributes = OBJ_CASE_INSENSITIVE;//0x0040
  15.   PVOID pSecurityDesriptor = NULL;
  16.   //PSECURITY_QUALITY_OF_SERVICE
  17.   PVOID pSecurityQualityOfService = 0x0012E9D4;
  18.   {
  19.     DWORD Length = 0x0C;
  20.     SECURITY_IMPERSONATION_LEVEL ImpersonationLevel = SecurityImpersonation;//2
  21.     SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode = SECURITY_STATIC_TRACKING;//FALSE
  22.     BOOLEAN EffectiveOnly = FALSE;
  23.   }
  24. }
  25. [OUT]PIO_STATUS_BLOCK pIoStatusBlock = 0x12E9E8;
  26. {
  27.   NTSTATUS NtStatus;
  28.   DWORD Information;
  29. }
  30. //On return Information will one of
  31. //FILE_CREATED 
  32. //FILE_OPENED 
  33. //FILE_OVERWRITTEN 
  34. //FILE_SUPERSEDED 
  35. //FILE_EXISTS 
  36. //FILE_DOES_NOT_EXIST 
  37. [IN]PLARGE_INTEGER pAllocationSize = NULL;
  38. [IN]ULONG FileAttributes = FILE_ATTRIBUTE_NORMAL;//0
  39. [IN]ULONG ShareAccess = FILE_SHARE_READ | FILE_SHARE_WRITE;//3
  40. [IN]ULONG CreateDisposition = FILE_OPEN;//1
  41. [IN]ULONG CreateOptions = FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE;//0x60
  42. [IN]PVOID pEaBuffer = NULL;
  43. [IN]ULONG EalEngth = 0;


Возвращает в NtStatus STATUS_INVALID_PARAMETER. В чем дело? Может защита обнаруживает проникновение и блокирует доступ к драйверу?

Нужен совет Clerk'а!

-----
IZ.RU





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

Создано: 03 апреля 2010 09:52
· Личное сообщение · #5

Залез идой в ntoskrnl, глянул на ф-цию KiSystemService. Открыл последный креш дамп, посмотел таблицы количества аргументов и функций. Оказывается, с установленным эмулятором HASP NtCreateFile перенаправляется в hardlock.sys через jmp dword ptr [833E84CAh] на адрес f58d32d8. hardlock.sys версии 3.40. Может кто-нибудь уже сталкивался с hardlock.sys? Очень нужна любая информация.

-----
IZ.RU




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

Создано: 03 апреля 2010 10:50
· Личное сообщение · #6

DenCoder а с эмулятором никак?

-----
...или ты работаешь хорошо, или ты работаешь много...





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

Создано: 03 апреля 2010 12:11
· Личное сообщение · #7

А про что я пишу-то? .... Мда, столько написал... Эмулятор стоит, hardlock.sys - это как раз и есть его драйвер.

-----
IZ.RU




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

Создано: 03 апреля 2010 20:31
· Личное сообщение · #8

я хз про что вы тут пишете - возьмите мультикей или vusbbus и не парьтесь...

-----
...или ты работаешь хорошо, или ты работаешь много...





Ранг: 114.4 (ветеран), 21thx
Активность: 0.040.01
Статус: Участник

Создано: 03 апреля 2010 21:53 · Поправил: Larry
· Личное сообщение · #9

BfoX пишет:
я хз про что вы тут пишете ...

Вероятно, про муль от SafeKey.




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

Создано: 03 апреля 2010 23:46
· Личное сообщение · #10

BfoX пишет:
я хз про что вы тут пишете

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

BfoX пишет:
возьмите мультикей или vusbbus и не парьтесь...

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

-----
IZ.RU





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

Создано: 04 апреля 2010 06:42
· Личное сообщение · #11

Yahoo!!! Наконец понял, в чем дело: на подмену оригинального адреса ф-ции DeviceIoControl драйвер реагирует неадекватно. Передается где-то адрес ее в одном из блоков по 0x100 байт в шифрованном или нет виде, при этом драйвер похоже зацикливается - не стал дальше разбираться. То есть диагноз - ОШИБКА ДРАЙВЕРА. Заменил тип хука и проблем больше нет.

Всем спасибо! Тему пока не закрываю - может у кого-то будут вопросы...

-----
IZ.RU




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

Создано: 04 апреля 2010 08:59
· Личное сообщение · #12

Larry
это я как раз знаю, просто походу DenCoder не ищет легких путей...

-----
...или ты работаешь хорошо, или ты работаешь много...





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

Создано: 04 апреля 2010 14:38 · Поправил: DenCoder
· Личное сообщение · #13

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

Так что спорный вопрос, какой из путей более легкий... для меня во всяком случае.

Утилита для этого проекта уже дальше некуда, развиваться будет, когда закончу проект...

-----
IZ.RU




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

Создано: 04 апреля 2010 16:24
· Личное сообщение · #14

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

хотя каждый сам себе указатель.

-----
...или ты работаешь хорошо, или ты работаешь много...





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

Создано: 04 апреля 2010 18:33
· Личное сообщение · #15

Вот когда коснется сунь-и-высуни 7 - будет, млин, отдельная тема...

-----
IZ.RU



 eXeL@B —› Крэки, обсуждения —› Непонятная ошибка открытия драйвера FEnteDev (hardlock.sys) смахивает на защиту
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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