Zabezpieczenie pluginu na ip – kodowanie stringów

Ostatnio przypomniał mi się start poradnik o zabezpieczaniu pluginu na ip i łamaniu tego zabezpieczenia http://darkgl.pl/index.php/2012/12/29/zabezpieczanie-pluginu-na-ip-nic-prostszego-do-zlamania/ pomyślałem aby sposób nieco utrudnić.

Najpierw kod samego sprawdzania ip:

#include <amxmodx>

new const serverIP[] = "5.9.89.100:27176";

public plugin_init() {
	
	register_plugin("nazwa", "1.0", "autor");
	
	new szIp[ 33 ];
	get_user_ip( 0, szIp, charsmax( szIp ) );
	
	if( !equal( szIp , serverIP ) ){
		server_print("IP nieprawidlowe");
		set_fail_state("Plugin nie dziala na tym serwerze.");
	}
	
	server_print("IP prawidlowe");
}

Prosty prawda ? Ale drzemie w nim moc , możemy go znacznie skomplikować poprzez get_pcvar/set_pcvar oraz zakodowanie stringów. To drugiej dalej w wpisie ;).

Kodowanie stringów
Początkowy kod:

#include <amxmodx>

new const serverIP[] = "5.9.89.100:27176";

public plugin_init() {
	
	register_plugin("nazwa", "1.0", "autor");
	
	new szIp[ 33 ];
	get_user_ip( 0, szIp, charsmax( szIp ) );
	
	if( !equal( szIp , serverIP ) ){
		server_print("IP nieprawidlowe");
		set_fail_state("Plugin nie dziala na tym serwerze.");
	}
	
	server_print("IP prawidlowe");
}

Przeniesienie stringa do zmiennych:

#include <amxmodx>

public plugin_init() {
	
	register_plugin("nazwa", "1.0", "autor");
        
        new serverIP[] = "5.9.89.100:27176";	

	new szIp[ 33 ];
	get_user_ip( 0, szIp, charsmax( szIp ) );
	
	if( !equal( szIp , serverIP ) ){
		server_print("IP nieprawidlowe");
		set_fail_state("Plugin nie dziala na tym serwerze.");
	}
	
	server_print("IP prawidlowe");
}

Rozbicie na litery:

new serverIP[ 22 ];
serverIP[ 1 ] = '1';
serverIP[ 2 ] = '4';
serverIP[ 3 ] = '4';
serverIP[ 4 ] = '.';
serverIP[ 5 ] = '7';
serverIP[ 6 ] = '6';
serverIP[ 7 ] = '.';
serverIP[ 8 ] = '1';
serverIP[ 9 ] = '1';
serverIP[ 10 ] = '0';
serverIP[ 11 ] = '.';
serverIP[ 12 ] = '2';
serverIP[ 13 ] = '3';
serverIP[ 14 ] = '1';
serverIP[ 15 ] = ':';
serverIP[ 16 ] = '2';
serverIP[ 17 ] = '7';
serverIP[ 18 ] = '0';
serverIP[ 19 ] = '1';
serverIP[ 20 ] = '5';
serverIP[ 21 ] = '^0';

Zmiana na integer i dodanie + 10

new serverIP[ 22 ];
serverIP[ 1 ] = 0x3B;
serverIP[ 2 ] = 0x3E;
serverIP[ 3 ] = 0x3E;
serverIP[ 4 ] = 0x38;
serverIP[ 5 ] = 0x41;
serverIP[ 6 ] = 0x40;
serverIP[ 7 ] = 0x38;
serverIP[ 8 ] = 0x3B;
serverIP[ 9 ] = 0x3B;
serverIP[ 10 ] = 0x3A;
serverIP[ 11 ] = 0x38;
serverIP[ 12 ] = 0x3C;
serverIP[ 13 ] = 0x3D;
serverIP[ 14 ] = 0x3B;
serverIP[ 15 ] = 0x44;
serverIP[ 16 ] = 0x3C;
serverIP[ 17 ] = 0x41;
serverIP[ 18 ] = 0x3A;
serverIP[ 19 ] = 0x3B;
serverIP[ 20 ] = 0x3F;
serverIP[ 21 ] = 0x0A;

Dekodowanie w locie:

new serverIP[ 22 ];
serverIP[ 1 ] = 0x3B;
serverIP[ 2 ] = 0x3E;
serverIP[ 3 ] = 0x3E;
serverIP[ 4 ] = 0x38;
serverIP[ 5 ] = 0x41;
serverIP[ 6 ] = 0x40;
serverIP[ 7 ] = 0x38;
serverIP[ 8 ] = 0x3B;
serverIP[ 9 ] = 0x3B;
serverIP[ 10 ] = 0x3A;
serverIP[ 11 ] = 0x38;
serverIP[ 12 ] = 0x3C;
serverIP[ 13 ] = 0x3D;
serverIP[ 14 ] = 0x3B;
serverIP[ 15 ] = 0x44;
serverIP[ 16 ] = 0x3C;
serverIP[ 17 ] = 0x41;
serverIP[ 18 ] = 0x3A;
serverIP[ 19 ] = 0x3B;
serverIP[ 20 ] = 0x3F;
serverIP[ 21 ] = 0x0A;

for( new iPosition = 0 ; iPosition < sizeof( serverIP ); iPosition++ ){
    serverIP[ iPosition ] -= 0x0A;
}

Całość

#include <amxmodx>

public plugin_init() {
	
	register_plugin("nazwa", "1.0", "autor");
	
	new szIp[ 33 ];
	get_user_ip( 0, szIp, charsmax( szIp ) );

	new serverIP[ 22 ];
	serverIP[ 1 ] = 0x3B;
	serverIP[ 2 ] = 0x3E;
	serverIP[ 3 ] = 0x3E;
	serverIP[ 4 ] = 0x38;
	serverIP[ 5 ] = 0x41;
	serverIP[ 6 ] = 0x40;
	serverIP[ 7 ] = 0x38;
	serverIP[ 8 ] = 0x3B;
	serverIP[ 9 ] = 0x3B;
	serverIP[ 10 ] = 0x3A;
	serverIP[ 11 ] = 0x38;
	serverIP[ 12 ] = 0x3C;
	serverIP[ 13 ] = 0x3D;
	serverIP[ 14 ] = 0x3B;
	serverIP[ 15 ] = 0x44;
	serverIP[ 16 ] = 0x3C;
	serverIP[ 17 ] = 0x41;
	serverIP[ 18 ] = 0x3A;
	serverIP[ 19 ] = 0x3B;
	serverIP[ 20 ] = 0x3F;
	serverIP[ 21 ] = 0x0A;

	for( new iPosition = 0 ; iPosition < sizeof( serverIP ); iPosition++ ){
		serverIP[ iPosition ] -= 0x0A;
	}
	
	if( !equal( szIp , serverIP ) ){
		server_print("IP nieprawidlowe");
		set_fail_state("Plugin nie dziala na tym serwerze.");
	}
	
	server_print("IP prawidlowe");
}

6 komentarzy o “Zabezpieczenie pluginu na ip – kodowanie stringów

  1. Nie można by było zrobić coś takiego, że sprawdza czy pierwszy znak ip to „x” za pomocą stringu, następny za pomocą liczby, następny za pomocą np liczba * 152 = „y”. Myśle że to by znacznie utrudniło złamanie takiego zabezpieczenia.

Dodaj komentarz