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

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>
            一区二区三区你懂的| 欧美色图五月天| 亚洲国产一区二区三区高清 | 99国产精品国产精品久久| 亚洲第一精品夜夜躁人人躁| 亚洲成色999久久网站| 亚洲欧洲一区二区三区久久| 亚洲黄色在线看| 亚洲日本黄色| 夜夜嗨av一区二区三区| 在线视频精品一| 亚洲欧美视频在线观看| 久久99伊人| 久久综合婷婷| 欧美日韩久久久久久| 国产精品伊人日日| 在线电影国产精品| 国产酒店精品激情| 亚洲电影免费| 亚洲一区国产一区| 久久婷婷麻豆| 亚洲全黄一级网站| 午夜精品久久久久久久蜜桃app | 亚洲永久字幕| 久久伊伊香蕉| 99国产精品| 久久夜色精品国产| 欧美日韩在线观看一区二区三区| 国产精品视频内| 亚洲黄色成人网| 欧美一级淫片aaaaaaa视频| 免费在线日韩av| 日韩午夜免费| 久久视频在线视频| 国产精品观看| 亚洲欧洲精品一区| 久久精品男女| 亚洲一区二区成人| 欧美国产大片| 一区二区三区在线不卡| 亚洲欧美中文在线视频| 亚洲国产日韩在线一区模特| 久久大逼视频| 国产精品视频免费在线观看| 日韩视频在线一区二区| 欧美wwwwww| 欧美一区二区免费| 国产欧美日韩综合一区在线观看| 亚洲精品乱码| 牛人盗摄一区二区三区视频| 亚洲欧美日韩综合| 国产欧美一区二区精品性色| 亚洲一区网站| 日韩写真视频在线观看| 欧美成人在线免费观看| 影音先锋一区| 久热这里只精品99re8久| 午夜欧美不卡精品aaaaa| 国产精品家庭影院| 亚洲男人天堂2024| 亚洲视频综合在线| 国产精品久久久久久久app | 女人色偷偷aa久久天堂| 欧美中文字幕在线视频| 国产欧美一区二区精品性色| 久久国产一二区| 午夜精品久久久99热福利| 国产精品性做久久久久久| 午夜精品福利一区二区三区av| 一区二区三区高清在线| 欧美三日本三级少妇三2023| 国产精品任我爽爆在线播放 | 国产欧美一区二区三区国产幕精品 | 欧美一区午夜视频在线观看| 亚洲视频在线一区观看| 国产美女一区| 久久综合伊人77777麻豆| 久久久久久电影| 91久久精品国产91性色| 亚洲清纯自拍| 欧美吻胸吃奶大尺度电影| 久久国产加勒比精品无码| 久久国产精品久久久久久| …久久精品99久久香蕉国产 | 欧美高清一区| 亚洲性视频网站| 性欧美超级视频| 亚洲高清视频在线| 99精品国产高清一区二区| 国产精品中文在线| 久久午夜色播影院免费高清| 欧美激情亚洲另类| 欧美伊人久久| 欧美国产日韩精品| 午夜亚洲伦理| 蜜桃av综合| 亚洲欧美第一页| 久久在线免费观看| 亚洲一区二区四区| 久久久久网址| 亚洲欧美国产精品桃花| 久久只精品国产| 亚洲欧美日韩综合aⅴ视频| 久久亚洲精品一区二区| 亚洲一区观看| 欧美激情精品久久久久久| 久久www免费人成看片高清 | 欧美日韩视频一区二区| 久久精品在线免费观看| 欧美精品偷拍| 另类图片国产| 国产精品日韩在线观看| 欧美激情一区在线观看| 国产性天天综合网| 日韩亚洲综合在线| 亚洲第一页在线| 欧美一级淫片aaaaaaa视频| 一本大道久久a久久精二百| 欧美在线国产精品| 亚洲欧美中日韩| 欧美日韩亚洲高清| 亚洲国产一区二区三区青草影视| 国产一区二区三区在线播放免费观看 | 欧美性jizz18性欧美| 免费在线观看日韩欧美| 国产精品婷婷| 一区二区高清| 99在线观看免费视频精品观看| 久久久久成人精品| 久久久999| 国产原创一区二区| 欧美一区网站| 久久久国产一区二区三区| 国产精品欧美日韩| 亚洲手机在线| 香港久久久电影| 国产精品网站在线播放| 亚洲婷婷免费| 午夜精品久久久久久99热软件| 欧美日韩在线视频观看| aa级大片欧美三级| 亚洲自拍偷拍福利| 国产伦精品一区二区三区| 亚洲一区一卡| 小黄鸭精品密入口导航| 国产精品一卡二| 午夜精品久久久久久久蜜桃app | 欧美三级乱码| 一本综合精品| 欧美一级欧美一级在线播放| 国产欧美精品一区二区色综合 | 亚洲第一综合天堂另类专| 亚洲福利视频网站| 欧美多人爱爱视频网站| 亚洲免费观看在线视频| 亚洲中字黄色| 国产一区二区三区久久悠悠色av| 久久国产黑丝| 欧美激情一区二区三区蜜桃视频 | 国产精品国产三级国产专播品爱网| 一本色道久久88亚洲综合88| 亚洲免费在线观看视频| 国产日韩亚洲欧美| 毛片基地黄久久久久久天堂| 亚洲精品国产精品国自产观看| 亚洲视频福利| 国产亚洲精品aa午夜观看| 久久综合99re88久久爱| 99国产成+人+综合+亚洲欧美| 久久精品国产精品亚洲综合| ●精品国产综合乱码久久久久| 欧美欧美在线| 香蕉成人啪国产精品视频综合网| 免费成人高清在线视频| 一区二区三区四区蜜桃| 国产亚洲视频在线| 欧美日本韩国在线| 久久精品99国产精品日本| 最近中文字幕mv在线一区二区三区四区| 中日韩午夜理伦电影免费| 国内精品国产成人| 欧美四级在线| 美女视频一区免费观看| 欧美激情区在线播放| 久久久久99| 亚洲国产精品一区二区第四页av | 国产精品99久久久久久久久| 久久电影一区| 日韩亚洲精品电影| 国产一区二区三区在线播放免费观看| 欧美jizz19性欧美| 性做久久久久久免费观看欧美| 亚洲国产天堂久久综合| 久久久综合精品| 亚洲欧美日韩专区| 亚洲精品一区二| 在线观看福利一区| 国产日韩欧美成人| 欧美性淫爽ww久久久久无| 欧美国产一区视频在线观看|