From 66706815cff58a45c290197b17b93d9527fb6ff7 Mon Sep 17 00:00:00 2001 From: ZXMushroom63 Date: Fri, 24 May 2024 16:39:34 +0800 Subject: [PATCH] NOREFLECT WORKING!!!!!!!!!!!!! --- NoReflect/generate.js | 15 +++++++++----- NoReflect/javaRecon.js | 45 +++++++++++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/NoReflect/generate.js b/NoReflect/generate.js index 7f26f88..80a9878 100644 --- a/NoReflect/generate.js +++ b/NoReflect/generate.js @@ -4,14 +4,14 @@ BaseData reflect_%classname% = new ModData(); ArrayList reflect_%classname%_constructors = new ArrayList(); %constructordefs% -BaseData[] reflect_%classname%_constructors_arr = new BaseData[reflectProfiles.size()]; +BaseData[] reflect_%classname%_constructors_arr = new BaseData[reflect_%classname%_constructors.size()]; for (int i = 0; i < reflect_%classname%_constructors_arr.length; i++) { reflect_%classname%_constructors_arr[i] = reflect_%classname%_constructors.get(i); } ArrayList reflect_%classname%_methods = new ArrayList(); %methoddefs% -BaseData[] reflect_%classname%_methods_arr = new BaseData[reflectProfiles.size()]; +BaseData[] reflect_%classname%_methods_arr = new BaseData[reflect_%classname%_methods.size()]; for (int i = 0; i < reflect_%classname%_methods_arr.length; i++) { reflect_%classname%_methods_arr[i] = reflect_%classname%_methods.get(i); } @@ -31,7 +31,7 @@ BaseData reflect_%classname%_constructor_%constructorname%_%idx% = new ModData() reflect_%classname%_constructor_%constructorname%_%idx%.set("returnType", %returntype%); reflect_%classname%_constructor_%constructorname%_%idx%.set("argnames", %argkeys%); reflect_%classname%_constructor_%constructorname%_%idx%.set("argtypes", %argvalues%); -reflect_%classname%_constructors_%idx%.%constructorimpl% +reflect_%classname%_constructor_%constructorname%_%idx%.%constructorimpl% reflect_%classname%_constructors.add(reflect_%classname%_constructor_%constructorname%_%idx%); `; @@ -49,6 +49,11 @@ reflect_%classname%_methods.add(reflect_%classname%_method_%methodname%_%idx%); const templateManager = ` import net.eaglerforge.api.*; import java.util.ArrayList; +import java.lang.Exception; + +//AUTOGENERATED BY NOREFLECT +//Made by ZXMushroom63 + public class PLReflect { public static ModData makeModData() { ModData plReflectGlobal = new ModData(); @@ -209,7 +214,6 @@ async function generate(fileList) { var classToLocationMap = new Map(); var cfg; var output = new JSZip(); - const reader = new FileReader(); var classDataDump = {}; logClear(); logTxt("[INIT] Build @ "+(new Date())); @@ -234,13 +238,14 @@ async function generate(fileList) { classToLocationMap.set(className, classId); if (cfg.targetFiles.includes(classId)) { logTxt("Found "+classId+" ["+file.name+"], processing..."); - var javaFileContent = await process(file, reader, classDataDump, className); + var javaFileContent = await process(file, new FileReader(), classDataDump, className); if (cfg.includeReadFiles) { output.file(file.webkitRelativePath.replaceAll("java/", ""), javaFileContent); } } } } + console.log(classDataDump); logTxt(`Creating manager file...`); createManagerFile(templateManager, cfg, output, classDataDump, classToLocationMap); diff --git a/NoReflect/javaRecon.js b/NoReflect/javaRecon.js index edca30e..208082e 100644 --- a/NoReflect/javaRecon.js +++ b/NoReflect/javaRecon.js @@ -7,6 +7,15 @@ const getStatements = { "char": "params.getChar(%s)", "double": "params.getDouble(%s)", } +const primitiveDefaultValues = { + "int": "0", + "String": "\"\"", + "boolean": "false", + "float": "0.0f", + "byte": "(byte) 0", + "char": "\'a\'", + "double": "0.0d", +} const callbackStatements = { "boolean": "setCallbackBooleanWithDataArg", "int": "setCallbackIntWithDataArg", @@ -26,7 +35,7 @@ function reconJ(java, className) { let constructorRegex = /(public|protected|private|static|\s) +(\w+) *\(([^)]*)\)/g; let constructors = [...javaText.matchAll(constructorRegex).filter((line)=>{ - return !line[0].includes(" private ") && !line[0].includes(" protected "); + return !line[0].includes(" private ") && !line[0].includes(" protected ") && !line[0].includes("\n\t\t") && line[1] !== "private" && line[1] !== "protected"; })]; let constructorDetails = constructors.map((constructor) => { @@ -56,7 +65,7 @@ function reconJ(java, className) { } - let impl = `setCallbackReflectiveWithArgs("${constructorName}", (BaseData params) -> { + let impl = `setCallbackReflectiveWithDataArg("${constructorName}", (BaseData params) -> { return new ${className}(${argStr}); }); `; @@ -65,14 +74,15 @@ function reconJ(java, className) { name: constructorName, idx: constructors.indexOf(constructor), arguments: arguments, - impl: impl + impl: impl, + data: constructor }; }); - let methodRegex = /(public|static|\s)* +([\w\<\>\[\]]+)\s+(\w+) *\(([^)]*)\)/g; + let methodRegex = /(public|static|private|protected|\s)* +([\w\<\>\[\]]+)\s+(\w+) *\(([^)]*)\)/g; let methods = [...javaText.matchAll(methodRegex).filter((line)=>{ - return !line[0].includes("> ") && !line[0].startsWith(" else ") && !line[0].startsWith(" new ") && !line[0].includes(" private ") && !line[0].includes(" protected "); + return !line[0].includes("> ") && !line[0].startsWith(" else ") && !line[0].startsWith(" new ") && !line[0].includes(" private ") && !line[0].includes("\tprotected ") && !line[0].includes("\tprivate ") && !line[0].includes(" protected ") && !line[0].includes("\n\t\t"); //Doesn't support Type yet })]; @@ -106,19 +116,31 @@ function reconJ(java, className) { let prefix = isStatic ? className : `((${className}) params.getReflective("_self"))`; let impl; if (returnType === "void") { - impl = `setCallbackVoidWithArgs("${methodName}", (BaseData params) -> { - ${prefix}.${methodName}(${argStr}); + impl = `setCallbackVoidWithDataArg("${methodName}", (BaseData params) -> { + try { + ${prefix}.${methodName}(${argStr}); + } catch (Exception _exception_reflect_) { + return; + } }); `; } else if (callbackStatementsTypes.includes(returnType)) { impl = `${callbackStatements[returnType]}("${methodName}", (BaseData params) -> { - return (${returnType}) ${prefix}.${methodName}(${argStr}); + try { + return (${returnType}) ${prefix}.${methodName}(${argStr}); + } catch (Exception _exception_reflect_) { + return ${primitiveDefaultValues[returnType]}; + } }); `; } else { usedClasses.push(returnType); - impl = `setCallbackReflectiveWithArgs("${methodName}", (BaseData params) -> { - return (${returnType}) ${prefix}.${methodName}(${argStr}); + impl = `setCallbackReflectiveWithDataArg("${methodName}", (BaseData params) -> { + try { + return (${returnType}) ${prefix}.${methodName}(${argStr}); + } catch (Exception _exception_reflect_) { + return null; + } }); `; } @@ -130,7 +152,8 @@ function reconJ(java, className) { isStatic: isStatic, arguments: arguments, impl: impl, - idx: methods.indexOf(method) + idx: methods.indexOf(method), + data: method }; }); return {