想隐藏文件
参考了MadCodeHook的例子
{$IMAGEBASE $59800000}const
CHideFile = 'HideDll.dll';
//CHideFile2 = 'Hook.dll';
var
FindNextFileANext : function (handle: dword; var data: TWin32FindDataA) : bool; stdcall;
FindNextFileWNext : function (handle: dword; var data: TWin32FindDataW) : bool; stdcall;function FindNextFileACallback(handle: dword; var data: TWin32FindDataA) : bool; stdcall;
begin
repeat
result := FindNextFileANext(handle, data);
until (not result) or (lstrcmpiA(data.cFileName, CHideFile) <> 0) {or (lstrcmpiA(data.cFileName, CHideFile2) <> 0)};
end;function FindNextFileWCallback(handle: dword; var data: TWin32FindDataW) : bool; stdcall;
var
begin
repeat
result := FindNextFileWNext(handle, data);
until (not result) or (lstrcmpiW(data.cFileName, CHideFile) <> 0) {or (lstrcmpiW(data.cFileName, CHideFile2) <> 0)};
end;
begin
HookAPI('kernel32.dll', 'FindNextFileA', @FindNextFileACallback, @FindNextFileANext);
HookAPI('kernel32.dll', 'FindNextFileW', @FindNextFileWCallback, @FindNextFileWNext); end.
////------------------------------------------------------------------------------------那是个HookAPI的FindNextFile来隐藏文件
CHideFile是要隐藏的文件
我想加入CHideFile2这个文件(我的加入方法是源码里面我注译掉的那些)
加入后可以编译但是文件没办法隐藏,这是为什么?要怎么解决(不加的话程序是可以正常隐藏的,加了不但加的那个隐藏不了,第一个也没法隐藏)
我又试了很都中方法,都没办法
高手帮帮忙啊
参考了MadCodeHook的例子
{$IMAGEBASE $59800000}const
CHideFile = 'HideDll.dll';
//CHideFile2 = 'Hook.dll';
var
FindNextFileANext : function (handle: dword; var data: TWin32FindDataA) : bool; stdcall;
FindNextFileWNext : function (handle: dword; var data: TWin32FindDataW) : bool; stdcall;function FindNextFileACallback(handle: dword; var data: TWin32FindDataA) : bool; stdcall;
begin
repeat
result := FindNextFileANext(handle, data);
until (not result) or (lstrcmpiA(data.cFileName, CHideFile) <> 0) {or (lstrcmpiA(data.cFileName, CHideFile2) <> 0)};
end;function FindNextFileWCallback(handle: dword; var data: TWin32FindDataW) : bool; stdcall;
var
begin
repeat
result := FindNextFileWNext(handle, data);
until (not result) or (lstrcmpiW(data.cFileName, CHideFile) <> 0) {or (lstrcmpiW(data.cFileName, CHideFile2) <> 0)};
end;
begin
HookAPI('kernel32.dll', 'FindNextFileA', @FindNextFileACallback, @FindNextFileANext);
HookAPI('kernel32.dll', 'FindNextFileW', @FindNextFileWCallback, @FindNextFileWNext); end.
////------------------------------------------------------------------------------------那是个HookAPI的FindNextFile来隐藏文件
CHideFile是要隐藏的文件
我想加入CHideFile2这个文件(我的加入方法是源码里面我注译掉的那些)
加入后可以编译但是文件没办法隐藏,这是为什么?要怎么解决(不加的话程序是可以正常隐藏的,加了不但加的那个隐藏不了,第一个也没法隐藏)
我又试了很都中方法,都没办法
高手帮帮忙啊
result := FindNextFileANext(handle, data);
until (not result) or (lstrcmpiA(data.cFileName, CHideFile) <> 0) {or (lstrcmpiA(data.cFileName, CHideFile2) <> 0)};这里肯定有问题改成
result := FindNextFileANext(handle, data);
if (lstrcmpiA(data.cFileName, CHideFile) = 0) or (lstrcmpiA(data.cFileName, CHideFile2) = 0) then
// add your handle method here
不知道这样改是否符合你的本意
你要拦截的是FindNextFileNextFileW),所以你要先调用这个函数
下面是我自己测试的一个函数procedure ListFile;
var
hFile:THandle;
WFD:TWIN32FINDDATA;
Ret:Boolean;
begin
Ret:=True;
hFile:= FindFirstFile('C:\HookTest\*.*', WFD);
If hFile<> INVALID_HANDLE_VALUE Then
begin
savefilename(WFD.cFileName); //这个也是自己的函数,把函数名存到本地的一个文本文件里面
while Ret do
begin
Ret:=FindNextFileA(hFile, WFD); savefilename(wfd.cFileName);
end;
end;
Windows.FindClose(hFile);end;
if (lstrcmpiA(data.cFileName, CHideFile) = 0) or (lstrcmpiA(data.cFileName, CHideFile2) = 0) then
漏了个not result的情况
但是你那种方法我也试过了
还是没法正常隐藏(指的是多个文件,单个可以,郁闷)下面那团代码干什么的?好像没什么用啊
我那个代码是Hook到那个API只要调用就会执行我的那个函数
是MadCodeHook的例子,呵呵
上面的是进程内的api hook
不知道怎么写的
没有人会么
it must be:
repeat
result := FindNextFileANext(handle, data);
until (not result) or ((lstrcmpiA(data.cFileName, CHideFile) <> 0) and (lstrcmpiA(data.cFileName, CHideFile2) <> 0));