首页
社区
课程
招聘
[旧帖] WIN 7 API HOOK 发生异常!!! 0.00雪花
发表于: 2013-5-29 14:35 5013

[旧帖] WIN 7 API HOOK 发生异常!!! 0.00雪花

2013-5-29 14:35
5013
通过GetProcess 获取MessageBoxA函数的地址,然后跳转到自己的函数地址去,在XP 完全可以使用,但是在WIN 7发现MessageBoxA 函数对应指令并没有进行HOOK掉,反而在调试的过程中,首先
MessageBoxA  的头几个字节 跳转到我们的函数地址,但是不一会在acLayers中进行恢复了MessageBoxA  原来的指令,并且在acLayers 内存空间实现跳转到我们的函数地址,请问大家怎么解决win 7的API HOOK相关问题??

class CApiHook
{
public :
#define HookSize 5
        HANDLE m_hTargetProc ;
        BOOL Initialize ( LPCTSTR lpLibFileName , LPCTSTR lpProcName , FARPROC lpNewFunc );
        void SetHookOn ( void );
        void SetHookOff ( void );
        CApiHook();
        virtual ~CApiHook();

protected :
        BYTE m_OldFunc [ HookSize ];
        BYTE m_NewFunc [ HookSize ];
        FARPROC m_lpHookFunc ;
};

void CApiHook::SetHookOn ( void )
{
        DWORD    dwProtect;
        VirtualProtect ( m_lpHookFunc, HookSize, PAGE_READWRITE, &dwProtect );
        WriteProcessMemory ( m_hTargetProc , m_lpHookFunc , m_NewFunc , sizeof(m_NewFunc) , 0 );
        VirtualProtect (m_lpHookFunc, HookSize, PAGE_READWRITE, &dwProtect );
        return ;
}

BOOL CApiHook::Initialize ( LPCTSTR lpLibFileName , LPCTSTR lpProcName , FARPROC lpNewFunc )
{
        HMODULE hModule ;
        hModule=GetModuleHandle(lpLibFileName);
        if (hModule==NULL)
        {
                hModule = LoadLibrary ( lpLibFileName );
                if ( NULL == hModule )
                        return FALSE ;

        }       
        m_lpHookFunc = GetProcAddress ( hModule , lpProcName );
        if ( NULL == m_lpHookFunc )
                return FALSE ;

        DWORD dwProcessID = GetCurrentProcessId ();
        m_hTargetProc = GetCurrentProcess ( /*OPEN_FLAGS,0,dwProcessID*/ );

        if ( m_hTargetProc == NULL )
        {
                MessageBox ( NULL , "Initialize.OpenProcess" , "fail" , MB_OK );
                return FALSE ;
        }

        if ( ReadProcessMemory ( m_hTargetProc , m_lpHookFunc , m_OldFunc , sizeof(m_OldFunc) , 0 ))
        {
                m_NewFunc [ 0 ]= 0xe9 ;
                DWORD * pNewFuncAddress ;
                pNewFuncAddress =( DWORD *)& m_NewFunc [ 1 ];
                * pNewFuncAddress =( DWORD ) lpNewFunc -( DWORD ) m_lpHookFunc - HookSize ;
                SetHookOn();
                return TRUE ;
        }
        return FALSE ;
}

只是跳转到如下函数:
m_ApiGetVersionExA.Initialize(_T("user32.dll"),_T("MessageBoxA"),(FARPROC)MyMessageBox);

int MyMessageBox(
  HWND hWnd,          // handle to owner window
  LPCTSTR lpText,     // text in message box
  LPCTSTR lpCaption,  // message box title
  UINT uType          // message box style
)
{
     TRACE("你好?");
}

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主好多太阳啊
2013-5-29 14:53
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
3
又是没码的问题。

能听懂楼主说啥的,都是神人。
2013-5-29 15:07
0
雪    币: 1392
活跃值: (4862)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
4
OD一下什么都解决了。
2013-5-29 15:37
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
acLayers是什么呀?
2013-6-28 08:50
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个进程被hook了, aclayers.dll是木马程序附带的链接库
2013-6-28 08:52
0
雪    币: 12
活跃值: (395)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看来要注入进去才行
2013-7-20 21:03
0
游客
登录 | 注册 方可回帖
返回
//