//---------------------------------------------------------------------------
#pragma hdrstop
#include <tchar.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
#include "stdio.h"
#include <winsock2.h>
#include <memory.h>
//---------------------------------------------------------------------------
#pragma argsused
int GetPacket(SOCKET s,char * response,char id1,char id2)
{
int logsends=0;
char pktlen[2]; // 蛭罄綑 頡� 褕閑�
for ( ; ; )
{
Sleep(100);
memset(pktlen,0,2);
memset(response,0,1024);
recv( s, pktlen, 2, 0 ); // 影蜴慟擭 頡骯鞣靦 2 菴瞄� 溫慚� 鋒蒸錶
recv( s, response, (((pktlen[1]*256)+pktlen[0])-2), 0 ); // 頜慟粳 溫慚� 鋒蒸錶 憂皚� 2 菴瞄�
// printf("%02X%02X ", pktlen[0],pktlen[1]);
for (int i = 0; i < (((pktlen[1]*256)+pktlen[0])-2); i++) {
// printf("%02X", (unsigned char)response[i]);
// if(i >= 1) {
// printf(" ");
// }
}
// printf("\r\n");
logsends++;
if(logsends == 40) {
// 縛摑蜻� 憧蝶� 獗頜琵慣贛贖 鋒蒸錙�. 順錨溘�
Sleep(9000);
printf("Too many error packets from login server\r\n");
closesocket( s ); // 頑蜥權琯� 縝蒸�
WSACleanup(); // 滇慚摟廓鞅飾樽粳 wsa
return 1;
}
if((response[0]== id1)&&(response[1]== id2)) return 0;
}
}
//---------------------------------------------------------------------------
void error (char const * str, ...) {
printf ("ERR: %s\n",str);
exit (0);
}
//---------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
//char userlogin[]="invkora25";
//char userpasswd[]="vskjcrjg";
//char servernum=8;
if (argc!=4)
error ("Please use: %s servernumber userlogin userpasswd",argv[1]);
char * userlogin;
char * userpasswd;
char servernum= {0};
int serv;
serv=atoi(argv[1]);
servernum=(unsigned char)serv;
userlogin=argv[2];
userpasswd=argv[3];
printf("RF Console Loader v.0.0.3f. RuOff BSB 24.02.2010 up (c)kotopes from ingamelab.net\r\n\r\n");
printf("Server: %d, Login: %s\r\n",serv,userlogin);
char response[1024]; // 蛭罄綑 頡� 褕閑�
char pktlen[2]; // 蛭罄綑 頡� 褕閑�
sockaddr_in s_a;
WSADATA wd; // 羲樽蜘曖� WSADATA
WSAStartup( MAKEWORD( 2, 2 ), &wd ); // 慚摟廓鞅飾樽粳 wsa
SOCKET s = socket( AF_INET, SOCK_STREAM, 0 ); // 縝頌琯� 縝蒸�
if (s == INVALID_SOCKET) return 255; // 綁鞅 誕廖蒙 - 順錨�
s_a.sin_addr.s_addr = inet_addr( "95.129.248.139" ); // 甥震 篦撼綑�
s_a.sin_port = htons( 27780 ); // 頡暸 篦撼綑�
s_a.sin_family = AF_INET;
printf("Connecting to login server1 ");
if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) return 255; // SOCKET_ERROR - 獗隆髡蝸瘟 頡溺億鞣隨� � 篦擇閑樽
printf("OK\r\n");
printf("Send Cryptokey request ");
char request[5] ={0x05, 0x00, 0x15, 0x0C, 0x00};
Sleep(100);
send( s, request, 5, 0 ); // 頡縛痞� 頑頜褓
printf("- ");
if(GetPacket(s,response,0x15,0x0D)) return 255;
printf("OK\r\n");
char pluskey[1]={0x00},xorkey[1]={0x00};
char loginrequest[31]={ 0x1F, 0x00, 0x15, 0x03, 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};
//memset(pluskey,0x00,1);
//memset(xorkey,0x00,1);
pluskey[0] = (response[2]+1);
xorkey[0] = (response[3]+3);
printf("Pluskey: %02X , Xorkey: %02X \r\n",(unsigned char )pluskey[0],(unsigned char)xorkey[0]);
memcpy(loginrequest+4,userlogin,strlen(userlogin));
memcpy(loginrequest+17,userpasswd,strlen(userpasswd));
for (int i = 4; i < 30; i++) {
loginrequest[i]=(unsigned char)(((loginrequest[i]+ pluskey[0]) ^ xorkey[0]));
}
for (int i = 0; i < sizeof(loginrequest); i++) {
// printf("%02X", (unsigned char)loginrequest[i]);
// if(i == 1 || i >=3) {
// printf(" ");
// }
}
// printf("\r\n");
Sleep(9000);
//return 0;
printf("Send login and pass to login server ");
send( s, loginrequest, 31, 0 ); // 頡縛痞� 頑頜褓
printf("- ");
if(GetPacket(s,response,0x15,0x04)) return 255;
printf("OK\r\n");
// 綁鞅 擇僮鼻錶� 獗 頡餃詬鋼鼻磋� - 順錨溘�
if(response[2] > 0x00) {
printf("Error status from login server.(%d) Restart program again\r\n",response[2]);
Sleep(9000);
closesocket( s ); // 頑蜥權琯� 縝蒸�
WSACleanup(); // 滇慚摟廓鞅飾樽粳 wsa
return 1;
}
char AccountID[4];
char PremiumFlag[4];
AccountID[3]=response[3];
AccountID[2]=response[4];
AccountID[1]=response[5];
AccountID[0]=response[6];
PremiumFlag[3]=response[7];
PremiumFlag[2]=response[8];
PremiumFlag[1]=response[9];
PremiumFlag[0]=response[10];
printf("Send request servers list ");
char serverlistrequest[8] ={0x08, 0x00, 0x15, 0x05, 0x00, 0x00, 0x00, 0x00};
Sleep(100);
send( s, serverlistrequest, 8, 0 ); // 頡縛痞� 頑頜褓
printf("- ");
if(GetPacket(s,response,0x15,0x06)) return 255;
printf("OK\r\n");
int ns;
ns = (unsigned)response[5];
int logsends=6;
int s1,s2,idx;
char * servername;
for (int i = 0; i < (ns-1); i++) {
s1 = (unsigned)response[logsends];
s2 = (unsigned)response[logsends+1];
idx = logsends+2;
for ( ; ; ) {
if(response[idx] == 0x00) break;
servername += response[idx];
idx++;
}
idx++;
logsends=idx;
if(i == servernum) break;
servername="";
}
/*
switch(s1)
{
case 4:
servername += (char *)" []";
case 6:
servername += " []";
case 7:
servername += " []";
default:
servername += " [unknown]";
}
*/
//printf("Select server: %s\r\n",servername);
printf("Get servers statuses ");
if(GetPacket(s,response,0x15,0x42)) return 255;
if(GetPacket(s,response,0x15,0x43)) return 255;
printf("OK\r\n");
printf("Send session keys request ");
char sessionrequest[6] ={0x06, 0x00, 0x15, 0x07, 0x00, 0x00};
sessionrequest[4]=servernum;
Sleep(100);
send( s, sessionrequest, 6, 0 ); // 頡縛痞� 頑頜褓
printf("- ");
if(GetPacket(s,response,0x15,0x08)) return 255;
printf("OK\r\n");
char defaultsettings[55] = {0}; // DefaultSettings
// server ip XOR 0xCB9C4B3A
defaultsettings[0]=(unsigned char)((unsigned char)response[3] ^ 0x3A);
defaultsettings[1]=(unsigned char)((unsigned char)response[4] ^ 0x4B);
defaultsettings[2]=(unsigned char)((unsigned char)response[5] ^ 0x9C);
defaultsettings[3]=(unsigned char)((unsigned char)response[6] ^ 0xCB);
// server port XOR 0x4FB6
defaultsettings[4]=(unsigned char)((unsigned char)response[7] ^ 0xB6);
defaultsettings[5]=(unsigned char)((unsigned char)response[8] ^ 0x4F);
// user login
memcpy(defaultsettings+6,userlogin,strlen(userlogin));
// account id XOR 0x6E65E0AF
defaultsettings[19]=(unsigned char)((unsigned char)AccountID[3] ^ 0xAF);
defaultsettings[20]=(unsigned char)((unsigned char)AccountID[2] ^ 0xE0);
defaultsettings[21]=(unsigned char)((unsigned char)AccountID[1] ^ 0x65);
defaultsettings[22]=(unsigned char)((unsigned char)AccountID[0] ^ 0x6E);
// sessionkey0 XOR 0xCFCF22E6
defaultsettings[23]=(unsigned char)((unsigned char)response[9] ^ 0xE6);
defaultsettings[24]=(unsigned char)((unsigned char)response[10] ^ 0x22);
defaultsettings[25]=(unsigned char)((unsigned char)response[11] ^ 0xCF);
defaultsettings[26]=(unsigned char)((unsigned char)response[12] ^ 0xCF);
// sessionkey1 XOR 0x5BBCDE6F
defaultsettings[27]=(unsigned char)((unsigned char)response[13] ^ 0x6F);
defaultsettings[28]=(unsigned char)((unsigned char)response[14] ^ 0xDE);
defaultsettings[29]=(unsigned char)((unsigned char)response[15] ^ 0xBC);
defaultsettings[30]=(unsigned char)((unsigned char)response[16] ^ 0x5B);
// sessionkey2 XOR 0xACDF5EDA
defaultsettings[31]=(unsigned char)((unsigned char)response[17] ^ 0xDA);
defaultsettings[32]=(unsigned char)((unsigned char)response[18] ^ 0x5E);
defaultsettings[33]=(unsigned char)((unsigned char)response[19] ^ 0xDF);
defaultsettings[34]=(unsigned char)((unsigned char)response[20] ^ 0xAC);
// sessionkey3 XOR 0xBCCD1B37
defaultsettings[35]=(unsigned char)((unsigned char)response[21] ^ 0x37);
defaultsettings[36]=(unsigned char)((unsigned char)response[22] ^ 0x1B);
defa
RF_Console_runner.rar_launcher_launcher rf online_rf launcher_rf
版权申诉
195 浏览量
2022-09-22
22:10:45
上传
评论
收藏 23KB RAR 举报
weixin_42651887
- 粉丝: 79
- 资源: 1万+
最新资源
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
- python-leetcode面试题解之第170题两数之和III数据结构设计-题解.zip
- python-leetcode面试题解之第168题Excel表列名称-题解.zip
- python-leetcode面试题解之第167题两数之和II输入有序数组-题解.zip
- python-leetcode面试题解之第166题分数到小数-题解.zip
- python-leetcode面试题解之第165比较版本号-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