Назад

Странно-суровый антибот

Автор: Renegade: Дата: 06.22.2010

Этот скрипт попал мне от моего бывшего товарища, админа одного из извесных серверов. (имена и названия не называются по понятным причинам). Было сказано что это отличный антибот купленный за 600 баксов, и в паблике его нет, мне его выдали под чесное слово не выкладывать в паблик. Но после некоторых событий данные друг другу обещания потеряли силу, посиму выкладываю его сдесь. Также хотел бы знающих парней проанализировать скрипт и обьяснить, я так и не смог понять что именно он делает. Именно механизм работы.




//добавить
struct CEncrypt {
char key[32];
char *m_text;
int m_packet_length;
};


struct CEncrypt pro;

void Invert(struct CEncrypt * pro);
void Rotate(struct CEncrypt * pro,int a,int b, int times);
int Decrypt(struct CEncrypt * pro);
void OneStepDecrypt(struct CEncrypt * pro,int n_a, int n_b, int n_c, char key);
void DecryptBlock(struct CEncrypt * pro,int n_start, int n_end);
//void OneStepCrypt(int n_a,char key);
void SetPacketLength(struct CEncrypt * pro,int m_Length);
void SetKey(struct CEncrypt * pro,char * n_key);

void Invert(struct CEncrypt * pro)
{
int i;
for(i=0;im_packet_length;i++){
pro->m_text^=124;
}
}
void Rotate(struct CEncrypt * pro,int a,int b, int times)
{
unsigned int buf;
if(times!=0 && times!=16){
unsigned char str_a=pro->m_text[a];
unsigned char str_b=pro->m_text;
unsigned int z=str_a*256+str_b;
z=z&65535;
buf=z >>16-times;
z=z< z=z&65535;
z+=buf;
pro->m_text[a]=(z&65280) >> 8;
pro->m_text=z-pro->m_text[a]*256;
}
}
void DecryptBlock(struct CEncrypt * pro,int n_start, int n_end){
int j,k;
if(n_end-n_start >1){
int n_depth=0;
if(n_end-n_start+1 < 10){
n_depth=6;
}else{
n_depth=2;
}
for(j=0;j OneStepDecrypt(pro,n_end,n_start,n_start+1,pro->key[(n_end-n_start)%32]);
OneStepDecrypt(pro,n_end-1,n_end,n_start,pro->key[(n_end-n_start-1)%32]);
for(k=n_end-2;k>n_start-1;k--){
OneStepDecrypt(pro,k,k+1,k+2,pro->key[(k-n_start)%32]);
}
}
}

}
void GetCFI(int a, char * H, char * L){
*H=a/0x100;
*L=a-*H*0x100;
}
void GetIFC(unsigned int * a,unsigned char H,unsigned char L){
*a=H*0x100+L;
}
#define KEY0 12//xor keys
#define KEY1 5
int Decrypt(struct CEncrypt * pro)
{
int start=0,end=0;
while(end < pro->m_packet_length ){
unsigned int leng;

GetIFC(&leng,pro->m_text[start]^pro->key[KEY0]^pro->m_text[start+2],pro->m_text[start+1]^pro->key[KEY1]^pro->m_text[start+3]);
if(leng > 1){
end=leng+start;
if(end < pro->m_packet_length){

DecryptBlock(pro,start+2,end+1);
pro->m_text[start]=0x83;
pro->m_text[start+1]=0x83;
start=end+2;

}else{
break;
}
}else{
return 0;
}
}
Invert(pro);
return pro->m_packet_length;
}
void OneStepDecrypt(struct CEncrypt * pro,int n_a, int n_b, int n_c, char key)
{
int n_sdvig;
pro->m_text[n_c]^=key;
n_sdvig=pro->m_text[n_c] & 7;
Rotate(pro,n_a,n_b,16-n_sdvig);
}
void SetPacketLength(struct CEncrypt * pro,int m_Length)
{
pro->m_packet_length=m_Length;
}
void SetKey(struct CEncrypt * pro,char * n_key){
int i;
for(i=0;i<32;i++){
pro->key=*(n_key+i);
}
}
void SetKeyK(struct CEncrypt * pro, char n_key[32]){
int i;
for(i=0;i<32;i++){
pro->key=n_key;
}
}

//заменить
int recv_to_fifo(int fd)
{
int len;

if( !session_isActive(fd) )
return -1;

len = sRecv(fd, (char *) session[fd]->rdata + session[fd]->rdata_size, (int)RFIFOSPACE(fd), 0);

if( len == SOCKET_ERROR )
{//An exception has occured
if( sErrno != S_EWOULDBLOCK ) {
//ShowDebug("recv_to_fifo: code %d, closing connection #%d\n", sErrno, fd);
set_eof(fd);
}
return 0;
}

if( len == 0 )
{//Normal connection end.
set_eof(fd);
return 0;
}

if(session[fd]->client_addr!=2130706433)//127.0.0.1
{
// Filtring from decrypt server-side local data. Also 55-bytes len packet aren't get dectypting
SetKey(&pro,"ABDDEEGGHIJKLMNOQQRSTUVWYZabcdef");//Static key for block crypt.
pro.m_text=session[fd]->rdata+session[fd]->rdata_size;
pro.m_packet_length = len;
if(Decrypt(&pro)==0){
session[fd]->rdata_size += len;
session[fd]->rdata_tick = last_tick;
set_eof(fd);
return 0;
}

}

session[fd]->rdata_size += len;
session[fd]->rdata_tick = last_tick;
return 0;
}

Автор: Renegade: Дата: 06.22.2010

антибот не скриптовый. Сорцы.

Автор: Kill Spirit: Дата: 06.22.2010

Куда его вставлять?)))

Автор: Rectedo: Дата: 06.22.2010

да впринцыпе в любую часть, относящююся к мап серверу (как я думаю...)

Автор: Kill Spirit: Дата: 06.22.2010

Куда именно? просто хочу чтобы без ошибок рекомпил. была

Автор: Rectedo: Дата: 06.22.2010

еще по идее нужно вписать кое что в логин сервер.

Автор: MiRoTVoReZ: Дата: 06.23.2010

Эммм, map? О_о