青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Tiany 's Blog

奮斗的路上肯定會(huì)遇到很多困難 該不該繼續(xù)?

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  15 Posts :: 1 Stories :: 28 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

Inlin_Hook.h:

#pragma once
 
 
#define __malloc(_s)    VirtualAlloc(NULL, _s, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
 
#define __free(_p)        VirtualFree(_p, 0, MEM_RELEASE)
 
#define JMP_SIZE        5
 
 
#define OP_NONE           0x00
 
#define OP_MODRM          0x01
 
#define OP_DATA_I8        0x02
 
#define OP_DATA_I16       0x04
 
#define OP_DATA_I32       0x08
 
#define OP_DATA_PRE66_67  0x10
 
#define OP_WORD           0x20
 
#define OP_REL32          0x40
 
 unsigned 
long __fastcall SizeOfCode(void *Code, unsigned char **pOpcode);
 
 unsigned 
long __fastcall SizeOfProc(void *Proc);
 
 BOOL
 WriteReadOnlyMemory(
                     LPBYTE    lpDest,
                     LPBYTE    lpSource,
                     ULONG    Length
                     );
 
 BOOL 
 GetPatchSize(
              IN    
void *Proc,            /* 需要Hook的函數(shù)地址 */
              IN    DWORD dwNeedSize,    
/* Hook函數(shù)頭部占用的字節(jié)大小 */
              OUT LPDWORD lpPatchSize    
/* 返回根據(jù)函數(shù)頭分析需要修補(bǔ)的大小 */
              );
 
 BOOL
 InlineHook(
            IN    
void *OrgProc,        /* 需要Hook的函數(shù)地址 */
            IN    
void *NewProc,        /* 代替被Hook函數(shù)的地址 */
            OUT    
void **RealProc        /* 返回原始函數(shù)的入口地址 */
            );
 
 
void UnInlineHook(
                   
void *OrgProc,  /* 需要恢復(fù)Hook的函數(shù)地址 */
                   
void *RealProc  /* 原始函數(shù)的入口地址 */
                   );

Inlin_Hook.cpp:

 

#include "stdafx.h"
 #include 
"Inlin_Hook.h"
 
 UCHAR OpcodeFlags[
256= 
 {
     OP_MODRM,                      
// 00
     OP_MODRM,                      // 01
     OP_MODRM,                      // 02
     OP_MODRM,                      // 03
     OP_DATA_I8,                    // 04
     OP_DATA_PRE66_67,              // 05
     OP_NONE,                       // 06
     OP_NONE,                       // 07
     OP_MODRM,                      // 08
     OP_MODRM,                      // 09
     OP_MODRM,                      // 0A
     OP_MODRM,                      // 0B
     OP_DATA_I8,                    // 0C
     OP_DATA_PRE66_67,              // 0D
     OP_NONE,                       // 0E
     OP_NONE,                       // 0F
     OP_MODRM,                      // 10
     OP_MODRM,                      // 11
     OP_MODRM,                      // 12
     OP_MODRM,                      // 13
     OP_DATA_I8,                    // 14
     OP_DATA_PRE66_67,              // 15
     OP_NONE,                       // 16
     OP_NONE,                       // 17
     OP_MODRM,                      // 18
     OP_MODRM,                      // 19
     OP_MODRM,                      // 1A
     OP_MODRM,                      // 1B
     OP_DATA_I8,                    // 1C
     OP_DATA_PRE66_67,              // 1D
     OP_NONE,                       // 1E
     OP_NONE,                       // 1F
     OP_MODRM,                      // 20
     OP_MODRM,                      // 21
     OP_MODRM,                      // 22
     OP_MODRM,                      // 23
     OP_DATA_I8,                    // 24
     OP_DATA_PRE66_67,              // 25
     OP_NONE,                       // 26
     OP_NONE,                       // 27
     OP_MODRM,                      // 28
     OP_MODRM,                      // 29
     OP_MODRM,                      // 2A
     OP_MODRM,                      // 2B
     OP_DATA_I8,                    // 2C
     OP_DATA_PRE66_67,              // 2D
     OP_NONE,                       // 2E
     OP_NONE,                       // 2F
     OP_MODRM,                      // 30
     OP_MODRM,                      // 31
     OP_MODRM,                      // 32
     OP_MODRM,                      // 33
     OP_DATA_I8,                    // 34
     OP_DATA_PRE66_67,              // 35
     OP_NONE,                       // 36
     OP_NONE,                       // 37
     OP_MODRM,                      // 38
     OP_MODRM,                      // 39
     OP_MODRM,                      // 3A
     OP_MODRM,                      // 3B
     OP_DATA_I8,                    // 3C
     OP_DATA_PRE66_67,              // 3D
     OP_NONE,                       // 3E
     OP_NONE,                       // 3F
     OP_NONE,                       // 40
     OP_NONE,                       // 41
     OP_NONE,                       // 42
     OP_NONE,                       // 43
     OP_NONE,                       // 44
     OP_NONE,                       // 45
     OP_NONE,                       // 46
     OP_NONE,                       // 47
     OP_NONE,                       // 48
     OP_NONE,                       // 49
     OP_NONE,                       // 4A
     OP_NONE,                       // 4B
     OP_NONE,                       // 4C
     OP_NONE,                       // 4D
     OP_NONE,                       // 4E
     OP_NONE,                       // 4F
     OP_NONE,                       // 50
     OP_NONE,                       // 51
     OP_NONE,                       // 52
     OP_NONE,                       // 53
     OP_NONE,                       // 54
     OP_NONE,                       // 55
     OP_NONE,                       // 56
     OP_NONE,                       // 57
     OP_NONE,                       // 58
     OP_NONE,                       // 59
     OP_NONE,                       // 5A
     OP_NONE,                       // 5B
     OP_NONE,                       // 5C
     OP_NONE,                       // 5D
     OP_NONE,                       // 5E
     OP_NONE,                       // 5F
     OP_NONE,                       // 60
     OP_NONE,                       // 61
     OP_MODRM,                      // 62
     OP_MODRM,                      // 63
     OP_NONE,                       // 64
     OP_NONE,                       // 65
     OP_NONE,                       // 66
     OP_NONE,                       // 67
     OP_DATA_PRE66_67,              // 68
     OP_MODRM | OP_DATA_PRE66_67,   // 69
     OP_DATA_I8,                    // 6A
     OP_MODRM | OP_DATA_I8,         // 6B
     OP_NONE,                       // 6C
     OP_NONE,                       // 6D
     OP_NONE,                       // 6E
     OP_NONE,                       // 6F
     OP_DATA_I8,                    // 70
     OP_DATA_I8,                    // 71
     OP_DATA_I8,                    // 72
     OP_DATA_I8,                    // 73
     OP_DATA_I8,                    // 74
     OP_DATA_I8,                    // 75
     OP_DATA_I8,                    // 76
     OP_DATA_I8,                    // 77
     OP_DATA_I8,                    // 78
     OP_DATA_I8,                    // 79
     OP_DATA_I8,                    // 7A
     OP_DATA_I8,                    // 7B
     OP_DATA_I8,                    // 7C
     OP_DATA_I8,                    // 7D
     OP_DATA_I8,                    // 7E
     OP_DATA_I8,                    // 7F
     OP_MODRM | OP_DATA_I8,         // 80
     OP_MODRM | OP_DATA_PRE66_67,   // 81
     OP_MODRM | OP_DATA_I8,         // 82
     OP_MODRM | OP_DATA_I8,         // 83
     OP_MODRM,                      // 84
     OP_MODRM,                      // 85
     OP_MODRM,                      // 86
     OP_MODRM,                      // 87
     OP_MODRM,                      // 88
     OP_MODRM,                      // 89
     OP_MODRM,                      // 8A
     OP_MODRM,                      // 8B
     OP_MODRM,                      // 8C
     OP_MODRM,                      // 8D
     OP_MODRM,                      // 8E
     OP_MODRM,                      // 8F
     OP_NONE,                       // 90
     OP_NONE,                       // 91
     OP_NONE,                       // 92
     OP_NONE,                       // 93
     OP_NONE,                       // 94
     OP_NONE,                       // 95
     OP_NONE,                       // 96
     OP_NONE,                       // 97
     OP_NONE,                       // 98
     OP_NONE,                       // 99
     OP_DATA_I16 | OP_DATA_PRE66_67,// 9A
     OP_NONE,                       // 9B
     OP_NONE,                       // 9C
     OP_NONE,                       // 9D
     OP_NONE,                       // 9E
     OP_NONE,                       // 9F
     OP_DATA_PRE66_67,              // A0
     OP_DATA_PRE66_67,              // A1
     OP_DATA_PRE66_67,              // A2
     OP_DATA_PRE66_67,              // A3
     OP_NONE,                       // A4
     OP_NONE,                       // A5
     OP_NONE,                       // A6
     OP_NONE,                       // A7
     OP_DATA_I8,                    // A8
     OP_DATA_PRE66_67,              // A9
     OP_NONE,                       // AA
     OP_NONE,                       // AB
     OP_NONE,                       // AC
     OP_NONE,                       // AD
     OP_NONE,                       // AE
     OP_NONE,                       // AF
     OP_DATA_I8,                    // B0
     OP_DATA_I8,                    // B1
     OP_DATA_I8,                    // B2
     OP_DATA_I8,                    // B3
     OP_DATA_I8,                    // B4
     OP_DATA_I8,                    // B5
     OP_DATA_I8,                    // B6
     OP_DATA_I8,                    // B7
     OP_DATA_PRE66_67,              // B8
     OP_DATA_PRE66_67,              // B9
     OP_DATA_PRE66_67,              // BA
     OP_DATA_PRE66_67,              // BB
     OP_DATA_PRE66_67,              // BC
     OP_DATA_PRE66_67,              // BD
     OP_DATA_PRE66_67,              // BE
     OP_DATA_PRE66_67,              // BF
     OP_MODRM | OP_DATA_I8,         // C0
     OP_MODRM | OP_DATA_I8,         // C1
     OP_DATA_I16,                   // C2
     OP_NONE,                       // C3
     OP_MODRM,                      // C4
     OP_MODRM,                      // C5
     OP_MODRM   | OP_DATA_I8,       // C6
     OP_MODRM   | OP_DATA_PRE66_67, // C7
     OP_DATA_I8 | OP_DATA_I16,      // C8
     OP_NONE,                       // C9
     OP_DATA_I16,                   // CA
     OP_NONE,                       // CB
     OP_NONE,                       // CC
     OP_DATA_I8,                    // CD
     OP_NONE,                       // CE
     OP_NONE,                       // CF
     OP_MODRM,                      // D0
     OP_MODRM,                      // D1
     OP_MODRM,                      // D2
     OP_MODRM,                      // D3
     OP_DATA_I8,                    // D4
     OP_DATA_I8,                    // D5
     OP_NONE,                       // D6
     OP_NONE,                       // D7
     OP_WORD,                       // D8
     OP_WORD,                       // D9
     OP_WORD,                       // DA
     OP_WORD,                       // DB
     OP_WORD,                       // DC
     OP_WORD,                       // DD
     OP_WORD,                       // DE
     OP_WORD,                       // DF
     OP_DATA_I8,                    // E0
     OP_DATA_I8,                    // E1
     OP_DATA_I8,                    // E2
     OP_DATA_I8,                    // E3
     OP_DATA_I8,                    // E4
     OP_DATA_I8,                    // E5
     OP_DATA_I8,                    // E6
     OP_DATA_I8,                    // E7
     OP_DATA_PRE66_67 | OP_REL32,   // E8
     OP_DATA_PRE66_67 | OP_REL32,   // E9
     OP_DATA_I16 | OP_DATA_PRE66_67,// EA
     OP_DATA_I8,                    // EB
     OP_NONE,                       // EC
     OP_NONE,                       // ED
     OP_NONE,                       // EE
     OP_NONE,                       // EF
     OP_NONE,                       // F0
     OP_NONE,                       // F1
     OP_NONE,                       // F2
     OP_NONE,                       // F3
     OP_NONE,                       // F4
     OP_NONE,                       // F5
     OP_MODRM,                      // F6
     OP_MODRM,                      // F7
     OP_NONE,                       // F8
     OP_NONE,                       // F9
     OP_NONE,                       // FA
     OP_NONE,                       // FB
     OP_NONE,                       // FC
     OP_NONE,                       // FD
     OP_MODRM,                      // FE
     OP_MODRM | OP_REL32            // FF
 };
 
 
 UCHAR OpcodeFlagsExt[
256=
 {
     OP_MODRM,                      
// 00
     OP_MODRM,                      // 01
     OP_MODRM,                      // 02
     OP_MODRM,                      // 03
     OP_NONE,                       // 04
     OP_NONE,                       // 05
     OP_NONE,                       // 06
     OP_NONE,                       // 07
     OP_NONE,                       // 08
     OP_NONE,                       // 09
     OP_NONE,                       // 0A
     OP_NONE,                       // 0B
     OP_NONE,                       // 0C
     OP_MODRM,                      // 0D
     OP_NONE,                       // 0E
     OP_MODRM | OP_DATA_I8,         // 0F
     OP_MODRM,                      // 10
     OP_MODRM,                      // 11
     OP_MODRM,                      // 12
     OP_MODRM,                      // 13
     OP_MODRM,                      // 14
     OP_MODRM,                      // 15
     OP_MODRM,                      // 16
     OP_MODRM,                      // 17
     OP_MODRM,                      // 18
     OP_NONE,                       // 19
     OP_NONE,                       // 1A
     OP_NONE,                       // 1B
     OP_NONE,                       // 1C
     OP_NONE,                       // 1D
     OP_NONE,                       // 1E
     OP_NONE,                       // 1F
     OP_MODRM,                      // 20
     OP_MODRM,                      // 21
     OP_MODRM,                      // 22
     OP_MODRM,                      // 23
     OP_MODRM,                      // 24
     OP_NONE,                       // 25
     OP_MODRM,                      // 26
     OP_NONE,                       // 27
     OP_MODRM,                      // 28
     OP_MODRM,                      // 29
     OP_MODRM,                      // 2A
     OP_MODRM,                      // 2B
     OP_MODRM,                      // 2C
     OP_MODRM,                      // 2D
     OP_MODRM,                      // 2E
     OP_MODRM,                      // 2F
     OP_NONE,                       // 30
     OP_NONE,                       // 31
     OP_NONE,                       // 32
     OP_NONE,                       // 33
     OP_NONE,                       // 34
     OP_NONE,                       // 35
     OP_NONE,                       // 36
     OP_NONE,                       // 37
     OP_NONE,                       // 38
     OP_NONE,                       // 39
     OP_NONE,                       // 3A
     OP_NONE,                       // 3B
     OP_NONE,                       // 3C
     OP_NONE,                       // 3D
     OP_NONE,                       // 3E
     OP_NONE,                       // 3F
     OP_MODRM,                      // 40
     OP_MODRM,                      // 41
     OP_MODRM,                      // 42
     OP_MODRM,                      // 43
     OP_MODRM,                      // 44
     OP_MODRM,                      // 45
     OP_MODRM,                      // 46
     OP_MODRM,                      // 47
     OP_MODRM,                      // 48
     OP_MODRM,                      // 49
     OP_MODRM,                      // 4A
     OP_MODRM,                      // 4B
     OP_MODRM,                      // 4C
     OP_MODRM,                      // 4D
     OP_MODRM,                      // 4E
     OP_MODRM,                      // 4F
     OP_MODRM,                      // 50
     OP_MODRM,                      // 51
     OP_MODRM,                      // 52
     OP_MODRM,                      // 53
     OP_MODRM,                      // 54
     OP_MODRM,                      // 55
     OP_MODRM,                      // 56
     OP_MODRM,                      // 57
     OP_MODRM,                      // 58
     OP_MODRM,                      // 59
     OP_MODRM,                      // 5A
     OP_MODRM,                      // 5B
     OP_MODRM,                      // 5C
     OP_MODRM,                      // 5D
     OP_MODRM,                      // 5E
     OP_MODRM,                      // 5F
     OP_MODRM,                      // 60
     OP_MODRM,                      // 61
     OP_MODRM,                      // 62
     OP_MODRM,                      // 63
     OP_MODRM,                      // 64
     OP_MODRM,                      // 65
     OP_MODRM,                      // 66
     OP_MODRM,                      // 67
     OP_MODRM,                      // 68
     OP_MODRM,                      // 69
     OP_MODRM,                      // 6A
     OP_MODRM,                      // 6B
     OP_MODRM,                      // 6C
     OP_MODRM,                      // 6D
     OP_MODRM,                      // 6E
     OP_MODRM,                      // 6F
     OP_MODRM | OP_DATA_I8,         // 70
     OP_MODRM | OP_DATA_I8,         // 71
     OP_MODRM | OP_DATA_I8,         // 72
     OP_MODRM | OP_DATA_I8,         // 73
     OP_MODRM,                      // 74
     OP_MODRM,                      // 75
     OP_MODRM,                      // 76
     OP_NONE,                       // 77
     OP_NONE,                       // 78
     OP_NONE,                       // 79
     OP_NONE,                       // 7A
     OP_NONE,                       // 7B
     OP_MODRM,                      // 7C
     OP_MODRM,                      // 7D
     OP_MODRM,                      // 7E
     OP_MODRM,                      // 7F
     OP_DATA_PRE66_67 | OP_REL32,   // 80
     OP_DATA_PRE66_67 | OP_REL32,   // 81
     OP_DATA_PRE66_67 | OP_REL32,   // 82
     OP_DATA_PRE66_67 | OP_REL32,   // 83
     OP_DATA_PRE66_67 | OP_REL32,   // 84
     OP_DATA_PRE66_67 | OP_REL32,   // 85
     OP_DATA_PRE66_67 | OP_REL32,   // 86
     OP_DATA_PRE66_67 | OP_REL32,   // 87
     OP_DATA_PRE66_67 | OP_REL32,   // 88
     OP_DATA_PRE66_67 | OP_REL32,   // 89
     OP_DATA_PRE66_67 | OP_REL32,   // 8A
     OP_DATA_PRE66_67 | OP_REL32,   // 8B
     OP_DATA_PRE66_67 | OP_REL32,   // 8C
     OP_DATA_PRE66_67 | OP_REL32,   // 8D
     OP_DATA_PRE66_67 | OP_REL32,   // 8E
     OP_DATA_PRE66_67 | OP_REL32,   // 8F
     OP_MODRM,                      // 90
     OP_MODRM,                      // 91
     OP_MODRM,                      // 92
     OP_MODRM,                      // 93
     OP_MODRM,                      // 94
     OP_MODRM,                      // 95
     OP_MODRM,                      // 96
     OP_MODRM,                      // 97
     OP_MODRM,                      // 98
     OP_MODRM,                      // 99
     OP_MODRM,                      // 9A
     OP_MODRM,                      // 9B
     OP_MODRM,                      // 9C
     OP_MODRM,                      // 9D
     OP_MODRM,                      // 9E
     OP_MODRM,                      // 9F
     OP_NONE,                       // A0
     OP_NONE,                       // A1
     OP_NONE,                       // A2
     OP_MODRM,                      // A3
     OP_MODRM | OP_DATA_I8,         // A4
     OP_MODRM,                      // A5
     OP_NONE,                       // A6
     OP_NONE,                       // A7
     OP_NONE,                       // A8
     OP_NONE,                       // A9
     OP_NONE,                       // AA
     OP_MODRM,                      // AB
     OP_MODRM | OP_DATA_I8,         // AC
     OP_MODRM,                      // AD
     OP_MODRM,                      // AE
     OP_MODRM,                      // AF
     OP_MODRM,                      // B0
     OP_MODRM,                      // B1
     OP_MODRM,                      // B2
     OP_MODRM,                      // B3
     OP_MODRM,                      // B4
     OP_MODRM,                      // B5
     OP_MODRM,                      // B6
     OP_MODRM,                      // B7
     OP_NONE,                       // B8
     OP_NONE,                       // B9
     OP_MODRM | OP_DATA_I8,         // BA
     OP_MODRM,                      // BB
     OP_MODRM,                      // BC
     OP_MODRM,                      // BD
     OP_MODRM,                      // BE
     OP_MODRM,                      // BF
     OP_MODRM,                      // C0
     OP_MODRM,                      // C1
     OP_MODRM | OP_DATA_I8,         // C2
     OP_MODRM,                      // C3
     OP_MODRM | OP_DATA_I8,         // C4
     OP_MODRM | OP_DATA_I8,         // C5
     OP_MODRM | OP_DATA_I8,         // C6 
     OP_MODRM,                      // C7
     OP_NONE,                       // C8
     OP_NONE,                       // C9
     OP_NONE,                       // CA
     OP_NONE,                       // CB
     OP_NONE,                       // CC
     OP_NONE,                       // CD
     OP_NONE,                       // CE
     OP_NONE,                       // CF
     OP_MODRM,                      // D0
     OP_MODRM,                      // D1
     OP_MODRM,                      // D2
     OP_MODRM,                      // D3
     OP_MODRM,                      // D4
     OP_MODRM,                      // D5
     OP_MODRM,                      // D6
     OP_MODRM,                      // D7
     OP_MODRM,                      // D8
     OP_MODRM,                      // D9
     OP_MODRM,                      // DA
     OP_MODRM,                      // DB
     OP_MODRM,                      // DC
     OP_MODRM,                      // DD
     OP_MODRM,                      // DE
     OP_MODRM,                      // DF
     OP_MODRM,                      // E0
     OP_MODRM,                      // E1
     OP_MODRM,                      // E2
     OP_MODRM,                      // E3
     OP_MODRM,                      // E4
     OP_MODRM,                      // E5
     OP_MODRM,                      // E6
     OP_MODRM,                      // E7
     OP_MODRM,                      // E8
     OP_MODRM,                      // E9
     OP_MODRM,                      // EA
     OP_MODRM,                      // EB
     OP_MODRM,                      // EC
     OP_MODRM,                      // ED
     OP_MODRM,                      // EE
     OP_MODRM,                      // EF
     OP_MODRM,                      // F0
     OP_MODRM,                      // F1
     OP_MODRM,                      // F2
     OP_MODRM,                      // F3
     OP_MODRM,                      // F4
     OP_MODRM,                      // F5
     OP_MODRM,                      // F6
     OP_MODRM,                      // F7 
     OP_MODRM,                      // F8
     OP_MODRM,                      // F9
     OP_MODRM,                      // FA
     OP_MODRM,                      // FB
     OP_MODRM,                      // FC
     OP_MODRM,                      // FD
     OP_MODRM,                      // FE
     OP_NONE                        // FF
 };
 
 unsigned 
long __fastcall SizeOfCode(void *Code, unsigned char **pOpcode)
 {
     PUCHAR cPtr;
     UCHAR Flags;
     BOOLEAN PFX66, PFX67;
     BOOLEAN SibPresent;
     UCHAR iMod, iRM, iReg;
     UCHAR OffsetSize, Add;
     UCHAR Opcode;
 
     OffsetSize 
= 0;
     PFX66 
= FALSE;
     PFX67 
= FALSE;
     cPtr 
= (PUCHAR)Code;
 
     
while ( (*cPtr == 0x2E|| (*cPtr == 0x3E|| (*cPtr == 0x36||
             (
*cPtr == 0x26|| (*cPtr == 0x64|| (*cPtr == 0x65|| 
             (
*cPtr == 0xF0|| (*cPtr == 0xF2|| (*cPtr == 0xF3||
             (
*cPtr == 0x66|| (*cPtr == 0x67) ) 
     {
         
if (*cPtr == 0x66) PFX66 = TRUE;
         
if (*cPtr == 0x67) PFX67 = TRUE;
         cPtr
++;
         
if (cPtr > (PUCHAR)Code + 16return 0
     }
     Opcode 
= *cPtr;
     
if (pOpcode) *pOpcode = cPtr; 
 
     
if (*cPtr == 0x0F)
     {
         cPtr
++;
         Flags 
= OpcodeFlagsExt[*cPtr];
     } 
else 
     {
         Flags 
= OpcodeFlags[Opcode];
 
         
if (Opcode >= 0xA0 && Opcode <= 0xA3) PFX66 = PFX67;
     }
     cPtr
++;
     
if (Flags & OP_WORD) cPtr++;    
 
     
if (Flags & OP_MODRM)
     {
         iMod 
= *cPtr >> 6;
         iReg 
= (*cPtr & 0x38>> 3;  
         iRM  
= *cPtr &  7;
         cPtr
++;
 
         
if ((Opcode == 0xF6&& !iReg) Flags |= OP_DATA_I8;    
         
if ((Opcode == 0xF7&& !iReg) Flags |= OP_DATA_PRE66_67; 
 
 
         SibPresent 
= !PFX67 & (iRM == 4);
         
switch (iMod)
         {
             
case 0
               
if ( PFX67 && (iRM == 6)) OffsetSize = 2;
               
if (!PFX67 && (iRM == 5)) OffsetSize = 4
              
break;
             
case 1: OffsetSize = 1;
              
break
             
case 2if (PFX67) OffsetSize = 2else OffsetSize = 4;
              
break;
             
case 3: SibPresent = FALSE;
         }
         
if (SibPresent)
         {
             
if (((*cPtr & 7== 5&& ( (!iMod) || (iMod == 2) )) OffsetSize = 4;
             cPtr
++;
         }
         cPtr 
= (PUCHAR)(ULONG)cPtr + OffsetSize;
     }
 
     
if (Flags & OP_DATA_I8)  cPtr++;
     
if (Flags & OP_DATA_I16) cPtr += 2;
     
if (Flags & OP_DATA_I32) cPtr += 4;
     
if (PFX66) Add = 2else Add = 4;
     
if (Flags & OP_DATA_PRE66_67) cPtr += Add;
     
return (ULONG)cPtr - (ULONG)Code;
 }
 
 unsigned 
long __fastcall SizeOfProc(void *Proc)
 {
     ULONG  Length;
     PUCHAR pOpcode;
     ULONG  Result 
= 0;
 
     
do
     {
         Length 
= SizeOfCode(Proc, &pOpcode);
         Result 
+= Length;
         
if ((Length == 1&& (*pOpcode == 0xC3)) break;
         
if ((Length == 3&& (*pOpcode == 0xC2)) break;
         Proc 
= (PVOID)((ULONG)Proc + Length);
     } 
while (Length);
     
return Result;
 }
 
 BOOL
 WriteReadOnlyMemory(
     LPBYTE    lpDest,
     LPBYTE    lpSource,
     ULONG    Length
     )
 {
     BOOL bRet;
     DWORD dwOldProtect;
     bRet 
= FALSE;
 
     
if (!VirtualProtect(lpDest, Length, PAGE_EXECUTE_READWRITE, &dwOldProtect))
     {
         
return bRet;
     }
 
     memcpy(lpDest, lpSource, Length);
 
     bRet 
= VirtualProtect(lpDest, Length, dwOldProtect, &dwOldProtect);
 
     
return    bRet;
 }
 
 BOOL 
 GetPatchSize(
     IN    
void *Proc,            /* 需要Hook的函數(shù)地址 */
     IN    DWORD dwNeedSize,    
/* Hook函數(shù)頭部占用的字節(jié)大小 */
     OUT LPDWORD lpPatchSize    
/* 返回根據(jù)函數(shù)頭分析需要修補(bǔ)的大小 */
     )
 {
     DWORD Length;
     PUCHAR pOpcode;
     DWORD PatchSize 
= 0;
 
     
if (!Proc || !lpPatchSize)
     {
         
return FALSE;
     }
 
     
do
     {
         Length 
= SizeOfCode(Proc, &pOpcode);
         
if ((Length == 1&& (*pOpcode == 0xC3))
             
break;
         
if ((Length == 3&& (*pOpcode == 0xC2))
             
break;
         Proc 
= (PVOID)((DWORD)Proc + Length);
 
         PatchSize 
+= Length;
         
if (PatchSize >= dwNeedSize)
         {
             
break;
         }
 
     }
while(Length);
 
     
*lpPatchSize = PatchSize;
 
     
return TRUE;
 }
 
 BOOL
 InlineHook(
     IN    
void *OrgProc,        /* 需要Hook的函數(shù)地址 */
     IN    
void *NewProc,        /* 代替被Hook函數(shù)的地址 */
     OUT    
void **RealProc        /* 返回原始函數(shù)的入口地址 */
     )
 {
     DWORD dwPatchSize;    
// 得到需要patch的字節(jié)大小
     
//DWORD dwOldProtect;
     LPVOID lpHookFunc;    // 分配的Hook函數(shù)的內(nèi)存
     DWORD dwBytesNeed;    // 分配的Hook函數(shù)的大小
     LPBYTE lpPatchBuffer; // jmp 指令的臨時(shí)緩沖區(qū)
 
     
if (!OrgProc || !NewProc || !RealProc)
     {
         
return FALSE;
     }
     
// 得到需要patch的字節(jié)大小
     if (!GetPatchSize(OrgProc, JMP_SIZE, &dwPatchSize))
     {
         
return FALSE;
     }
 
     
/*
     0x00000800                    0x00000800        sizeof(DWORD)    // dwPatchSize
     JMP    / FAR 0xAABBCCDD        E9 DDCCBBAA        JMP_SIZE
                                                 dwPatchSize        // Backup instruction
     JMP    / FAR 0xAABBCCDD        E9 DDCCBBAA        JMP_SIZE
     
*/
 
     dwBytesNeed 
= sizeof(DWORD) + JMP_SIZE + dwPatchSize + JMP_SIZE;
 
     lpHookFunc 
= __malloc(dwBytesNeed);
 
     
//備份dwPatchSize到lpHookFunc
     *(DWORD *)lpHookFunc = dwPatchSize;
 
     
//跳過(guò)開(kāi)頭的4個(gè)字節(jié)
     lpHookFunc = (LPVOID)((DWORD)lpHookFunc + sizeof(DWORD));
 
     
//開(kāi)始backup函數(shù)開(kāi)頭的字
     memcpy((BYTE *)lpHookFunc + JMP_SIZE, OrgProc, dwPatchSize);
 
     lpPatchBuffer 
= (LPBYTE)__malloc(dwPatchSize);
 
     
//NOP填充
     memset(lpPatchBuffer, 0x90, dwPatchSize);
 
     
//jmp到Hook
     *(BYTE *)lpHookFunc = 0xE9;
     
*(DWORD*)((DWORD)lpHookFunc + 1= (DWORD)NewProc - (DWORD)lpHookFunc - JMP_SIZE;
 
     
//跳回原始
     *(BYTE *)((DWORD)lpHookFunc + 5 + dwPatchSize) = 0xE9;
     
*(DWORD*)((DWORD)lpHookFunc + 5 + dwPatchSize + 1= ((DWORD)OrgProc + dwPatchSize) - ((DWORD)lpHookFunc + JMP_SIZE + dwPatchSize) - JMP_SIZE;
 
 
     
//jmp 
     *(BYTE *)lpPatchBuffer = 0xE9;
     
//注意計(jì)算長(zhǎng)度的時(shí)候得用OrgProc
     *(DWORD*)(lpPatchBuffer + 1= (DWORD)lpHookFunc - (DWORD)OrgProc - JMP_SIZE;
 
     WriteReadOnlyMemory((LPBYTE)OrgProc, lpPatchBuffer, dwPatchSize);
 
     __free(lpPatchBuffer);
 
     
*RealProc = (void *)((DWORD)lpHookFunc + JMP_SIZE);
 
     
return TRUE;
 }
 
 
void UnInlineHook(
     
void *OrgProc,  /* 需要恢復(fù)Hook的函數(shù)地址 */
     
void *RealProc  /* 原始函數(shù)的入口地址 */
     )
 {
     DWORD dwPatchSize;
     
//DWORD dwOldProtect;
     LPBYTE lpBuffer;
 
     
//找到分配的空間
     lpBuffer = (LPBYTE)((DWORD)RealProc - (sizeof(DWORD) + JMP_SIZE));
     
//得到dwPatchSize
     dwPatchSize = *(DWORD *)lpBuffer;
 
     WriteReadOnlyMemory((LPBYTE)OrgProc, (LPBYTE)RealProc, dwPatchSize);
 
     
//釋放分配的跳轉(zhuǎn)函數(shù)的空間
     __free(lpBuffer);
 
     
return;
 }


 

posted on 2013-03-26 00:20 Tiany 閱讀(994) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 內(nèi)核與驅(qū)動(dòng)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美日韩激情| 欧美精品日韩www.p站| 欧美影视一区| 欧美日韩亚洲不卡| 最新日韩在线视频| 久久久亚洲精品一区二区三区 | 亚洲一区综合| 欧美激情在线狂野欧美精品| 精品91久久久久| 欧美一区二区三区免费在线看| 亚洲激情网站免费观看| 欧美中文字幕在线| 国产一区二区精品久久| 久久国产精品一区二区三区| 亚洲在线观看视频| 国产精品美腿一区在线看| aⅴ色国产欧美| 亚洲另类一区二区| 欧美日韩国语| 亚洲免费在线观看| 亚洲欧美网站| 狠狠综合久久av一区二区小说 | 欧美国产亚洲视频| 久久综合伊人77777| 在线观看精品| 亚洲国产精品久久久| 欧美极品在线视频| 亚洲一区二区不卡免费| 亚洲一级黄色片| 国产欧美欧洲在线观看| 久久精品国亚洲| 久久精品99| 亚洲激情视频| 99精品热视频只有精品10| 国产精品久久7| 久久久av网站| 美女精品自拍一二三四| 一区二区三区久久精品| 亚洲欧美日韩网| 亚洲成在人线av| 亚洲精品乱码久久久久久黑人| 欧美日韩国产一区二区三区| 欧美一区二区成人6969| 久久亚洲二区| 亚洲性视频h| 久久国产婷婷国产香蕉| 91久久夜色精品国产九色| 夜夜嗨网站十八久久| 国产热re99久久6国产精品| 美女国内精品自产拍在线播放| 欧美日本高清| 久久久久国产精品人| 欧美高清视频一区二区| 欧美在线免费| 欧美日本不卡| 免费成人在线视频网站| 国产精品国产三级国产专区53| 久久久91精品国产一区二区三区| 欧美精品午夜| 麻豆九一精品爱看视频在线观看免费| 欧美日韩国产片| 美女脱光内衣内裤视频久久影院 | 亚洲欧美网站| 亚洲国产一区二区视频| 亚洲一区二区三区在线视频| 亚洲成色最大综合在线| 午夜精品国产更新| 99国产精品久久| 久久精品免费观看| 亚洲欧美日本另类| 欧美成人精品高清在线播放| 久久国产综合精品| 欧美三级在线视频| 欧美激情一区二区三区成人| 国产欧美一区二区三区在线老狼| 亚洲精一区二区三区| 亚洲成人直播| 久久久久成人精品| 久久国产福利国产秒拍| 欧美日韩在线播| 亚洲精品国产精品国自产在线 | 欧美日韩在线三级| 免费人成精品欧美精品| 国产欧美一区二区精品忘忧草| 亚洲精品视频在线看| 亚洲国产日韩欧美综合久久| 欧美呦呦网站| 久久国产精品99国产| 国产精品乱码一区二三区小蝌蚪 | 亚洲一区在线直播| 亚洲香蕉在线观看| 欧美日韩亚洲视频| 日韩亚洲欧美综合| 夜夜嗨av色综合久久久综合网| 欧美 日韩 国产 一区| 欧美成人官网二区| 亚洲国产精品va在线看黑人| 久久久久久色| 欧美a级一区二区| 亚洲国产日韩欧美在线图片 | 国产精品99久久久久久久久久久久 | 免费亚洲视频| 在线精品国产欧美| 久久夜色精品国产欧美乱| 久久综合中文字幕| 在线精品观看| 欧美激情一区在线| 99精品视频免费在线观看| 亚洲一区在线免费观看| 国产精品都在这里| 亚洲欧美另类综合偷拍| 久久精品国产99| 伊人成综合网伊人222| 久久综合久久88| 欧美刺激午夜性久久久久久久| 亚洲国产导航| 欧美日韩国产va另类| 亚洲一区国产视频| 国产精品一区久久久久| 午夜精品久久久久久久蜜桃app| 欧美一区二区三区喷汁尤物| 国产一级久久| 狂野欧美激情性xxxx| 亚洲经典三级| 午夜一区二区三视频在线观看| 国产精品一区二区在线观看不卡| 欧美在线免费观看视频| 欧美激情精品久久久| 亚洲一卡二卡三卡四卡五卡| 国产一区二区三区久久久| 另类尿喷潮videofree| 亚洲人成绝费网站色www| 亚洲免费小视频| 国产专区精品视频| 欧美大片91| 亚洲在线电影| 亚洲国产高清aⅴ视频| 午夜国产精品视频| 伊人成人网在线看| 欧美色网在线| 久久免费黄色| 亚洲一区二区三区视频播放| 久久亚洲精品一区二区| 99这里只有精品| 国产亚洲欧美aaaa| 欧美日韩国产色站一区二区三区| 午夜精品一区二区三区电影天堂| 欧美国产综合一区二区| 亚洲欧美激情视频在线观看一区二区三区| 国产综合自拍| 欧美网站在线观看| 免费中文字幕日韩欧美| 亚洲欧美日韩综合aⅴ视频| 亚洲国产精品成人综合色在线婷婷| 午夜精品电影| 一区二区三欧美| 亚洲黄页一区| 韩国精品久久久999| 国产精品扒开腿做爽爽爽视频 | 亚洲免费视频一区二区| 亚洲国内欧美| 美女精品在线观看| 欧美资源在线观看| 亚洲制服少妇| 中文久久精品| 亚洲一区二区欧美日韩| 日韩天天综合| 亚洲狼人精品一区二区三区| 亚洲成色精品| 亚洲高清不卡一区| 在线观看国产欧美| 亚洲电影视频在线| 在线观看视频日韩| 国产视频一区在线| 国产免费成人av| 国产欧美日韩在线播放| 国产精品久久波多野结衣| 欧美午夜电影网| 欧美性视频网站| 国产精品久线观看视频| 国产精品你懂的| 国产九九视频一区二区三区| 国产欧美精品一区aⅴ影院| 国模精品一区二区三区色天香 | 亚洲福利免费| 最新日韩中文字幕| 亚洲激情影院| 日韩视频中文| 亚洲在线免费| 中文精品视频一区二区在线观看| 欧美影院视频| 久久久人成影片一区二区三区| 久久精品亚洲一区| 久久精品国产免费看久久精品| 久久久久国产精品一区二区| 另类尿喷潮videofree| 欧美插天视频在线播放| 亚洲人成网站影音先锋播放| 一区二区三区四区五区在线| 欧美一区二区三区在线观看视频|