·þÎñÆ÷ÅÜÆðÀ´Ö»ÊÇ¿ªÊ¼£¬ÕâÆª½ø½×ÊֲὫ½ÒÃØ£º
✅ ÍòÈËͬ·þ³ÐÔØ·½°¸£ºµ¥»ú→·Ö²¼Ê½¼Ü¹¹¸ÄÔì
⚙️ ·´¹Ù·½¼ì²âÒýÇæÔÀí£º7ÖÖÌØÕ÷Âëαװ¼¼Êõ
🔥 ¶¨ÖÆ»¯Ä§¸ÄºËÐļ¼ÇÉ£º´ÓEL±à¼Æ÷µ½»ã±àHOOK
¨…Íò×Ö¾¯¸æ£¨·¨ÂÉÓëµÀµÂ±ß½ç£©
ÒÔϼ¼Êõ½öÏÞѧϰ½»Á÷
⚠️ ʵ¼Ê²¿ÊðÔËÓªÉæÏÓ£º
Öø×÷ȨÇÖȨ£¨Ô´´úÂë/×ÊÔ´Îļþ¸´ÖÆ£©
²»Õýµ±¾ºÕù£¨·ÖÁ÷¹Ù·½Íæ¼Ò£©
ÐÌÊ·çÏÕ£¨·Ç·¨¾Óª×Á¿ÐÌ3-7Ä꣩
graph LR
A[¼¼ÊõÑо¿] --> B[ÐÞ¸ÄÓÎÏ·ÄÚ´æ]
--> C[ÐÒé·ÖÎö]
--> D[©¶´ÍÚ¾ò]
--> E[¸öÈ˲âÊÔ]
--> F[ÍøÂçÐÒéѧϰ]
--> G[°²È«·À»¤ÌáÉý]
--> H(ºÏ·¨)
--> H
--> H
--> I{·¨ÂɽûÇø}
--> J[ÉÌÒµÔËÓª]
--> K[Íæ¼Ò³äÖµ»ñÀû]
--> L[·¢²¼ÆÆ½â²¹¶¡]
🧩 µÚÒ»Õ£ºµ¥·þÀ©ÈÝÖÁÍòÈ˳ÐÔØ·½°¸
🔧 1.1 ·Ö²¼Ê½¼Ü¹¹¸ÄÔ죨԰æ½öÖ§³Ö500ÈËÔÚÏߣ©
ºËÐÄ˼·£º²ð·Ö gdeliveryd (Íø¹Ø) ºÍ gs (ÓÎÏ·Âß¼)
²¿ÊðÍØÆËʾÀý
Ö÷½Úµã£º Íø¹Ø·þÎñ(192.168.1.100)
©À©¤ µØÍ¼·þ1 (192.168.1.101) ¸ºÔØ[ºÓÑô³Ç]
©À©¤ µØÍ¼·þ2 (192.168.1.102) ¸ºÔØ[ÐÞÂÞ½ç]
©¸©¤ Êý¾Ý¿â(¶Áд·ÖÀë)
⚙️ 1.2 ¹Ø¼üÅäÖÃÐ޸ĵã
¿ç·þͨѶÐÒé´òͨ
gdeliveryd/gslist.conf Ôö¼Ó£º
[Server]
Type = 2 # 1=Ö÷Íø¹Ø 2=×ÓµØÍ¼·þ
GateIP = 192.168.1.100 # Ö÷Íø¹ØIP
ͬ²½Íæ¼Ò״̬Êý¾Ý
ÔÚ gamedbd ÖÐÆôÓù²ÏíÄڴ棺
// ÐÞ¸Ä gamedbd.cpp Ô¼ Line 237
#define SHM_MODE 0
#define SHM_MODE 1 // ÆôÓù²ÏíÄÚ´æ
🛡️ µÚ¶þÕ£º¶Ô¿¹¹Ù·½¼ì²âÒýÇæ£¨¸½ÌØÕ÷Â붨룩
🔍 2.1 ¹Ù·½¼ì²âÔÀí½âÆÊ
¹Ù·½Í¨¹ý¿Í»§¶ËºóÃÅÊÕ¼¯£º
½ø³ÌÌØÕ÷£ºwmhandle.exe ɨÃèÐéÄâ»ú½ø³Ì
ͨÐÅÐÒ飺УÑé·â°ü½á¹¹Æ«ÒÆÁ¿
×ÊԴУÑ飺¼ì²é element.data µÄMD5Öµ
🧪 2.2 ·´¼ì²âʵս·½°¸
¼ì²âÀàÐÍ ¶Ô¿¹ÊÖ¶Î ·çÏյȼ¶
½ø³ÌɨÃè ÖØÃüÃû vmware-vmx.exe → mysqld.exe ¡ï¡ï¡î¡î¡î
ÐÒéУÑé ·â°üÆ«ÒÆËæ»ú»¯ (¶¯Ì¬Hook¼¼Êõ) ¡ï¡ï¡ï¡ï¡î
ÎļþУÑé ½Ù³ÖCreateFile API ·µ»Ø¼ÙMD5 ¡ï¡ï¡ï¡î¡î
ÄÚ´æÌØÕ÷Âë XOR¼ÓÃܹؼüº¯Êý ¡ï¡ï¡ï¡ï¡ï
🔐 ·â°ü»ìÏýºËÐÄ´úÂ루C++ HookʾÀý£©
// ½Ù³Ö·¢Ëͺ¯Êý
DWORD WINAPI Hook_SendPacket(LPVOID lpParam) {
while(true) {
if((DWORD)(0x00FFAA10) == 0x8B55FF8B) { // ÌØÕ÷Â붨λ
BYTE pkt = (BYTE)(DWORD)(esp+0x8);
// »ìÏýÐÒéÍ·
pkt[0] ^= 0x3A;
pkt[3] = rand() % 256;
Sleep(10);
}
🛠 µÚÈýÕ£ºÄ§¸ÄÉñÆ÷ÖÆ×÷——´ÓÈëÃŵ½ÈëÍÁ
🧰 3.1 ELÎļþ±à¼Æ÷Éî¶ÈÓ÷¨
¸Ä×°±¸ÊôÐÔÈý²½·¨£º
½âѹ elements.data → Óà EL Editor ´ò¿ª
¶¨Î»×°±¸ID (ÈçÕ¶Áú½£=11007)
ÐÞ¸ÄÊôÐÔ×ֶΣº
Physical_Min = 9999 → Îï¹¥
HP_Max = 20000 → ÆøÑª
⚠️ ÊýÖµ±ÀÀ£±Ü¿ÓÖ¸ÄÏ
ÖÂÃü´íÎó£ºÖ±½Ó¸Ä999999»áµ¼Ö·â°üÒç³ö£¡
✅ ÕýÈ··½°¸£ºÍ¬²½µ÷Õû¿Í»§¶ËÏÔʾãÐÖµ
-- ÐÞ¸Ä element\scripts\ui\equipinfo.lua
function GetAtkLimit()
return 20000 -- Ô°æÎª10000
end
🔧 3.2 »ã±à¼¶Ä§¸Ä£¨Ë²ÒÆ/Î޵У©
Ë²ÒÆ¼¼ÄÜHOOKλÖãº
0078D120: E8 5B 32 11 00 call GameBase+0x103780 (×ø±ê¼ÆËã)
ÐÞ¸ÄΪ¹Ì¶¨×ø±ê£º
mov dword [ebp-14h], 0x45EFF000 ; X=7850.0
mov dword [ebp-10h], 0x456C8000 ; Y=4820.0
ret 14h
💎 µÚËÄÕ£ºÊý¾Ý¿âÖÕ¼«ÓÅ»¯·½°¸
📈 4.1 Íæ¼ÒÊôÐÔ¿â²ð·Ö²ßÂÔ
Ô°æ½á¹¹È±ÏÝ£º
tbl_character ±í°üº¬ 120+ ×Ö¶Î
×ֶθüÐÂËø±í → ¸ß²¢·¢Ê±ËÀËø
¸ÄÔì·½°¸£º
CREATE TABLE char_basic ( -- »ù´¡±í
charid INT PRIMARY KEY,
name VARCHAR(32),
level INT
);
CREATE TABLE char_combat ( -- Õ½¶·ÊôÐÔ
charid INT,
atk BIGINT,
def BIGINT,
INDEX(charid)
);
4.2 ¶ÁдÐÔÄÜÌáÉý300%µÄÃØ¾÷
my.cnf ¹Ø¼ü²ÎÊý
innodb_flush_log_at_trx_commit = 2
innodb_buffer_pool_size = 8G # ÄÚ´æ70%
query_cache_type = 1
thread_cache_size = 256
✅ ÍòÈËͬ·þ³ÐÔØ·½°¸£ºµ¥»ú→·Ö²¼Ê½¼Ü¹¹¸ÄÔì
⚙️ ·´¹Ù·½¼ì²âÒýÇæÔÀí£º7ÖÖÌØÕ÷Âëαװ¼¼Êõ
🔥 ¶¨ÖÆ»¯Ä§¸ÄºËÐļ¼ÇÉ£º´ÓEL±à¼Æ÷µ½»ã±àHOOK
¨…Íò×Ö¾¯¸æ£¨·¨ÂÉÓëµÀµÂ±ß½ç£©
ÒÔϼ¼Êõ½öÏÞѧϰ½»Á÷
⚠️ ʵ¼Ê²¿ÊðÔËÓªÉæÏÓ£º
Öø×÷ȨÇÖȨ£¨Ô´´úÂë/×ÊÔ´Îļþ¸´ÖÆ£©
²»Õýµ±¾ºÕù£¨·ÖÁ÷¹Ù·½Íæ¼Ò£©
ÐÌÊ·çÏÕ£¨·Ç·¨¾Óª×Á¿ÐÌ3-7Ä꣩
graph LR
A[¼¼ÊõÑо¿] --> B[ÐÞ¸ÄÓÎÏ·ÄÚ´æ]
--> C[ÐÒé·ÖÎö]
--> D[©¶´ÍÚ¾ò]
--> E[¸öÈ˲âÊÔ]
--> F[ÍøÂçÐÒéѧϰ]
--> G[°²È«·À»¤ÌáÉý]
--> H(ºÏ·¨)
--> H
--> H
--> I{·¨ÂɽûÇø}
--> J[ÉÌÒµÔËÓª]
--> K[Íæ¼Ò³äÖµ»ñÀû]
--> L[·¢²¼ÆÆ½â²¹¶¡]
🧩 µÚÒ»Õ£ºµ¥·þÀ©ÈÝÖÁÍòÈ˳ÐÔØ·½°¸
🔧 1.1 ·Ö²¼Ê½¼Ü¹¹¸ÄÔ죨԰æ½öÖ§³Ö500ÈËÔÚÏߣ©
ºËÐÄ˼·£º²ð·Ö gdeliveryd (Íø¹Ø) ºÍ gs (ÓÎÏ·Âß¼)
²¿ÊðÍØÆËʾÀý
Ö÷½Úµã£º Íø¹Ø·þÎñ(192.168.1.100)
©À©¤ µØÍ¼·þ1 (192.168.1.101) ¸ºÔØ[ºÓÑô³Ç]
©À©¤ µØÍ¼·þ2 (192.168.1.102) ¸ºÔØ[ÐÞÂÞ½ç]
©¸©¤ Êý¾Ý¿â(¶Áд·ÖÀë)
⚙️ 1.2 ¹Ø¼üÅäÖÃÐ޸ĵã
¿ç·þͨѶÐÒé´òͨ
gdeliveryd/gslist.conf Ôö¼Ó£º
[Server]
Type = 2 # 1=Ö÷Íø¹Ø 2=×ÓµØÍ¼·þ
GateIP = 192.168.1.100 # Ö÷Íø¹ØIP
ͬ²½Íæ¼Ò״̬Êý¾Ý
ÔÚ gamedbd ÖÐÆôÓù²ÏíÄڴ棺
// ÐÞ¸Ä gamedbd.cpp Ô¼ Line 237
#define SHM_MODE 0
#define SHM_MODE 1 // ÆôÓù²ÏíÄÚ´æ
🛡️ µÚ¶þÕ£º¶Ô¿¹¹Ù·½¼ì²âÒýÇæ£¨¸½ÌØÕ÷Â붨룩
🔍 2.1 ¹Ù·½¼ì²âÔÀí½âÆÊ
¹Ù·½Í¨¹ý¿Í»§¶ËºóÃÅÊÕ¼¯£º
½ø³ÌÌØÕ÷£ºwmhandle.exe ɨÃèÐéÄâ»ú½ø³Ì
ͨÐÅÐÒ飺УÑé·â°ü½á¹¹Æ«ÒÆÁ¿
×ÊԴУÑ飺¼ì²é element.data µÄMD5Öµ
🧪 2.2 ·´¼ì²âʵս·½°¸
¼ì²âÀàÐÍ ¶Ô¿¹ÊÖ¶Î ·çÏյȼ¶
½ø³ÌɨÃè ÖØÃüÃû vmware-vmx.exe → mysqld.exe ¡ï¡ï¡î¡î¡î
ÐÒéУÑé ·â°üÆ«ÒÆËæ»ú»¯ (¶¯Ì¬Hook¼¼Êõ) ¡ï¡ï¡ï¡ï¡î
ÎļþУÑé ½Ù³ÖCreateFile API ·µ»Ø¼ÙMD5 ¡ï¡ï¡ï¡î¡î
ÄÚ´æÌØÕ÷Âë XOR¼ÓÃܹؼüº¯Êý ¡ï¡ï¡ï¡ï¡ï
🔐 ·â°ü»ìÏýºËÐÄ´úÂ루C++ HookʾÀý£©
// ½Ù³Ö·¢Ëͺ¯Êý
DWORD WINAPI Hook_SendPacket(LPVOID lpParam) {
while(true) {
if((DWORD)(0x00FFAA10) == 0x8B55FF8B) { // ÌØÕ÷Â붨λ
BYTE pkt = (BYTE)(DWORD)(esp+0x8);
// »ìÏýÐÒéÍ·
pkt[0] ^= 0x3A;
pkt[3] = rand() % 256;
Sleep(10);
}
🛠 µÚÈýÕ£ºÄ§¸ÄÉñÆ÷ÖÆ×÷——´ÓÈëÃŵ½ÈëÍÁ
🧰 3.1 ELÎļþ±à¼Æ÷Éî¶ÈÓ÷¨
¸Ä×°±¸ÊôÐÔÈý²½·¨£º
½âѹ elements.data → Óà EL Editor ´ò¿ª
¶¨Î»×°±¸ID (ÈçÕ¶Áú½£=11007)
ÐÞ¸ÄÊôÐÔ×ֶΣº
Physical_Min = 9999 → Îï¹¥
HP_Max = 20000 → ÆøÑª
⚠️ ÊýÖµ±ÀÀ£±Ü¿ÓÖ¸ÄÏ
ÖÂÃü´íÎó£ºÖ±½Ó¸Ä999999»áµ¼Ö·â°üÒç³ö£¡
✅ ÕýÈ··½°¸£ºÍ¬²½µ÷Õû¿Í»§¶ËÏÔʾãÐÖµ
-- ÐÞ¸Ä element\scripts\ui\equipinfo.lua
function GetAtkLimit()
return 20000 -- Ô°æÎª10000
end
🔧 3.2 »ã±à¼¶Ä§¸Ä£¨Ë²ÒÆ/Î޵У©
Ë²ÒÆ¼¼ÄÜHOOKλÖãº
0078D120: E8 5B 32 11 00 call GameBase+0x103780 (×ø±ê¼ÆËã)
ÐÞ¸ÄΪ¹Ì¶¨×ø±ê£º
mov dword [ebp-14h], 0x45EFF000 ; X=7850.0
mov dword [ebp-10h], 0x456C8000 ; Y=4820.0
ret 14h
💎 µÚËÄÕ£ºÊý¾Ý¿âÖÕ¼«ÓÅ»¯·½°¸
📈 4.1 Íæ¼ÒÊôÐÔ¿â²ð·Ö²ßÂÔ
Ô°æ½á¹¹È±ÏÝ£º
tbl_character ±í°üº¬ 120+ ×Ö¶Î
×ֶθüÐÂËø±í → ¸ß²¢·¢Ê±ËÀËø
¸ÄÔì·½°¸£º
CREATE TABLE char_basic ( -- »ù´¡±í
charid INT PRIMARY KEY,
name VARCHAR(32),
level INT
);
CREATE TABLE char_combat ( -- Õ½¶·ÊôÐÔ
charid INT,
atk BIGINT,
def BIGINT,
INDEX(charid)
);
4.2 ¶ÁдÐÔÄÜÌáÉý300%µÄÃØ¾÷
my.cnf ¹Ø¼ü²ÎÊý
innodb_flush_log_at_trx_commit = 2
innodb_buffer_pool_size = 8G # ÄÚ´æ70%
query_cache_type = 1
thread_cache_size = 256

