关于看雪论坛Hook类中一段代码的疑惑

问题描述

关于看雪论坛Hook类中一段代码的疑惑

PHOOKENVIRONMENT __stdcall InstallHookApi(PCHAR DllName,PCHAR ApiName,PVOID HookProc)
{
HMODULE DllHandle;
PVOID ApiEntry;
int ReplaceCodeSize;
DWORD oldpro;
DWORD SizeOfStub;
DWORD delta;
DWORD RetSize =0;

PHOOKENVIRONMENT pHookEnv;

if (HookProc == NULL)
{
    return NULL;
}

DllHandle = GetModuleHandleA(DllName);
if (DllHandle == NULL)
    DllHandle = LoadLibraryA(DllName);
if (DllHandle == NULL)
    return NULL;

ApiEntry = GetProcAddress(DllHandle,ApiName);
if (ApiEntry == NULL) return NULL;

ReplaceCodeSize = GetOpCodeSize((BYTE*)ApiEntry);

while (ReplaceCodeSize < 5)
    ReplaceCodeSize += GetOpCodeSize((BYTE*)((DWORD)ApiEntry + (DWORD)ReplaceCodeSize));

if (ReplaceCodeSize > 16) return NULL;

SizeOfStub = GetEndAddr()-(DWORD)&pEnv;

pHookEnv = (PHOOKENVIRONMENT)VirtualAlloc(NULL,SizeOfStub,MEM_COMMIT,PAGE_READWRITE);
if(!pHookEnv){
    return NULL;
}
memset((void*)&pEnv,0x90,sizeof(pEnv));
CopyMemory(pHookEnv,(PVOID)&pEnv,SizeOfStub);
CopyMemory((void*)pHookEnv,(void*)&pEnv,sizeof(pEnv.savebytes));
CopyMemory(pHookEnv->savebytes,ApiEntry,ReplaceCodeSize);

pHookEnv->OrgApiAddr = ApiEntry;
pHookEnv->SizeOfReplaceCode = ReplaceCodeSize;

pHookEnv->jmptoapi[0]=0xE9;
*(DWORD*)(&pHookEnv->jmptoapi[1]) = (DWORD)ApiEntry + ReplaceCodeSize - ((DWORD)pHookEnv->jmptoapi + 5);

//patch api
if (!VirtualProtect(ApiEntry,ReplaceCodeSize,PAGE_EXECUTE_READWRITE,&oldpro))
    return FALSE;

delta = (DWORD)pHookEnv - (DWORD)&pEnv;

*(DWORD*)(&JMPGate[1]) = ((DWORD)NewStub + delta) - ((DWORD)ApiEntry + 5);

WriteProcessMemory(GetCurrentProcess(), ApiEntry, JMPGate, sizeof(JMPGate),&RetSize);

if (!VirtualProtect(ApiEntry,ReplaceCodeSize,oldpro,&oldpro))
    return FALSE;

//写入变量
*(DWORD*)((DWORD)NewStub + delta + 3) = (DWORD)HookProc - ((DWORD)NewStub + delta + 3 + 4);

return pHookEnv;

}
在这一句SizeOfStub = GetEndAddr()-(DWORD)&pEnv;
我得到的SizeOfStub总是一个负值,我想问问该句的作用是什么?

解决方案

这 好像是个函数代码

时间: 2024-10-31 17:43:48

关于看雪论坛Hook类中一段代码的疑惑的相关文章

javascript-在EXT JS脚本中这段代码是什么意思?

问题描述 在EXT JS脚本中这段代码是什么意思? <script language="JavaScript" type="text/javascript"> var ERP = (function() { var my = {}; my.Path="<%=request.getContextPath()%>"; my.IconPath="<%=request.getContextPath()%>/g

抓取动网论坛Email地址的一段代码

抓取动网论坛 Email 地址的一段代码 /** 作者: 慈勤强 Email : cqq1978@gmail.com http://blog.csdn.net/cqq **/ 最近,一直想着怎么宣传我们的新网站,http://www.up114.com . 搜索引擎优化自然是首选,可是也不能放过邮件群发,虽然邮件群发被人所不齿, 不过,只要选定了群发的对象,少发点,应该没什么吧,:=--. 所以就找了一些相关主题的论坛,好多都是动网的论坛,现在就是需要把论坛用户的Email地址 收集下来,网上也

使用shift+tab键左移M文件中一段代码

  matlab小技巧:使用shift+tab键左移M文件中一段代码 未移动前: 移动后: 方法1.选中matlab的M文件中的一段代码 2.同时按住键盘上shift和tab键 注意事项一次只能移动4个空格键,要移动更长,多按步骤2操作几次

linux编程-关于RTAI中一段代码的意思,求解~

问题描述 关于RTAI中一段代码的意思,求解~ #ifdef RTAI rt_allow_nonroot_hrt();#elsemlockall(MCL_CURRENT | MCL_FUTURE);/* Xenomai non-root scheduling is coming soon! */#endif 解决方案 这是我在我的Linux编程中主函数看到的一段代码 这个是什么意思啊 主要不懂RTAI

html-HTML中 一段 代码,不懂

问题描述 HTML中 一段 代码,不懂 注意,这是写在 HTML文件中的,不是jsp. 解决方案 java生成静态html的一段代码一段消除HTML标签格式的代码如果在HTML中重复调用一段导航代码 解决方案二: 第一句话的意思是: 这一段存放了一个模板.在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').append('<div class="t">'+number+'</div>') 如果ht

.ashx中这段代码是什么意思

问题描述 .ashx中这段代码是什么意思 public void ProcessRequest(HttpContext hc) { foreach (string fileKey in hc.Request.Files) { HttpPostedFile file = hc.Request.Files[fileKey]; file.SaveAs(Path.Combine(hc.Server.MapPath("."), file.FileName)); } } public bool I

g++ c++-g++中一段代码在VC++中编译出现问题

问题描述 g++中一段代码在VC++中编译出现问题 出错代码如下: #ifdef OLD_LIBC friend istream & operator>>(istream &s, Matrix &A); #else // template friend istream & operator>><>(istream &s, Matrix &A); #endif *源程序是g++中的开源程序,在Mingw中编译可以通过,而在V

apk反编译总结(看雪论坛)

好吧,第一次在oschina写记录,以前自己博客的服务器没钱续费都给删了.算是重新开始吧. 之前一直在Ubuntu下反编译apk,今天因为有空,试了下在windows下反编译,在网上找的教程,mark一下. 首先是准备反编译的一系列工具. 1.把dex文件反编译为jar文件的工具.(dex2jar)http://code.google.com/p/dex2jar/downloads/list  2.把jar反编译为java的工具.(JD-GUI)http://java.decompiler.fr

看雪学院将举办《安全开发者峰会》,有这11个安全议题

报道的国内的特大侵犯公民个人信息案,某部委医疗服务信息系统遭"黑客"入侵,超过7亿条公民信息遭泄露,还是美国信用评估机构遭黑客入侵,泄露半数美国消费者重要信息,比如姓名.出生日期.家庭地址.社会安全号 SSN.驾驶执照 ID.信用卡信息-- 安全问题已不容忽视,对企业负责人或研发人员而言,安全事故频发无疑是一场灾难.而解决安全问题的根本在于做到安全开发.安全设计应在一开始就作为项目开发的一部分来考虑,列入项目计划和开发成本中,并在保护强度.成本.易用性之间进行折衷考虑,选择一个合适的平