📄 sendpacket.c
字号:
#include "sendpacket.h"
#include "globle.h"
#include "md5.h"
#include "blog.h"
int SendFindServerPacket(struct interface_data *thisint)
{
int retval;
static uint8_t broadPackage[0x3E8]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x01,
0x00,0x00,0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x38,0x30,0x32,
0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x1F,0x00,
0x00,0x00,0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22,
0x92,0x68,0x64,0x66,0x92,0x94,0x62,0x66,0x91,0x93,0x95,0x62,0x93,0x93,0x91,0x94,
0x64,0x61,0x64,0x64,0x65,0x66,0x68,0x94,0x98,0xA7,0x61,0x67,0x65,0x67,0x9C,0x6B};
uint8_t StandardAddr[] = {0x01,0x80,0xC2,0x00,0x00,0x03};
memcpy(broadPackage,StandardAddr,6);
memcpy(broadPackage+6,thisint->source_mac,6);
printf("searching for server...");
retval = sendto(thisint->sockInt,broadPackage,0x3E8,0,
(struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
if(retval<=0)
{
printf("couldn't send find-server-frame");
}
return retval;
}
int SendNamePacket(struct interface_data *thisint,const u_char *pkt_data)
{
static uint8_t ackPackage[0x3E8]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x00,
0x00,0x0D,0x02,0x01,0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,0x2E,
0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int namelen;
int retval;
namelen=strlen(thisint->username);
memcpy(ackPackage,thisint->dest_mac,6);
memcpy(ackPackage+6,thisint->source_mac,6);
ackPackage[0x12]=0x02;
ackPackage[0x13]=pkt_data[0x13];
ackPackage[22]=pkt_data[22];
*(short *)(ackPackage+0x10)=ntohs((short)(5+namelen));
*(short *)(ackPackage+0x14)=*(short *)(ackPackage+0x10);
memcpy(ackPackage+0x17,thisint->username,namelen);
printf("sending user name...");
retval=sendto(thisint->sockInt,ackPackage,0x3E8,0,
(struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
if(retval<=0)
{
printf("couldn't send username-frame");
}
return retval;
}
int SendPasswordPacket(struct interface_data *thisint,const u_char *pkt_data)
{
static uint8_t ackPackage[0x3E8]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x00,
0x00,0x0D,0x02,0x01,0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,0x2E,
0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char *md5dig;
int retval;
int md5len=0;
unsigned char md5data[256];
int namelen,passwordlen;
namelen = strlen(thisint->username);
passwordlen = strlen(thisint->password);
memcpy(ackPackage,thisint->dest_mac,6);
memcpy(ackPackage+6,thisint->source_mac,6);
ackPackage[0x12]=0x02; //code,2代表应答
ackPackage[0x13]=pkt_data[0x13]; //id
*(ackPackage+0x16)=*(pkt_data+0x16); //type,即应答方式,HERE should alway be 4
*(short *)(ackPackage+0x10)=htons((short)(22+namelen)); //len
*(short *)(ackPackage+0x14)=*(short*)(ackPackage+0x10);
md5data[md5len++]=ackPackage[0x13]; //ID
memcpy(md5data+md5len,thisint->password,passwordlen);
md5len+=passwordlen;//密码
memcpy(md5data+md5len,pkt_data+0x18,pkt_data[0x17]);
md5len+=pkt_data[0x17];//密钥
md5dig=ComputeHash(md5data,md5len);
ackPackage[0x17]=16; //length of md5sum is always 16.
memcpy(ackPackage+0x18,md5dig,16);
memcpy(ackPackage+0x28,thisint->username,namelen);
printf("sending password...");
retval=sendto(thisint->sockInt,ackPackage,0x3E8,0,
(struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
if(retval<=0)
{
printf("couldn't send password-frame");
}
return retval;
}
int SendEchoPacket(struct interface_data *thisint,const u_char *pkt_data)
{
static uint8_t echoPackage[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0xBF,
0x00,0x1E,0xFF,0xFF,0x37,0x77,0x7F,0x9F,0xF7,0xFF,0x00,0x00,0xFF,0xFF,0x37,0x77,
0x7F,0x9F,0xF7,0xFF,0x00,0x00,0xFF,0xFF,0x37,0x77,0x7F,0x3F,0xFF};
ULONG_BYTEARRAY uCrypt1,uCrypt2,uCrypt1_After,uCrypt2_After;
extern ULONG_BYTEARRAY m_serialNo;
extern ULONG_BYTEARRAY m_key;
int retval;
m_serialNo.ulValue++;
//m_serialNo is initialized at the beginning of main() of mystar.c, and
//m_key is initialized in mystar.c when the 1st Authentication-Success packet is received.
uCrypt1.ulValue=m_key.ulValue+m_serialNo.ulValue;
uCrypt2.ulValue=m_serialNo.ulValue;
memcpy(echoPackage,thisint->dest_mac,6);
memcpy(echoPackage+6,thisint->source_mac,6);
uCrypt1_After.ulValue = htonl( uCrypt1.ulValue );
uCrypt2_After.ulValue = htonl( uCrypt2.ulValue );
echoPackage[0x18] = Alog(uCrypt1_After.btValue[0]);
echoPackage[0x19] = Alog(uCrypt1_After.btValue[1]);
echoPackage[0x1a] = Alog(uCrypt1_After.btValue[2]);
echoPackage[0x1b] = Alog(uCrypt1_After.btValue[3]);
echoPackage[0x22] = Alog(uCrypt2_After.btValue[0]);
echoPackage[0x23] = Alog(uCrypt2_After.btValue[1]);
echoPackage[0x24] = Alog(uCrypt2_After.btValue[2]);
echoPackage[0x25] = Alog(uCrypt2_After.btValue[3]);
retval=sendto(thisint->sockInt,echoPackage,0x2d,0,
(struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
if(retval<=0)
{
printf("couldn't send echo-frame");
}
return retval;
}
int SendEndCertPacket(struct interface_data *thisint)
{
static uint8_t exitPacket[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x02,
0x00,0x00,0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x38,0x30,0x32,
0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x1F,0x00,
0x00,0x01,0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22,
0x64,0x91,0x60,0x60,0x65,0x65,0x69,0x61,0x64,0x64,0x94,0x93,0x91,0x92,0x96,0x65,
0x95,0x64,0x68,0x91,0x62,0x68,0x62,0x94,0x9A,0xD6,0x94,0x68,0x66,0x69,0x6C,0x65};
int retval;
memcpy(exitPacket,thisint->dest_mac,6);
memcpy(exitPacket+6,thisint->source_mac,6);
printf("logoff sending...");
retval=sendto(thisint->sockInt,exitPacket,0x80,0,
(struct sockaddr *)&thisint->sll,sizeof(thisint->sll));
if(retval<=0)
{
printf("couldn't send logoff-frame");
}
return retval;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -