Obfuscate ========= Quick and dirty POC to obfuscate an S*BASIC source file What Obfuscate does =================== This program suite strips away as much useful information from a target program as possible to produce a fully working program, but one that conceals how it works or what it originally looked like. After processing, a few corrections may have to be made by hand to restore full functionality, but such corrections should normally be few and minor. This program suit is merely a proof of concept. It is not intended to be a pretty, or robust, or fully fledged tool. Much more obfuscation can be done, eg by compressing or muddying structures and the like. Compatibility and Limitations ============================= This program is probably not error free! Check the Troubleshooting guide at the end of this document if you get stuck! The programs in their source form only run under SMSQ/E's SBASIC; the compiled versions should run under Qdos + TK2 + Knoware's most recent Q2S compatibility toolkit. All SuperBASIC dialects can be processed. However, Obfuscater relies on the tokenised form of the source code, and there are some older _sav file formats it cant cope with. Just re-save such target programs with a newer version of QSAVE. Note: A second pass (Pass2_obj) has been added as a separate program. It is called automatically on completion of pass1 (Obfuscate_obj). Its output goes to ram1_final_bas. Unfortunately this arrangement means that the Home Thing is now required. Or simply modify the programs yourself to do without! To Use: ======= 1. Load the target S*BASIC program, ie a program you wish to obfuscate, into the interpreter. 2. QSAVE it Note: All toolkit commands used in the target program must be present in the system! 3. EXecute Obfuscate_obj and enter the name of the QSAVEd target file and press ENTER (or just press ENTER on its own to quit). Note: If you want to LRUN Obfuscate_bas in the main SBASIC interpreter you must first LRESPR the PEEKSTR_bin toolkit. Under SMSQ/E you can simply EXecute Obfuscate_bas directly. 4. If all went well, the resulting file should end up as ram1_test_bas and ram1_final_bas. final_bas is the most processed file. 5. LOAD ram1_final_bas to see whether there are any MISTakes (There shouldn't be). If there are, try the same with ram1_test_bas and fix any fixable lines. Then EXecute Pass2_obj again. 6. SAVE the final file in the location it is intended to be run from. This should now be a functional copy of the original target program. 7. LRUN (or EXecute, depending on how you crafted your program) the newly the final_bas file from its proper location. It should now work exactly like the original. 8. Most errors, if any, can be corrected by comparing the original target file with the processed file. End notes ========= If you feel there are systemic errors, let me know! Please feel free to develop this program or write your own! Better still, Dont obfuscate your source code, so others can fix any problems they find - and learn from your failures as well as your triumphs! Troubleshooting =============== Q: When LOADing the processed program I get the error message: unknown procedure or similar, without a line number. A: Probably the line length in the target program exceeds the limit set. Increase the $$buff and WIDTH settings and recompile both Obfuscate and Pass2 Q: I get a "not found" error on a line like OPEN#3; V33, or FTEST(V56) A: Unquoted file and device names in target program will not work! Compare the lines in the target program with the processed program and change a line such as OPEN#3; V33 to OPEN#3; 'ser1', and FTEST(V56) to FTEST("win1_myprog_bas") Q: I get errors like At line 149:1 error in expression on a line like IF V106%("Menus") <> V137%: V446 'This program NEEDS QMenu to run' A: V106% probably refers to a m/c toolkit that was not present at the time the target file was QSAVEd. All external toolkits that the program uses must be present in the system (or SBASIC daughter interpreter) when the program is QSAVEd Q: I get errors like At line 149:1 error in expression on a line like IF TSTTHG%("Menus") <> V137%: V446 'This program NEEDS QMenu to run' A: Similar to the question above, but this time the toolkit was present during QSAVEing, but is no longer present in the system. All external toolkits that the program used when the program was QSAVEd must be present in the system (or SBASIC daughter interpreter) when the program is RUN. Note: Compiler directives, such as REMark $$buff= or REMark %%filename etc are removed during processing. If needed add them back manually. Program status ============== V0.01, pjw, 2025 Feb 19, based on program LISTer V0.03 V0.02, pjw, 2025 Feb 20, Some small changes; added Pass2, updated manual Conditions of use and DISCLAIMER as per Knoware.no
Generated by QuickHTM, 2025 Feb 20