ClanServer/eAmuseTest/Program.cs
2019-06-02 23:03:41 +02:00

175 lines
23 KiB
C#

using System;
using System.Text;
using System.Linq;
using System.Xml.Linq;
using System.Collections;
using System.Collections.Generic;
using eAmuseCore.Crypto;
using eAmuseCore.Compression;
using eAmuseCore.KBinXML;
namespace eAmuseTest
{
class Program
{
static void Main()
{
string compress = "none";
string eamuse_info = "1-5cf415a4-3e00";
byte[] data = HexToBytes("fbc2111eb2ef7dcd3013a23c57b167508508fbf285897f35d2e5f8f1aa56c52ca868a3c5c24463f21f4bd8e247f5f6b28b9f992b5ae5f8ac99decf6e06e44ef44ec19dd8bd6c4f057e3385ad89edef4adad252a8b86dbf8ea46531aa2593f84e50cce3c7af79f18ead8fb1e94b4eb2b6c354f662a4f18df485a3a96536266e18d00bd810315e6ae63dda0fcd0cec61e9f87c2c6325d611fbff5cd23d8c06d1eb5162a9ae60ba8eb8745831da46e4cd30522bcc137120dc57118435e65958414ad3eaa4df4e9b8c5233cf54665daecbda606b68b0d9fc72b53fc0be765ed6088e2db94b146d3aaf7fbc55ec9ca9abebd1a20ef00f6e65bec3244544e89a60191e5eea3f8c57848101895b0654197e30aa70b50858a52fbe9c87a044e1b08cae8ac4d2982cec5895d5497bd93bbf0246b2b5b6f2074470e9cb8a46785a553d0d1927b039c104003b3f0bcf4541c57da43d7eb116c02ec2348aaae2448c0fa37d1858763bdaca5aee43a560bcddf9e8805f28c710ce941b91c0a6537a08565bf26a02bb3e28b44e39de50b9ba1e09d66966f0cf7d7050b3b4b2b9f26fc41a06efd6a7d01a50f2da98d0b81c64c5c9654f14a9399113a84d5b57b8063453edf6d37c06f6aee44e5cf3784bc46e6e74cdbcf458193eca895104fabafeee798a16f76e662960d046decea5777d5dd2dbace2c2f1b963a25a74b1599788e202da4a177d4c2eedd9f4dd1bc897dd6a3b009416b24a89c421e0616fc2a477d9f0a49c123855824349c2e2b8353a7a24f99a29643c765e0de5b2af2ab1f6b169e9ce1fcb8b71cc904f4bf895c00920e261ec39fb8cf05447c4f6581135baa205d0dcfdcb9e0ebf49ec26909cd9aa3366d85fa49f3867f5b273c40fe458d520a908e36c12fa0bc6b7d2953ed65ba030740dda2fda34f71af1d62df6b9c772cb9a063b6b093b6bf0041951b2be00193716ff062688345dfeef8d84f5c4da36b5dfb005076b4f20a24616fa93851166644974f70b4080c4dec27974960e4965da2f8acfb2e5cbcdc4042b151c880f4e0377107cebf81c5a4f289f3fe7030e20ceefa3bc27a6525001b28a4a4d523b38f2779914a2070101aff047babffbf640b7754189cafbdabbae43a804a5d26600e3fd62e3ce001d02719da7d7071877d0983cefbc1113d2425559d32ed3de60b01a5c373c4f6f76a43da3a3db1d1cbf46c31495f7ed6eb009bbbd652cf24c708159fb2514fba33339be7c9b1c3674efa91aad0cc61970f638b2ab92486b45f04bda3346aff3f3e797955edbc28476a02596ab1f687c2f15e59958719029be6c28ed62e8c1410956e336b488a72a9534f34bef73c958d5200476cd5488d204191814c0c00f64debb64903d42d55c5dcda3da28153792334d0f1128ecc2b2b6432b9b4a321085f08096307965b7a55f329fc42e9aa3ce9cae8c48e138e137890899e69aff1c7bcde4175041284ca4285df4f789977334c2e87a75a7f1ed9429461583d203abb37f058d8080f12e9ba15a4b3021fb4a6ba78fc3f5343fa7fc219d4e7f00882ab3ca3561303e0ce0942497821b74aa20edb26ccead75429e6d9449d469e8ca386894afe4491445987bdb55f291eec63ecc088ba08023385b823faa1311305c0cfab7cb8636dd0cedb90eadde86c12fa99b6e38ffcbb25a0bc84c5e012f4775781f03593cd9a795e9c00a3bb3c95c865694c3569ca2c307c6300dbf6956900db894ce160b7b7c86fc9dc0c49e8fc46a1991866d61ea01afd782d1479433443fa6b07bc3fbcdd2156f1a7f15f4fe30ddcf0e97b065957c1709ef23a93ce0df1c74cc5d72b6983583c4c51b4a6484977b8ca36ef7420615f79b0c880ad8bf0ae2e20e7f21b5f0e609e895cff38d5bc96720fc0a3f0722b79d7a7cfa2ca881d7f2e20de419a468a8a4dbb2936166d4a54f3352ab4d76537f39009398a59a5c6c2fe2cb124c1bd2f0ffaa52f216b971838554c3f5919c9f0303f3559885c49005efd84181afb523b0f011cfed8f783c75b90d470e18ad1bc5dd9c39d39713f433815a33754274e0db5cde72983f45922136105545366f754005d09afd4747aae7102e2b0b35e81fecdb303cc00045a4c5a8cabadde1264f9c199ca9d9362f5a6654b43e036a1725db5e98ebad1e4578dcac24acaef1aed5a935158b59da4bf4e73c8e5614b2ddaea99c733409c5a0e2050588dfb21bb9ed6cc17d9b01e6221de4f08f41149bdeca49db3cbc3c34e6ba06a0669fd2f80975246968929e4c83809cce1d84614a4bedd90acb31a7d6aaee91ae32fb8d7e2156857e755ea0fe2a6784bef546aea882a239ff971d12a689c82f8559b7fe1d34eac266ddae54a5b4933476506f33ec9680c1a66b13d05f5b3a07fbf7bd124d43b451ad45e4f4e21220c7b2b1bded64342de59f180b9885d3dea9ad70527f388de3ca96585cb708ec1896d0f98d8542e7aafa6b5dc78601456a16a2657a106d3416f0234b08b53f05aadd998a69783f0f5a804e66ce922aabd327322bb8865ae069e26993802ed1fd87617fe281aeabbb01c94f3aa2333a43eb168cbbc5d6ee65073e80354442066983fa2667556e75cc76cceb34a268ca8530d294912ec12f61b29c3328272d3519786fb6118095372db00632516098b514a19d4f76e744097691a31dde7ffd5203c3c5fa8ede860be7ee66983ac3c74f5d15e4fa9ef99a18989936fc5eaf82c12c6ef35a6f3785018923170a1d1392854ff5a92d5b5bd7d377109f70d023721317117384fcc549c02c2887a1bcc061350d1cc7ccb47b460c788426f8e091c88809d03ab1b80c3e4780bacdbdc84322e5cdcb601be9096dcca4d743fe3267413ef498625d4f3279fbd376ab406281e9639654a89b1592db69d5672f3217b3adb271be85121ba68db2ba5a8107306eef63ac9355b896765cead9451a4edf8700204ac64cd6b96545dcecde83358960ff6ee5c81f831f53a8a9c8480bfc30faa3547821600904d5e534f51ed7077db2669bc385f1dd0416b17338ea1ce440c4db6264cd6842d8364b26d197d8e9dca320afffa84154b4c20758e715f49d2af88549f708305b0b9598bd11fb0a14f49f380c4aa87c0ed2239146391d26bd66eb3e3a03610dc7b703aaa1f966ee59a605b698c3122ef34d9a76c53b0746801cc59a735dc218a81cabf8b2c28dd5252112c2839d9ea65aca78db682b001f2eb824c2837ce071a6c8e781d8585d72a10dcd885d2b0f03f53b22dde6bcf8969f4fdeb1bc7bd0149cb41a771f03c3f4ff1d16d6b84d17123dea8864ca08eb97185d4df71900e3c2f893804297fb473f026d0ac70770e72e85aeba17a1f719f0353d2b16676a3fd3e487ef730abe44540d4ae88e9fac21451d8d332f07f80a6d4e9c0a80d251df40d2256b068c53fae8379f4207c5eb5c1545cc2d63d7767f9fbc349d10e22625c7261e58eff62f5e183aa5ea00e82b37d957c0c045d7c32ca6e2a0690ad78d3d063d973c1a2ac3bae2f3305884469ce3027b74becca5d24a5042abfa8c1f60084d3a6737a8447c7b83cbc4aa2b967b413007b2e9a85699b748e2a4a0d58d1caa64ace7fb8c21ec11fee16a552e861e4709fa86296eec3ed954e27065034a4364e5a111429f84e09e84b11711b76d09401719b5249679f50d7300c3c5e9b17d7eacdcb00e17b7b1b9ffac371eee439f2d2f2aa4beb60bee43344c9585b8390f68f518cfb2399bea6643c3fb1a7029a84c8ecb50d8df9d858bd0672a392f30c85b9ba5499e9cb16a73e8f2e752849d9c8cb414cb28844f25e35d7480a40a6fab7a19792a65ca222160cbe225f8accba1517025306dafffbdbbfbd183cd3e8730f6e15b972686ae6156ecf4e76ee50f28562ff7830ca102b24526b87efdc2ac9e361f7ecdd76e77ddab27c3793a58f37c1328994afd9cb08522775f92524549814df98505676fb68778ad6a0dce420b512d891d0990fdca9b6ef9bb8ba3209c384ec03bf2e9dfcb99777d39ab541cad147a7134096e27a2d6e00f3ceddbd583f0bf5a325f75125660dddd74e42dd677bdb1a9b907e032bb5078be9af370dc80ac0e2affa6428b307b1d69354f77369b5825ad20fd5c9d158bb68a0e4fbbf98ffd7fe49872e0368df9f4c706d54d8403b40fa96cacf3dfc34c0b90eade1cf223cff3ce323e8f9a95d84c3e1af3c2778f7801addbc4c160b351ee127c2eb71e5d566d53235bb2091b1f2730ed0df08687d287e2e41180fa488c68f86e943d1b382cd1816f1991ac97be8d86f8187205121ab1b6a5c2ca63741d72beb75b3afdb14c2a54849cfa8335420040a71040e01d259266f400abd2624d18142e97ddbe092225a535e160472e3b158cd0e158e701eca345195613319fb5cfe96bea36af7b41c3813e75401dc7247229516959b160fdf71550a5bf60f085d4146f26c7595903d77a47394dd9eb8b5a768514753cdc64a274b9aa69298b2716b12a321e2b6166fba0ed6f2e14c9a3f9b6b1b20670fe1a7422cdccc8d2932fa0945489cb8287c425db4e5cdacaff694d3c481f1b39cb42536b24eaf86c554b1a2a4a006731fef0ac2c41a8aba8d94f66fb59527f1b9b2b3bf0b4e53aaf2e924207aad4d19609c9ae53416c578e7afda47e7c5b825ce7f3b3620764257bec4e8d960082b402d69e77ab6ff168178d2267abf855037993188b506baeedfa1f62f488a03bd67e99b632342d24cf6f057b0bed1edc209bcdbb21beab4887e19ba0c6082aa8cd128481ed5f7f2959c8c8371b0941453366b10ae87a5940135615e3919a173c7484d75b6acd1c37a2b0dc3c4ae07bfce81be872fd7cb522f674f577cdfe1b2acbbff70faa93edec4c9e244d06abad200c3889d548e36ddef955f9cb8694cacc5ec74c23165d0a49247aaa01edecfd2548c5ec8be2a9bb28044ce87f6c19108b5f2a4e062f36a1ab481d1e000f7e5bf40e0017c860c7f0c689dc5cf4d3fa3cbd5af3c812108c1e0bc20f0074ccc1a118dd8ff30860d6abd82d45fa41d721a24b02a7139eb440777ce817eb77d4f904da9e582ef4375a89010b69f7bd028f0866a60bba86f935219f507b4e8c105c23d65c416f1ea82cb469f225b3bb4703d726e3eeb39204f74662c3f99125625b523698040747f76f32e4510c66f48754c1d90253033fc6f26445fdf0b0f573ed44b652e28f6df1d011977cdb4f9b2172574f6a8987281a72b1fb93fd17de12f8c255b6cc3499a49c3c20b0f3671b2a451ff4b7cf83fa481b868c2262407ddfd95a423218e2829f3434d5f429ce64f13d36ba3cbd318a3287ff792b5c4a51cf6fb5510e999752a5d2a4962c3d612dbbbf9040fdb18656cad612251803b7f0ab77d84686fe1aee9b61529e5d5f62760dd76c4f15a85e93f1f1ad24768a5b69754d6ba04c6adf4ce89765eeccff0aab78faa11f7f8decb73b1cbf70e31790faf5d07b44b03138bda120d331e8da0197d133064c648677edd4627019fb14baad16106a8eb2e07cd258e860bdcbf0f81c83e40078b9807c524ff4ae1674bae609ba124836fcf3087ea7bc361e342313fddc7eb2deaf76a804c1e24ba44614b8ae4eff3c6f29546ee52947179b04d936a28b35340eadbaad83b9b854c1fb71374bd7fe5e2df8d94b6d8b829d72d67042d61d5e66c394395b874af1de8ab3b458d8abd2752c4ee7579f6115979e3684a022d48d4847fc82b2bded9f87631f866f9b6c2ce4d21d76945c57ca3f2012f93c5a7af09e055265760ed85e695927082821532aa0ed3d602f67b6a3237f3611a9a5da6b85feea0f36747581c55f656d0b60402152890c15ae6105f693dfd6cddc6b0dacd6570bd11a9e20ce0a6134531b01349c0b946ea039138c0432546c09a27defb849d5c2989c1a445ddc42abba86912b65c502dcb8b778ace5230d4920a7f4f10263594c9e143690069ce308f896c81d99c8c454732150b7081fece4c6ea532c11f6e104467e0834c37887263d34972a40ac7cb61b89aeb820617aec3420bc188e194732859ad1ccc34ba335647af4fab5e592931ea32e83700cbf6734d584cee360125edce378b2f69d1846a6a4d023d3d1cd68f81d013effc473a948280828ef223b99c78b2bff0a4aa6ca56160c7007408a5e2283d1bb40a3c43968c2beda3fa8435ae0a1f2cc2940ae71470e99b1f894dfe1707bf17d749aac36c28ad4dc7298a74678a57f8950130334df5ec90e6a3595de2171b4a0b1e9b1d2b54a903b8b83465524c93b921d3da5e6ada6571872cff7c526d5e566d6dfa1fd497e5231315800767bb7113bdec24b978c9df380de317f2cdee7c49d121fdc479dd740aa5fe3ed29e494e917cf1e8966ae3b20cfc1ee6ce7398ca5773fafdd0594c70c1c83e8d124caa6d017985512e9624301b3cd986efe193c4187000db51f6bc33154f43c506db6679887f7c87555f5af319f63673d42c85f085b29032475192a47bb738d6fb447ec86a8f1972d52a40edc79dd914d4dd487371e088c8dcfde4edcf8d0ae18d49bd45dc64afbad43d918d22f0e5c32885e0a86a6670e6d1cf4353283f681cf51d6f082e4d699b96cd91484aaf88ea4efe66e69f06c89429f99bed1495199a3ee0f75fa599355dbbdab5df89a607520f04abde10369b1beb304a043e86977d7e708f48e5ed5e4995348f54bbd6fe351a0454ecc55337be84c6fbc381c52e7780da79d49708d535142d4f20f89cfa20a1cbfe18cb34621065ba26870e23939d00c6dacd990453a529dec32650629aab9176ad21a32a3da1f436e10be52d340173c07511bcc3df2f2061c9944247c5051a3bfa00a297cf099089e2f86b5df3fc7f965beca4f4b507e458a51e65161f2d37d563803349821ff707d93a51a3932181820b735d43abfb545da53a9d46cc51ed9336dcc7e3987500219edd11a35d72b4d00d763410f7b11bc304fdce928a05e2d1c5fc6f619ad9a1c6139d23baf05b202c5bee685d9c9bc469cf3407c2a6b517bd79cb7d2cedb740f1eccd5c3d9040b1b556a555169084639bc72d3d3c163867247752b68ba7abe7f9be8456f93c2ce10dfc51fa022d35012de0f19a1c6467b883d7311d7d0586c55913e9c1ed5a8d10b555a837757570f7ea130e9c910156ff06df9c3f9927c8b037b18aab0e43de4b548de5b31c32ebb8ec7e18b14a3a973833eefda61f71e853ded5b0cfc20045e788221bee38028467bf72db241469dbe68adf7227a9bdc59eee5f95d6791072f0129663d3f1bb06f1959b0d3b1a5641ec95f5a37e4c1cf727e81b482b349904c2a06cce53462a099d504fa8c13400a5152a5ed623a05e57ea6f869fb53ec81eacd57918e3316f6fb2393b09cd3ad57b759593ec6c76dabd1fa7fdd23d0b355d11fc4f774608f84141295309c028cf102789fb98865abc591a145d858fc849528b01a385fd946e800e242186a8c340857376709948d8e1e41408cca0432095e1a5195e7414e2fe421ef4d671ce3a15fe835b6dd3678e746025b1bb20c08cc48df407d1a6cee84f4c358723f70ce890684e01a1b7de8265f0adf03b5c311f2038523321f88be0e531fc4ca7a86d63ed841b44afaedad442e128f8fe93e7967039a0a6ee90ea0bd0ffcec2c10d73302057aa8dd6e99eb15b96e4cf524ce8aafe311ce822660fbaecd7cc01ca92f9b16c6d7fceb86f1c32cd97afa70d09fff7e236ed41d6389fe8fa51f28cdd4d88ede1983a899beef76046bf6f94e259fffaabefa1841d16d53ced36834efc6e900cac051209083df1e5986595c2a9c1585f88cddb907144a5efb7a35d2e984dd7df0b1ab3f11307be287875d332c235b014416e7c1461bdac8c9b6c1010f80548c31b6039027e4710cdbb66e53840d0be2488679f512b4bd19e067e58dce8fb748ee0c687d0f67d6f673e4c93e41ff266c01cf94eaed70f46001d213730f403668c1f143a81bd9d4af0ad68e1ae7ce9e3378efcc4b8e0b6ab4c01623bcf9f01d25ab5a088f8e882f2f862cc1256dea7e993ffb9083c8d98cb1e213f2d7414a2f6aeeac3b406838127c979ffb6c86fa62179cca106f303a7184f6ebb7e8511b6c964eea556aadf9e36ba03b17e70453a20f3ae5270f140c0b3dffe053fe7ad3783560311d1561ad78f6bd84291c922a34f4716e0a459dfb9a8bd3c39d4b98704829d5aebae7460f68fe14e74b4b625d20c3e800565c355d51f9698b849fa5900af9059910faa29889ca8fcd189e997246491133e465d161fe85d5aeac5b33214a1df0e11d7d71a47d94a33b4fcfcf3b59b1941b8f7408c9173fef206360cb564d6678b120171c3f559e80c25485b5ad2d9b5b2ae61d9df6487e83b15ce90f4761603c90df13157b5136b9d27984801c9bc8a68ec1cabaca40a5654c14902d29b0a4a73ef3ba7c8c65d161c6d9b7587a2d68c755f652c99a31881f4affe3737694727979371e73531273114fd9cf1aced01165ec94b64e931c0fe0c0941ebc3e3d30350c4a40d156516ec3854939f06a63a97a46e731b1b2b1001d3f41c8671e9bf758e61e4e6fc4de6e02d3b9c43b3bb522ef16016227c33077ab5aa0f9ba659709b7f8013b666772236dd45d75f50263fb94de768c5800a78149e5490cd9f87ef1827e0a3c1b6817f67787aaad5ddf4e2dd8586b6f42a6e529dd5fdc83f386c61bfb49d62a89dfc1bfc48a8dfc6e38c9f3d732feae68bf8a3b7754069db443c7a5f71498af88ae777d46e0ccecb0729b14e899311aa6df58c3078be758d0504dba41258c1bf16f5aa97825b009c403715747e529d65a8f394206333a53efbfd77e00f04264a00d9356e7e868d0a6be159c7059e8afedaa8cc3a8b392e49e7f26dfbdd7967b053969cd558d460648c2cf02eeddecf8aa4fdb54a685d84da29f477ee1240eeae5dba9569df6495452c1b8bec18798f35b12a175b9f16e6e8df96382f89cbfe8e027e3af51e7b236c49d6b95bc0981cb24269ecb4b0f344be2251ef5fa72c07ec73871da6698707627f770cf0e7bc29eb3eefa9caad06d72115166b8eaba0ced74e4c0414bb9ebe36a6c912501d38085badfc25544d722d41c576c2ee51615d53a591249f6d831cafef59889947e1328296b2799049b193798b6e04701ffd394ead354e11a79386296753fbcaf7f6d3726449042a87d199d4caa607bcc4982c35eb8a246e9f1391a496ec71f4d5859cf1397466520da317977dc67baa18ebc01f39633f1f94f492c5ca6247e9de47ae0464249aa0871007536bc19d3bc606016a9378c525d77082b912ed2625ca37bc4826055f8e9cf6400ba4b1940ccb06b9102dc9bf3397430fb9219ae3b9bad0131cae4804dd45b8a141512f816d4de0fe6f5b6a1fed66df65b48399a525ddc9f2cc4c10228e01f8cae3d76f920d45a0f9e459bec07337ed1ec975f782ddb5f1f6f67c6d445e7e9aba67fe4c7f4b68977269548e68b8d7bc658c682e649c7c2b0926e7b32e62ed15d3055eddb0f7a927b4eac4b2c47d8ad8e762a009857f4f7c55266b72dcb519ac4dcc210310e5aa6f19c941e087e57ecaad0f2cda664eb28d4facc5251ee5703c5abba9b17647506fabfae60c51b8015cb3528be176a8c0f8b0e1ba51e00b4b69b18535ffef2654dbf317ad74852c87d351b0145dd60fdac7abef2ba59fb0d70c980309a574f168226cdab0d3d3c8b71230f07a85fd80d8275bd9889881314675af64a58a183f89cf27af24fe253f7e75aa20061e03fc9ae4f713690ac4c6f7c0c6e197069fa490f226e6e176eb113cf24828088cb0a748fa9a505742924f297f308f8d8a1d33b41795b093e8b90ba6ebf06131512b67aa8929436b94e6183c61fd62fbdfc92be13029a7c9dbae67b4636aa0cc95aa54d579095bf06c65493c4322fbba9d3b5acb095f01284a0e1fc8cdc94e35ec595fbcf44c5c8367db4a01f5d1a520c5e711b923202c674a61985a41787040b0ed5e4933a6be939ef0a620cd1ce3d148bb3fab4ca2a13c191ab53a06e29b6c20e7fe44c0cf425a807f39b735830d619bcf4ece4edf91d8c62fe650c1d7730f9cb0a32d7589b87e038d5ce9b8521a8c99ddffef396880e254509eec962aaee544cb72ced96c9bc6c8fa7d1d4de3d0eab2f553065b7e3c4f53e8196bf1cbc4e95fb98a846bfa319ab47c47a9e1af1b73dc43c45dc5589e82f4c7e9ef25f0f3a1ec25a2699b6c6b74aaa67ec6b95da12cede9e515cb5e3c30548f5f4901f36ebdce685ae65ff22ded6887216af8d20b4c597e6374508d059e709f506efd0c64ee1aae0600deaa893ae351f9c2712df185058f3951bd4027fefae313e8c796b30aec20be4b72191e36ffa2e8bc59804483a2e5f762b6b108fd4ca31de0cba5610b5f82357c9b37b8fdff21e67b10b0b3059c4383e22be88c7444101590094846f82ed8392f62fbe873b5355a88c538c3ae27879508eb9a81adcef5e5a4a3c90e24b52495955705dc74bd0623abb682a6b96db98547dcf4eeaeea41853a022ae58fef5036e9d5fa3875f4459277ba0e66ce348f0f3ad38d025ce1f51b16777d1cb2f3889ff632fb4aa4cea88e6f32613c1bd5afc8740133a50228fb3f853bbc9b1d51d44abfa82cd70a4d5805bc4b0a6892f27f76dbdca3ee3776347433fec627b5b755d99736d8199661585b3e571260f2fddb18071fd7bdc376c3be9f6066fcdb76819f428a29bfcc62ab15b94f7a2331e79fe96ff3e2bfae5d51cc1bc3ad47f25d3325756e2b8e25cbaef54f0914aab900fe5a565b3f0f0f8da121119428d68ace79cdeadc5a9f140e8de2218267833e41c5393c645fb71111820303c9847bd90f5cbafb694f1a2a40d4a8f984edb665c4b5e09f9e335110ec722f70f28ee9a071df31b83f0718043a706a4ce67ebb27232c8395dc39e9246d7286550b8f5542c899f3050e18e121664b91ef40c0f2ac590efa0374151c044c9268677ca4fe3ed7a988357d5e29d9401a701bbbae14eb83971a60b38511f415ce1136b6514c01b9f4ef20e5d21bdda5ffd577018915e592927900cfbe6767c57bfb4dad85b84122d14303cb5e8621e76d4302b333a0bc4e31f73945455cdb14374dfdda2cc6da541c66f11b6442c38d865277d09fda31a0359bccae455289132692d17e04f554edb97d880c74ede59fabd146bc74943306f13c87ad85703d674f61f3906d106da0b18a8f125516cde3acf2f566f6bbedc6741fdf957a6b5870261f39b4b85e5357f5b4c4a972f8637fd520a4e45423e203c087c099673a4255337b92a7f7b7d87727d3fc2a4afdb788112e0f7c3009b51363318aa1f8c5c6bbd46dc7390bd41208db97ed0b0ab2e4ac9b5048bd2512886f57595d63ab924962295d9413413f55ce228c8ede2574b6dc01835db28c4ddf4976bcd97de6a39dbb876c05348429a1b8bbfd418440d6fb5702a99ee545c6910f04937cb5ba1b988936bd3ef0395705146cc2369f3f97e736159ed3191a7071acf3cefbc0cf328e719463fd5752d9c47246d6daf35535cb116ccb988926121cbcaeab8aca7a386000b5c4dc6493cd13168b672de8738593306195c4773a39eee59dacdf19d84f30621f9242bda9fd89afb67356110f9a368eb00e2845d0c827a618fdec1b76db7b6ea2ea495592e2ee271cd0d4fd90fcbec0c54a9759213791f13813e94664f430d6adc5277760f787d76abf2548d836dec30700ac4cf181d478ab06a40fb69e203659c26bf7f788525be0c5fc7b64e1fe4ee66ec3737ea41eb10715da7ff57b3e40b8f0c875ddd22da4b5bc683b8b3f333300a22d5d90b20496ac108c8d963ec7ffeda66a8a7afa6eb91512104783a27770e66a99e9b2ba2afdc1285109eba98aa57b0ac01b292592a7dcffecb081aa2b7dfe29b4318bb804ea410d0c232b69468f1a9fc6297f4959a041ceabc72e12664f66eb6c556a54c833f1d601b8cd0db5eaa204ddaace44703651878e33bf8f5feb57b59bef96cda04be4da0eb6bfa4403de0e23dbf9715009ed31859ff4b99548668f745745a30cd59a6ed3c29eaf13d5145ce792243014ca39bb72d018ddbccba1e417cba17418b712fc6f6fb9d696592c831c84dfe99268c64e37ef7b6299d9bd814b49b5273548c2ac2ce59f0cd5a20330b5e5571db2cc68500da52780f1fbab9587df30455a52fd2fba9990c7efe87056b4286e8b5ff651b5543ed72561ea1b545862fef2bf60c2a0a08fc4e6c5200b84412679567fc5d64e5a203df5b70805c0c14b044a3749579857e06fe498f31fcab8da63ae3cd20785558b0b50abd41b59777e6ec6f89f8233765f3c62ecdf997231ecb35b0d6f8b9d51e1c94ab7029e00d08ea53d0ff893640e7a2d08abebf9e4deef366e60a4a28c38904c71aaacad12f2795ddda5952dabd2dde9d42fe89f0ed49ceafa3472d74339d228120cb89bc95504f7fe159267974afeba2812f678790429fe2b92850735e34d3c52e79cb673392fa65f2e241e95057d7a5e3352ebdfe95e10754090660a0f5810ed8e09de7741d1399ca846820e4bc6c52e594f3788c52e91e2aeb04313aa92a00dd0d9bef21192656d9677feb553c3d57207095393574847a07223c3116668f0c34301ab9c430f70a5fc3f4600328692add6691b218254a176ee338bd90cde162c5fe9c979bf7f417f664438858e05131fb7f767516a81f0cc6c4b2d87ab5251863855afa816664b747a4dda3f9ae35501b21069c9755be398e45a195255e4a41efd8039b367de0b89b356124ec3700f5442aadf838a6b88d4c63c");
compress = compress.ToLower();
IEnumerable<byte> decryptedData = data;
if (eamuse_info != null)
decryptedData = RC4.ApplyEAmuseInfo(eamuse_info, data);
var rawData = decryptedData;
if (compress == "lz77")
rawData = LZ77.Decompress(decryptedData);
else if (compress != "none")
throw new ArgumentException("Unsupported compression algorithm");
KBinXML kbinxml = new KBinXML(rawData.ToArray());
Console.WriteLine(kbinxml.ToString());
//GenerateEchidnaSQL(kbinxml);
}
private static void GenerateEchidnaSQL(KBinXML get_mdata_data)
{
const int profile_id = 1;
XDocument doc = get_mdata_data.Document;
XElement mdata_list = doc.Element("response").Element("gametop").Element("data").Element("player").Element("mdata_list");
foreach (XElement music in mdata_list.Elements("music"))
{
long music_id = long.Parse(music.Attribute("music_id").Value);
for (int seq = 0; seq <= 2; ++seq)
{
int score = int.Parse(music.Element("score").Value.Split(' ')[seq]);
if (score <= 0)
continue;
int clear = int.Parse(music.Element("clear").Value.Split(' ')[seq]);
int play_cnt = int.Parse(music.Element("play_cnt").Value.Split(' ')[seq]);
int clear_cnt = int.Parse(music.Element("clear_cnt").Value.Split(' ')[seq]);
int fc_cnt = int.Parse(music.Element("fc_cnt").Value.Split(' ')[seq]);
int ex_cnt = int.Parse(music.Element("ex_cnt").Value.Split(' ')[seq]);
string barData = "";
foreach (XElement bar in music.Elements("bar"))
{
if (bar.Attribute("seq").Value != seq.ToString())
continue;
foreach (string v in bar.Value.Split(' '))
barData += byte.Parse(v).ToString("X2");
}
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds() * 1000L;
string query = $@"
INSERT INTO jubeat_scores(
music_id,
timestamp,
score,
clear_type,
seq,
num_perfect,
num_great,
num_good,
num_poor,
num_miss,
play_count,
clear_count,
fc_count,
ex_count,
bar,
music_rate,
is_hard_mode,
is_hazard_end,
best_score,
best_music_rate,
best_clear,
profile_id
) VALUES (
{music_id},
{timestamp},
{score},
{clear},
{seq},
0,
0,
0,
0,
0,
{play_cnt},
{clear_cnt},
{fc_cnt},
{ex_cnt},
X'{barData}',
-1,
0,
0,
{score},
-1,
{clear},
{profile_id}
);";
Console.WriteLine(query.Replace("\n", "").Replace("\r", "").Replace(" ", " "));
}
}
}
private static string BytesToString(IEnumerable<byte> bytes)
{
var sb = new StringBuilder();
foreach (byte b in bytes) {
char c = (char)b;
if (c == '\n')
sb.Append("\\n");
else if (c == '\r')
sb.Append("\\r");
else if (c == '\t')
sb.Append("\\t");
else if (b < 128 && (char.IsLetterOrDigit(c) || char.IsPunctuation(c) || char.IsWhiteSpace(c)))
sb.Append(Convert.ToString(c));
else
sb.Append("\\x" + Convert.ToString(b, 16).PadLeft(2, '0'));
}
return sb.ToString();
}
private static byte[] ExtractResource(string fileName)
{
var a = System.Reflection.Assembly.GetExecutingAssembly();
using (var fStream = a.GetManifestResourceStream(fileName))
{
if (fStream == null)
throw new ArgumentException("resource does not exist", "fileName");
byte[] res = new byte[fStream.Length];
for (int pos = 0; pos < res.Length; )
pos += fStream.Read(res, pos, res.Length - pos);
return res;
}
}
public static byte[] HexToBytes(string hex)
{
int len = hex.Length;
byte[] bytes = new byte[len / 2];
for (int i = 0; i < len; i += 2)
bytes[i >> 1] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
}
}