呃,寒假闲来无事,本来安排好的目标也懒得看了,百般无聊之下于是玩起了网游(偶第一次玩网游)~~。。
那啥,发现这个游戏的玩家的等级都是挂上去的,放假前我们班的同学都玩这个游戏,并且好多都买了外挂,看我淘宝的消费记录:

那啥,好不容易收的压岁钱不能买外挂呀,于是,破解之。。
外挂使用:
1:要求外挂账号与你的游戏账号必须是一样的,否则无法登陆,密码无所谓。

2:新用户有两天的免费使用期

ok,对外挂抓包,发现与服务器交流使用的chunked 协议:
1
1 0.0.0.0:3753 222.73.225.182:80 151 Send
2
0000 47 45 54 20 2F 6C 6F 67 69 6E 2E 70 68 70 3F 6D GET /login.php?m
3
0010 3D 31 26 75 3D 63 64 63 64 63 64 26 70 3D 63 64 =1&u=cdcdcd&p=cd
4
0020 63 64 63 64 26 6B 3D 37 38 38 39 35 37 34 34 20 cdcd&k=78895744
5
0030 48 54 54 50 2F 31 2E 31 0D 0A 55 73 65 72 2D 41 HTTP/1.1..User-A
6
0040 67 65 6E 74 3A 20 4D 69 63 72 6F 73 6F 66 74 20 gent: Microsoft
7
0050 49 6E 74 65 72 6E 65 74 20 45 78 70 6C 6F 72 65 Internet Explore
8
0060 72 0D 0A 48 6F 73 74 3A 20 6C 6F 67 69 6E 2E 77 r..Host: login.w
9
0070 6C 71 78 32 77 67 2E 63 6F 6D 0D 0A 43 61 63 68 lqx2wg.com..Cach
10
0080 65 2D 43 6F 6E 74 72 6F 6C 3A 20 6E 6F 2D 63 61 e-Control: no-ca
11
0090 63 68 65 0D 0A 0D 0A che
.
12
13
2 222.73.225.182:80 0.0.0.0:3753 293 Recv
14
0000 48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D HTTP/1.1 200 OK.
15
0010 0A 44 61 74 65 3A 20 57 65 64 2C 20 31 31 20 46 .Date: Wed, 11 F
16
0020 65 62 20 32 30 30 39 20 30 38 3A 34 35 3A 33 30 eb 2009 08:45:30
17
0030 20 47 4D 54 0D 0A 53 65 72 76 65 72 3A 20 41 70 GMT..Server: Ap
18
0040 61 63 68 65 2F 32 0D 0A 58 2D 50 6F 77 65 72 65 ache/2..X-Powere
19
0050 64 2D 42 79 3A 20 50 48 50 2F 35 2E 32 2E 36 0D d-By: PHP/5.2.6.
20
0060 0A 63 61 63 68 65 2D 63 6F 6E 74 72 6F 6C 3A 20 .cache-control:
21
0070 6E 6F 2D 63 61 63 68 65 0D 0A 56 61 72 79 3A 20 no-cache..Vary:
22
0080 41 63 63 65 70 74 2D 45 6E 63 6F 64 69 6E 67 2C Accept-Encoding,
23
0090 55 73 65 72 2D 41 67 65 6E 74 0D 0A 54 72 61 6E User-Agent..Tran
24
00A0 73 66 65 72 2D 45 6E 63 6F 64 69 6E 67 3A 20 63 sfer-Encoding: c
25
00B0 68 75 6E 6B 65 64 0D 0A 43 6F 6E 74 65 6E 74 2D hunked..Content-
26
00C0 54 79 70 65 3A 20 74 65 78 74 2F 68 74 6D 6C 0D Type: text/html.
27
00D0 0A 0D 0A 34 63 0D 0A 41 53 69 31 78 38 4B 38 73
4c..ASi1x8K8s
28
00E0 38 6D 35 70 69 34 67 43 72 57 39 78 74 72 4B 73 8m5pi4gCrW9xtrKs
29
00F0 62 7A 6B 4F 69 41 79 4D 44 41 35 4C 54 41 79 4C bzkOiAyMDA5LTAyL
30
0100 54 45 7A 49 44 45 32 4F 6A 51 30 4F 6A 4D 30 30 TEzIDE2OjQ0OjM00
31
0110 39 6A 47 39 4B 41 44 4C 46 67 6D 42 65 47 47 78 9jG9KADLFgmBeGGx
32
0120 6D 6A 37 0D 0A mj7..
33
没错,加过密的...迷糊...
PEiD 一下 ,加壳了:

偶非得不反汇编,不解密,不破坏原程序破解它。
既然外挂不解密,不反汇编是行不了,那么破解游戏吧。。
正常启动游戏,登陆,并抓包:

没错,加密了,咋法? 咱也不费脑子解密了,拿来主义吧。
ok,拿来C++,写代码:

static char PACKET[] =
{

0x30, 0x80, 0xD3, 0xC5, 0xC5, 0xC2, 0xAD, 0xAA, 0xB7, 0xAB, 0xB1,
0xA8, 0x00, 0xC6, 0xAD, 0xA5, 0xA9, 0xA6, 0xA5, 0xBD, 0xA1, 0xAD, 0xAA
};


int WINAPI MySend( SOCKET s , const char * buff , int len , int flags )
{
//自定义函数,用来Hook 系统的send函数

const char * pbuff = buff;
char * tmp = NULL;
int rtn , length = len;

printf("\n[DLL] Send:< %s >" , buff );


if( len >= 2 && ( buff[0] == (char)0x30 && buff[1] == (char)0x80 ) )
{
printf("\n[DLL] INFO: filter expired , take place of it ");


if( packets == 0 )
{
pbuff = PACKET ;
length = sizeof( PACKET);
memcpy( data , buff , 15 );

}else if( memcmp( buff , data , 15 ) == 0 )
{
pbuff = PACKET ;
length = sizeof( PACKET );
packets = 0;
}


/**//*}else if( buff[0] == 0x06 && buff[1] == 0xB2 ){
pbuff = PACKET2;
length = sizeof( PACKET2 );*/

}else
{

if( buff[0] == 0x80 )
{
length = len + 1;

}else
{
length = len + 2;
}

tmp = new char[ length ];
tmp[0] = 0x30;
tmp[1] = 0x80;
memcpy( &tmp[ length -len ] , buff , len );
pbuff = tmp ;
}
UnHookApi( &info );

if( pbuff[2] == 0x06 && pbuff[3] == 0xB2 )
{
pbuff = PACKET2;
length = sizeof( PACKET2 );
}
rtn = send( s , pbuff ,length , flags);
HookApi( &info );
packets ++ ;

if( tmp )
{
delete [] tmp ;
tmp == NULL;
}
return rtn;
}

编译成DLL 注入到 游戏中, 当游戏第一次发送登陆包时( 0x30 0x80 开头),把它替换成包含正确用户名密码的数据包。
哈哈,用cdcdcd(随便的新用户)登陆外挂,并启动游戏,Hook掉游戏,登陆,


点登录,看看出来啦不:

然后免费挂机吧。。。