摘要:转个问答:1down vote favoritewhat is the difference between the working of two ? For WH_KEYBOARD_LLi read that it Installs a hook procedure that monitors low-level keyboard input events. What is meant bylow-level keyboard events ?Meh, don't focus too much on the term, it doesn't clarify anything.
阅读全文
摘要:CheckRemoteDebuggerPresent这个API可以检测是否有调试器的存在,而且这个和PEB里面的BeingDebugged无关了。看一下CheckRemoteDebuggerPresent的声明: __in HANDLE hProcess, __in_out PBOOL pbDebuggerPresent);第一个参数是进程句柄,第二参数用于存放结果。返回值表示函数是否执行成功,; 堆栈示意图;push pBool ; ebp + c;push hProcess ; ebp + 8;push retaddr ; ebp + 4;push ...
阅读全文
摘要:依赖于API的反调试这个函数会看PEB中的BeingDebugged是否为0,不为0就表示无调试器,否则表示有调试器.注意的是以前代码都会对这个函数首字节是否为0x64作判断,但在win7下,需要对应kernelBase中的IsDebuggerPresent,而不是kernel32中的IsDebuggerPresent//使用IsDebuggerPresent函数检测DbgToolType AntiDebugged::AD_IsDebuggerPresent(){ HMODULE hKernelBaseDll = ::LoadLibrary(TEXT("kernelBase.dll&
阅读全文
摘要:typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LIST_ENTRY, *PLIST_ENTRYLIST_ENTRY是一个常见的 Windows 2000 数据类型是 LIST_ENTRY 结构,内核使用该结构将所有对象维护在一个双向链表中。一个对象分属多个链表是很常见的, Flink 成员是一个向前链接,指向下一个 LIST_ENTRY 结构, Blink 成员则是一个向后链接,指向前一个 LIST_ENTRY 结构。通常情况下,...
阅读全文
摘要:这个问题在编译Detours时遇到两次了,总结下:显示为:1.MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)2.MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info &
阅读全文
摘要:WOW64 是 Windows-32-on-Windows-64 的缩写。它为现有的 32 位应用程序提供了 32 位的模拟,可以使大多数 32 位应用程序在无需修改的情况下运行在 Windows 64 位版本上。它类似于旧的 WOW32 子系统,负责在 Windows 32 位版本下运行 16 位的代码typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);LPFN_ISWOW64PROCESS fnIsWow64Process;BOOL IsWow64(){ BOOL bIsWow64 = FALSE; fnIsWo...
阅读全文
摘要:typedef struct tagTRANSLATION{ WORD langID; // language ID WORD charset; // character set (code page)} TRANSLATION;#define KeyFILENAMECHECK "\\kernel32.dll"DWORD GetVersionExFromFile(OSVERSIONINFOEX &osvi){ BOOL bOsVersionInfoEx; TCHAR szSysDir[MAX_PATH] = {0}; TCHAR szFileNa...
阅读全文
摘要:标准库 提供两个帮助生成伪随机数的函数: int rand(void); 从srand(seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff)间的随机整数。 void srand(unsigned seed); 参数seed是rand()的种子,用来初始化rand()的起始值。 可以认为rand()在每次被调用的时候,它会查看: 1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用 srand(seed)一次来初始化它的起始值。 2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)...
阅读全文
摘要:一般是用GetModuleFileName,但这个函数需要对进程有可读可查询的权限,所以当进程只有可查询权限时,使用: HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, PID); if (hProcess) { char szPath[MAX_PATH] = {0}; GetProcessImageFileName(hProcess, szPath, MAX_PATH); str = szPath; CloseHandle(hProcess); }
阅读全文
摘要:DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((PVOID *)&g_pPresent, New_Present); DWORD nErr = DetourTransactionCommit();DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach((PVOID *)&g_pPresent, New_Present); DWORD nErr = DetourTr..
阅读全文
摘要:void * pPresent=NULL;//IDirect3DDevice9::Present函数地址指针 pPresent=(void*)*(DWORD*)(*(DWORD*)Device+0x44);//IDirect3DDevice9* Device DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((PVOID *)&pPresent, New_Present); DWORD nErr = DetourTransactionCommit();HRESULT __stdc
阅读全文
摘要:其实很简单.主要针对D3D游戏.主要思路:Hook IDirect3DDevice9::Present,在其中加入sleep函数.让系统获得更多的CPU时间片.试验游戏:剑网三(以D3D9为例) 学习各种外挂制作技术,马上去百度搜索 "魔鬼作坊" 点击第一个站 去那里学习喽。具体实现步骤: 1.HOOK Direct3DCreate9来获得类型为LPDIRECT3D9的Direct3D对象的接口指针,它有一个成员函数为 IDirect3D9::CreateDevice,所以,只要根据Direct3D对象接口指针找到Direct3D对象的虚函数表,再根据虚函数表确定IDire
阅读全文
摘要:Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip无法从以上地址下载的话请使用下面的连接: http://upload.programfan.com/upfile/200607311626279.zip如果是VC++6,则应该将glut.h复制在“D:/Program Files/MicrosoftVisualStudio/VC98/Include/GL文件夹”如果是VisualStudio2008,把glut.h复制到D:\Program Files\
阅读全文