2chでencode.exeが晒された。
以下、うしこ BSE キールの反応。
(晒される前にある程度、ホロ、BSE、キールが3.2cの解析はしていた。)
うしこ さんの発言:
まあ実際
新グラやら改造したlist.sprつかわないんなら
いつものでもいいんだよな
えりす さんの発言:
チーターわくぞ
キール さんの発言:
ハイエナ
えりす さんの発言:
encode.exeはもう晒されたんだし
えりす さんの発言:
ヒャッハー
キール さんの発言:
そのうち出てきそう
えりす さんの発言:
うん
いつになるかはしらんが秒読み
さてホロランチャースキンつけてうpるか
うしこ さんの発言:
あ
そうか
encodeあるから・・・!
うしこ さんの発言:
オワタオワタオワオワオワタ
キール さんの発言:
ホロランチャー・・・
うしこ さんの発言:
ッヅアァ!
めんどくせえ
キール さんの発言:
オ、オ、オワターオワオワオワター♪
\ オオオオワターオワオオワオワタ/
♪\(^o^) ♪
_ ) > _ キュッキュ♪
/.◎。/◎。/|
\(^o^)/.| ̄ ̄ ̄ ̄ ̄| | \(^o^)/
) ) .| |/ ノ ノ
(((( > ̄ > )))) \(^o^)/ ((( < ̄< ))))
) )
((( > ̄ > ))))
えりす さんの発言:
だから既存鯖も
すべて3.2に
しないと
いけない 実質上の3.0終焉フラグで、何が具体的にまずいかと言うと、list.sprをある方法で改変してクライアントに適用する事が出来る。
たとえば、2セル攻撃可能なDKとか弓撃てるアークナイトとか、SPDK並のゴブリンとか もうなんでもアリ。
あとわかる人は分かると思うけど、PK鯖はとっても影響がでかい。
一応対応策はある。
ユーザーが勝手に改変したlist.sprを鯖が許可したlist.sprではない場合、Inできなくする。ソースを入れれば不正はできないっぽい。
ということでソース晒す。
具体的にはlist.sprをCRCで誤りチェックして違う除数の場合には蹴るというものらしいが、頭悪くてよくわからん。
少し長いので先に今回の3.2cをまとめ
■うしこから各鯖管へ提言
1.2chで晒されているencode.exeを手に入れる事
2.戦争鯖のうpロダで配布している3.2cを各鯖管も手に入れる事。(これにはencode.exeが入っていない)
そして戦争鯖からDLした物を自分のとこでも配布する。これを使用してユーザーに3.2cからの接続をするよう指示する事。
(たとえば、3.2cじゃないと町に入った瞬間落ちるようなgfxを置いたほうがよい。)
----ここから鯖側の設定
3.Encode.exeにpack.properties生成機能があるので自力で生成して、生成したpack.propertiesファイルを鯖ファイルのconfigフォルダ内に配置する事
4.以下のソースを適用する事。
■ソース
l1j\server\Config.java1.public static int LV99_EXP; を検索
2.1で検索した下に次のコードを追加。
public static boolean LOGINS_TO_AUTOENTICATION;
public static String RSA_KEY_E;
public static String RSA_KEY_D;3.validate();を検索
4.3で検索したコードの上に次のコードを追加。
try {
Properties packSettings = new Properties();
InputStream is = new FileInputStream(new File("./config/pack.properties"));
packSettings.load(is);
is.close();
LOGINS_TO_AUTOENTICATION = Boolean.parseBoolean(packSettings.getProperty("Autoentication", "false"));
RSA_KEY_E = packSettings.getProperty("RSA_KEY_E", "0");
RSA_KEY_D = packSettings.getProperty("RSA_KEY_N", "0");
} catch (Exception e) {}l1j\server\server\ClientThread.java1.import java.util.logging.Logger;を検索
2.1で検索したコードの下に次のコードを追加。
import java.math.BigInteger;3.private Socket _csocket;を検索。
4.3で検索したコードの下に次のコードを追加。
private int _xorByte=(byte) 0xF0;
private long _authdata;5.6._out = new BufferedOutputStream(socket.getOutputStream());を検索
7.6で検索したコードの下に次のコードを追加。
{
_xorByte = (int)(Math.random()*253+1);
_authdata = new BigInteger(Integer.toString(_xorByte)).modPow(new BigInteger(Config.RSA_KEY_E), new BigInteger(Config.RSA_KEY_D)).longValue();
}8.int loByte = _in.read();を検索
9.8で検索したコードの下に次のコードを追加。
if(Config.LOGINS_TO_AUTOENTICATION)
{
hiByte ^= _xorByte;
loByte ^= _xorByte;
}10.return LineageEncryption.decrypt(data, dataLength, _clkey);を検索
11.10で検索したコードの上に次のコードを追加
if(Config.LOGINS_TO_AUTOENTICATION)
{
for(int i =0 ; i < dataLength ; i++) {
data[i]=(byte)(data[i] ^ _xorByte);
}
}12.byte Bogus = (byte)(FIRST_PACKET.length + 7);を追加
13.12で検索したコードの下に次のコードを追加
if(Config.LOGINS_TO_AUTOENTICATION)
{
_out.write((int)(_authdata & 0xff));
_out.write((int)(_authdata >> 8 & 0xff));
_out.write((int)(_authdata >> 16 & 0xff));
_out.write((int)(_authdata >> 24 & 0xff));
_out.flush();
}以上
一応検証済み(BSEが)
ちなみに、これらの情報はうしこは一切解析していない。がんばったのはBSE、ホロ、キール、枝実(?)
結構ヤバメな内容だったのでブログで報告しといたほうがいいってことで書いた。
てか、3.2c Japanで最初に使いだした鯖は、他鯖の事なんも考えてなかったんだな
プンスコ