reznyaa 0 Опубликовано 23 марта, 2014 Здравствуйте. Имеется сборка на l2jfrozen, а так же исходники, на данной сборке работает дюп через логин (два активных окна). В шаре есть фикс но я не могу его прикрутить из за отсутствия знаний java. Кому не сложно можете помочь?. После моих проделок не получается скомпилировать То что нужно заменить в LoginServerThread.java То что нужно заменить в AuthLogin.java /** This program is free software: you can redistribute it and/or modify it under* the terms of the GNU General Public License as published by the Free Software* Foundation, either version 3 of the License, or (at your option) any later* version.** This program is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more* details.** You should have received a copy of the GNU General Public License along with* this program. If not, see <http://www.gnu.org/licenses/>.*/package com.l2jfrozen.gameserver.network.clientpackets;import java.util.logging.Logger;import com.l2jfrozen.Config;import com.l2jfrozen.gameserver.network.L2GameClient;import com.l2jfrozen.gameserver.thread.LoginServerThread;import com.l2jfrozen.gameserver.thread.LoginServerThread.SessionKey;public final class AuthLogin extends L2GameClientPacket{private static Logger _log = Logger.getLogger(AuthLogin.class.getName());// loginName + keys must match what the loginserver used.private String _loginName;private int _playKey1;private int _playKey2;private int _loginKey1;private int _loginKey2;@Overrideprotected void readImpl(){_loginName = readS().toLowerCase();_playKey2 = readD();_playKey1 = readD();_loginKey1 = readD();_loginKey2 = readD();}@Overrideprotected void runImpl(){SessionKey key = new SessionKey(_loginKey1, _loginKey2, _playKey1, _playKey2);if (Config.DEBUG)_log.info("DEBUG "+getType()+": user: " + _loginName + " key:" + key);L2GameClient client = getClient();// avoid potential exploitsif (client.getAccountName() == null){client.setAccountName(_loginName);LoginServerThread.getInstance().addGameServerLogin(_loginName, client);LoginServerThread.getInstance().addWaitingClientAndSendRequest(_loginName, client, key);}}@Overridepublic String getType(){return "[C] 08 AuthLogin";}} /** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2, or (at your option)* any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA* 02111-1307, USA.** http://www.gnu.org/copyleft/gpl.html*/package com.l2jfrozen.gameserver.thread;import java.io.BufferedOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.math.BigInteger;import java.net.Socket;import java.net.UnknownHostException;import java.security.GeneralSecurityException;import java.security.KeyFactory;import java.security.interfaces.RSAPublicKey;import java.security.spec.RSAKeyGenParameterSpec;import java.security.spec.RSAPublicKeySpec;import java.util.List;import java.util.Map;import java.util.logging.Logger;import javolution.util.FastList;import javolution.util.FastMap;import com.l2jfrozen.Config;import com.l2jfrozen.crypt.NewCrypt;import com.l2jfrozen.gameserver.GameServer;import com.l2jfrozen.gameserver.controllers.GameTimeController;import com.l2jfrozen.gameserver.model.L2World;import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;import com.l2jfrozen.gameserver.network.L2GameClient;import com.l2jfrozen.gameserver.network.L2GameClient.GameClientState;import com.l2jfrozen.gameserver.network.gameserverpackets.AuthRequest;import com.l2jfrozen.gameserver.network.gameserverpackets.BlowFishKey;import com.l2jfrozen.gameserver.network.gameserverpackets.ChangeAccessLevel;import com.l2jfrozen.gameserver.network.gameserverpackets.GameServerBasePacket;import com.l2jfrozen.gameserver.network.gameserverpackets.PlayerAuthRequest;import com.l2jfrozen.gameserver.network.gameserverpackets.PlayerInGame;import com.l2jfrozen.gameserver.network.gameserverpackets.PlayerLogout;import com.l2jfrozen.gameserver.network.gameserverpackets.ServerStatus;import com.l2jfrozen.gameserver.network.loginserverpackets.AuthResponse;import com.l2jfrozen.gameserver.network.loginserverpackets.InitLS;import com.l2jfrozen.gameserver.network.loginserverpackets.KickPlayer;import com.l2jfrozen.gameserver.network.loginserverpackets.LoginServerFail;import com.l2jfrozen.gameserver.network.loginserverpackets.PlayerAuthResponse;import com.l2jfrozen.gameserver.network.serverpackets.AuthLoginFail;import com.l2jfrozen.gameserver.network.serverpackets.CharSelectInfo;import com.l2jfrozen.util.Util;import com.l2jfrozen.util.random.Rnd;public class LoginServerThread extends Thread{protected static final Logger _log = Logger.getLogger(LoginServerThread.class.getName());/** The LoginServerThread singleton */private static LoginServerThread _instance;private static final int REVISION = 0x0102;private RSAPublicKey _publicKey;private String _hostname;private int _port;private int _gamePort;private Socket _loginSocket;private InputStream _in;private OutputStream _out;/*** The BlowFish engine used to encrypt packets<br>* It is first initialized with a unified key:<br>* "_;v.]05-31!|+-%xT!^[$\00"<br>* <br>* and then after handshake, with a new key sent by<br>* loginserver during the handshake. This new key is stored<br>* in {@link #_blowfishKey}*/private NewCrypt _blowfish;private byte[] _blowfishKey;private byte[] _hexID;private boolean _acceptAlternate;private int _requestID;private int _serverID;private boolean _reserveHost;private int _maxPlayer;private List<WaitingClient> _waitingClients;private Map<String, L2GameClient> _accountsInGameServer;private int _status;private String _serverName;private String _gameExternalHost;private String _gameInternalHost;public LoginServerThread(){super("LoginServerThread");_port = Config.GAME_SERVER_LOGIN_PORT;_gamePort = Config.PORT_GAME;_hostname = Config.GAME_SERVER_LOGIN_HOST;_hexID = Config.HEX_ID;if(_hexID == null){_requestID = Config.REQUEST_ID;_hexID = generateHex(16);}else{_requestID = Config.SERVER_ID;}_acceptAlternate = Config.ACCEPT_ALTERNATE_ID;_reserveHost = Config.RESERVE_HOST_ON_LOGIN;_gameExternalHost = Config.EXTERNAL_HOSTNAME;_gameInternalHost = Config.INTERNAL_HOSTNAME;_waitingClients = new FastList<WaitingClient>();_accountsInGameServer = new FastMap<String, L2GameClient>().shared();_maxPlayer = Config.MAXIMUM_ONLINE_USERS;}public static LoginServerThread getInstance(){if(_instance == null){_instance = new LoginServerThread();}return _instance;}@Overridepublic void run(){while(!_interrupted){int lengthHi = 0;int lengthLo = 0;int length = 0;boolean checksumOk = false;try{// Connection_log.info("Connecting to login on " + _hostname + ":" + _port);_loginSocket = new Socket(_hostname, _port);_in = _loginSocket.getInputStream();if(_out != null) synchronized (_out) //avoids tow threads writing in the mean time { _out = new BufferedOutputStream(_loginSocket.getOutputStream()); }else _out = new BufferedOutputStream(_loginSocket.getOutputStream());//init Blowfish_blowfishKey = generateHex(40);_blowfish = new NewCrypt("_;v.]05-31!|+-%xT!^[$\00");while(!_interrupted){ lengthLo = _in.read(); lengthHi = _in.read(); length = lengthHi * 256 + lengthLo; if(lengthHi < 0) { _log.finer("LoginServerThread: Login terminated the connection."); break; } byte[] incoming = new byte[length]; incoming[0] = (byte) lengthLo; incoming[1] = (byte) lengthHi; int receivedBytes = 0; int newBytes = 0; while(newBytes != -1 && receivedBytes < length - 2) { newBytes = _in.read(incoming, 2, length - 2); receivedBytes = receivedBytes + newBytes; } if(receivedBytes != length - 2) { _log.warning("Incomplete Packet is sent to the server, closing connection.(LS)"); break; } byte[] decrypt = new byte[length - 2]; System.arraycopy(incoming, 2, decrypt, 0, decrypt.length); // decrypt if we have a key decrypt = _blowfish.decrypt(decrypt); checksumOk = NewCrypt.verifyChecksum(decrypt); if(!checksumOk) { _log.warning("Incorrect packet checksum, ignoring packet (LS)"); break; } if(Config.DEBUG) { _log.warning("[C]\n" + Util.printData(decrypt)); } int packetType = decrypt[0] & 0xff; switch(packetType) { case 00: InitLS init = new InitLS(decrypt); if(Config.DEBUG) { _log.info("Init received"); } if(init.getRevision() != REVISION) { //TODO: revision mismatch _log.warning("/!\\ Revision mismatch between LS and GS /!\\"); break; } try { KeyFactory kfac = KeyFactory.getInstance("RSA"); BigInteger modulus = new BigInteger(init.getRSAKey()); RSAPublicKeySpec kspec1 = new RSAPublicKeySpec(modulus, RSAKeyGenParameterSpec.F4); _publicKey = (RSAPublicKey) kfac.generatePublic(kspec1); if(Config.DEBUG) { _log.info("RSA key set up"); } } catch(GeneralSecurityException e) { if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); _log.warning("Troubles while init the public key send by login"); break; } //send the blowfish key through the rsa encryption BlowFishKey bfk = new BlowFishKey(_blowfishKey, _publicKey); sendPacket(bfk); if(Config.DEBUG) { _log.info("Sent new blowfish key"); } //now, only accept paket with the new encryption _blowfish = new NewCrypt(_blowfishKey); if(Config.DEBUG) { _log.info("Changed blowfish key"); } AuthRequest ar = new AuthRequest(_requestID, _acceptAlternate, _hexID, _gameExternalHost, _gameInternalHost, _gamePort, _reserveHost, _maxPlayer); sendPacket(ar); if(Config.DEBUG) { _log.info("Sent AuthRequest to login"); } break; case 01: LoginServerFail lsf = new LoginServerFail(decrypt); _log.info("Damn! Registeration Failed: " + lsf.getReasonString()); // login will close the connection here break; case 02: AuthResponse aresp = new AuthResponse(decrypt); _serverID = aresp.getServerId(); _serverName = aresp.getServerName(); Config.saveHexid(_serverID, hexToString(_hexID)); _log.info("Registered on login as Server " + _serverID + " : " + _serverName); ServerStatus st = new ServerStatus(); if(Config.SERVER_LIST_BRACKET) { st.addAttribute(ServerStatus.SERVER_LIST_SQUARE_BRACKET, ServerStatus.ON); } else { st.addAttribute(ServerStatus.SERVER_LIST_SQUARE_BRACKET, ServerStatus.OFF); } if(Config.SERVER_LIST_CLOCK) { st.addAttribute(ServerStatus.SERVER_LIST_CLOCK, ServerStatus.ON); } else { st.addAttribute(ServerStatus.SERVER_LIST_CLOCK, ServerStatus.OFF); } if(Config.SERVER_LIST_TESTSERVER) { st.addAttribute(ServerStatus.TEST_SERVER, ServerStatus.ON); } else { st.addAttribute(ServerStatus.TEST_SERVER, ServerStatus.OFF); } if(Config.SERVER_GMONLY) { st.addAttribute(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_GM_ONLY); } else { st.addAttribute(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_AUTO); } sendPacket(st); if(L2World.getAllPlayersCount() > 0) { FastList<String> playerList = new FastList<String>(); for(L2PcInstance player : L2World.getInstance().getAllPlayers()) { playerList.add(player.getAccountName()); } PlayerInGame pig = new PlayerInGame(playerList); sendPacket(pig); } break; case 03: PlayerAuthResponse par = new PlayerAuthResponse(decrypt); String account = par.getAccount(); WaitingClient wcToRemove = null; synchronized (_waitingClients) { for(WaitingClient wc : _waitingClients) { if(wc.account.equals(account)) { wcToRemove = wc; } } } if(wcToRemove != null) { if(par.isAuthed()) { if(Config.DEBUG) { _log.info("Login accepted player " + wcToRemove.account + " waited(" + (GameTimeController.getGameTicks() - wcToRemove.timestamp) + "ms)"); } PlayerInGame pig = new PlayerInGame(par.getAccount()); sendPacket(pig); pig = null; wcToRemove.gameClient.setState(GameClientState.AUTHED); wcToRemove.gameClient.setSessionId(wcToRemove.session); //before the char selection, check shutdown status if(GameServer.getSelectorThread().isShutdown()){ wcToRemove.gameClient.getConnection().sendPacket(new AuthLoginFail(1)); wcToRemove.gameClient.closeNow(); }else{ CharSelectInfo cl = new CharSelectInfo(wcToRemove.account, wcToRemove.gameClient.getSessionId().playOkID1); wcToRemove.gameClient.getConnection().sendPacket(cl); wcToRemove.gameClient.setCharSelection(cl.getCharInfo()); cl = null; } } else { _log.warning("session key is not correct. closing connection"); wcToRemove.gameClient.getConnection().sendPacket(new AuthLoginFail(1)); wcToRemove.gameClient.closeNow(); } _waitingClients.remove(wcToRemove); } break; case 04: KickPlayer kp = new KickPlayer(decrypt); doKickPlayer(kp.getAccount()); kp = null; break; }}}catch(UnknownHostException e){if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace();_log.info("Deconnected from Login, Trying to reconnect:");_log.info(e.toString());}catch(IOException e){if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace();_log.info("Deconnected from Login, Trying to reconnect..");//_log.info(e.toString());}finally{if(_out!=null) synchronized (_out) //avoids tow threads writing in the mean time { try { _loginSocket.close(); } catch(Exception e) { if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); } }else try { _loginSocket.close(); } catch(Exception e) { if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); }}try{Thread.sleep(5000); // 5 seconds}catch(InterruptedException e){//no need exception log}}}public void addWaitingClientAndSendRequest(String acc, L2GameClient client, SessionKey key){if(Config.DEBUG){System.out.println(key);}WaitingClient wc = new WaitingClient(acc, client, key);synchronized (_waitingClients){_waitingClients.add(wc);}PlayerAuthRequest par = new PlayerAuthRequest(acc, key);try{sendPacket(par);}catch(IOException e){_log.warning("Error while sending player auth request");if(Config.ENABLE_ALL_EXCEPTIONS)e.printStackTrace();}par = null;}public void removeWaitingClient(L2GameClient client){WaitingClient toRemove = null;synchronized (_waitingClients){for(WaitingClient c : _waitingClients){if(c.gameClient == client){ toRemove = c;}}if(toRemove != null){_waitingClients.remove(toRemove);}}toRemove = null;}public void sendLogout(String account){PlayerLogout pl = new PlayerLogout(account);try{sendPacket(pl);}catch(IOException e){_log.warning("Error while sending logout packet to login");e.printStackTrace();}pl = null;}public void addGameServerLogin(String account, L2GameClient client){_accountsInGameServer.put(account, client);}public void sendAccessLevel(String account, int level){ChangeAccessLevel cal = new ChangeAccessLevel(account, level);try{sendPacket(cal);}catch(IOException e){if(Config.ENABLE_ALL_EXCEPTIONS)e.printStackTrace();}cal = null;}private String hexToString(byte[] hex){return new BigInteger(hex).toString(16);}public void doKickPlayer(String account){if(_accountsInGameServer.get(account) != null){_accountsInGameServer.get(account).closeNow();LoginServerThread.getInstance().sendLogout(account);if(Config.DEBUG)_log.warning("called [doKickPlayer], closing connection");}}public static byte[] generateHex(int size){byte[] array = new byte[size];Rnd.nextBytes(array);if(Config.DEBUG){_log.fine("Generated random String: \"" + array + "\"");}return array;}/*** @param sl* @throws IOException*/private void sendPacket(GameServerBasePacket sl) throws IOException{if(_interrupted){return;}byte[] data = sl.getContent();NewCrypt.appendChecksum(data);if(Config.DEBUG){_log.finest("[s]\n" + Util.printData(data));}data = _blowfish.crypt(data);int len = data.length + 2;if(_out != null&& !_loginSocket.isClosed()&& _loginSocket.isConnected())synchronized (_out) //avoids tow threads writing in the mean time{_out.write(len & 0xff);_out.write(len >> 8 & 0xff);_out.write(data);_out.flush();}}/*** @param maxPlayer The maxPlayer to set.*/public void setMaxPlayer(int maxPlayer){sendServerStatus(ServerStatus.MAX_PLAYERS, maxPlayer);_maxPlayer = maxPlayer;}/*** @return Returns the maxPlayer.*/public int getMaxPlayer(){return _maxPlayer;}/*** @param id* @param value*/public void sendServerStatus(int id, int value){ServerStatus ss = new ServerStatus();ss.addAttribute(id, value);try{sendPacket(ss);}catch(IOException e){if(Config.ENABLE_ALL_EXCEPTIONS)e.printStackTrace();}ss = null;}/*** @return*/public String getStatusString(){return ServerStatus.STATUS_STRING[_status];}/*** @return*/public boolean isClockShown(){return Config.SERVER_LIST_CLOCK;}/*** @return*/public boolean isBracketShown(){return Config.SERVER_LIST_BRACKET;}/*** @return Returns the serverName.*/public String getServerName(){return _serverName;}public void setServerStatus(int status){switch(status){case ServerStatus.STATUS_AUTO:sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_AUTO);_status = status;break;case ServerStatus.STATUS_DOWN:sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_DOWN);_status = status;break;case ServerStatus.STATUS_FULL:sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_FULL);_status = status;break;case ServerStatus.STATUS_GM_ONLY:sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_GM_ONLY);_status = status;break;case ServerStatus.STATUS_GOOD:sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_GOOD);_status = status;break;case ServerStatus.STATUS_NORMAL:sendServerStatus(ServerStatus.SERVER_LIST_STATUS, ServerStatus.STATUS_NORMAL);_status = status;break;default:throw new IllegalArgumentException("Status does not exists:" + status);}}public static class SessionKey{public int playOkID1;public int playOkID2;public int loginOkID1;public int loginOkID2;public int clientKey = -1; // by Azagthtotpublic SessionKey(int loginOK1, int loginOK2, int playOK1, int playOK2){playOkID1 = playOK1;playOkID2 = playOK2;loginOkID1 = loginOK1;loginOkID2 = loginOK2;}@Overridepublic String toString(){return "PlayOk: " + playOkID1 + " " + playOkID2 + " LoginOk:" + loginOkID1 + " " + loginOkID2;}}private class WaitingClient{public int timestamp;public String account;public L2GameClient gameClient;public SessionKey session;public WaitingClient(String acc, L2GameClient client, SessionKey key){account = acc;timestamp = GameTimeController.getGameTicks();gameClient = client;session = key;}}private boolean _interrupted = false;@Overridepublic void interrupt(){_interrupted = true;super.interrupt();}@Overridepublic boolean isInterrupted(){return _interrupted;}} Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 23 марта, 2014 Здравствуйте. Имеется сборка на l2jfrozen, а так же исходники, на данной сборке работает дюп через логин (два активных окна). В шаре есть фикс но я не могу его прикрутить из за отсутствия знаний java. Кому не сложно можете помочь?. После моих проделок не получается скомпилировать http://rghost.ru/53279873 ППЦ нет слов Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
reznyaa 0 Опубликовано 23 марта, 2014 Всё равно ошибка при компиляции =(( Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\Documents and Settings\Admin>cd C:\so\gameserver C:\so\gameserver>ant Buildfile: C:\so\gameserver\build.xml prepare-local: prepare-final: init: [mkdir] Created dir: C:\so\gameserver\build [mkdir] Created dir: C:\so\gameserver\build\classes [mkdir] Created dir: C:\so\gameserver\build\dist [mkdir] Created dir: C:\so\gameserver\build\dist\loginserver [mkdir] Created dir: C:\so\gameserver\build\dist\loginserver\lib [mkdir] Created dir: C:\so\gameserver\build\dist\gameserver [mkdir] Created dir: C:\so\gameserver\build\dist\gameserver\lib version: [echo] L2jFrozen Gameserver Revision: exported compile: [javac] Compiling 1472 source files to C:\so\gameserver\build\classes [javac] C:\so\gameserver\head-src\com\l2jfrozen\gameserver\thread\LoginServe rThread.java:476: cannot find symbol [javac] symbol : method putIfAbsent(java.lang.String,com.l2jfrozen.gameserv er.network.L2GameClient) [javac] location: interface java.util.Map<java.lang.String,com.l2jfrozen.gam eserver.network.L2GameClient> [javac] return _accountsInGameServer.putIfAbsent(account, client) == null; [javac] ^ [javac] C:\so\gameserver\head-src\com\l2jfrozen\gameserver\network\clientpac kets\AuthLogin.java:56: cannot find symbol [javac] symbol : class L2GameServerPacket [javac] location: class com.l2jfrozen.gameserver.network.clientpackets.AuthL ogin [javac] client.close((L2GameServerPacket) null); [javac] ^ [javac] 2 errors BUILD FAILED C:\so\gameserver\build.xml:65: Compile failed; see the compiler error output for details. Total time: 31 seconds C:\so\gameserver> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 23 марта, 2014 Товарищ неипите людям мозг. У l2jfrozen на svn есть фикс. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
reznyaa 0 Опубликовано 23 марта, 2014 Товарищ неипите людям мозг. У l2jfrozen на svn есть фикс. качал вчера от туда исходники, скомпил и в итоге зашел и надюпал. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
reznyaa 0 Опубликовано 23 марта, 2014 Товарищ неипите людям мозг. У l2jfrozen на svn есть фикс. Всё спасибо я был туп и глуп. Спасибо =) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alex9456 10 Опубликовано 19 июня, 2014 Можно фикс сам сюда?) в 1004 реве он же исправлен? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты