diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index ae9b137..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -msc/* linguist-vendored diff --git a/.gitignore b/.gitignore index 3d4a4e6..c91ceed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .config +make* /bin \ No newline at end of file diff --git a/CONTRIBUTING.org b/CONTRIBUTING.org deleted file mode 100644 index 04a5406..0000000 --- a/CONTRIBUTING.org +++ /dev/null @@ -1,19 +0,0 @@ -* Making daruma better -If you're, as a newbie, looking for a chance to prove oneself -- here it is! - -Start working with any of the issues I've left in this repo and hone your skills. Some of them are pretty trivial, most of them are fairly interesting. -Also, bug squashing. It's not a Starship Trooper's poligon, but we consider bugs to be bad too. - -I believe that it's a good opportunity for both of us to learn how to communicate is OSS world and make collaborative stuff together in an informal and relaxed way. So, just keep fun in a house. - -*A few prerequisites:* -- stick with the original coding style and format everything accordingly (one exception is /dialects/ or when clarity should be over clutter); -- test that everything works; -- then test it again; -- leave some comment breadcrumbs on your gotchas and non-trivial coding somersaults; -- as this project strives to be platform-independent, don't implement changes that go against this idea; -- less is more; -- be nice. - -*A couple of details:* -- when working with the codebase, please use provided ~%make.red~ script in a root directory if you're compiling an executable; current alpha compiler sometimes can't correctly process way too dynamic code and that leads to unpleasant errors and unexpected behavior that could be caught only /after/ compilation. diff --git a/README.org b/README.org index aaa004a..092a1c6 100644 --- a/README.org +++ b/README.org @@ -15,26 +15,11 @@ Grab [[https://github.com/9214/daruma/releases/latest][latest release]] for your *Please note* that only Win version was tested, and MacOS bundle just cross-compiled. For Linux folks - sorry guys, GTK graphical backend is a work-in-progress, hence no GUI and executable. Either use Wine or other fan-made implementations. ** From source -- *prerequisite:* Internet connection; - download [[http://www.red-lang.org/p/download.html][Red toolchain]] ([[http://red.github.io/#download][mirror]]); - fork or download this repo; -- create a ~.config~ file in downloaded (and unpacked) directory in the following format: +- compile ~./src/main.red~ with ~-e~ and ~-r~ flags. If you want to cross-compile, specify ~-t~ flag and target platform. Example: #+BEGIN_SRC red -red: "" -opt: "" -#+END_SRC -example: -#+BEGIN_SRC red -red: "/home/user/dev/red/red-latest" -opt: "-c -t WindowsXP -o /home/user/daruma" -#+END_SRC - -- call toolchain with ~--cli~ flag and: -#+BEGIN_SRC red ->> cd %/red/file/path/to/daruma/dir/ ->> do %make.red -== OK ->> compile +./red -e -r -t WindowsXP ./src/main.red -o ./daruma.exe #+END_SRC - that's it, compiled binary should be in a root/specified directory. @@ -52,14 +37,10 @@ If *you* place *daruma* in a *gamedir* and launch it, it will /silently/ patch a ** Decoder If *you* launch *daruma* in any other directory that /doesn't looks like/ *gamedir* (i.e. doesn't contain any of the save files), a tiny window will pop up for you to enter 16-character Internet code. Well, just do it and hit Enter. Then, if everything is fine, write-down decoded locker code and use it to grab 13th MDisk. -* Contributing -Even though codebase is miniscule, there're a few things to do for those who are new to programming and open source. Don't be shy and consult [[./CONTRIBUTING.org][CONTRIBUTING]] file for details. - * Repo structure - ~src/~ :: main directory with all scripts; - ~tb/~ :: testing data and crude tests for decoder; -- ~msc/~ :: miscellaneous files and resources (mainly original disassembly dump, app's icon and macro for save harvesting); -- ~make.red~ :: "makefile" for debugging/releasing. +- ~msc/~ :: miscellaneous files and resources (mainly app icon, original disassembly and macro for save harvesting). * API Two words are exposed into global context: diff --git a/make.red b/make.red deleted file mode 100644 index a5dae83..0000000 --- a/make.red +++ /dev/null @@ -1,29 +0,0 @@ -Red [ - Title: "BG&E MDisk #13" - Rights: "Hey Pops, stay Zen!" - Icon: %./msc/mdisk.ico - Version: 1.2.1.5 - Needs: View - - Author: https://github.com/9214 - Date: 21-07-2017 - License: "WTFPL" - Tabs: 4 -] - -scripts: [%aids.red %decoder.red %picklock.red %gui.red %main.red] - -compile: does [ - do https://raw.githubusercontent.com/9214/rtool/master/encap.red - encap - source-of/header %./make.red ; system/options/script won't work from console - reduce [%./src/ scripts] - load %.config -] - -interpret: does [ - change-dir %./src/ - forall scripts [do first scripts] -] - -'OK \ No newline at end of file diff --git a/msc/disasm.asm b/msc/disasm.asm deleted file mode 100644 index b4cba90..0000000 --- a/msc/disasm.asm +++ /dev/null @@ -1,555 +0,0 @@ -00495E80 55 PUSH EBP -00495E81 8BEC MOV EBP,ESP -00495E83 81EC C0000000 SUB ESP,0C0 -00495E89 8995 44FFFFFF MOV DWORD PTR SS:[EBP-BC],EDX -00495E8F 898D 48FFFFFF MOV DWORD PTR SS:[EBP-B8],ECX -00495E95 83BD 44FFFFFF 64 CMP DWORD PTR SS:[EBP-BC],64 -00495E9C 0F8C 74060000 JL BGE.00496516 -00495EA2 C785 58FFFFFF 25>MOV DWORD PTR SS:[EBP-A8],25 -00495EAC C785 5CFFFFFF 1F>MOV DWORD PTR SS:[EBP-A4],1F -00495EB6 C785 60FFFFFF 1D>MOV DWORD PTR SS:[EBP-A0],1D -00495EC0 C785 64FFFFFF 17>MOV DWORD PTR SS:[EBP-9C],17 -00495ECA C785 68FFFFFF 13>MOV DWORD PTR SS:[EBP-98],13 -00495ED4 C785 6CFFFFFF 11>MOV DWORD PTR SS:[EBP-94],11 -00495EDE C785 70FFFFFF 0B>MOV DWORD PTR SS:[EBP-90],0B -00495EE8 C785 74FFFFFF 07>MOV DWORD PTR SS:[EBP-8C],7 -00495EF2 83BD 44FFFFFF 73 CMP DWORD PTR SS:[EBP-BC],73 -00495EF9 7E 07 JLE SHORT BGE.00495F02 -00495EFB 33C0 XOR EAX,EAX -00495EFD E9 24080000 JMP BGE.00496726 -00495F02 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -00495F08 C1E0 06 SHL EAX,6 -00495F0B 8B88 D452D400 MOV ECX,DWORD PTR DS:[EAX+D452D4] -00495F11 81E1 00007E00 AND ECX,7E0000 -00495F17 C1F9 11 SAR ECX,11 -00495F1A 894D 80 MOV DWORD PTR SS:[EBP-80],ECX -00495F1D 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -00495F23 C1E2 06 SHL EDX,6 -00495F26 8B82 D452D400 MOV EAX,DWORD PTR DS:[EDX+D452D4] -00495F2C 25 00000100 AND EAX,10000 -00495F31 C1F8 0B SAR EAX,0B -00495F34 8945 84 MOV DWORD PTR SS:[EBP-7C],EAX -00495F37 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00495F3D C1E1 06 SHL ECX,6 -00495F40 8B91 D452D400 MOV EDX,DWORD PTR DS:[ECX+D452D4] -00495F46 83E2 03 AND EDX,3 -00495F49 C1E2 03 SHL EDX,3 -00495F4C 8B45 84 MOV EAX,DWORD PTR SS:[EBP-7C] -00495F4F 0BC2 OR EAX,EDX -00495F51 8945 84 MOV DWORD PTR SS:[EBP-7C],EAX -00495F54 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00495F5A C1E1 06 SHL ECX,6 -00495F5D 8B91 D852D400 MOV EDX,DWORD PTR DS:[ECX+D452D8] -00495F63 81E2 00000007 AND EDX,7000000 -00495F69 C1FA 18 SAR EDX,18 -00495F6C 8B45 84 MOV EAX,DWORD PTR SS:[EBP-7C] -00495F6F 0BC2 OR EAX,EDX -00495F71 8945 84 MOV DWORD PTR SS:[EBP-7C],EAX -00495F74 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00495F7A C1E1 06 SHL ECX,6 -00495F7D 8B91 D452D400 MOV EDX,DWORD PTR DS:[ECX+D452D4] -00495F83 81E2 003F0000 AND EDX,3F00 -00495F89 C1FA 08 SAR EDX,8 -00495F8C 8955 88 MOV DWORD PTR SS:[EBP-78],EDX -00495F8F 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -00495F95 C1E0 06 SHL EAX,6 -00495F98 8B88 D852D400 MOV ECX,DWORD PTR DS:[EAX+D452D8] -00495F9E 81E1 0000FC00 AND ECX,0FC0000 -00495FA4 C1F9 12 SAR ECX,12 -00495FA7 894D 8C MOV DWORD PTR SS:[EBP-74],ECX -00495FAA 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -00495FB0 C1E2 06 SHL EDX,6 -00495FB3 8B82 D852D400 MOV EAX,DWORD PTR DS:[EDX+D452D8] -00495FB9 25 00F00300 AND EAX,3F000 -00495FBE C1F8 0C SAR EAX,0C -00495FC1 8945 90 MOV DWORD PTR SS:[EBP-70],EAX -00495FC4 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00495FCA C1E1 06 SHL ECX,6 -00495FCD 8B91 D852D400 MOV EDX,DWORD PTR DS:[ECX+D452D8] -00495FD3 81E2 C00F0000 AND EDX,0FC0 -00495FD9 C1FA 06 SAR EDX,6 -00495FDC 8955 94 MOV DWORD PTR SS:[EBP-6C],EDX -00495FDF 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -00495FE5 C1E0 06 SHL EAX,6 -00495FE8 8B88 D852D400 MOV ECX,DWORD PTR DS:[EAX+D452D8] -00495FEE 83E1 3F AND ECX,3F -00495FF1 894D 98 MOV DWORD PTR SS:[EBP-68],ECX -00495FF4 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -00495FFA C1E2 06 SHL EDX,6 -00495FFD 8B82 F052D400 MOV EAX,DWORD PTR DS:[EDX+D452F0] -00496003 25 FC000000 AND EAX,0FC -00496008 C1F8 02 SAR EAX,2 -0049600B 8945 9C MOV DWORD PTR SS:[EBP-64],EAX -0049600E 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00496014 C1E1 06 SHL ECX,6 -00496017 8B91 F052D400 MOV EDX,DWORD PTR DS:[ECX+D452F0] -0049601D 83E2 03 AND EDX,3 -00496020 C1E2 04 SHL EDX,4 -00496023 8955 A0 MOV DWORD PTR SS:[EBP-60],EDX -00496026 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -0049602C C1E0 06 SHL EAX,6 -0049602F 8B88 EC52D400 MOV ECX,DWORD PTR DS:[EAX+D452EC] -00496035 81E1 0000001E AND ECX,1E000000 -0049603B C1F9 19 SAR ECX,19 -0049603E 8B55 A0 MOV EDX,DWORD PTR SS:[EBP-60] -00496041 0BD1 OR EDX,ECX -00496043 8955 A0 MOV DWORD PTR SS:[EBP-60],EDX -00496046 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -0049604C C1E0 06 SHL EAX,6 -0049604F 8B88 EC52D400 MOV ECX,DWORD PTR DS:[EAX+D452EC] -00496055 81E1 00000001 AND ECX,1000000 -0049605B C1F9 13 SAR ECX,13 -0049605E 894D A4 MOV DWORD PTR SS:[EBP-5C],ECX -00496061 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -00496067 C1E2 06 SHL EDX,6 -0049606A 8B82 EC52D400 MOV EAX,DWORD PTR DS:[EDX+D452EC] -00496070 25 001F0000 AND EAX,1F00 -00496075 C1F8 08 SAR EAX,8 -00496078 8B4D A4 MOV ECX,DWORD PTR SS:[EBP-5C] -0049607B 0BC8 OR ECX,EAX -0049607D 894D A4 MOV DWORD PTR SS:[EBP-5C],ECX -00496080 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -00496086 C1E2 06 SHL EDX,6 -00496089 8B82 EC52D400 MOV EAX,DWORD PTR DS:[EDX+D452EC] -0049608F 25 00001F00 AND EAX,1F0000 -00496094 C1F8 0E SAR EAX,0E -00496097 8945 A8 MOV DWORD PTR SS:[EBP-58],EAX -0049609A 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -004960A0 C1E1 06 SHL ECX,6 -004960A3 8B91 EC52D400 MOV EDX,DWORD PTR DS:[ECX+D452EC] -004960A9 83E2 0C AND EDX,0C -004960AC C1FA 02 SAR EDX,2 -004960AF 8B45 A8 MOV EAX,DWORD PTR SS:[EBP-58] -004960B2 0BC2 OR EAX,EDX -004960B4 8945 A8 MOV DWORD PTR SS:[EBP-58],EAX -004960B7 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -004960BD C1E1 06 SHL ECX,6 -004960C0 8B91 EC52D400 MOV EDX,DWORD PTR DS:[ECX+D452EC] -004960C6 83E2 03 AND EDX,3 -004960C9 C1E2 04 SHL EDX,4 -004960CC 8955 AC MOV DWORD PTR SS:[EBP-54],EDX -004960CF 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -004960D5 C1E0 06 SHL EAX,6 -004960D8 8B80 D052D400 MOV EAX,DWORD PTR DS:[EAX+D452D0] -004960DE 99 CDQ -004960DF B9 3C000000 MOV ECX,3C -004960E4 F7F9 IDIV ECX -004960E6 8955 BC MOV DWORD PTR SS:[EBP-44],EDX -004960E9 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -004960EF C1E2 06 SHL EDX,6 -004960F2 8B82 D052D400 MOV EAX,DWORD PTR DS:[EDX+D452D0] -004960F8 2B45 BC SUB EAX,DWORD PTR SS:[EBP-44] -004960FB 99 CDQ -004960FC B9 3C000000 MOV ECX,3C -00496101 F7F9 IDIV ECX -00496103 8945 FC MOV DWORD PTR SS:[EBP-4],EAX -00496106 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -00496109 99 CDQ -0049610A B9 3C000000 MOV ECX,3C -0049610F F7F9 IDIV ECX -00496111 8955 B4 MOV DWORD PTR SS:[EBP-4C],EDX -00496114 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -00496117 2B45 B4 SUB EAX,DWORD PTR SS:[EBP-4C] -0049611A 99 CDQ -0049611B B9 3C000000 MOV ECX,3C -00496120 F7F9 IDIV ECX -00496122 8945 B8 MOV DWORD PTR SS:[EBP-48],EAX -00496125 837D B8 3F CMP DWORD PTR SS:[EBP-48],3F -00496129 7E 07 JLE SHORT BGE.00496132 -0049612B C745 B8 3F000000 MOV DWORD PTR SS:[EBP-48],3F -00496132 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -00496138 C1E2 06 SHL EDX,6 -0049613B 8B82 D452D400 MOV EAX,DWORD PTR DS:[EDX+D452D4] -00496141 8945 FC MOV DWORD PTR SS:[EBP-4],EAX -00496144 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -0049614A C1E1 06 SHL ECX,6 -0049614D 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -00496150 0391 D852D400 ADD EDX,DWORD PTR DS:[ECX+D452D8] -00496156 8955 FC MOV DWORD PTR SS:[EBP-4],EDX -00496159 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -0049615F C1E0 06 SHL EAX,6 -00496162 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] -00496165 0388 EC52D400 ADD ECX,DWORD PTR DS:[EAX+D452EC] -0049616B 894D FC MOV DWORD PTR SS:[EBP-4],ECX -0049616E 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -00496174 C1E2 06 SHL EDX,6 -00496177 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -0049617A 0382 F052D400 ADD EAX,DWORD PTR DS:[EDX+D452F0] -00496180 8945 FC MOV DWORD PTR SS:[EBP-4],EAX -00496183 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] -00496186 034D B4 ADD ECX,DWORD PTR SS:[EBP-4C] -00496189 894D FC MOV DWORD PTR SS:[EBP-4],ECX -0049618C 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -0049618F 0355 B8 ADD EDX,DWORD PTR SS:[EBP-48] -00496192 8955 FC MOV DWORD PTR SS:[EBP-4],EDX -00496195 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -00496198 0345 BC ADD EAX,DWORD PTR SS:[EBP-44] -0049619B 8945 FC MOV DWORD PTR SS:[EBP-4],EAX -0049619E 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] -004961A1 81E1 0000C0FF AND ECX,FFC00000 -004961A7 C1E9 16 SHR ECX,16 -004961AA 894D F8 MOV DWORD PTR SS:[EBP-8],ECX -004961AD 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -004961B0 81E2 00F03F00 AND EDX,3FF000 -004961B6 C1FA 0C SAR EDX,0C -004961B9 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] -004961BC 03C2 ADD EAX,EDX -004961BE 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX -004961C1 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] -004961C4 81E1 FC0F0000 AND ECX,0FFC -004961CA C1F9 02 SAR ECX,2 -004961CD 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] -004961D0 03D1 ADD EDX,ECX -004961D2 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX -004961D5 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -004961D8 83E0 03 AND EAX,3 -004961DB 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] -004961DE 03C8 ADD ECX,EAX -004961E0 894D F8 MOV DWORD PTR SS:[EBP-8],ECX -004961E3 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] -004961E6 81E2 C0030000 AND EDX,3C0 -004961EC C1FA 06 SAR EDX,6 -004961EF 8B45 AC MOV EAX,DWORD PTR SS:[EBP-54] -004961F2 0BC2 OR EAX,EDX -004961F4 8945 AC MOV DWORD PTR SS:[EBP-54],EAX -004961F7 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] -004961FA 83E1 3F AND ECX,3F -004961FD 894D B0 MOV DWORD PTR SS:[EBP-50],ECX -00496200 8B55 BC MOV EDX,DWORD PTR SS:[EBP-44] -00496203 83E2 07 AND EDX,7 -00496206 8B8495 58FFFFFF MOV EAX,DWORD PTR SS:[EBP+EDX*4-A8] -0049620D 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX -00496210 C745 FC 00000000 MOV DWORD PTR SS:[EBP-4],0 -00496217 EB 09 JMP SHORT BGE.00496222 -00496219 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] -0049621C 83C1 01 ADD ECX,1 -0049621F 894D FC MOV DWORD PTR SS:[EBP-4],ECX -00496222 837D FC 28 CMP DWORD PTR SS:[EBP-4],28 -00496226 0F8D 8D000000 JGE BGE.004962B9 -0049622C 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -0049622F 83C0 01 ADD EAX,1 -00496232 0FAF45 E4 IMUL EAX,DWORD PTR SS:[EBP-1C] -00496236 99 CDQ -00496237 B9 5A000000 MOV ECX,5A -0049623C F7F9 IDIV ECX -0049623E 8955 E8 MOV DWORD PTR SS:[EBP-18],EDX -00496241 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -00496244 99 CDQ -00496245 B9 06000000 MOV ECX,6 -0049624A F7F9 IDIV ECX -0049624C 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX -0049624F 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -00496252 2B45 F4 SUB EAX,DWORD PTR SS:[EBP-C] -00496255 99 CDQ -00496256 B9 06000000 MOV ECX,6 -0049625B F7F9 IDIV ECX -0049625D 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX -00496260 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] -00496263 8B4495 80 MOV EAX,DWORD PTR SS:[EBP+EDX*4-80] -00496267 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -0049626A D3F8 SAR EAX,CL -0049626C 83E0 01 AND EAX,1 -0049626F F7D0 NOT EAX -00496271 8985 78FFFFFF MOV DWORD PTR SS:[EBP-88],EAX -00496277 BA 01000000 MOV EDX,1 -0049627C 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -0049627F D3E2 SHL EDX,CL -00496281 F7D2 NOT EDX -00496283 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] -00496286 8B4485 80 MOV EAX,DWORD PTR SS:[EBP+EAX*4-80] -0049628A 23C2 AND EAX,EDX -0049628C 8B95 78FFFFFF MOV EDX,DWORD PTR SS:[EBP-88] -00496292 83E2 01 AND EDX,1 -00496295 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -00496298 D3E2 SHL EDX,CL -0049629A 0BC2 OR EAX,EDX -0049629C 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] -0049629F 89448D 80 MOV DWORD PTR SS:[EBP+ECX*4-80],EAX -004962A3 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] -004962A6 8B4495 80 MOV EAX,DWORD PTR SS:[EBP+EDX*4-80] -004962AA 83E0 3F AND EAX,3F -004962AD 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] -004962B0 89448D 80 MOV DWORD PTR SS:[EBP+ECX*4-80],EAX -004962B4 ^E9 60FFFFFF JMP BGE.00496219 -004962B9 8B55 BC MOV EDX,DWORD PTR SS:[EBP-44] -004962BC C1FA 03 SAR EDX,3 -004962BF 83E2 07 AND EDX,7 -004962C2 8955 E8 MOV DWORD PTR SS:[EBP-18],EDX -004962C5 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -004962C8 8B8C85 58FFFFFF MOV ECX,DWORD PTR SS:[EBP+EAX*4-A8] -004962CF 894D E4 MOV DWORD PTR SS:[EBP-1C],ECX -004962D2 BA 07000000 MOV EDX,7 -004962D7 2B55 E8 SUB EDX,DWORD PTR SS:[EBP-18] -004962DA 8B8495 58FFFFFF MOV EAX,DWORD PTR SS:[EBP+EDX*4-A8] -004962E1 8945 EC MOV DWORD PTR SS:[EBP-14],EAX -004962E4 C745 FC 00000000 MOV DWORD PTR SS:[EBP-4],0 -004962EB EB 09 JMP SHORT BGE.004962F6 -004962ED 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] -004962F0 83C1 01 ADD ECX,1 -004962F3 894D FC MOV DWORD PTR SS:[EBP-4],ECX -004962F6 837D FC 1E CMP DWORD PTR SS:[EBP-4],1E -004962FA 0F8D 17010000 JGE BGE.00496417 -00496300 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -00496303 83C2 01 ADD EDX,1 -00496306 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C] -00496309 0FAFC2 IMUL EAX,EDX -0049630C 83C0 2D ADD EAX,2D -0049630F 99 CDQ -00496310 B9 5A000000 MOV ECX,5A -00496315 F7F9 IDIV ECX -00496317 8955 E8 MOV DWORD PTR SS:[EBP-18],EDX -0049631A 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -0049631D 99 CDQ -0049631E B9 06000000 MOV ECX,6 -00496323 F7F9 IDIV ECX -00496325 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX -00496328 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -0049632B 2B45 F4 SUB EAX,DWORD PTR SS:[EBP-C] -0049632E 99 CDQ -0049632F B9 06000000 MOV ECX,6 -00496334 F7F9 IDIV ECX -00496336 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX -00496339 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -0049633C 83C2 01 ADD EDX,1 -0049633F 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] -00496342 0FAFC2 IMUL EAX,EDX -00496345 83C0 2D ADD EAX,2D -00496348 99 CDQ -00496349 B9 5A000000 MOV ECX,5A -0049634E F7F9 IDIV ECX -00496350 8995 50FFFFFF MOV DWORD PTR SS:[EBP-B0],EDX -00496356 8B85 50FFFFFF MOV EAX,DWORD PTR SS:[EBP-B0] -0049635C 99 CDQ -0049635D B9 06000000 MOV ECX,6 -00496362 F7F9 IDIV ECX -00496364 8995 4CFFFFFF MOV DWORD PTR SS:[EBP-B4],EDX -0049636A 8B85 50FFFFFF MOV EAX,DWORD PTR SS:[EBP-B0] -00496370 2B85 4CFFFFFF SUB EAX,DWORD PTR SS:[EBP-B4] -00496376 99 CDQ -00496377 B9 06000000 MOV ECX,6 -0049637C F7F9 IDIV ECX -0049637E 8985 7CFFFFFF MOV DWORD PTR SS:[EBP-84],EAX -00496384 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] -00496387 8B4495 80 MOV EAX,DWORD PTR SS:[EBP+EDX*4-80] -0049638B 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -0049638E D3F8 SAR EAX,CL -00496390 83E0 01 AND EAX,1 -00496393 8985 78FFFFFF MOV DWORD PTR SS:[EBP-88],EAX -00496399 8B8D 7CFFFFFF MOV ECX,DWORD PTR SS:[EBP-84] -0049639F 8B548D 80 MOV EDX,DWORD PTR SS:[EBP+ECX*4-80] -004963A3 8B8D 4CFFFFFF MOV ECX,DWORD PTR SS:[EBP-B4] -004963A9 D3FA SAR EDX,CL -004963AB 83E2 01 AND EDX,1 -004963AE 8995 54FFFFFF MOV DWORD PTR SS:[EBP-AC],EDX -004963B4 B8 01000000 MOV EAX,1 -004963B9 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -004963BC D3E0 SHL EAX,CL -004963BE F7D0 NOT EAX -004963C0 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] -004963C3 8B548D 80 MOV EDX,DWORD PTR SS:[EBP+ECX*4-80] -004963C7 23D0 AND EDX,EAX -004963C9 8B85 54FFFFFF MOV EAX,DWORD PTR SS:[EBP-AC] -004963CF 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -004963D2 D3E0 SHL EAX,CL -004963D4 0BD0 OR EDX,EAX -004963D6 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] -004963D9 89548D 80 MOV DWORD PTR SS:[EBP+ECX*4-80],EDX -004963DD BA 01000000 MOV EDX,1 -004963E2 8B8D 4CFFFFFF MOV ECX,DWORD PTR SS:[EBP-B4] -004963E8 D3E2 SHL EDX,CL -004963EA F7D2 NOT EDX -004963EC 8B85 7CFFFFFF MOV EAX,DWORD PTR SS:[EBP-84] -004963F2 8B4485 80 MOV EAX,DWORD PTR SS:[EBP+EAX*4-80] -004963F6 23C2 AND EAX,EDX -004963F8 8B95 78FFFFFF MOV EDX,DWORD PTR SS:[EBP-88] -004963FE 8B8D 4CFFFFFF MOV ECX,DWORD PTR SS:[EBP-B4] -00496404 D3E2 SHL EDX,CL -00496406 0BC2 OR EAX,EDX -00496408 8B8D 7CFFFFFF MOV ECX,DWORD PTR SS:[EBP-84] -0049640E 89448D 80 MOV DWORD PTR SS:[EBP+ECX*4-80],EAX -00496412 ^E9 D6FEFFFF JMP BGE.004962ED -00496417 C745 FC 00000000 MOV DWORD PTR SS:[EBP-4],0 -0049641E EB 09 JMP SHORT BGE.00496429 -00496420 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -00496423 83C2 01 ADD EDX,1 -00496426 8955 FC MOV DWORD PTR SS:[EBP-4],EDX -00496429 837D FC 06 CMP DWORD PTR SS:[EBP-4],6 -0049642D 0F8D D1000000 JGE BGE.00496504 -00496433 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -00496436 83C0 01 ADD EAX,1 -00496439 6BC0 0D IMUL EAX,EAX,0D -0049643C 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX -0049643F 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -00496442 99 CDQ -00496443 B9 06000000 MOV ECX,6 -00496448 F7F9 IDIV ECX -0049644A 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX -0049644D 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -00496450 2B45 F4 SUB EAX,DWORD PTR SS:[EBP-C] -00496453 99 CDQ -00496454 B9 06000000 MOV ECX,6 -00496459 F7F9 IDIV ECX -0049645B 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX -0049645E 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -00496461 8995 4CFFFFFF MOV DWORD PTR SS:[EBP-B4],EDX -00496467 C785 7CFFFFFF 0F>MOV DWORD PTR SS:[EBP-84],0F -00496471 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] -00496474 8B5485 80 MOV EDX,DWORD PTR SS:[EBP+EAX*4-80] -00496478 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -0049647B D3FA SAR EDX,CL -0049647D 83E2 01 AND EDX,1 -00496480 8995 78FFFFFF MOV DWORD PTR SS:[EBP-88],EDX -00496486 8B85 7CFFFFFF MOV EAX,DWORD PTR SS:[EBP-84] -0049648C 8B5485 80 MOV EDX,DWORD PTR SS:[EBP+EAX*4-80] -00496490 8B8D 4CFFFFFF MOV ECX,DWORD PTR SS:[EBP-B4] -00496496 D3FA SAR EDX,CL -00496498 83E2 01 AND EDX,1 -0049649B 8995 54FFFFFF MOV DWORD PTR SS:[EBP-AC],EDX -004964A1 B8 01000000 MOV EAX,1 -004964A6 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -004964A9 D3E0 SHL EAX,CL -004964AB F7D0 NOT EAX -004964AD 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] -004964B0 8B548D 80 MOV EDX,DWORD PTR SS:[EBP+ECX*4-80] -004964B4 23D0 AND EDX,EAX -004964B6 8B85 54FFFFFF MOV EAX,DWORD PTR SS:[EBP-AC] -004964BC 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] -004964BF D3E0 SHL EAX,CL -004964C1 0BD0 OR EDX,EAX -004964C3 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] -004964C6 89548D 80 MOV DWORD PTR SS:[EBP+ECX*4-80],EDX -004964CA BA 01000000 MOV EDX,1 -004964CF 8B8D 4CFFFFFF MOV ECX,DWORD PTR SS:[EBP-B4] -004964D5 D3E2 SHL EDX,CL -004964D7 F7D2 NOT EDX -004964D9 8B85 7CFFFFFF MOV EAX,DWORD PTR SS:[EBP-84] -004964DF 8B4485 80 MOV EAX,DWORD PTR SS:[EBP+EAX*4-80] -004964E3 23C2 AND EAX,EDX -004964E5 8B95 78FFFFFF MOV EDX,DWORD PTR SS:[EBP-88] -004964EB 8B8D 4CFFFFFF MOV ECX,DWORD PTR SS:[EBP-B4] -004964F1 D3E2 SHL EDX,CL -004964F3 0BC2 OR EAX,EDX -004964F5 8B8D 7CFFFFFF MOV ECX,DWORD PTR SS:[EBP-84] -004964FB 89448D 80 MOV DWORD PTR SS:[EBP+ECX*4-80],EAX -004964FF ^E9 1CFFFFFF JMP BGE.00496420 -00496504 8B95 44FFFFFF MOV EDX,DWORD PTR SS:[EBP-BC] -0049650A 8B8495 F0FDFFFF MOV EAX,DWORD PTR SS:[EBP+EDX*4-210] -00496511 E9 10020000 JMP BGE.00496726 -00496516 8B85 44FFFFFF MOV EAX,DWORD PTR SS:[EBP-BC] -0049651C 8985 40FFFFFF MOV DWORD PTR SS:[EBP-C0],EAX -00496522 83BD 40FFFFFF 1B CMP DWORD PTR SS:[EBP-C0],1B -00496529 0F87 F5010000 JA BGE.00496724 -0049652F 8B8D 40FFFFFF MOV ECX,DWORD PTR SS:[EBP-C0] -00496535 FF248D 2A674900 JMP DWORD PTR DS:[ECX*4+49672A] -0049653C 33C9 XOR ECX,ECX -0049653E E8 FDF8FFFF CALL BGE.00495E40 -00496543 33C0 XOR EAX,EAX -00496545 E9 DC010000 JMP BGE.00496726 -0049654A C745 F8 00000000 MOV DWORD PTR SS:[EBP-8],0 -00496551 C745 FC 00000000 MOV DWORD PTR SS:[EBP-4],0 -00496558 EB 09 JMP SHORT BGE.00496563 -0049655A 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] -0049655D 83C2 01 ADD EDX,1 -00496560 8955 FC MOV DWORD PTR SS:[EBP-4],EDX -00496563 837D FC 0A CMP DWORD PTR SS:[EBP-4],0A -00496567 7D 1C JGE SHORT BGE.00496585 -00496569 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] -0049656C C1E0 06 SHL EAX,6 -0049656F 0FBE88 C052D400 MOVSX ECX,BYTE PTR DS:[EAX+D452C0] -00496576 85C9 TEST ECX,ECX -00496578 74 09 JE SHORT BGE.00496583 -0049657A 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] -0049657D 83C2 01 ADD EDX,1 -00496580 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX -00496583 ^EB D5 JMP SHORT BGE.0049655A -00496585 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] -00496588 E9 99010000 JMP BGE.00496726 -0049658D 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -00496593 C1E0 06 SHL EAX,6 -00496596 0FBE80 C052D400 MOVSX EAX,BYTE PTR DS:[EAX+D452C0] -0049659D E9 84010000 JMP BGE.00496726 -004965A2 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -004965A8 C1E1 06 SHL ECX,6 -004965AB 0FBF81 C852D400 MOVSX EAX,WORD PTR DS:[ECX+D452C8] -004965B2 E9 6F010000 JMP BGE.00496726 -004965B7 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -004965BD C1E2 06 SHL EDX,6 -004965C0 0FBF82 CA52D400 MOVSX EAX,WORD PTR DS:[EDX+D452CA] -004965C7 E9 5A010000 JMP BGE.00496726 -004965CC 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -004965D2 C1E0 06 SHL EAX,6 -004965D5 0FBE80 C152D400 MOVSX EAX,BYTE PTR DS:[EAX+D452C1] -004965DC E9 45010000 JMP BGE.00496726 -004965E1 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -004965E7 C1E1 06 SHL ECX,6 -004965EA 0FBE81 C252D400 MOVSX EAX,BYTE PTR DS:[ECX+D452C2] -004965F1 E9 30010000 JMP BGE.00496726 -004965F6 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -004965FC C1E2 06 SHL EDX,6 -004965FF 0FBE82 C352D400 MOVSX EAX,BYTE PTR DS:[EDX+D452C3] -00496606 E9 1B010000 JMP BGE.00496726 -0049660B 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -00496611 C1E0 06 SHL EAX,6 -00496614 0FBE80 C452D400 MOVSX EAX,BYTE PTR DS:[EAX+D452C4] -0049661B E9 06010000 JMP BGE.00496726 -00496620 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00496626 C1E1 06 SHL ECX,6 -00496629 0FBE81 C552D400 MOVSX EAX,BYTE PTR DS:[ECX+D452C5] -00496630 83C0 01 ADD EAX,1 -00496633 E9 EE000000 JMP BGE.00496726 -00496638 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -0049663E C1E2 06 SHL EDX,6 -00496641 0FBF82 C652D400 MOVSX EAX,WORD PTR DS:[EDX+D452C6] -00496648 E9 D9000000 JMP BGE.00496726 -0049664D 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -00496653 C1E0 06 SHL EAX,6 -00496656 0FBF80 CC52D400 MOVSX EAX,WORD PTR DS:[EAX+D452CC] -0049665D E9 C4000000 JMP BGE.00496726 -00496662 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00496668 C1E1 06 SHL ECX,6 -0049666B 0FBF81 CE52D400 MOVSX EAX,WORD PTR DS:[ECX+D452CE] -00496672 E9 AF000000 JMP BGE.00496726 -00496677 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -0049667D C1E2 06 SHL EDX,6 -00496680 8B82 D052D400 MOV EAX,DWORD PTR DS:[EDX+D452D0] -00496686 E9 9B000000 JMP BGE.00496726 -0049668B B9 01000000 MOV ECX,1 -00496690 E8 ABF7FFFF CALL BGE.00495E40 -00496695 33C0 XOR EAX,EAX -00496697 E9 8A000000 JMP BGE.00496726 -0049669C 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -004966A2 C1E0 06 SHL EAX,6 -004966A5 8B80 D452D400 MOV EAX,DWORD PTR DS:[EAX+D452D4] -004966AB EB 79 JMP SHORT BGE.00496726 -004966AD 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -004966B3 C1E1 06 SHL ECX,6 -004966B6 8B81 D852D400 MOV EAX,DWORD PTR DS:[ECX+D452D8] -004966BC EB 68 JMP SHORT BGE.00496726 -004966BE 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -004966C4 C1E2 06 SHL EDX,6 -004966C7 8B82 DC52D400 MOV EAX,DWORD PTR DS:[EDX+D452DC] -004966CD EB 57 JMP SHORT BGE.00496726 -004966CF 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -004966D5 C1E0 06 SHL EAX,6 -004966D8 8B80 E052D400 MOV EAX,DWORD PTR DS:[EAX+D452E0] -004966DE EB 46 JMP SHORT BGE.00496726 -004966E0 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -004966E6 C1E1 06 SHL ECX,6 -004966E9 8B81 E452D400 MOV EAX,DWORD PTR DS:[ECX+D452E4] -004966EF EB 35 JMP SHORT BGE.00496726 -004966F1 8B95 48FFFFFF MOV EDX,DWORD PTR SS:[EBP-B8] -004966F7 C1E2 06 SHL EDX,6 -004966FA 8B82 E852D400 MOV EAX,DWORD PTR DS:[EDX+D452E8] -00496700 EB 24 JMP SHORT BGE.00496726 -00496702 8B85 48FFFFFF MOV EAX,DWORD PTR SS:[EBP-B8] -00496708 C1E0 06 SHL EAX,6 -0049670B 8B80 EC52D400 MOV EAX,DWORD PTR DS:[EAX+D452EC] -00496711 EB 13 JMP SHORT BGE.00496726 -00496713 8B8D 48FFFFFF MOV ECX,DWORD PTR SS:[EBP-B8] -00496719 C1E1 06 SHL ECX,6 -0049671C 8B81 F052D400 MOV EAX,DWORD PTR DS:[ECX+D452F0] -00496722 EB 02 JMP SHORT BGE.00496726 -00496724 33C0 XOR EAX,EAX -00496726 8BE5 MOV ESP,EBP -00496728 5D POP EBP -00496729 C3 RETN \ No newline at end of file diff --git a/src/aids.red b/src/aids.red index 72536f4..8b7c346 100644 --- a/src/aids.red +++ b/src/aids.red @@ -98,3 +98,11 @@ retreat: func [ ] ] context reduce [to set-word! index none] ] + +unfold: func [spec /local bits index][ + rejoin collect [ + repeat index length? bits: charset spec [ + if bits/:index [keep to char! index] + ] + ] +] diff --git a/src/decoder.red b/src/decoder.red index fcec63e..b631f26 100644 --- a/src/decoder.red +++ b/src/decoder.red @@ -6,69 +6,30 @@ Red [ Tabs: 4 ] -; == macros == -#do [ - unfold: func [range [block!] /local spec index bump range*][ - range*: copy range - to string! collect [ - while [not tail? range*][ - spec: head remove at take/part range* 3 2 - forall spec [poke spec 1 to char! form first spec] - set [index bump] spec - - until [keep to char! index (index: index + 1) > bump] - ] - ] - ] - - prime?: func [number [integer!] /local bump i][ ;@ hard-won version which works the same both compiled and interpreted; ugly, but practical - either number >= i: 2 [ - while [i <= to integer! square-root number][ - if number // i = 0 [return no] - i: i + 1 - ] - ][ - return no - ] - return yes - ] -] - -#macro make-base64: func [/local alphanumeric][ - append - alphanumeric: sort/case unfold [a - z A - Z 0 - 9] - reduce [take/part alphanumeric 10 "+/"] -] - -#macro make-bge-base64: func [/local bge-base64][ - also - bge-base64: make-base64 ; in fact it's a mix of Base64 and Base58 - foreach [char sub] "+?/!I+O\l&0/" [poke find/case bge-base64 char 1 sub] -] - -#macro make-primes: func [bump [integer!] /local i][ - collect [repeat i bump [if prime? i [keep i]]] -] - -#macro make-key: func [][ - reduce [reverse head remove at remove/part make-primes 37 3 3] -] - ; == core logic == decoder: context [ converter: context [ - encoding: make-bge-base64 - letters: #do keep [unfold [A - Z]] - digits: #do keep [unfold [0 - 9]] + letters: unfold [#"A" - #"Z"] + digits: unfold [#"0" - #"9"] + encoding: trim/all { + A B C D E F G H + + J K L M N \ P + Q R S T U V W X + Y Z a b c d e f + g h i j k & m n + o p q r s t u v + w x y z / 1 2 3 + 4 5 6 7 8 9 ? ! + } scheme: [ playtime 00:10:00 63:14:07 ; assuming you're not Sonic the Hedgehog pallet-game-trophies 00 02 animals 01 56 pearls 01 88 - zero 00 00 ;@ always zero? + zero 00 00 yo!-pearl-record 140'646 2'000'000 locker-code ... ... - padding-zero 00 00 ;@ always zero? + padding-zero 00 00 salt ... ... ] @@ -135,33 +96,34 @@ decoder: context [ ] ] - cypher: context [ + cipher: context [ ~: :complement ; sweeten with some syntactic sugar &: :and |: :or - key: make-key + key: #{25 1F 1D 17 13 11 0B 07} digest: copy [] game-data: copy [] lookup-table: [ - [ 01 007E0000h 17 - 02 00010000h 11 - 02 00000003h 03 - 03 00003F00h 08 ] - [ 02 07000000h 24 - 04 00FC0000h 18 - 05 0003F000h 12 - 06 00000FC0h 06 - 07 0000003Fh 00 ] - [ 09 1E000000h 25 - 10 01000000h 19 - 10 00001F00h 08 - 11 001F0000h 14 - 11 0000000Ch 02 - 12 00000003h 04 ] - [ 08 000000FCh 02 - 09 00000003h 04 ] + ; <01> is reserved for playtime + <02> 01 007E0000h 17 + 02 00010000h 11 + 02 00000003h 03 + 03 00003F00h 08 + <03> 02 07000000h 24 + 04 00FC0000h 18 + 05 0003F000h 12 + 06 00000FC0h 06 + 07 0000003Fh 00 + <04> 09 1E000000h 25 + 10 01000000h 19 + 10 00001F00h 08 + 11 001F0000h 14 + 11 0000000Ch 02 + 12 00000003h 04 + <05> 08 000000FCh 02 + 09 00000003h 04 ] p-box: [ @@ -174,17 +136,17 @@ decoder: context [ subkey: key/(_: digest/16 >> 3 & 00000007h + 1) ; 3 leftmost bits subkey*: key/((length? key) - _ + 1) retreat i 30 [ - n: i * subkey + 45 % 90 - m: i * subkey* + 45 % 90 - swap [ (p: n % 6)-th bit in (n - p / 6 + 1)-th block with - (q: m % 6)-th bit in (m - q / 6 + 1)-th block ] + m: i * subkey + 45 % 90 + n: i * subkey* + 45 % 90 + swap [ (p: m % 6)-th bit in (m - p / 6 + 1)-th block with + (q: n % 6)-th bit in (n - q / 6 + 1)-th block ] ]] <3> [ subkey: key/(digest/16 & 00000007h + 1) ; 3 rightmost bits retreat i 40 [ - n: i * subkey % 90 - m: n % 6 - flip [ (m)-th bit in (n - m / 6 + 1)-th block ] + m: i * subkey % 90 + n: m % 6 + flip [ (n)-th bit in (m - n / 6 + 1)-th block ] ]] ] @@ -244,7 +206,9 @@ decoder: context [ ][ game-data: collect [ keep digest/15 * 60 + digest/14 * 60 + digest/16 ; total playtime, hh:mm:ss - foreach entry lookup-table [ ; in-game collectibles stats and padding zeroes + foreach entry parse lookup-table [ ; in-game collectibles stats and padding zeroes + collect some [tag! keep some integer!] + ][ keep fold map entry [index mask offset][ set [<> ><] do compose [ (if mask = 00000003h [[reverse copy]]) [>> <<] @@ -282,7 +246,7 @@ decoder: context [ ] ] - decoding-scheme: with [converter cypher][ + decoding-scheme: with [converter cipher][ case [ 16 <> length? text-data [return #invalid-length] not internet-code? text-data [return #wrong-character] diff --git a/src/main.red b/src/main.red index e15c84c..b612c72 100644 --- a/src/main.red +++ b/src/main.red @@ -4,6 +4,13 @@ Red [ File: %main.red License: "WTFPL" Tabs: 4 + Needs: View + Icon: %../msc/mdisk.ico ] +#include %aids.red +#include %decoder.red +#include %picklock.red +#include %gui.red + unless unlock [view/flags window [no-min no-max]]