Additional Info
|
As far as I know, there are some kinds of sitelock, you may want to unlock it.
If you don't understand what I'm writing here, don't ask me, I'm NOT responsible for answering the question. Tools: Firefox plugin - HTTP Live Header SWF Memory Dumper SWF Decrypt UnSWFEncryptUnp Notepad A professional Hex Editor such as Hex Editor Neo SoThink SWF Decompiler SoThink SWF Editor Optional but useful: Apache Httpd Server Here are some kinds of sitelocks, if it is obfuscated, you may find something similar, and you should know how to deobfuscate it using UnSWFEncryptUnp and SWF Decrypt. You need to hex edit the swf instead of using cheat engine. AS2: The Simplest one Hashed Level Names AS3: The Simplest one Binary in SWF |
Additional Info
|
There is such a function in NitromeGame: ? ? ? function getNitrome() { ? ? ? ? ? ? ? var _loc5 = false; ? ? ? ? ? ? ? for (var _loc3 = 0; _loc3 < nitrome_url.length; ++_loc3) { ? ? ? ? ? ? ? ? ? ? ? var _loc4 = nitrome_url[_loc3]; ? ? ? ? ? ? ? ? ? ? ? if (_root._url.substr(0, _loc4.length) == _loc4) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc5 = true; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? } ? ? ? ? ? ? ? return (_loc5); ? ? ? } Change var _loc5 = false to var _loc5 = true In AoB ? ? ? //4f ? ? ? _setMember ? ? ? //96 04 00 04 02 08 09 ? ? ? _push register2 "getNitrome" ? ? ? //8e 08 00 00 00 00 06 69 00 9a 00 ? ? ? _defineFunction2 '' [0 params]() //regCount[0x06], flag[0x69], end offset is: #77 ? ? ? //96 02 00 05 00 -> 96 02 00 05 01 ? ? ? _push false ? ? ? //87 01 00 05 ? ? ? _storeRegister 5 ? ? ? //17 ? ? ? _pop ? ? ? //96 09 00 06 00 00 00 00 00 00 00 00 ? ? ? _push 0 ? ? ? //87 01 00 03 ? ? ? _storeRegister 3 ? ? ? //17 ? ? ? _pop Then, play through the whole game on genuine site, unlock all levels, use Live HTTP Header, on the second page, select request (and don't be noob to cancel capture). Click on each level, and let it generate a request to the level file, so you know the path, download the levels. |
Additional Info
|
You have to apply AS2: The Simplest One first Find these 2 functions in SaveFunction ? ? ? function getDataFile() { ? ? ? ? ? ? ? var _loc3 = String(_root.gcs + _root.gcid); ? ? ? ? ? ? ? var _loc4 = md5.hash(_loc3); ? ? ? ? ? ? ? return (_loc4); ? ? ? } ? ? ? function getLevelPrefix(num) { ? ? ? ? ? ? ? var _loc4 = String(_root.lpfx + num); ? ? ? ? ? ? ? var _loc3 = md5.hash(_loc4); ? ? ? ? ? ? ? return (_loc3); ? ? ? } Now play through the original game and use Live HTTP Header to capture each level's name, and the name of a file that will load on each level. ? ? ? function getDataFile() { ? ? ? ? ? ? ? var _loc3 = String(_root.gcs + _root.gcid); ? ? ? ? ? ? ? var _loc4 = md5.hash(_loc3); ? ? ? ? ? ? ? return (_loc4); ? ? ? } -> ? ? ? function getDataFile() { ? ? ? ? ? ? ? return (%The name of file that will load on each level%); ? ? ? } And ? ? ? function getLevelPrefix(num) { ? ? ? ? ? ? ? var _loc4 = String(_root.lpfx + num); ? ? ? ? ? ? ? var _loc3 = md5.hash(_loc4); ? ? ? ? ? ? ? return (_loc3); ? ? ? } -> ? ? ? function getLevelPrefix(num) { ? ? ? ? ? ? return (String(num)); ? ? ? } That is, in AoB ? ? ? //4f ? ? ? _setMember ? ? ? //96 04 00 04 02 08 1e ? ? ? _push register2 "getDataFile" ? ? ? //8e 08 00 00 00 00 05 69 00 37 00 ? ? ? _defineFunction2 '' [0 params]() //regCount[0x05], flag[0x69], end offset is: #405 ? ? ? //96 04 00 04 02 08 1f ? ? ? _push register2 "gcs" ? ? ? //4e ? ? ? _getMember ? ? ? //96 04 00 04 02 08 11 ? ? ? _push register2 "gcid" ? ? ? //4e ? ? ? _getMember ? ? ? //47 ? ? ? _add2 ? ? ? //4b ? ? ? _toString ? ? ? //87 01 00 03 ? ? ? _storeRegister 3 ? ? ? //17 ? ? ? _pop ? ? ? //96 0b 00 04 03 07 01 00 00 00 04 01 08 06 ? ? ? _push register3 1 register1 "md5" ? ? ? //4e ? ? ? _getMember ? ? ? //96 02 00 08 20 ? ? ? _push "hash" ? ? ? //52 ? ? ? _callMethod ? ? ? //87 01 00 04 ? ? ? _storeRegister 4 ? ? ? //17 ? ? ? _pop ? ? ? //96 02 00 04 04 ? ? ? _push register4 ? ? ? //3e ? ? ? _return -> ? ? ? // 96 22 00 00 (Here is the name you found in HEX, don't put an A if you see A in the name) 00 ? ? ? _push "That Lengthy Name" ? ? ? // 01 ...(A lot of)... 01 ? ? ? _Nop, you should replace all BOLDED content afterwards with 01 until the 3e, which is NOT bolded ? ? ? //4f ? ? ? _setMember ? ? ? //96 04 00 04 02 08 21 ? ? ? _push register2 "getLevelPrefix" ? ? ? //8e 0d 00 00 01 00 06 69 00 05 6e 75 6d 00 34 00 ? ? ? _defineFunction2 '' [1 params](<reg5>num) //regCount[0x06], flag[0x69], end offset is: #423 ? ? ? //96 04 00 04 02 08 22 ? ? ? _push register2 "lpfx" ? ? ? //4e ? ? ? _getMember ? ? ? //96 02 00 04 05 ? ? ? _push register5 ? ? ? //47 ? ? ? _add2 ? ? ? //4b ? ? ? _toString ? ? ? //87 01 00 04 ? ? ? _storeRegister 4 ? ? ? //17 ? ? ? _pop ? ? ? //96 0b 00 04 04 07 01 00 00 00 04 01 08 06 ? ? ? _push register4 1 register1 "md5" ? ? ? //4e ? ? ? _getMember ? ? ? //96 02 00 08 20 ? ? ? _push "hash" ? ? ? //52 ? ? ? _callMethod ? ? ? //87 01 00 03 ? ? ? _storeRegister 3 ? ? ? //17 ? ? ? _pop ? ? ? //96 02 00 04 03 ? ? ? _push register3 ? ? ? //3e ? ? ? _return -> ? ? ? // 96 02 00 04 05 ? ? ? _push register5 ? ? ? //4b ? ? ? _toString ? ? ? // 01 ...(A lot of)... 01 ? ? ? _Nop, you should replace all BOLDED content afterwards with 01 until the 3e, which is NOT bolded Now, Download the swf that always load on each level and all levels files, rename each level to 1, 2, 3...., place them in correct relative folder structure as it is in it server and you are done. |
Additional Info
|
In NitromeGame package, find this function
? ? ? ? ? ? ? public static function isAtURL(... args) : Boolean { ? ? ? ? ? ? ? ? ? ? ? var _loc_6:Boolean = true; ? ? ? ? ? ? ? ? ? ? ? ; ? ? ? ? ? ? ? ? ? ? ? var _loc_5:* = _loc_5; ? ? ? ? ? ? ? ? ? ? ? args++; ? ? ? ? ? ? ? ? ? ? ? args--; ? ? ? ? ? ? ? ? ? ? ? var _loc_7:* = null is false; ? ? ? ? ? ? ? ? ? ? ? var _loc_3:Array = null; ? ? ? ? ? ? ? ? ? ? ? var _loc_4:int = 0; ? ? ? ? ? ? ? ? ? ? ? var _loc_5:String = null; ? ? ? ? ? ? ? ? ? ? ? if (!_loc_7){ ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? args.push(NITROME_URL); ? ? ? ? ? ? ? ? ? ? ? args = 0; ? ? ? ? ? ? ? ? ? ? ? while (args < args.length){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_3++; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? args++; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_3--; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_3 = args[args]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (!_loc_7){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_4 = 0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (_loc_6 || args){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? while (_loc_4 < _loc_3.length){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_5 = _loc_3[_loc_4]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_3 = null; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_3--; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_5--; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return true; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (_loc_6){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _loc_4++; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? args++; ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? return false; -> return true; ? ? ? ? ? ? ? } That is, in AoB, the last part of the function is //66 05 _as3_getproperty length //15 b8 ff ff _as3_iflt offset: -72 //c2 02 _as3_inclocal_i <2> //d2 _as3_getlocal <2> //d1 _as3_getlocal <1> //66 05 _as3_getproperty length //15 7a ff ff _as3_iflt offset: -134 //27 -> 26 _as3_pushfalse -> _as3_pushtrue //48 _as3_returnvalue ? ? ? ? ? ? ? } |
Additional Info
|
Open game swf with SWF Editor,
Search for binarydata, you will be brought to DefineBinaryData tag, Right click and save as "original" Edit with hex editor you will see XX XX XX XX (Old Binary Data) 00 00 Delete the first 4 bytes and the last 2 bytes of 00 Save it. Using SWF Memory Dump, open the game, look for an approx. 200KB file, dump and uncompress it. Do AS3: The Simplest One on this smaller swf. Compress it, open it with hex editor. Copy the first 12 byte of original and insert it at the begining. You will see XX XX ?? ?? ?? ?? XX XX YY YY YY YY (here is your new binary data, it looks like 43 57 53 ........ ) Count the length of your binary data starting from YY YY YY YY and write it to ?? ?? ?? ?? in little endian In the game swf, replace the whole original hex code with the whole new hex code. Scroll to the begining of game swf, there is XX 57 53 XX ?? ?? ?? ?? .... Count the number of byte of the whole swf and write it in ?? ?? ?? ?? in little endian. Save it and it is done. |