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

 eXeL@B —› Программирование —› Не работает inject dll (исходник прилагается)
<< . 1 . 2 .
Посл.ответ Сообщение

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

Создано: 19 ноября 2012 18:11
· Личное сообщение · #1

Здравствуйте. Пытаюсь реализовать загрузку модуля в процесс "Блокнот" по исходникам MS-REM.
Я переделал модули под Embarcadero Delphi XE2 ,всё запускается но инжекта не происходит.
Работает только внедрение кода напрямую через @Main.
Исходники и откомпилированные файлы:
rghost.ru/41672556



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 28 ноября 2012 22:18
· Личное сообщение · #2

CodeMaster пишет:
Я не могу понять,как сделать чтобы хэндл перехватываемого файла получить.


Выполнить пост обработку результата вызова оригинального CreateFile, передав ей в точности все то что пришло в твой хук.

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


И как первое связано со вторым? Ты теоретически перехватил открытие файла, и что с того? Кроме лога обращений к файлам это тебе нифига не даст, файл как был зашифрованный так и останется.

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

Как она работает с твоим чудесным фаелом? Открывает его, читает в свой буферок, делает с ним грязные штуки и че дальше?



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

Создано: 28 ноября 2012 22:26
· Личное сообщение · #3

Alchemistry пишет:
Выполнить пост обработку результата вызова оригинального CreateFile, передав ей в точности все то что пришло в твой хук.

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

Не совсем так,у меня возможно файл расшифровывается уже перед вызовом CreateFile



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

Создано: 28 ноября 2012 22:43
· Личное сообщение · #4

Модераторы простите меня великодушно.
CodeMaster
у меня возможно файл расшифровывается уже перед вызовом CreateFile
Это напалм.
Магия вуду или нам нужно угадать как?
Отвечает Александр Друзь.
Внутри хука ещё один хук что-ли поставить
Почему бы и нет, что тут такого?

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

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

Создано: 28 ноября 2012 23:04
· Личное сообщение · #5

Мне походу дела надо вот что сделать: выполнить функцию NtQuerySystemInformation c параметром SystemHandleInformation , я получу список всех открытых хэндлов процесса. Среди них будет нужный файл, и его хэндл просто подставить в функцию hFile1:=TrueCreateFileW(ukradhand,....
Размер файла только не получится определить через GetFileSize,там придется какие-то извращения придумывать с буфером (читать до тех пор,пока данные не закончатся)
Вроде всё понятно,но как реализовать чтоб работало - хз




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 28 ноября 2012 23:46
· Личное сообщение · #6

CodeMaster
Ох и бред же вы пишете. Особенно своей бредовостью меня поразил последний пост. Какой NtQuerySystemInformation? И куда вы будете подставлять найденный хэндл - в CreateFile? А вас не смущает, что она в качестве входных параметров хэндл не принимает?

Потом что там за бред про рекурсию? Никакой рекурсии. Перехваты делятся на два вида (грубо) - перехват выполняет предварительную фильтрацию входных параметров, т.е. не открывает некоторые файлы с определённой подстрокой в имени, например. Либо второй вид - перехват выполняется для фильтрации результатов выполненной функции - например, вы вызвали CreateFile, а потом вместо хэндла, который она вернула, подсунули хэндл вашего ранее открытого файла (х.з., зачем это нужно, просто пример привожу).

Т.е. вариант 1:
Вызов перехвата сводится либо к вызову оригинальной функции, либо к возврату из перехвата без вызова оригинала.

Вариант 2:
Вызов перехвата сводится к обязательному вызову оригинала, а вот фитрация либо что-то делает, либо возвращает результат неизменным.

А теперь вы по пунктам попытайтесь объяснить, что вам нужно сделать. Не надо делать догадок, как, вы напишите, что, а как - подскажут.

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 29 ноября 2012 14:12
· Личное сообщение · #7

ARCHANGEL
Хэндл можно подставить с NtCreateFile ,если переделать библиотеку под её перехват. Насколько это глупо - я не знаю,но мысли такие есть.
Что я хочу: есть зашифрованный файл,есть его расшифрованная копия (размеры полностью совпадают), есть процесс который открывает файл и дешифрует его в памяти. Моя задача - получить на диске файл,полностью такой же как эталон.
Что у меня сейчас есть: исходники для перехвата CreateFileW и копирования файла, всё замечательно работает если бы не одна пакость: при открытии защищенного файла получаем на диске test.pak правильного размера,весь забитый нулями. Почему так - хз,по идее должен был просто скопироваться зашифрованный файл.




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 29 ноября 2012 14:43
· Личное сообщение · #8

CodeMaster пишет:
Хэндл можно подставить с NtCreateFile

Ты с обычной API разберись сначала а потом лезь в натив...

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




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

Создано: 29 ноября 2012 19:21
· Личное сообщение · #9

Вот накатал рабочий перехватчик для NtCreateFile:
Code:
  1. function NewNtCreateFile(FileHandle: PHandle; const DesiredAccess: ACCESS_MASK;
  2.   ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIO_STATUS_BLOCK;
  3.   AllocationSize: PLARGE_INTEGER;
  4.   FileAttributes, ShareAccess, CreateDisposition, CreateOptions: ULONG;
  5.   EaBuffer: PVOID; EaLength: ULONG): NTSTATUS; stdcall;
  6. var
  7.   res : Integer;
  8.   text : PUNICODE_STRING;
  9.   buf:_OFSTRUCT;
  10.   f:hFile;
  11.   buffer :PChar;
  12.   rwd : DWORD;
  13. begin
  14.   result:=TrueNtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize,
  15.                           FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
  16.   UnhookCode(@TrueNtCreateFile);
  17.   f:= CreateFile('C:\towrite.txt',GENERIC_READ or GENERIC_WRITE,0,
  18.                nil, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0);
  19.     HookProc('ntdll.dll', 'NtCreateFile', @NewNtCreateFile, @TrueNtCreateFile);
  20.     if f =  INVALID_HANDLE_VALUE then exit;
  21.     try
  22.     text:= ObjectAttributes.ObjectName;
  23.       buffer:=#13+#10+'NtOpenFile: ';
  24.       if text.Buffer='\??\C:\proverka.txt' then
  25.        begin
  26.       if SetFilePointer(f,0,0,FILE_END) =  INVALID_SET_FILE_POINTER then exit;
  27.       if WriteFile(f,buffer[1],length(buffer),rwd,nil) = false then exit;
  28.        WriteFile(f,text.Buffer^,text.Length, rwd,nil);
  29.         end;
  30.     finally
  31.       CloseHandle(f);
  32.     end;
  33.   end;


Как мне теперь узнать адрес буфера,куда расшифровывается файл в памяти после перехвата NtCreateFile? Или достаточно будет его прочитать и записать?



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 29 ноября 2012 19:35
· Личное сообщение · #10



CodeMaster пишет:
Как мне теперь узнать адрес буфера,куда расшифровывается файл в памяти после перехвата NtCreateFile?


Спроси у Ванги. Заодно поинтересуйся у нее зачем ты перехватил NtCreateFile.

Чтение из файла идет не через CreateFile, а через ReadFile, а может вообще быть через мапинг и буфер может быть выделен динамически, а может быть определен статически массивом определенной длины. Где это в программе и как это связано с твоим гавнокодом неизвестно никому.

В общем, лучшим решением твоей проблемы будет это http://exelab.ru/f/action=vthread&forum=1&topic=17633

Кто хочет почитать предыдущие похождения ТС, см. http://www.cyberforum.ru/delphi-winapi/thread698419.html, ищите темы пользователя, все в том же ключе что и тут.



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

Создано: 29 ноября 2012 19:43
· Личное сообщение · #11

Почему-то копироваться не хочет через NtCreateFile:
Code:
  1. begin
  2.   result:=TrueNtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize,
  3.                           FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
  4.   UnhookCode(@TrueNtCreateFile);
  5.   hFile1:=CreateFileW('C:\proverka.txt',GENERIC_READ,
  6.                            FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0);
  7.  hFile2:=CreateFileW('C:\test.pak',GENERIC_WRITE,
  8.                            0, nil, OPEN_ALWAYS, 0, 0);
  9.     HookProc('ntdll.dll', 'NtCreateFile', @NewNtCreateFile, @TrueNtCreateFile);
  10.     if (hFile1 =  INVALID_HANDLE_VALUE) or (hFile2=INVALID_HANDLE_VALUE) then exit;
  11.     try
  12.     text:= ObjectAttributes.ObjectName;
  13.       buffer:=#13+#10;
  14.       if text.Buffer='\??\C:\proverka.txt' then
  15.        begin
  16.       buff:=GetFileSize(hFile1,nil);
  17.  SetFilePointer(hFile1, 0, nil, FILE_BEGIN);
  18.  data:=VirtualAlloc(nil,buff,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE);
  19.  ReadFile(hFile1,data^,buff,zapisano,nil);
  20.  WriteFile(hFile2,data^,buff,zapisano,nil);
  21.         end;
  22.     finally
  23.       CloseHandle(f);
  24.     end;
  25.   end;




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

Создано: 29 ноября 2012 20:41
· Личное сообщение · #12

CodeMaster
Код: no comments
Code:
  1. BOOL ReadFile(
  2.  
  3.     HANDLE hFile, // handle of file to read 
  4.     LPVOID lpBuffer,       // address of buffer that receives data  
  5.     DWORD nNumberOfBytesToRead,     // number of bytes to read 
  6.     LPDWORD lpNumberOfBytesRead,    // address of number of bytes read 
  7.     LPOVERLAPPED lpOverlapped       // address of structure for data 
  8.    );
  9.  
  10.  BOOL WriteFile(
  11.  
  12.     HANDLE hFile, // handle to file to write to 
  13.     LPCVOID lpBuffer,      // pointer to data to write to file 
  14.     DWORD nNumberOfBytesToWrite,    // number of bytes to write 
  15.     LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written 
  16.     LPOVERLAPPED lpOverlapped       // pointer to structure needed for overlapped I/O
  17.    );




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

Создано: 29 ноября 2012 20:44 · Поправил: CodeMaster
· Личное сообщение · #13

Alchemistry пишет:
Спроси у Ванги. Заодно поинтересуйся у нее зачем ты перехватил NtCreateFile.



Перехватил NtCreateFile чтобы не думать каждый раз,какая функция используется CreateFileW или CreateFileA. Я же не с одной прогой буду свой перехватчик использовать,а с разными




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 29 ноября 2012 20:57
· Личное сообщение · #14

CodeMaster пишет:
Перехватил NtCreateFile чтобы не думать каждый раз,какая функция используется CreateFileW или CreateFileA

Открой очи светлые и узри, что CreateFileA использует внутри себя CreateFileW.



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

Создано: 29 ноября 2012 21:20
· Личное сообщение · #15

Ещё у меня такой вопрос: когда мы перехватили NtCreateFile, у нас есть FileHandle
Я пытаюсь получить имя файла по его хэндлу,для этого:
Code:
  1. imyafaila:PWideChar;
  2. imyafaila:=PWideChar(HandleToFullPath(HWND(FileHandle)));
  3.   hFile1:=CreateFileW(imyafaila,GENERIC_READ,
  4.                            0, nil, OPEN_ALWAYS, 0, 0);

Сама функция:
Code:
  1. Function HandleToFullPath(H: HWND): String;
  2. Var
  3. Pid:Cardinal;
  4. M: TModuleEntry32;
  5. HSnapshot: THandle;
  6. Begin
  7. Result:='';
  8. GetWindowThreadProcessId(H,@Pid);
  9. HSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Pid);
  10. If HSnapshot=-1 Then
  11. Exit;
  12. M.DwSize:=SizeOf(TModuleEntry32);
  13. If Module32First(HSnapshot,M) Then
  14. Result:=M.SzExePath;
  15. CloseHandle(HSnapshot);
  16. End;


Не работает. Я сделал преобразование PHandle --->HWND ,или вообще не в ту сторону копаю?
Мне надо чтобы в test.pak копировался перехватываемый файл



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 29 ноября 2012 21:28
· Личное сообщение · #16

CodeMaster

Ты или тролль или упоротый. HWND это окно.

Верни свой гавнокод предыдущий с CreateFile и сделай в хуке этом своем однопоточном CopyFile (http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa363851(v=vs.85).aspx) - победа.

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

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

Создано: 29 ноября 2012 21:31
· Личное сообщение · #17

CodeMaster
Про функцию получения имени я лучше промолчу.
раз
два
...



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

Создано: 29 ноября 2012 21:43
· Личное сообщение · #18

Alchemistry
Вот здесь пишут что можно так преобразовывать PHandle в HWND. Это одно и тоже ведь,просто Борланд их разделили в описании.
http://forum.sources.ru/showtopic=58425&hl=




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 29 ноября 2012 22:10
· Личное сообщение · #19

CodeMaster
Твою мать, что ты куришь?

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 29 ноября 2012 22:20
· Личное сообщение · #20

Alchemistry пишет:
сделай в хуке этом своем однопоточном CopyFile

Да вот надо попробовать.Я на самом деле не пойму почему у меня ничего не копируется в CreateFile.
Расшифровка виртуальной файловой системы производится драйвером,абсолютно прозрачно для целевого приложения.Оно просто напросто знать не знает,какой ему файл подсунули - зашифрованный или расшифрованный.



Ранг: 11.4 (новичок), 8thx
Активность: 0.010
Статус: Участник

Создано: 29 ноября 2012 22:29 · Поправил: Модератор
· Личное сообщение · #21

свиновод
иди на ...



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

Создано: 29 ноября 2012 22:51
· Личное сообщение · #22

Johnny Mnemonic
Вступайте и компилируйте:





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 29 ноября 2012 23:20
· Личное сообщение · #23

Автор регулярно становится ржакой для всего форума, получает пинка, но быстро бежит обратно. Но ничего, клоуны иногда тоже нужны. Собственно, очередной пинок, с нетерпением запасаемся поп-корном и ждём лулзов от другого ника, как он будет снова городить свой велосипед с квадратными колёсами, не имея знаний ни про одну из его деталей.

| Сообщение посчитали полезным: ZaZa
<< . 1 . 2 .
 eXeL@B —› Программирование —› Не работает inject dll (исходник прилагается)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати