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

Tiany 's Blog

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

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

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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ù)頭分析需要修補的大小 */
              );
 
 BOOL
 InlineHook(
            IN    
void *OrgProc,        /* 需要Hook的函數(shù)地址 */
            IN    
void *NewProc,        /* 代替被Hook函數(shù)的地址 */
            OUT    
void **RealProc        /* 返回原始函數(shù)的入口地址 */
            );
 
 
void UnInlineHook(
                   
void *OrgProc,  /* 需要恢復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ù)頭分析需要修補的大小 */
     )
 {
     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ù)的內存
     DWORD dwBytesNeed;    // 分配的Hook函數(shù)的大小
     LPBYTE lpPatchBuffer; // jmp 指令的臨時緩沖區(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;
 
     
//跳過開頭的4個字節(jié)
     lpHookFunc = (LPVOID)((DWORD)lpHookFunc + sizeof(DWORD));
 
     
//開始backup函數(shù)開頭的字
     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;
     
//注意計算長度的時候得用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,  /* 需要恢復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);
 
     
//釋放分配的跳轉函數(shù)的空間
     __free(lpBuffer);
 
     
return;
 }


 

posted on 2013-03-26 00:20 Tiany 閱讀(992) 評論(0)  編輯 收藏 引用 所屬分類: 內核與驅動
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区三区四区五区精品| 亚洲国产成人精品女人久久久| 久久久噜噜噜久久人人看| 亚洲国产精品久久久久秋霞不卡| 一区二区三区久久精品| 久久aⅴ国产欧美74aaa| aa亚洲婷婷| 亚洲精品一区二区在线| 尤物yw午夜国产精品视频明星| 国产农村妇女毛片精品久久麻豆 | 欧美人与禽猛交乱配视频| 久久久久国产精品www| 午夜伦理片一区| 午夜老司机精品| 玖玖精品视频| 美女网站久久| 亚洲国产欧美一区二区三区丁香婷| 免费不卡在线观看av| 免费黄网站欧美| 亚洲国产美女精品久久久久∴| 欧美有码在线观看视频| 久久亚洲免费| 欧美在线播放视频| 亚洲日本中文字幕| 国产午夜精品久久久久久免费视| 久久一区二区三区av| 欧美一区午夜精品| 午夜免费久久久久| 久久婷婷国产综合精品青草| 久久亚洲视频| 久久性天堂网| 久久影视精品| 久久久久.com| 蜜臀久久99精品久久久画质超高清| 欧美激情综合网| 国产精品日日摸夜夜添夜夜av| 国产一区二区中文| 国产性做久久久久久| 在线成人性视频| 亚洲天堂av在线免费| 久久免费视频在线观看| 亚洲欧洲视频在线| 欧美在线观看一区| 欧美日韩国产综合视频在线观看中文 | 亚洲欧美自拍偷拍| 久久精品亚洲一区二区三区浴池| 久久久精彩视频| 久久综合九色综合网站| 亚洲国产精品va在线看黑人| 一个色综合导航| 午夜日韩福利| 欧美精品综合| 国产欧美一区二区三区另类精品| 在线看片欧美| 亚洲福利在线看| 亚洲人成啪啪网站| 久久精品一本久久99精品| 久久久久久一区二区| 99av国产精品欲麻豆| 久久亚洲综合网| 国产精品日本精品| 亚洲福利在线观看| 久久久亚洲国产天美传媒修理工| 久久躁狠狠躁夜夜爽| 香港成人在线视频| 亚洲国产日韩欧美综合久久| 欧美一区高清| 国产精品免费看| 在线日韩中文字幕| 久久国产综合精品| 一区二区三区四区国产精品| 这里只有精品电影| 欧美日韩午夜精品| 亚洲人成绝费网站色www| 性欧美xxxx大乳国产app| 亚洲人成久久| 欧美激情精品久久久久久免费印度| 国产视频一区二区在线观看| 激情成人亚洲| 99riav国产精品| 久久gogo国模裸体人体| 欧美激情 亚洲a∨综合| 亚洲精品久久久久久久久| 欧美在线精品免播放器视频| 欧美日韩视频一区二区三区| 亚洲春色另类小说| 久久精品国产清自在天天线| 一个色综合导航| 欧美v国产在线一区二区三区| 国产精品视频xxxx| 亚洲色图自拍| 亚洲校园激情| 免费观看成人网| 亚洲深夜福利网站| 欧美中文字幕在线播放| 欧美精品少妇一区二区三区| 中日韩男男gay无套| 亚洲精品乱码久久久久久蜜桃91 | 中日韩视频在线观看| 欧美激情91| 久久麻豆一区二区| 亚洲欧洲精品天堂一级| 91久久久精品| 欧美三级电影精品| 欧美在线一二三四区| 欧美在线啊v| 国产麻豆9l精品三级站| 亚洲午夜av电影| 最新国产精品拍自在线播放| 免费日韩av电影| 亚洲高清不卡在线观看| 免费日韩一区二区| 亚洲欧洲一区二区三区在线观看| 欧美日产在线观看| 西西裸体人体做爰大胆久久久| 亚洲激情视频| 国产精品久久久亚洲一区| 久久都是精品| 欧美专区中文字幕| 国内精品视频久久| 久久久青草婷婷精品综合日韩| 亚洲你懂的在线视频| 国产伦精品一区二区三区视频黑人| 久久精品国产一区二区三| 亚洲欧美中文日韩在线| 国产一区在线视频| 亚洲国产一区二区三区青草影视 | 国产欧美另类| 欧美岛国激情| 国产精品hd| 欧美福利电影网| 国产欧美日韩一区二区三区在线| 欧美xx视频| 国产精品捆绑调教| 久久欧美肥婆一二区| 欧美日韩国产免费| 欧美一级片在线播放| 欧美在线观看视频在线| 国产一区二区中文| 欧美亚洲一区二区三区| 亚洲欧美激情视频| 亚洲人成小说网站色在线| 亚洲第一视频| 久久久久久夜| 一区在线视频| 亚洲少妇一区| 亚洲国产经典视频| 99riav国产精品| 狠狠久久婷婷| 一区二区三区久久| 99国内精品久久| 久久精品日韩欧美| 一区二区日本视频| 欧美一区三区三区高中清蜜桃 | 午夜亚洲福利在线老司机| 91久久久在线| 欧美一级一区| 国语自产在线不卡| 亚洲精品在线免费观看视频| 国产亚洲aⅴaaaaaa毛片| 久久久久久久久久久久久女国产乱 | 一区二区av在线| 欧美激情日韩| 最新中文字幕亚洲| 99国产欧美久久久精品| 欧美mv日韩mv国产网站| 免播放器亚洲一区| 亚洲国产欧美不卡在线观看| 在线亚洲免费| 99re在线精品| 亚洲一区二区三区在线| 夜夜爽99久久国产综合精品女不卡| 亚洲欧美日韩在线综合| 香蕉国产精品偷在线观看不卡| 欧美午夜三级| 亚洲免费一在线| 久久久久综合| 一区二区三区在线免费视频| 久久国产精品免费一区| 欧美成人精品福利| 亚洲欧洲一区二区三区在线观看| 免费视频一区| 久久久久久高潮国产精品视| 在线日韩av片| 欧美精品在线一区| 亚洲资源av| 久久午夜色播影院免费高清| 亚洲欧洲日本专区| 欧美视频在线视频| 小处雏高清一区二区三区| 欧美成年人视频网站欧美| 一本久久综合亚洲鲁鲁| 国产精品美女999| 久久先锋影音| 亚洲一区二区日本| 久久av资源网| 国产一二三精品| 免费视频最近日韩| 亚洲女同同性videoxma| 欧美freesex交免费视频|