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

 eXeL@B —› Программирование —› Проблема с CreateFileA
Посл.ответ Сообщение


Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 ноября 2009 20:07 · Поправил: Sunzer
· Личное сообщение · #1

Всем привет. Начал переписывать свой код, и возникла проблема.

Суть в том что в одном случае kernel32.dll открывается и я получаю хэндл, во втором варианте пишет нет доступа в GetLastError. Параметры идентичные в обоих случаях. Во втором разве что путь до кернеля в стеке лежит.

Файл:

deleted




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

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

Похоже на утечку хэндла...
Такое впечатление что kernel32.dll уже открыт... и ты пытаешься его опять открыть...
Вопрос - зачем ты открываешь kernel32.dll для чтения? какая цель?

-----
aLL rIGHTS rEVERSED!





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

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

DaRKSiDE пишет:
Похоже на утечку хэндла...Такое впечатление что kernel32.dll уже открыт... и ты пытаешься его опять открыть...Вопрос - зачем ты открываешь kernel32.dll для чтения? какая цель?


Для апи GetFileTime




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 22 ноября 2009 21:04
· Личное сообщение · #4

Sunzer пишет:
GetFileTime

Непонял, ты хочешь через открытие кернела CreateFile-ом получить адрес GetFileTime ?
Или как?
Так для этого у тебя уже все есть... к этому моменту...и адрес GetProcAddress-а и имя функи и база кернела...

-----
aLL rIGHTS rEVERSED!





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 ноября 2009 21:06 · Поправил: Sunzer
· Личное сообщение · #5

http://msdn.microsoft.com/en-us/library/ms724320(VS.85).aspx

hFile
A handle to the file or directory for which dates and times are to be retrieved. The handle must have been created using the CreateFile function with the GENERIC_READ access right. For more information, see File Security and Access Rights.


Там же нужны три указателя на буфер по 20h и хендл. Вот и открываю кернель что бы хэндл получить
Но важно то из за чего апи CreateFileA в сабже -1 возвращает




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 22 ноября 2009 21:18 · Поправил: DaRKSiDE
· Личное сообщение · #6

Sunzer пишет:
Но важно то из за чего апи CreateFileA в сабже -1 возвращает

Приаттаченый вариант какраз возвращает ошибку..

Кстати... этот аттач у меня нод палит как вирус...

В общем возможный вариант - это
Code:
  1. 0013FD0E    004011E4   /CALL to CreateFileA from File1.004011E1
  2. 0013FD12    0013FD2E   |FileName = "C:\WINDOWS\system32\kernel32.dll"
  3. 0013FD16    80000000   |Access = GENERIC_READ
  4. 0013FD1A    00000001   |ShareMode = FILE_SHARE_READ
  5. 0013FD1E    00000000   |pSecurity = NULL
  6. 0013FD22    00000003   |Mode = OPEN_EXISTING
  7. 0013FD26    00000000   |Attributes = 0     <<<<<< -------- Аттрибут вроде должен быть 80h?!
  8. 0013FD2A    00000000   \hTemplateFile = NULL                  Т.е. Normal 


Хотя наврятли только в этом дело..
Короче глянь что у тебя в буфере перед вызовом критфайл в рабочем варианте...

-----
aLL rIGHTS rEVERSED!





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 ноября 2009 21:25
· Личное сообщение · #7

Тоже ошибка доступа




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 22 ноября 2009 21:26
· Личное сообщение · #8

DaRKSiDE пишет:
Короче глянь что у тебя в буфере перед вызовом критфайл в рабочем варианте...


-----
aLL rIGHTS rEVERSED!




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 22 ноября 2009 21:28
· Личное сообщение · #9

Конкретная цель вызова функции GetFileTime для kernel32.dll не ясна. Файл системный, содержимое его и так доступно в памяти. Что ещё нужно-то от него?




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 22 ноября 2009 21:31
· Личное сообщение · #10

progopis пишет:
Что ещё нужно-то от него?

Вот я тоже до конца не вкуриваю цель

-----
aLL rIGHTS rEVERSED!





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 ноября 2009 21:36 · Поправил: Sunzer
· Личное сообщение · #11

