nico 发表于 2007-5-30 09:26

原帖由 nico 于 2007-5-20 11:23 发表 http://www.ibmnb.com/images/common/back.gif
我的实现在一些程序上测试通过。 比如 notepad.exe, foobar. 但 TM 失败了...

今天偶然发现 detours 还有另一个程序 withdll.exe, 它和 setdll.exe 不同. setdll 修改了 exe 文件的 import table. 而 withdll 的做法是启动目标 exe, 挂起之, 然后注入 dll, 再让程序正常运行.

如果程序是靠检测 exe 自身的校验. 那么 withdll 的方法可能能逃过检测.

另外, 修改 import table 还导致其他的一些问题. 比如 TM 被修改之后, 启动时提示程序初始化错误.
使用 withdll 之后, TM能够正常启动, 而且实现了监视的功能.

使用 withdll.exe 来启动程序:
withdll /d:accessfile.dll yourprogram.exe

我重新打包了程序.

另外, 一直没有收到楼主的程序. 所以无法测试. 本来也将这个东东淡忘了. 但今天看 codeproject 上的一篇文章, 提到 detours 的 withdll, 用 TM 一试, 成功. 所以写了这个回复.

saysoo 发表于 2007-5-30 10:19

:D 用什么写的?一句两句说不清楚,还是把源代码发上来,看看50元的量能不能解决。

nico 发表于 2007-5-30 10:52

没贴代码是因为代码实在很简单. 从 detours 的例子改的.#include <windows.h>
#include "detours.h"

/*
cl /LD /nologo /Zi /MT /Gm- /W4 /WX /I../../include /O1 accessfile.cpp /link /incremental:no /release /subsystem:windows /entry:_DllMainCRTStartup@12 /export:CreateFileW_ ../../lib/detours.lib ../../lib/detours.lib user32.lib
*/
static HANDLE (WINAPI *OriCreateFileW)
    (LPCWSTR lpFileName,
   DWORD dwDesiredAccess,
   DWORD dwShareMode,
   LPSECURITY_ATTRIBUTES lpSecurityAttributes,
   DWORD dwCreationDisposition,
   DWORD dwFlagsAndAttributes,
   HANDLE hTemplateFile) = CreateFileW;
WCHAR lpwDocName = {0};
HANDLE WINAPI CreateFileW_
    (LPCWSTR lpFileName,
   DWORD dwDesiredAccess,
   DWORD dwShareMode,
   LPSECURITY_ATTRIBUTES lpSecurityAttributes,
   DWORD dwCreationDisposition,
   DWORD dwFlagsAndAttributes,
   HANDLE hTemplateFile)
{
   if (wcslen(lpwDocName) && wcsstr(lpFileName, lpwDocName))
{
   OutputDebugStringW(L"W: Got it!");
   HWND hWnd = FindWindowW(0, L"AccessFileClient");
   if (hWnd)
    PostMessage(hWnd, WM_USER + 12345, 0, 0);
}
return OriCreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
}

BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
    LONG error;
    (void)hinst;
    (void)reserved;
    if (dwReason == DLL_PROCESS_ATTACH) {
      OutputDebugString("accessfile.dll: Starting.\n");
      
      GetPrivateProfileStringW(L"config", L"docname", 0, lpwDocName, MAX_PATH, L"c:\\accessfile.ini");
if (! wcslen(lpwDocName))
   MessageBoxW(NULL, L"没有读取到文档名称.文档名称应该保存在 c:\\accessfile.ini. 如下格式: \n\n\ndocname=myfile.ext", L"AccessFile", 0);
      DetourRestoreAfterWith();
      DetourTransactionBegin();
      DetourUpdateThread(GetCurrentThread());
      DetourAttach(&(PVOID&)OriCreateFileW, CreateFileW_);
      error = DetourTransactionCommit();
      if (error == NO_ERROR) {
            OutputDebugString("accessfile.dll: Detoured.\n");
      }
      else {
            OutputDebugString("accessfile.dll: Error when detouring()\n");
      }
    }
    else if (dwReason == DLL_PROCESS_DETACH) {
      DetourTransactionBegin();
      DetourUpdateThread(GetCurrentThread());
      DetourDetach(&(PVOID&)OriCreateFileW, CreateFileW_);
      error = DetourTransactionCommit();
      OutputDebugString("accessfile.dll: Ending.\n");
    }
    return TRUE;
}
//
///////////////////////////////////////////////////////////////// End of File.

superman_xyz 发表于 2007-5-30 11:25

看了下nico的代码,detour用起来倒是挺方便的,省去了修改函数调用跳转地址的麻烦。。不过,针对lz的需求,似乎hook ::ReadFile更合适些。
btw,既然lz知道有程序“偷”访问了某文件,而又无所作为,仅仅是关掉报警,那还不如别检测了,眼不见心不烦,呵呵。

wzbbstx 发表于 2007-5-30 12:51

diomandcold 发表于 2007-5-30 13:45

看看,楼主的要求比较有意思

看来还是好银多哈

mqkng 发表于 2007-5-31 08:28

原帖由 rainwin 于 2007-5-18 11:20 发表 http://www.ibmnb.com/images/common/back.gif
虽然俺什么也不会。。。但说什么也要顶下。。
沙发。。。。。。。。。。。。。。。。。。。。。。


谢谢还记得我们哈

近半年来确实很忙。基本或很少时间来专门网了

楼主的要求不难,看完帖子已经有人做了,我就不参与了,若实在需要请留言

mqkng 发表于 2007-5-31 08:29

原帖由 汉唐 于 2007-5-18 15:47 发表 http://www.ibmnb.com/images/common/back.gif
对不起LZ啊.我不是编程的,没有MQK同学那么专业啊*.*lll


我现在是很忙。你在HANG还好吧

mqkng 发表于 2007-5-31 08:31

原帖由 cyzokok 于 2007-5-19 15:11 发表 http://www.ibmnb.com/images/common/back.gif
有这么多热情的高手,首先向你们致敬。我也要求你们帮编个小软,要在WIN98、WINME下运行的。

有响应的高手吗,如达到效果500我也舍。

(行业软件,不是犯法的。)


需求发贴告诉大家吧,热情人很多呢

wuweicai 发表于 2007-6-3 13:57

原帖由 mqkng 于 2007-5-31 08:28 发表 http://www.ibmnb.com/images/common/back.gif



谢谢还记得我们哈

近半年来确实很忙。基本或很少时间来专门网了

楼主的要求不难,看完帖子已经有人做了,我就不参与了,若实在需要请留言
mqkng兄,等你好久了,以前用过你两个软件,这几天一直忙.说实话也有点灰心了,看了你的回贴,热情又依旧了.那就帮我整个吧.在此先谢了.

wuweicai 发表于 2007-6-3 14:04

原帖由 nico 于 2007-5-30 09:26 发表 http://www.ibmnb.com/images/common/back.gif


今天偶然发现 detours 还有另一个程序 withdll.exe, 它和 setdll.exe 不同. setdll 修改了 exe 文件的 import table. 而 withdll 的做法是启动目标 exe, 挂起之, 然后注入 dll, 再让程序正常运行.

如果 ...
谢谢这么多热心的坛友,这几天没有上.刚试了下,好像还是不行.因这程序是依靠于另一程序的,比较大传过去不大方便.在此再谢谢nico兄和各位热心的人.
页: 1 [2]
查看完整版本: 50元小礼物求帮忙原创个小软件(待解决中)