axazol 0 Posted November 23, 2012 Как расшифровать сам кеш можно найти тут - https://github.com/P...he-to-JSON или тут - http://code.google.c.../source/browse/ Поскольку шифровка идёт на родном для игры питоне то и дешифровать это легче всего питоном. Благо это некоим образом не сложно. К примеру вариант для С# using IronPython.Hosting; namespace TankTest { class Program { static unsafe void Main(string[] args) { var ironPythonRuntime = Python.CreateRuntime(); try { dynamic loadIPython = ironPythonRuntime.UseFile("../../pyparse.py"); var data = loadIPython.parse("../../cache.dat"); // SOME CODE... У меня же вопрос как расшифровать имя из имени файла кеша что бы приобщить получаемую инфу к конкретному игроку? Скажу сразу, пароли хранятся в другом месте и в другом виде. ;) Quote Share this post Link to post Short link Share on other sites
Yupi 505 #21148 Posted November 23, 2012 У меня же вопрос как расшифровать имя из имени файла кеша что бы приобщить получаемую инфу к конкретному игроку? Похоже это base64 немного видоизменённый. Чтобы узнать как именно изменённый - надо покопаться в игровых ресурсах либо проанализировать много имён файлов с известными входными данными. Quote Share this post Link to post Short link Share on other sites
axazol 0 #21149 Posted November 23, 2012 К примеру мои: NRXWO2LOFZYD C LTXN5ZGYZDPMZ2GC3TLOMXG4ZLUHIZDAMBRGQ5WC6DBPJXWY=== NRXWO2LOFZYD E LTXN5ZGYZDPMZ2GC3TLOMXG4ZLUHIZDAMBRGQ5WC6DBPJXWY=== NRXWO2LOFZYD I LTXN5ZGYZDPMZ2GC3TLOMXG4ZLUHIZDAMBRGQ5WC6DBPJXWY=== MF4GC6TPNQ5TCNJWGY3A==== Пробелами выделено различия имён. последнее имя папки с результатами боёв. Имя = имя тут. Quote Share this post Link to post Short link Share on other sites
VicKing 650 #21157 Posted November 23, 2012 (edited) У меня же вопрос как расшифровать имя из имени файла кеша что бы приобщить получаемую инфу к конкретному игроку? Скажу сразу, пароли хранятся в другом месте и в другом виде. ;) кажись имя игрока внутри кэша, а не в названиимогу дать исходники одного анализатора кэша, правда я там не разбирался где оно достаёт ник wot-personal-statistics ЗЫ, ошибся, таки в имени Имя файла закодировано алгоритмом Base32. При раскодировке из него можно взять ник игрока и сервер на котором играл игрок. Edited November 23, 2012 by VicKing Quote Share this post Link to post Short link Share on other sites
axazol 0 #21189 Posted November 23, 2012 Что-то либо я не тем конвертирую либо... конвертер - http://www.atrevido.net/blog/PermaLink.aspx?guid=debdd47c-9d15-4a2f-a796-99b0449aa8af выхлоп LTXN5ZGYZDPMZ2GC3TLOMXG4ZLUHIZDAMBRGQ5WC6DBPJXWY Byte32 {byte[30]} "30 26 251 68 164 34 125 45 70 84 7 250 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 " UTF8 "�D�\"}-FT\a�������������������" ASCII "?D?\"}-FT\a???????????????????" Unicode "᨞䓻⊤呆輻........." Quote Share this post Link to post Short link Share on other sites
13 3,395 #21193 Posted November 23, 2012 Как верно сказал @VicKing - это base32 Примеры раскодирования строк: NRXWO2LOFZYDCLTXN5ZGYZDPMZ2GC3TLOMXG4ZLUHIZDAMBRGQ5WC6DBPJXWY=== login.p1.worldoftanks.net:20014;axazol[1] NRXWO2LOFZYDELTXN5ZGYZDPMZ2GC3TLOMXG4ZLUHIZDAMBRGQ5WC6DBPJXWY=== login.p2.worldoftanks.net:20014;axazol[1] NRXWO2LOFZYDILTXN5ZGYZDPMZ2GC3TLOMXG4ZLUHIZDAMBRGQ5WC6DBPJXWY=== login.p4.worldoftanks.net:20014;axazol[1] Отличающаяся буква, на которую вы указали - это номер логин-сервера, при подключении к которому генерировался файл кеша досье. Пример рабочего base32 онлайн-декодера: http://tomeko.net/on...e32.php?lang=en Quote Share this post Link to post Short link Share on other sites
axazol 0 #21194 Posted November 23, 2012 Хех, я и на дельфи имею вариант... Вот только не на более приятном С# =( Quote Share this post Link to post Short link Share on other sites
Yupi 505 #21196 Posted November 23, 2012 (edited) 1. bitbucket.org/Lazin/base32transcoder/src (C#) 2. public class Base32Encoding { public static byte[] ToBytes(string input) { if (string.IsNullOrEmpty(input)) { throw new ArgumentNullException("input"); } input = input.TrimEnd('='); //remove padding characters int byteCount = input.Length * 5 / 8; //this must be TRUNCATED byte[] returnArray = new byte[byteCount]; byte curByte = 0, bitsRemaining = 8; int mask = 0, arrayIndex = 0; foreach (char c in input) { int cValue = CharToValue(c); if (bitsRemaining > 5) { mask = cValue << (bitsRemaining - 5); curByte = (byte)(curByte | mask); bitsRemaining -= 5; } else { mask = cValue >> (5 - bitsRemaining); curByte = (byte)(curByte | mask); returnArray[arrayIndex++] = curByte; curByte = (byte)(cValue << (3 + bitsRemaining)); bitsRemaining += 3; } } //if we didn't end with a full byte if (arrayIndex != byteCount) { returnArray[arrayIndex] = curByte; } return returnArray; } public static string ToString(byte[] input) { if (input == null || input.Length == 0) { throw new ArgumentNullException("input"); } int charCount = (int)Math.Ceiling(input.Length / 5d) * 8; char[] returnArray = new char[charCount]; byte nextChar = 0, bitsRemaining = 5; int arrayIndex = 0; foreach (byte b in input) { nextChar = (byte)(nextChar | (b >> (8 - bitsRemaining))); returnArray[arrayIndex++] = ValueToChar(nextChar); if (bitsRemaining < 4) { nextChar = (byte)((b >> (3 - bitsRemaining)) & 31); returnArray[arrayIndex++] = ValueToChar(nextChar); bitsRemaining += 5; } bitsRemaining -= 3; nextChar = (byte)((b << bitsRemaining) & 31); } //if we didn't end with a full char if (arrayIndex != charCount) { returnArray[arrayIndex++] = ValueToChar(nextChar); while (arrayIndex != charCount) returnArray[arrayIndex++] = '='; //padding } return new string(returnArray); } private static int CharToValue(char c) { int value = (int)c; //65-90 == uppercase letters if (value < 91 && value > 64) { return value - 65; } //50-55 == numbers 2-7 if (value < 56 && value > 49) { return value - 24; } //97-122 == lowercase letters if (value < 123 && value > 96) { return value - 97; } throw new ArgumentException("Character is not a Base32 character.", "c"); } private static char ValueToChar(byte b) { if (b < 26) { return (char)(b + 65); } if (b < 32) { return (char)(b + 24); } throw new ArgumentException("Byte is not a value Base32 value.", "b"); } } Edited November 23, 2012 by TwoPizza Quote Share this post Link to post Short link Share on other sites
axazol 0 #21199 Posted November 23, 2012 Спс, уже сам переписал. =) Quote Share this post Link to post Short link Share on other sites