Вы к проблеме как то сбоку подоходите. Открываю для получения хэндла, а хэндл для получения апи GetFileTime, а GetFileTime для получения даты создания файла.

Точно такие же параметры, все ок.
Code:
  1. .386
  2. .model   flat, stdcall
  3. option   casemap:none
  4. assume fs:nothing
  5.  
  6. include bin\kernel32.inc
  7. includelib bin\kernel32.lib
  8.  
  9. .data
  10.  ff db "C:\Windows\system32\kernel32.dll",0
  11. .code
  12. start:
  13.  invoke CreateFileA,offset ff,080000000h,1,0,3,0,0
  14. end start
  15.  




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 22 ноября 2009 21:38
· Личное сообщение · #12

Это понятно что тебе нужна дата создания файла. Вот только зачем? Как раз к проблеме надо подходить прямо, а точнее из корня. Какова цель узнать дату? GetVersionEx зачем придуман?




Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 ноября 2009 21:41 · Поправил: Sunzer
· Личное сообщение · #13

Ну к примеру даже для того, что бы триал механизм примитивный реализовать




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 22 ноября 2009 21:49
· Личное сообщение · #14

Sunzer пишет:
Точно такие же параметры, все ок.

Тогда смотри какие вызываемые тобой функции могут держать хэндл...
К примеру LoadLibrary...

-----
aLL rIGHTS rEVERSED!





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

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

Code:
  1. CompareFileTimes proc pszFile1:dword, pszFile2:dword
  2.    local hFile,hFile2:dword
  3.    local dtFile1:FILETIME
  4.    local dtFile2:FILETIME
  5.  
  6.    invoke CreateFile, pszFile1, GENERIC_READ+GENERIC_WRITE, FILE_SHARE_READ+FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
  7.    .if eax != INVALID_HANDLE_VALUE
  8.        mov  hFile,eax
  9.        invoke GetFileTime,hFile,NULL,NULL,addr dtFile1
  10.        invoke CloseHandle,hFile
  11.        invoke CreateFile, pszFile2, GENERIC_READ+GENERIC_WRITE, FILE_SHARE_READ+FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
  12.        .if eax != INVALID_HANDLE_VALUE
  13.            mov  hFile2,eax
  14.            invoke GetFileTime,hFile2,NULL,NULL,addr dtFile2
  15.            invoke CloseHandle,hFile2
  16.            invoke CompareFileTime,addr dtFile1,addr dtFile2
  17.            ret
  18.        .else
  19.            return 2
  20.        .endif
  21.    .else
  22.        return 2
  23.    .endif
  24.    ret
  25. CompareFileTimes endp


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 ноября 2009 21:54
· Личное сообщение · #16

DaRKSiDE пишет:
Тогда смотри какие вызываемые тобой функции могут держать хэндл...К примеру LoadLibrary...

Для kernel32.dll я не вызываю LoadLibrary, зачем? Он и так в контекте каждого процесса есть.
Бирань в атаче в первом посте.



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

Создано: 22 ноября 2009 21:59
· Личное сообщение · #17

SunzerУ тебя значение ESP (напр. 0013FD0E) не выровнано на дворд. Поэтому ZwCreateFile возвращает ошибку 0х80000002 (Datatype misalignment).

Поправь например так:
Code:
  1. 0040119E   81EC 58020000    SUB ESP,258  ; было sub esp,256





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

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

2 DarkWolf
Вот решение в лоб. Спасибо!




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 22 ноября 2009 22:07 · Поправил: mak
· Личное сообщение · #19

а у меня все окей там

Code:
  1. 0040119C      89E5                        MOV EBP,ESP
  2. 0040119E        81EC 56020000               SUB ESP,256
  3. 004011A4        68 56020000                 PUSH 256
  4.  


прогнал крит файл показывает fы , ошибки никакой нет , кернел чем то занят ... смотри может хэндл не освободил

PS ну раз работает то ладно ))) на крайняк DuplicateHandle Kernel32.dll поэкспериментировать можно

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

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

Я его и не занимал. Решение от DarkWolf работает.




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

Создано: 22 ноября 2009 22:24
· Личное сообщение · #21

Видимо, можно закрыть тогда, раз решено.


 eXeL@B —› Программирование —› Проблема с CreateFileA
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати