呃,寒假闲来无事,本来安排好的目标也懒得看了,百般无聊之下于是玩起了网游(偶第一次玩网游)~~。。
那啥,发现这个游戏的玩家的等级都是挂上去的,放假前我们班的同学都玩这个游戏,并且好多都买了外挂,看我淘宝的消费记录:
那啥,好不容易收的压岁钱不能买外挂呀,于是,破解之。。
外挂使用:
1:要求外挂账号与你的游戏账号必须是一样的,否则无法登陆,密码无所谓。
2:新用户有两天的免费使用期
ok,对外挂抓包,发现与服务器交流使用的chunked 协议:
11 0.0.0.0:3753 222.73.225.182:80 151 Send
20000 47 45 54 20 2F 6C 6F 67 69 6E 2E 70 68 70 3F 6D GET /login.php?m
30010 3D 31 26 75 3D 63 64 63 64 63 64 26 70 3D 63 64 =1&u=cdcdcd&p=cd
40020 63 64 63 64 26 6B 3D 37 38 38 39 35 37 34 34 20 cdcd&k=78895744
50030 48 54 54 50 2F 31 2E 31 0D 0A 55 73 65 72 2D 41 HTTP/1.1..User-A
60040 67 65 6E 74 3A 20 4D 69 63 72 6F 73 6F 66 74 20 gent: Microsoft
70050 49 6E 74 65 72 6E 65 74 20 45 78 70 6C 6F 72 65 Internet Explore
80060 72 0D 0A 48 6F 73 74 3A 20 6C 6F 67 69 6E 2E 77 r..Host: login.w
90070 6C 71 78 32 77 67 2E 63 6F 6D 0D 0A 43 61 63 68 lqx2wg.com..Cach
100080 65 2D 43 6F 6E 74 72 6F 6C 3A 20 6E 6F 2D 63 61 e-Control: no-ca
110090 63 68 65 0D 0A 0D 0A che.
12
132 222.73.225.182:80 0.0.0.0:3753 293 Recv
140000 48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D HTTP/1.1 200 OK.
150010 0A 44 61 74 65 3A 20 57 65 64 2C 20 31 31 20 46 .Date: Wed, 11 F
160020 65 62 20 32 30 30 39 20 30 38 3A 34 35 3A 33 30 eb 2009 08:45:30
170030 20 47 4D 54 0D 0A 53 65 72 76 65 72 3A 20 41 70 GMT..Server: Ap
180040 61 63 68 65 2F 32 0D 0A 58 2D 50 6F 77 65 72 65 ache/2..X-Powere
190050 64 2D 42 79 3A 20 50 48 50 2F 35 2E 32 2E 36 0D d-By: PHP/5.2.6.
200060 0A 63 61 63 68 65 2D 63 6F 6E 74 72 6F 6C 3A 20 .cache-control:
210070 6E 6F 2D 63 61 63 68 65 0D 0A 56 61 72 79 3A 20 no-cache..Vary:
220080 41 63 63 65 70 74 2D 45 6E 63 6F 64 69 6E 67 2C Accept-Encoding,
230090 55 73 65 72 2D 41 67 65 6E 74 0D 0A 54 72 61 6E User-Agent..Tran
2400A0 73 66 65 72 2D 45 6E 63 6F 64 69 6E 67 3A 20 63 sfer-Encoding: c
2500B0 68 75 6E 6B 65 64 0D 0A 43 6F 6E 74 65 6E 74 2D hunked..Content-
2600C0 54 79 70 65 3A 20 74 65 78 74 2F 68 74 6D 6C 0D Type: text/html.
2700D0 0A 0D 0A 34 63 0D 0A 41 53 69 31 78 38 4B 38 73 4c..ASi1x8K8s
2800E0 38 6D 35 70 69 34 67 43 72 57 39 78 74 72 4B 73 8m5pi4gCrW9xtrKs
2900F0 62 7A 6B 4F 69 41 79 4D 44 41 35 4C 54 41 79 4C bzkOiAyMDA5LTAyL
300100 54 45 7A 49 44 45 32 4F 6A 51 30 4F 6A 4D 30 30 TEzIDE2OjQ0OjM00
310110 39 6A 47 39 4B 41 44 4C 46 67 6D 42 65 47 47 78 9jG9KADLFgmBeGGx
320120 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掉游戏,登陆,
点登录,看看出来啦不:
然后免费挂机吧。。。