Bonjour tout le monde, hier soir après avoir fait la mise à jour, j'essaie de me déplacer et je vois que le hash_Function est définitif.
Tout simplement en enregistrant les logs j'obtient une erreur :
[21:35:23:730] [ServerControlFrame] Bytecode len: 5927, hash: 59902655bf3fe033444a7b339eb6b5be
[21:35:23:741] [ServerControlFrame] Signature incorrecte
[21:35:23:742] [ConnectionsHandler] Resume connection
Je décide donc de TENTER de m'attaquer à cette sécurité :
Je regarde où s’exécute le RawDataMessage, je trouve ceci :
On retrouve mon erreur dans les logs.
J'ai alors decompiler le RawDataMessage
et je me suis interréssé à la fonction addencryptedHash
Sachant que je suis en MITM il me semble que this._hashKey = HumanCheck["hash"](_loc6_); est assez important pour mon hash
public static var HASH_FUNCTION:Function;
Mais je ne trouve pas ou cette fonction est assigné.
Et je ne comprends pas pourquoi quand je désérialise ce que le CLIENT envoie j'ai les bonnes valeurs.
Tout simplement en enregistrant les logs j'obtient une erreur :
[21:35:23:730] [ServerControlFrame] Bytecode len: 5927, hash: 59902655bf3fe033444a7b339eb6b5be
[21:35:23:741] [ServerControlFrame] Signature incorrecte
[21:35:23:742] [ConnectionsHandler] Resume connection
Je décide donc de TENTER de m'attaquer à cette sécurité :
Je regarde où s’exécute le RawDataMessage, je trouve ceci :
JavaScript:
public function process(param1:Message) : Boolean
{
var _loc2_:RawDataMessage = null;
var _loc3_:ByteArray = null;
var _loc4_:Signature = null;
var _loc5_:URLOpenMessage = null;
var _loc6_:Url = null;
var _loc7_:TrustStatusMessage = null;
var _loc8_:Loader = null;
var _loc9_:LoaderContext = null;
var _loc10_:URLRequest = null;
var _loc11_:MiscFrame = null;
var _loc12_:OptionalFeature = null;
switch(true)
{
case param1 is RawDataMessage:
_loc2_ = param1 as RawDataMessage;
if(Kernel.getWorker().contains(AuthentificationFrame))
{
_log.error("Impossible de traiter le paquet RawDataMessage durant cette phase.");
return false;
}
_loc3_ = new ByteArray();
_loc4_ = new Signature(SIGNATURE_KEY_V1,SIGNATURE_KEY_V2);
_log.info("Bytecode len: " + _loc2_.content.length + ", hash: " + MD5.hashBytes(_loc2_.content));
_loc2_.content.position = 0;
if(_loc4_.verify(_loc2_.content,_loc3_))
{
_loc8_ = new Loader();
_loc9_ = new LoaderContext(false,new ApplicationDomain(ApplicationDomain.currentDomain));
AirScanner.allowByteCodeExecution(_loc9_,true);
_loc8_.loadBytes(_loc3_,_loc9_);
}
else
{
[B] _log.error("Signature incorrecte");[/B]
}
return true;
case param1 is URLOpenMessage:
_loc5_ = param1 as URLOpenMessage;
_loc6_ = Url.getUrlById(_loc5_.urlId);
switch(_loc6_.browserId)
{
case 1:
_loc10_ = new URLRequest(_loc6_.url);
_loc10_.method = _loc6_.method == ""?"GET":_loc6_.method.toUpperCase();
_loc10_.data = _loc6_.variables;
navigateToURL(_loc10_);
return true;
case 2:
KernelEventsManager.getInstance().processCallback(HookList.OpenWebPortal,WebLocationEnum.WEB_LOCATION_OGRINE);
return true;
case 3:
return true;
case 4:
if(HookList[_loc6_.url])
{
_loc11_ = Kernel.getWorker().getFrame(MiscFrame) as MiscFrame;
_loc12_ = OptionalFeature.getOptionalFeatureByKeyword("game.krosmasterGameInClient");
if(Boolean(_loc11_ && _loc12_) && Boolean(!_loc11_.isOptionalFeatureActive(_loc12_.id)) && HookList.OpenKrosmaster == HookList[_loc6_.url])
{
_log.error("Tentative de lancement de Krosmaster, cependant la feature n\'est pas active");
return true;
}
KernelEventsManager.getInstance().processCallback(HookList[_loc6_.url]);
}
return true;
default:
return true;
}
case param1 is TrustStatusMessage:
_loc7_ = param1 as TrustStatusMessage;
SecureModeManager.getInstance().active = !_loc7_.trusted;
PlayerManager.getInstance().isSafe = _loc7_.certified;
return true;
default:
return false;
}
}
J'ai alors decompiler le RawDataMessage
et je me suis interréssé à la fonction addencryptedHash
JavaScript:
public function addCryptedHash(param1:ByteArray) : void
{
var _loc5_:Object = null;
var _loc6_:ByteArray = null;
if(!this._hashKey)
{
_loc5_ = getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302812));
_loc6_ = new ByteArray();
_loc7_["writeUTF"](!!_loc5_["getInstance"]()["gameServerTicket"]?_loc5_["getInstance"]()["gameServerTicket"]:"");
[B] this._hashKey = HumanCheck["hash"](_loc6_);[/B]
}
var _loc2_:ByteArray = new ByteArray();
_loc2_["writeBytes"](HumanCheck["hash"](param1));
_loc2_["position"] = 0;
var _loc3_:_SIHHGXMLXX = new _SIHHGXMLXX();
var _loc4_:_SMEXDOWIEM = new _SMEXDOWIEM(new _SMDXWXGLMM(new _SEDMDWDHGEE(this._hashKey),_loc3_));
_loc3_["setBlockSize"](_loc4_["getBlockSize"]());
_loc4_["encrypt"](_loc2_);
param1["position"] = param1["length"];
param1["writeBytes"](_loc2_);
}
JavaScript:
if(HASH_FUNCTION != null)
{
HASH_FUNCTION(_loc2_);
}
public static var HASH_FUNCTION:Function;
Mais je ne trouve pas ou cette fonction est assigné.
Et je ne comprends pas pourquoi quand je désérialise ce que le CLIENT envoie j'ai les bonnes valeurs.
Dernière édition: