1
0
mirror of https://github.com/Rogiel/l2jserver2 synced 2025-12-10 09:22:49 +00:00

Fixed cryptography issue preventing connection to the game

Signed-off-by: Rogiel <rogiel@rogiel.com>
This commit is contained in:
2011-05-17 23:03:47 -03:00
parent 8b5a601ea4
commit 230e28a775
18 changed files with 44 additions and 43 deletions

View File

@@ -16,6 +16,8 @@
*/
package com.l2jserver.game.net;
import java.util.Arrays;
/**
* Manages the cryptography key used to write/read packets. This class also
* updates the key once data has been sent/received.
@@ -77,6 +79,6 @@ public class Lineage2CryptographyKey {
}
public Lineage2CryptographyKey copy() {
return new Lineage2CryptographyKey(key);
return new Lineage2CryptographyKey(Arrays.copyOf(key, key.length));
}
}

View File

@@ -54,12 +54,12 @@ public class Lineage2Encrypter extends OneToOneEncoder {
final int offset = buffer.readerIndex() + 2; // skip header
final int size = buffer.readableBytes() - 2;
int temp = 0;
int temp = 0, temp2 = 0;
synchronized (key) {
for (int i = 0; i < size; i++) {
int temp2 = buffer.getByte(offset + i) & 0xFF;
buffer.setByte(offset + i, (byte) (temp2 ^ key.get(i) ^ temp));
temp = temp2;
temp2 = buffer.getByte(offset + i) & 0xFF;
temp = temp2 ^ key.get(i) ^ temp;
buffer.setByte(offset + i, (byte) temp);
}
key.update(size);
}

View File

@@ -61,10 +61,10 @@ public class Lineage2PacketWriter extends OneToOneEncoder {
final ChannelBuffer buffer = ChannelBuffers.dynamicBuffer(
ByteOrder.LITTLE_ENDIAN, 10);
final ServerPacket packet = (ServerPacket) msg;
buffer.writeShort(0x0000);
buffer.writeShort(0);
buffer.writeByte(packet.getOpcode()); // packet opcode
packet.write(null, buffer);
packet.write(connection, buffer);
log.debug("Writing message {}", ChannelBuffers.hexDump(buffer));
return buffer;

View File

@@ -25,7 +25,7 @@ import com.l2jserver.db.dao.CharacterDAO;
import com.l2jserver.game.net.Lineage2Connection;
import com.l2jserver.game.net.Lineage2Session;
import com.l2jserver.game.net.packet.AbstractClientPacket;
import com.l2jserver.game.net.packet.server.CharacterEnterWorldPacket;
import com.l2jserver.game.net.packet.server.CharacterSelectionListPacket;
import com.l2jserver.model.id.AccountID;
import com.l2jserver.model.id.factory.AccountIDFactory;
import com.l2jserver.model.world.L2Character;
@@ -86,10 +86,10 @@ public class AuthLoginPacket extends AbstractClientPacket {
loginKey1, loginKey2));
final List<L2Character> chars = characterDao.selectByAccount(accountId);
// conn.write(CharacterSelectionListPacket.fromL2Session(
// conn.getSession(), chars.toArray(new L2Character[0])));
conn.setCharacterID(chars.get(0).getID());
conn.write(new CharacterEnterWorldPacket(chars.get(0), playKey1));
conn.write(CharacterSelectionListPacket.fromL2Session(
conn.getSession(), chars.get(0)));
// conn.setCharacterID(chars.get(0).getID());
// conn.write(new CharacterEnterWorldPacket(chars.get(0), playKey1));
}
/**

View File

@@ -48,7 +48,6 @@ import com.l2jserver.game.net.Lineage2Session;
import com.l2jserver.game.net.packet.AbstractServerPacket;
import com.l2jserver.model.world.Item;
import com.l2jserver.model.world.L2Character;
import com.l2jserver.model.world.actor.ActorExperience;
import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll;
import com.l2jserver.util.BufferUtils;
@@ -100,7 +99,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
// Can prevent players from creating new characters (if 0);
// if 1 the client will ask if chars may be created
// (RequestCharacterTemplatesPacket) Response: (CharacterTemplatePacket)
buffer.writeInt(0x07); // max chars
buffer.writeInt(7); // max chars
buffer.writeByte(0x00);
// int i = 0;
@@ -116,7 +115,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
// }
buffer.writeInt(0x00); // ??
buffer.writeInt(0x01); // sex
buffer.writeInt(character.getSex().option); // sex
buffer.writeInt(character.getRace().id); // race
// if (character.getClassId() == character.getBaseClassId())
@@ -125,7 +124,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
// else
// buffer.writeInt(character.getBaseClassId());
buffer.writeInt(0x01); // active ??
buffer.writeInt(1); // active ??
buffer.writeInt(-71338); // x
buffer.writeInt(258271); // y
@@ -134,9 +133,9 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
buffer.writeDouble(20); // hp cur
buffer.writeDouble(20); // mp cur
buffer.writeInt(0x00); // sp
buffer.writeLong(ActorExperience.LEVEL_1.experience); // exp
buffer.writeInt(ActorExperience.LEVEL_1.level); // level
buffer.writeInt(320); // sp
buffer.writeLong(4640); // exp
buffer.writeInt(5); // level
buffer.writeInt(0x00); // karma
buffer.writeInt(0x00); // pk
@@ -181,10 +180,10 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
// hair style
// buffer.writeInt(character.getAppearance().getHairStyle().option);
buffer.writeInt(0x02);
buffer.writeInt(0x00);
// hair color
// buffer.writeInt(character.getAppearance().getHairColor().option);
buffer.writeInt(0x03);
buffer.writeInt(0x00);
// face
// buffer.writeInt(character.getAppearance().getFace().option);
buffer.writeInt(0x00);
@@ -194,7 +193,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
buffer.writeInt(0x0); // seconds left before delete
buffer.writeInt(character.getCharacterClass().id); // class
buffer.writeInt(0x01); // c3 auto-select char
buffer.writeInt(1); // c3 auto-select char
buffer.writeByte(0x00); // enchant effect