首页
社区
课程
招聘
[求助]高手请看:为什么是api开头的8个字节呢?
发表于: 2007-12-26 10:15 3450

[求助]高手请看:为什么是api开头的8个字节呢?

2007-12-26 10:15
3450
在inline-hook当中,代码如下:为什么是api开头的8个字节?一直想不明白,是怎么计算过来的,请高手指教:
BOOL APIENTRY DllMain( HANDLE hModule,
                                    DWORD   ul_reason_for_call,
                                    LPVOID lpReserved
                                  )
{
     if(ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
       //获取本dll句柄
       g_hInstance = hModule;
      
       //创建事务
       g_hSendEvent = CreateEvent( NULL, FALSE, TRUE, NULL );
      
       //重写API开头的8字节
       HMODULE hWsock = LoadLibrary( "wsock32.dll" );
       g_pSend = ( DWORD )GetProcAddress( hWsock, "send" );
       //保存原始字节
       ReadProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_pSend,
           ( void * )g_dwOldBytes[0], sizeof( DWORD )*2, NULL );
       //将00400000改写为我们函数的地址
       *( DWORD* )( g_btNewBytes + 1 ) = ( DWORD )hook_send;
       WriteProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_pSend,
           ( void * )g_btNewBytes, sizeof( DWORD )*2, NULL );
     }
     return TRUE;
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov eax,00400000 = B8 00 00 40 00
jmp eax                   = FF E0

BYTE g_btNewBytes[8] = { 0xB8, 0x0, 0x0, 0x40, 0x0, 0xFF, 0xE0, 0x0 };
2007-12-26 11:26
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
LZ建议你去看微软那个HOOK LIB

你帖出来的那份代码是对于每个新操作系统都要看看是否需要修正的

LS的解释最多只能说是对了一半
2007-12-26 13:10
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可以详细点吗?还不是很明白!
2007-12-26 14:34
0
游客
登录 | 注册 方可回帖
返回
//