想隐藏文件
参考了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这个文件(我的加入方法是源码里面我注译掉的那些)
加入后可以编译但是文件没办法隐藏,这是为什么?要怎么解决(不加的话程序是可以正常隐藏的,加了不但加的那个隐藏不了,第一个也没法隐藏)
我又试了很都中方法,都没办法
高手帮帮忙啊

解决方案 »

  1.   

    repeat
        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;
      

  2.   

    result := FindNextFileANext(handle, data);
      if (lstrcmpiA(data.cFileName, CHideFile) = 0) or (lstrcmpiA(data.cFileName, CHideFile2) = 0) then
    漏了个not result的情况
    但是你那种方法我也试过了
    还是没法正常隐藏(指的是多个文件,单个可以,郁闷)下面那团代码干什么的?好像没什么用啊
    我那个代码是Hook到那个API只要调用就会执行我的那个函数
    是MadCodeHook的例子,呵呵
      

  3.   

    如果你要在进程之间使用肯定不行
    上面的是进程内的api hook
      

  4.   

    他也是用madcodehook
    不知道怎么写的
    没有人会么
      

  5.   

    搞定
    it must be:
      repeat
        result := FindNextFileANext(handle, data);
      until (not result) or ((lstrcmpiA(data.cFileName, CHideFile) <> 0) and (lstrcmpiA(data.cFileName, CHideFile2) <> 0));