-Eski clientlar için kitap paketleri tekrar düzenlendi.
Süpersiniz Xantier bu işi başlatarak türkiye'de ultima online'a büyük katkıda bulunacaksın.
Yardımları bulunan herkesi tebrik ediyorum.
Master
59.2997
Yükseltelimde göz önünden kaybolmasın.
bu gece de bulletin board paketlerini halledeyim sonra baya bi araştırma yapacam encryption hakkında, eğer işler iyice karmaşıklaşıp çözülmeyecek hal alırsa encryption olayını rafa kaldıracam bir süre
iyi gidiyorsun valla tebrikler
spherecrypt.ini olayını çözdüm, cliver, key1, key2, enctype kısmından key1, key2 olayını. sanırım uo login ve game olarak iki farklı encryption kullanıyor. login kısmı kolay, o iki key üzerine şifreleniyor ama game kısmı twofish ve blowfish denen algoritmalar kullanıyor. game kısmının tek ama tek çözümü sphereserver sourcelarının içinde, sanırım bendeki sourcelar yetiyor ama hayli karmaşık.

bu arada şu senelerdir client yaparken hex olarak değiştirdiğimiz "dsp" kısmı game encryptionun şifresi sanırım.
gelişme var mı?
dediğim gibi login kısmı kolay ama game packet işi makarna gibi. tam bir mental işkence, encryptionla bir süre uğraşmayacam veya beynini yakmak isteyen birine sphere sourcelarını vereyim iyice incelesin. şu ana kadar anladığım tek şey orada bir key ve seedin olduğu ve buna göre şifrelendiği. ama alt üst etmeme rağmen gönderilen paketlerin nerde şifrelendiği, gelenlerin ise nerede açıldığı meçhul. tam o kısma bakıyorum, sadece compress var gönderilen şeyin boyutu düşük olsun diye. compressin uzantısına bakıyorum cryptle alakalı birşey yok. yandı beyin.
Adept
4.3
Az önce biraz inceledim. Aradigin sey cSocket.cpp icersinde bulunan asagidaki fonksiyon olmali veya en azindan burdan devam edebilirsin. Ben daha fazla incelemedim cünkü. Bir bakiver.


UI32 DoPack( UI08 *pIn, UI08 *pOut, int len )
{
	UI32 packedLength	= 0;
	int bitByte			= 0;
	int nrBits;
	UI32 value;

	while( len-- )
	{
		nrBits	= bit_table[*pIn][0];
		value	= bit_table[*pIn++][1];

		while( nrBits-- )
		{
			pOut[packedLength] = static_cast<UI08>((pOut[packedLength] << 1) | (UI08)((value >> nrBits) & 0x1));

			bitByte = (bitByte + 1) & 0x07;
			if( !bitByte )
				++packedLength;
		}
	}

	nrBits	= bit_table[256][0];
	value	= bit_table[256][1];

	while( nrBits-- )
	{
		pOut[packedLength] = static_cast<UI08>((pOut[packedLength] << 1) | (UI08)((value >> nrBits) & 0x1));

		bitByte = (bitByte + 1) & 0x07;
		if( !bitByte )
			++packedLength;
	}

	if( bitByte )
	{
		while( bitByte < 8 )
		{
			pOut[packedLength] <<= 1;
			++bitByte;
		}
		++packedLength;
	}
	return packedLength;
}

NOT: UOX ile herhangi bir tecrübem yok, o nedenle sadece asagi yukari tahminden ibaret. Kesin bir sey söylemek icin, sistemin tamamini birkac gün incelemek gerekir heralde.
hmm sanırım compress olayı bütün emulatörler için geçerli. ama encryption sadece sphere'a özel, onun dışındakiler ise razor, uorice gibi encryption kıran programlarla bağlanmak zorunda.
Adept
4.3
Aynen öyle. UOX ile ilgili zaten söyle denmis:

guide.uox3.org:
- Support for All UO Client types/versions above version 2.0.0 that has had encryption removed.

Bir de su dökümani buldum, Encryption olaylarini yazarken ise yarayabilir:

https://necrotoolz.sourceforge.net/kairpacketguide/encryption.htm
evet bu dökümanı biliyorum, bu adamlar da loginden sonrasını yapamamış. game encryption baya farklı
sphere 2 taraflı encryption kullanır. login ve game olarak. ikisi birbirinden ayrıdır.

game encryption için

compress işlemi, sphere client'e daima compress ederek yollar huffman algoritması, clientde kullanılmasına gerek yoktur.
client 2.0.0 dan 2.0.3 kadar blowfish + twofish kullanır.
bu versiyonlardan üstü twofish+md5 olarak şifrelenir.
seedler oyun socketidir ilk bağlantıda alınır... 4 bytes uzunluğunda olur. hexadecimal'dir.

clientkey'leri zaten spherecrypt.ini de yazar. doğal olarak bu değerlere ulaşmanız için. öncelikle clientin socketine hook atıp socketi kendi algoritmanıza yönlendirmeniz gerekir. seed, game socketinin değeri olduğundan integer değerdedir. tanımlanırken pointer'mış gibi tanımlanır (0x01050406, $h01050406, $01050406)... seed yanlış olursa crypt işlemi başlamaz client hata raporu verir...

blowfish seed değeri almaz. twofish alır. gelen paketler okunup önce decrypt yapılır. twofish+blowfish olarak, encrypt için tam tersi yapılması lazım önce blowfish sonra twofish olarak..

2.0.3 üstü clientlerde twofish seed değeri atanır. encryption ve decryption işlemleri sabittir. encrypt ettiğin kısmı aynı yöntemle geri çevirebilirsin. 2.0.3 dahil altındaki clientlerde bu olay farklıdır. blowfish decrypt algoritmasına sahiptir, blowfishdecrypt ve blowfishencrypt olarak. diğer tüm algoritmalar tek taraflı olarak hem encrypt hem decrypt yapabilir.
aynen pyramidin dediği gibi.

ayrıca seed genelde kişinin ipsi oluyor. login olurken, login paketinden de önce 4 bytelık bir seed yollanıyor bu ya local ip ya da normal ip oluyor bu seede göre işlemler oluyor. ayrıca evet login işlemi en kolayı. ama sonrası zulüm. bir de dediğin gibi twofishin encyption ve decryptionu aynı fonksiyonla oluyor ama blowfish için ayrı ayrı. ben biraz daha kurcalayayım çok zorlama olursa bırakırım sonuçta türkiye'de insanlar default client yerine hep değiştirilmiş client kullanıyor, bir zahmet yapımcı kolayca encryptionu yok edebilir.
Xantier : bir zahmet yapımcı kolayca encryptionu yok edebilir.

game veya login encryption'ı zaten tüm clientlerde iptal edilebiliyo. game crypt'ın iptal edilmesi demek istenilen paketin sorgusuz sualsiz yollanması demek. sphere taraflı fix atılmaz ise dupe'den tut aklına gelebilecek her paketi manuel olarak yollamaya açık olması demektir.. buda dupeden tutup aklına gelebilecek herşeyi yapmaya tam yetki demektir.



Üye Ol veya Giriş Yap

Bu forum başlığına mesaj atmak istiyorsanız hemen üye olun veya giriş yapın.