当前位置: 首页 > news >正文

国际贸易英文网站今天宣布疫情最新消息

国际贸易英文网站,今天宣布疫情最新消息,app网站模板下载不了,带地板翻转的网站怎么做API HOOK 顾名思义是挂钩API函数,拦截,控制某些API函数的调用,用于改变API执行结果的技术。 大致流程: 进入进程->获取相关权限->将我们写的dll写入进程内存->加载kernel32中的LoadLibrary()以调用我们写的dll。 http:/…

API HOOK 顾名思义是挂钩API函数,拦截,控制某些API函数的调用,用于改变API执行结果的技术。


大致流程:

进入进程->获取相关权限->将我们写的dll写入进程内存->加载kernel32中的LoadLibrary()以调用我们写的dll。


http://blog.csdn.net/junbopengpeng/article/details/28142669一文中有更加详细的讲解,以下代码源自http://blog.chinaunix.net/uid-660282-id-2414901.html,对其做了修正,同时添加了详细注释,实现劫持源程序的MessageBox函数,改变其标题和内容,欢迎质询,一起学习。


源程序(我们劫持的程序):

#include#includeint main(){
printf("hello world!\n");
while(1){
getchar();
MessageBoxA(NULL, "原函数", "yuan", 0);
}
return 0;
}

我们编写的dll:
#include "windows.h"
#include "process.h"
#include "tlhelp32.h"
#include "stdio.h"
#pragma comment(lib,"th32.lib")
PIMAGE_DOS_HEADER pDosHeader;
PIMAGE_NT_HEADERS pNTHeaders;
PIMAGE_OPTIONAL_HEADER    pOptHeader;
PIMAGE_IMPORT_DESCRIPTOR pImportDescriptor;
PIMAGE_THUNK_DATA        pThunkData;
PIMAGE_IMPORT_BY_NAME    pImportByName;
HMODULE hMod;
// 定义MessageBoxA函数原型
// MessageBox函数原型:int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
typedef int (WINAPI *PFNMESSAGEBOX)(HWND, LPCSTR, LPCSTR, UINT uType);
int WINAPI MessageBoxProxy(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType);
int * addr = (int *)MessageBoxA;     //保存函数的入口地址
int * myaddr = (int *)MessageBoxProxy;
void ThreadProc(void *param);//线程函数
//主函数:
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved){
if(fdwReason==DLL_PROCESS_ATTACH) 
//进程映射
//每个进程的第一次映射用DLL_PROCESS_ATTACH调用DLL的DllMain函数。
_beginthread(ThreadProc,0,NULL);     
return TRUE; 
}
//结束进程的函数:
void ThreadProc(void *param){
//------------hook api----------------
hMod = GetModuleHandle(NULL);
//返回自身应用程序句柄
pDosHeader = (PIMAGE_DOS_HEADER)hMod;
pNTHeaders = (PIMAGE_NT_HEADERS)((BYTE *)hMod + pDosHeader->e_lfanew);
pOptHeader = (PIMAGE_OPTIONAL_HEADER)&(pNTHeaders->OptionalHeader);
//定位Dos头,NT头,可选头
pImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)((BYTE *)hMod + pOptHeader->DataDirectory[1].VirtualAddress);
//导入表ID
while(pImportDescriptor->FirstThunk){
//IAT的RVA
char * dllname = (char *)((BYTE *)hMod + pImportDescriptor->Name);
//被导入的DLL 名称
pThunkData = (PIMAGE_THUNK_DATA)((BYTE *)hMod + pImportDescriptor->OriginalFirstThunk);
//IMAGE_THUNK_DATA的RVA
int no = 1;
while(pThunkData->u1.Function){
//被输入的函数的内存地址
char * funname = (char *)((BYTE *)hMod + (DWORD)pThunkData->u1.AddressOfData + 2);
//AddressOfData指向IMAGE_IMPORT_BY_NAME(导入函数名称),
//+hMod+2后,到导入的DLL(user32.dll)函数导出表中获取导入函数的地址
PDWORD lpAddr = (DWORD *)((BYTE *)hMod + (DWORD)pImportDescriptor->FirstThunk) +(no-1);
//为了下方VirtualQuery穷举每一块内存信息,no++
//修改内存的部分---------------------------------
if((*lpAddr) == (int)addr){
//修改内存页的属性
DWORD dwOLD;
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(lpAddr,&mbi,sizeof(mbi));
//获取内存信息
VirtualProtect(lpAddr,sizeof(DWORD),PAGE_READWRITE,&dwOLD);
//在呼叫处理程序的虚拟位址空间里,变更认可页面区域上的保护,
//请求PAGE_READWRITE,保存老的保护方式:dwOLD
WriteProcessMemory(GetCurrentProcess(),lpAddr, &myaddr, sizeof(DWORD), NULL);
//写入某一进程的内存区域
//恢复内存页的属性----------------------------
VirtualProtect(lpAddr,sizeof(DWORD),dwOLD,0);
}
no++;
pThunkData++;
}
pImportDescriptor++;
}
//-------------------HOOK END-----------------
}
//new messagebox function
int WINAPI MessageBoxProxy(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType)
{
return   ((PFNMESSAGEBOX)addr)(NULL, "HOOK成功","success",0);
//这个地方可以写出对这个API函数的处理代码
}

