www.jybase.net - 寂涯网络学习基地

404 Error: 抱歉, 您所查找的页面不存在, 可能已被删除或您输错了网址!

404错误,没有发现你要找的页面, 经砖家仔细研究结果如下:

首 页 | 在线视频观看 | 系统综合 | 网站相关 | 教程共享 | 网赚教程共享 | 精品软件下载 | 网盘搜


























免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > windows > 在 Win64 上实现Ring3 级 HIPS(2)

在 Win64 上实现Ring3 级 HIPS(2)

时间:2011-11-06 14:35来源:未知 整理:寂涯网络 点击:


ZwOpenKey=(ZWOPENKEY)GetProcAddress(LoadLibraryW(L"ntdll.dll"),"ZwOpenKey")
;
//获得 ZwClose的函数指针
    ZwClose=(ZWCLOSE)GetProcAddress(LoadLibraryW(L"ntdll.dll"),"ZwClose");
RtlInitUnicodeString=(RTLINITUNICODESTRING)GetProcAddress(LoadLibraryW(L"nt
dll.dll"),"RtlInitUnicodeString");
    printf("ZwSetValueKey: %llx\n",(LONGLONG)ZwSetValueKey);
    printf("ZwOpenKey: %llx\n",(LONGLONG)ZwOpenKey);
    printf("ZwClose: %llx\n",(LONGLONG)ZwClose);
}
int main()
{
    printf("My PID: %ld\n",GetCurrentProcessId());
    InitApi();
    UNICODE_STRING path;//定义注册表路径字符串
    UNICODE_STRING name;//定义名称字符串
    UNICODE_STRING data;//定义数据字符串
    OBJECT_ATTRIBUTES oa;//定义操作对象
HANDLE myhandle=NULL;//定义返回句柄
// 初始化操作对象和初始化注册表路径字符串
InitializeObjectAttributes(&oa,&path,OBJ_CASE_INSENSITIVE,NULL,NULL);RtlIni
tUnicodeString(&path,L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Internet
Explorer\\MAIN");
//初始化名称字符串(其实是Start Page,这里只是为了方便测试)
    RtlInitUnicodeString(&name,L"Start_Page");    
//初始化数据字符串
RtlInitUnicodeString(&data,L"www.m5home.com");
//打开注册表
    ZwOpenKey(
                &myhandle,//返回句柄
                KEY_WRITE,//权限
                &oa//操作对象
                );
    //设置注册表键值
NTSTATUS st=ZwSetValueKey(
                myhandle,//当前句柄
                &name,//键名
                0,
                REG_SZ,//方式
                data.Buffer,//字符串缓冲
                data.Length//字符串长度
                );
    printf("[ZwSetValueKey] returned: 0x%x\n", st);
//关闭注册表
    ZwClose(myhandle);
    printf("Press [ENTER] to continue...\n");
    getchar();
    return 0;
}

这里顺便说一句,64位系统里绝大多数函数都是__fastcall约定,但是我在定义函数
原型的时候还是使用了__stdcall(WINAPI是__stdcall的马甲)约定,难道不会出错吗?
我带着这个疑问去问了“毛豆”的工程师,他的回答是,VS2010非常智能,在你编译的时
候自动把__stdcall替换成__fastcall了。如果大家对这个回答感到很郁闷,请不要怪我。
进入主题,如何反修改IE主页。我的思路是:Hook ZwSetValueKey。首先根据
ZwSetValueKey的第一个参数KeyHandle得到它的KeyName。若KeyName是
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN,就检查ValueName,
否则放过;如果ValueName是 Start Page,就弹出主动防御提示框。否则放过。
根据 KeyHandle得到 KeyName在网上是没有现成代码的。经研究,可以使用ZwQueryKey
得到。不过ZwQueryKey得到的还不是可见的字符串,还要经过字符串的转化处理。实现代
码如下: 
 
int WideToMultiByte(const WCHAR* wChar, char* mChar)
{
    int aLen = WideCharToMultiByte(CP_ACP, 0, wChar, wcslen(wChar) + 1, NULL,
0, NULL, NULL);
    return WideCharToMultiByte(CP_ACP, 0, wChar, wcslen(wChar) + 1, mChar,
aLen, NULL, NULL);

char *KeyHandleToKeyName(HANDLE KeyHandle)

本页地址 http://www.jybase.net/windows/20111106577.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商