第一博文 就这样吧 老天不让我写啊~~~~~~~~VC++之完美隐藏注册表

     这几天是怎么了写博客都郁闷哎 算了 谁让我发不了呢 这是dll代码你们看看把

     这是我这几天刚刚写的也算是为网上和我一样找不到代码的朋友提供点帮助!

#include <afxwin.h>
#include <windows.h>
//#include <ansiapi.h>
#include "detours.h"
#pragma data_seg("jieguo")
HHOOK kis=NULL;
HWND zhu=NULL;
HINSTANCE mou=NULL;
HANDLE thread=NULL;
TCHAR szClass[256]={0};
HHOOK mess=NULL;
HINSTANCE age=NULL;
HWND stime=NULL;
#pragma data_seg()

LONG WINAPI Hook_RegQueryValueExW(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);


typedef LONG (WINAPI *pfnRegQueryValueExW)(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
pfnRegQueryValueExW g_pRegQueryValueExW = RegQueryValueExW;

BOOL StartHook()

{
    DetourTransactionBegin();
 DetourUpdateThread( GetCurrentThread());
 if( DetourAttach( &(PVOID&)g_pRegQueryValueExW,Hook_RegQueryValueExW) != NO_ERROR)
 {
  printf( "Hook MessageBoxA fail./n");
 }
 if( DetourTransactionCommit() != NO_ERROR)
 {
  printf( "DetourTransactionCommit fail/n");
  return FALSE;
 }
 else
 {
  printf( "DetourTransactionCommit ok/n");
  return TRUE;
 }
}
BOOL StopHook()
{
 DetourTransactionBegin();
 DetourUpdateThread( GetCurrentThread());
 if( DetourDetach( &(PVOID&)g_pRegQueryValueExW,Hook_RegQueryValueExW) != NO_ERROR)
 {
  printf( "Hook MessageBoxA fail./n");
 }
 if( DetourTransactionCommit() != NO_ERROR)
 {
  printf( "DetourTransactionCommit fail/n");
  return FALSE;
 }
 else
 {
  printf( "DetourTransactionCommit ok/n");
  return TRUE;
 }
}
LONG WINAPI Hook_RegQueryValueExW(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
)
{
 int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, lpValueName, wcslen(lpValueName), NULL, 0, NULL, NULL);
 char* szAnsi= new char[ansiLen + 1];
 ::WideCharToMultiByte(CP_ACP, NULL,lpValueName, wcslen(lpValueName), szAnsi, ansiLen, NULL, NULL);
 szAnsi[ansiLen] = '/0';
 int i=10;
 if(lstrcmpA(szAnsi,"这里填你注册表的键值")==0)
 {
  lpValueName=NULL;
 }
 if(i=11000000)
 return g_pRegQueryValueExW(hKey,lpValueName,lpReserved,lpType,lpData,lpcbData);
 
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
 DLL_PROCESS_ATTACH;
}
LRESULT CALLBACK GetMsgProc(int code,
       WPARAM wParam,
       LPARAM lParam
       )
{
 StartHook();
    HWND mes=NULL,mess=NULL;
 mes=::FindWindow(NULL,"显示值的错误");
 if(mes!=NULL)
 {
   keybd_event(13,0,0,0);
   keybd_event(13,0,KEYEVENTF_KEYUP,0);
 }
 return CallNextHookEx(kis,code,wParam,lParam);
}
VOID CALLBACK TimerProc2(HWND  hwnd,UINT message,UINT iTimerID,DWORD   dwTime)  
{
 zhu=::FindWindow(NULL,"注册表编辑器");
    if(zhu==NULL)
 {
  UnhookWindowsHookEx(kis);
  kis=NULL;
  KillTimer(stime,0);
 }
}
VOID CALLBACK TimerProc(HWND  hwnd,UINT message,UINT iTimerID,DWORD   dwTime)  
{
 LPDWORD pid=NULL;
 DWORD die=NULL;
 if(kis==NULL)
 {
 zhu=::FindWindow(NULL,"注册表编辑器");
 if(zhu!=NULL)
 {
  die=GetWindowThreadProcessId(zhu,NULL);
  if(die!=NULL)
   mou=GetModuleHandle("khthree");
  if(mou!=NULL)
   kis=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,mou,die);
  if(kis!=NULL)
  {
   SetTimer(stime,0,80,TimerProc2);
  }
 }
 }
}
_declspec(dllexport) menge(int b)//这就是导出函数你们随便写个exe调用 dll就好了 今天没心情不好大家凑活着看吧!!
{
 UINT_PTR iTimerID=SetTimer(NULL,0,100,TimerProc);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值