此处想补充一下dll文件的生成方式:在vc中新建工程Win32 Dynamic-Link Library,再在该工程中新建文件C++ Source File,代码完成后,compile->build即可,我们写的dll存放于该工程目录下的Debug文件夹中。

开始HOOK:

#include "windows.h"
#include "tlhelp32.h"
#include#pragma comment(lib,"th32.lib")
const char *pkill="dll3.dll";//DLL文件的路径
//这个路径很有意思,这个路径是相对于目标进程的,而不是自身进程。
//所以要嘛写成绝对路径,要嘛写成相对于目标进程的相对路径。
//如果写成相对于自身的路径就要麻烦了,本程序就找不到DLL文件了。 
char *prosess="yuan.exe";//要注入的进程名(目标进程名)
int main(){
HANDLE hSnap;//获取进程信息 
HANDLE hkernel32;//被注入进程的句柄
PROCESSENTRY32 pe;//存放进程信息和调用成员输出进程信息的结构体 
BOOL bNext;//是否还有下一个进程 
HANDLE hToken;
TOKEN_PRIVILEGES tp;//包括LUID和特权的属性的结构体 
LUID Luid;//locally unique identifier,保证局部唯一 
LPVOID p;
FARPROC pfn;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)){
//打开与进程相关联的访问令牌 
return 1;
}
if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid)){
//查看系统权限的特权值:SE_DEBUG_NAME,存在Luid中 
return 1;
}
tp.PrivilegeCount = 1;
//指定特权数组的个数:1 
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//特权数组的类型:特权启用 
tp.Privileges[0].Luid = Luid;
//局部唯一 
if (!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)){
//该函数启用或禁止指定访问令牌的特权
return 1;
}
pe.dwSize = sizeof(pe);
//结构体大小 
hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照
bNext=Process32First(hSnap, &pe); 
//获得第一个进程的句柄
while(bNext) {
if(!stricmp(pe.szExeFile,prosess)){
//该进程的可执行文件名称是否是我们需要的 process 
hkernel32=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,1,pe.th32ProcessID);
//如果两者一样,打开该进程 
break;
}
bNext=Process32Next(hSnap, &pe); 
//不一样则寻找下一个 
}
CloseHandle(hSnap);
p=VirtualAllocEx(hkernel32,NULL,strlen(pkill),MEM_COMMIT,PAGE_READWRITE);
//在指定进程的虚拟空间保留或提交内存区域 
WriteProcessMemory(hkernel32,p,pkill,strlen(pkill),NULL);
//将我们的dll写入该进程内存 
pfn=GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
//获取 kernel32.dll中的 LoadLibraryA(),用以加载我们的dll 
CreateRemoteThread(hkernel32,NULL,0,(LPTHREAD_START_ROUTINE)pfn,p,NULL,0); 
//pfn在CreateRemoteThread类型为:LPTHREAD_START_ROUTINE
return 0;
}

效果截图:

需要注意的是,在hook过程中,原函数不要关闭噢,否则就没有该进程了。

http://www.shuangfujiaoyu.com/news/51626.html

相关文章:

  • 营销网站建设阿凡达百度搜索引擎营销案例
  • 俄罗斯ip济南seo优化外包服务公司
  • 如何做网站的主页seo挂机赚钱
  • 网站建设流程图企业网站怎么优化
  • 政府英文网站建设外包服务方案软文推广的100个范例
  • ecshop安装教程无锡网站建设优化公司
  • 淄博网站建设服务商公司调查公司
  • 宁波建设安全协会网站百度搜索热度指数
  • html5 电商网站布局营销策划的六个步骤
  • dedecms仿站无锡做网站的公司
  • vpswindows在线播放百度seo关键词优化软件
  • 那个外贸网站做的好太原百度关键词优化
  • 1000元能否做网站软文推广多少钱
  • 矿区网站建设相关搜索优化软件
  • 网站流量平台百度上海分公司地址
  • 做个外贸网站多少钱国内企业网站模板
  • wordpress 登陆不了如何网站关键词优化
  • 网站制作 p百度销售平台怎样联系
  • 云服务器建设网站网络推广是什么职位
  • 机票网站手机版建设淘宝推广怎么推
  • 网站兼容性是什么意思搜索引擎营销的方法
  • 南昌做购物网站的公司win10必做的优化
  • 怎么建立一个好公司网站杭州市优化服务
  • 威海企业做网站最新域名ip地址
  • 广东建设资格注册中心网站seo关键词排名优化品牌
  • 文化传媒网站建设怎么做神马搜索排名seo
  • wordpress建站视频教程下载一个企业seo网站的优化流程
  • 承接网站建设服务怎么理解搜索引擎优化
  • 怎么自己建一个论坛网站北京seo培训机构
  • 全flash网站正规赚佣金的平台