1
0
mirror of https://github.com/Rogiel/l2jserver2 synced 2025-12-06 07:32:46 +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

@@ -29,7 +29,7 @@ import com.l2jserver.db.dao.mysql5.MySQL5ItemDAO;
*
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public class DAOModuleMySQL5 extends AbstractModule {
public class MySQL5DAOModule extends AbstractModule {
@Override
protected void configure() {
bind(CharacterDAO.class).to(MySQL5CharacterDAO.class).in(

View File

@@ -18,7 +18,7 @@ package com.l2jserver;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.l2jserver.db.dao.DAOModuleMySQL5;
import com.l2jserver.db.dao.MySQL5DAOModule;
import com.l2jserver.model.id.factory.IDFactoryModule;
import com.l2jserver.service.ServiceModule;
@@ -32,6 +32,6 @@ public class GameServerModule extends AbstractModule {
protected void configure() {
install(new ServiceModule());
install(new IDFactoryModule());
install(new DAOModuleMySQL5());
install(new MySQL5DAOModule());
}
}

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

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.model.world.actor;
package com.l2jserver.model.world.actor.event;
import com.l2jserver.model.world.capability.Actor;
import com.l2jserver.service.game.world.event.WorldEvent;

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.model.world.actor;
package com.l2jserver.model.world.actor.event;
import com.l2jserver.model.world.capability.Actor;
import com.l2jserver.service.game.world.event.WorldListener;

View File

@@ -19,9 +19,9 @@ package com.l2jserver.model.world.capability;
import com.l2jserver.model.id.object.ActorID;
import com.l2jserver.model.world.AbstractObject;
import com.l2jserver.model.world.actor.ActorEffects;
import com.l2jserver.model.world.actor.ActorEvent;
import com.l2jserver.model.world.actor.ActorListener;
import com.l2jserver.model.world.actor.ActorSkillContainer;
import com.l2jserver.model.world.actor.event.ActorEvent;
import com.l2jserver.model.world.actor.event.ActorListener;
/**
* Defines an {@link AbstractObject} that defines an Actor (NPC, player, pet,

View File

@@ -17,7 +17,7 @@
package com.l2jserver.model.world.player.event;
import com.l2jserver.model.world.Player;
import com.l2jserver.model.world.actor.ActorEvent;
import com.l2jserver.model.world.actor.event.ActorEvent;
/**
* Base event for {@link Player} objects

View File

@@ -16,8 +16,8 @@
*/
package com.l2jserver.model.world.player.event;
import com.l2jserver.model.world.actor.ActorEvent;
import com.l2jserver.model.world.actor.ActorListener;
import com.l2jserver.model.world.actor.event.ActorEvent;
import com.l2jserver.model.world.actor.event.ActorListener;
import com.l2jserver.service.game.world.event.WorldEvent;
import com.l2jserver.service.game.world.event.WorldListener;

View File

@@ -24,5 +24,5 @@ import com.l2jserver.service.Service;
* @author <a href="http://www.rogiel.com">Rogiel</a>
*/
public interface GMService extends Service {
}

View File

@@ -58,6 +58,6 @@ public class BufferUtils {
buffer.writeChar(str.charAt(i));
}
}
buffer.writeChar('\000');
buffer.writeShort(0);
}
}

View File

@@ -23,7 +23,7 @@ import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.l2jserver.db.dao.DAOModuleMySQL5;
import com.l2jserver.db.dao.MySQL5DAOModule;
import com.l2jserver.model.id.ID;
import com.l2jserver.model.id.object.CharacterID;
import com.l2jserver.model.id.object.factory.CharacterIDFactory;
@@ -36,7 +36,7 @@ import com.l2jserver.service.game.template.TemplateService;
public class IDFactoryTest {
private final Injector injector = Guice.createInjector(new ServiceModule(),
new DAOModuleMySQL5(), new IDFactoryModule());
new MySQL5DAOModule(), new IDFactoryModule());
private final CharacterIDFactory charIdFactory = injector
.getInstance(CharacterIDFactory.class);

View File

@@ -24,7 +24,7 @@ import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.l2jserver.db.dao.CharacterFriendDAO;
import com.l2jserver.db.dao.DAOModuleMySQL5;
import com.l2jserver.db.dao.MySQL5DAOModule;
import com.l2jserver.model.id.factory.IDFactoryModule;
import com.l2jserver.model.id.object.CharacterID;
import com.l2jserver.model.id.object.factory.CharacterIDFactory;
@@ -37,7 +37,7 @@ import com.l2jserver.service.game.template.TemplateService;
public class CharacterFriendListTest {
private final Injector injector = Guice.createInjector(new ServiceModule(),
new DAOModuleMySQL5(), new IDFactoryModule());
new MySQL5DAOModule(), new IDFactoryModule());
private final CharacterIDFactory charIdFactory = injector
.getInstance(CharacterIDFactory.class);

View File

@@ -22,7 +22,7 @@ import script.template.item.AdenaItemTemplate;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.l2jserver.db.dao.DAOModuleMySQL5;
import com.l2jserver.db.dao.MySQL5DAOModule;
import com.l2jserver.model.id.factory.IDFactoryModule;
import com.l2jserver.model.id.template.factory.ItemTemplateIDFactory;
import com.l2jserver.service.ServiceModule;
@@ -30,7 +30,7 @@ import com.l2jserver.service.ServiceStartException;
public class StaticTemplateServiceTest {
private final Injector injector = Guice.createInjector(new ServiceModule(),
new IDFactoryModule(), new DAOModuleMySQL5());
new IDFactoryModule(), new MySQL5DAOModule());
private final TemplateService service = injector
.getInstance(TemplateService.class);
private final ItemTemplateIDFactory factory = injector

View File

@@ -27,7 +27,7 @@ import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Scopes;
import com.l2jserver.db.dao.DAOModuleMySQL5;
import com.l2jserver.db.dao.MySQL5DAOModule;
import com.l2jserver.model.id.factory.IDFactoryModule;
import com.l2jserver.model.id.object.factory.CharacterIDFactory;
import com.l2jserver.model.id.object.factory.ItemIDFactory;
@@ -56,7 +56,7 @@ public class WorldEventDispatcherImplTest {
@Before
public void tearUp() throws ServiceStartException {
Injector injector = Guice.createInjector(new ServiceModule(),
new DAOModuleMySQL5(), new IDFactoryModule(),
new MySQL5DAOModule(), new IDFactoryModule(),
new AbstractModule() {
@Override
protected void configure() {