首页
社区
课程
招聘
VirtualProtect返回0
发表于: 2011-10-16 22:29 5806

VirtualProtect返回0

2011-10-16 22:29
5806
目的很简单,将send函数的前五个字节修改掉,使用VirtualProtect修改其内存属性,但是返回0,调用GetLastError返回03E6,不知道怎么修改,求高手解答!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 6048
活跃值: (3125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
难道没人给指点一下吗
2011-10-17 09:37
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
等待高手吧。我也希望得到答案!
2011-10-17 09:53
0
雪    币: 606
活跃值: (230)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
4
曾经写过的inlinehook的程序片段......希望能借鉴!
上传的附件:
2011-10-17 11:09
0
雪    币: 6048
活跃值: (3125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
请问如果hook的是系统函数,会不会导致内存不可写入?
2011-10-17 11:37
0
雪    币: 606
活跃值: (230)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
6
属性改成PAGE_EXECUTE_READWRITE可以写的!!!
2011-10-17 11:44
0
雪    币: 6048
活跃值: (3125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我用VirtualProtect修改返回0,修改失败!

不知道什么原因。。。

所以过来求助
2011-10-17 12:22
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可以尝试下直接修改二进制从而改变块属性;  给点分分
2011-10-17 12:43
0
雪    币: 6048
活跃值: (3125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
能帮我解决分全给你
2011-10-17 12:52
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
xp3 VC6.0 debug下测试通过,希望可以借鉴
////////////////////////////////////
// 09HookDemo.cpp文件

#include <windows.h>
#include <stdio.h>

// 挂钩指定模块hMod对MessageBoxA的调用
BOOL SetHook(HMODULE hMod);
// 定义MessageBoxA函数原型
typedef int (WINAPI *PFNMESSAGEBOX)(HWND, LPCSTR, LPCSTR, UINT uType);
// 保存MessageBoxA函数的真实地址
PROC g_orgProc = (PROC)MessageBoxA;

void main()
{
        // 调用原API函数
        ::MessageBox(NULL, "原函数", "09HookDemo", 0);
        // 挂钩后再调用
        SetHook(::GetModuleHandle(NULL));
        ::MessageBox(NULL, "原函数", "09HookDemo", 0);
}

// 用于替换MessageBoxA的自定义函数
int WINAPI MyMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{
        return ((PFNMESSAGEBOX)g_orgProc)(hWnd, "新函数", "09HookDemo", uType);
}

BOOL SetHook(HMODULE hMod)
{
        IMAGE_DOS_HEADER* pDosHeader = (IMAGE_DOS_HEADER*)hMod;
        IMAGE_OPTIONAL_HEADER * pOptHeader =
                (IMAGE_OPTIONAL_HEADER *)((BYTE*)hMod + pDosHeader->e_lfanew + 24);
       
        IMAGE_IMPORT_DESCRIPTOR* pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)
                ((BYTE*)hMod + pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
       
        // 在导入表中查找user32.dll模块。因为MessageBoxA函数从user32.dll模块导出
        while(pImportDesc->FirstThunk)
        {
                char* pszDllName = (char*)((BYTE*)hMod + pImportDesc->Name);
                if(lstrcmpiA(pszDllName, "user32.dll") == 0)
                {
                        break;
                }
                pImportDesc++;
        }

        if(pImportDesc->FirstThunk)
        {
               
                // 一个IMAGE_THUNK_DATA就是一个双字,它指定了一个导入函数
                // 调入地址表其实是IMAGE_THUNK_DATA结构的数组,也就是DWORD数组
                IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)
                                ((BYTE*)hMod + pImportDesc->FirstThunk);
                while(pThunk->u1.Function)
                {
                        // lpAddr指向的内存保存了函数的地址
                        DWORD* lpAddr = (DWORD*)&(pThunk->u1.Function);

                        if(*lpAddr == (DWORD)g_orgProc)
                        {       
                                // 修改IAT表项,使其指向我们自定义的函数,相当于“*lpAddr = (DWORD)MyMessageBoxA;”
                                DWORD* lpNewProc = (DWORD*)MyMessageBoxA;

                                //修改页都保护属性
                                DWORD dwOldProtect;
                                MEMORY_BASIC_INFORMATION mbi;
                                VirtualQuery(lpAddr, &mbi, sizeof(mbi));
                               
                                VirtualProtect(lpAddr, sizeof(DWORD), PAGE_READWRITE, &dwOldProtect);

                                ::WriteProcessMemory(::GetCurrentProcess(),
                                                lpAddr, &lpNewProc, sizeof(DWORD), NULL);

                                //恢复页都保护属性
                                VirtualProtect(lpAddr, sizeof(DWORD), dwOldProtect, 0);
                                return TRUE;
                        }
                       
                        pThunk++;
                }
        }
        return FALSE;
}
2014-5-26 02:20
0
游客
登录 | 注册 方可回帖
返回
//