private static void FindCurrentScoreField(ClassObj @class, IList <Instruction> instructions) { if (@class.GetField("CurrentScore").IsPresent()) { return; } if (instructions.Count < 15) { return; } for (var i = 2; i < instructions.Count - 1; i++) { var prevPrevInsn = instructions[i - 2]; var prevInsn = instructions[i - 1]; var insn = instructions[i]; var nextInsn = instructions[i + 1]; if (prevPrevInsn.OpCode != OpCodes.Call || prevInsn.OpCode != OpCodes.Ldsfld || nextInsn.OpCode != OpCodes.Ret || !(prevInsn.Operand is IField)) { continue; } var ldsfld = (IField)prevInsn.Operand; @class.AddField("CurrentScore", ldsfld.Name); } }
private static void FindScoreSubmission(ClassObj @class, MethodDef methodDef, IList <Instruction> instructions) { var containsExit = false; var containsDateTime = false; foreach (var insn in instructions) { if (insn.OpCode != OpCodes.Call) { continue; } if (insn.ToString().EndsWith("System.Environment::Exit(System.Int32)")) { containsExit = true; } if (containsExit && insn.ToString().Contains("System.DateTime::get_Now()")) { containsDateTime = true; } } if (containsDateTime) { @class.AddMethod("SubmitScore", methodDef.Name); } }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { ClassObj @class = null; foreach (var method in methodDefs) { if (!HasStrings(method, "chickenmcnuggets{0}o15{1}{2}smustard{3}{4}uu{5}{6}{7}{8}{9}{10}{11}Q{12}{13}{15}{14:yyMMddHHmmss}{16}") ) { continue; } @class = MappingManager.GetClass(UnobfuscatedName) .OrElse(new ClassObj(UnobfuscatedName, className)); MappingManager.AddClass(@class); //@class.AddMethod("GetJoinedMods", method.Name); //Mods mods, bool abreviated, bool displayNone, bool parens, bool ?space? } if (@class != null) { FindSubmitRequest(@class, methodDefs); FindFields(@class, methodDefs); } }
public static void SaveCreateObj(Vector3 vector, Quaternion quaternion, string name, int id) { StreamWriter writer = new StreamWriter(pathMap, true); writer.WriteLine( vector.x + " , " + vector.y + " , " + vector.z + " , " + quaternion.x + " , " + quaternion.y + " , " + quaternion.z + " , " + quaternion.w + " , " + id + " , " + name + " , " ); ClassObj obj = new ClassObj(); GameObject game = new GameObject(); game.transform.position = vector; game.transform.rotation = quaternion; obj.transform = game.transform; obj.id = id; obj.name = name; gameObjectArry.Add(obj); writer.Close(); }
private void FindFields(ClassObj @class, IList <MethodDef> methodDefs) { foreach (var method in methodDefs) { if (!HasStrings(method, "{0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}:{12}:{13}:{14}:{15}:{16:yyMMddHHmmss}:{17}")) { continue; } int addedFields = 0; foreach (var insn in method.Body.Instructions) { if (insn.OpCode != OpCodes.Ldfld || !(insn.Operand is IField)) { continue; } var field = (IField)insn.Operand; var fieldType = field.FieldSig.Type; if (fieldType == Program.osu_exe.CorLibTypes.UInt16 || fieldType == Program.osu_exe.CorLibTypes.Int32) { //TODO: Doesn't get TotalScore because it's a 'callvirt' and not a 'Ldfld' switch (addedFields) { case 0: @class.AddField("Count300", field.Name); break; case 1: @class.AddField("Count100", field.Name); break; case 2: @class.AddField("Count50", field.Name); break; case 3: @class.AddField("CountGeki", field.Name); break; case 4: @class.AddField("CountKatu", field.Name); break; case 5: @class.AddField("CountMiss", field.Name); break; case 6: @class.AddField("CountMaxCombo", field.Name); break; } addedFields++; } } } }
public static void AddClass(ClassObj classObj) { GetClass(classObj.Name).IfNotPresent(() => { Console.WriteLine("[log] Added Class: {0} <{1}>", classObj.Name, classObj.ObfName); Classes.Add(classObj); }); }
public void TestChangeAmount() { float initialValue = ClassObj.Amount; float amountToChange = GetRandom.Float(); ClassObj.ChangeAmount(amountToChange); Assert.AreEqual(initialValue + amountToChange, ClassObj.Amount); ClassObj.ChangeAmount(-amountToChange); Assert.AreEqual(initialValue, ClassObj.Amount); }
private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { ClassObj obj = new ClassObj() { Order = Order, DisTxt = ClassName, Link = ClassLink }; new ClassManager().AddData(obj); }
private void FindComponentList(ClassObj clazz, IList <FieldDef> typeFields) { foreach (var typeField in typeFields) { if (!typeField.FullName.Contains("Generic.List")) { continue; } clazz.AddField("ComponentList", typeField.Name); return; } }
private void FindSubmitRequest(ClassObj @class, IList <MethodDef> methodDefs) { foreach (var method in methodDefs) { if (!HasStrings(method, "https://osu.ppy.sh/web/osu-submit-modular.php")) { continue; } @class.AddMethod("SubmitRequest", method.Name); return; } }
private void FindValueField(ClassObj clazz, IList <MethodDef> methodDefs) { var methodContaingValueFld = methodDefs.First(m => ClrHelper.MatchesSig(m, "Double", "Boolean", "Boolean")); var pattern = GetOpcodePattern(methodContaingValueFld, 1, OpCodes.Ldarg_0, OpCodes.Ldfld, OpCodes.Ldarg_1, OpCodes.Beq_S); if (!pattern.IsPresent()) { Console.WriteLine("Pattern not found while finding valueFld"); return; } clazz.AddField("SliderValue", (pattern.Get().Operand as FieldDef).Name); }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { var rect = methodDefs.Where(m => ClrHelper.MatchesSig(m, "Vector2", "Vector2", "Single", "Color")); if (!rect.Any()) { return; } var clazz = new ClassObj("CompRect", className); MappingManager.AddClass(clazz); }
private static void FindAddCallback(ClassObj clazz, IList <MethodDef> methodDefs) { foreach (var method in methodDefs) { var insn = method.Body.Instructions; var isAddCallback = insn.Any(f => f.ToString().Contains("Delegate::Combine")); if (!isAddCallback) { continue; } clazz.AddMethod("AddToggleCallback", method.Name); MappingManager.AddClass(new ClassObj("CheckboxCheckedDelegate", method.MethodSig.Params[0].FullName)); return; } }
protected Syringe(string clazz, bool classObj = true) { _methodInjectors = new List <Tuple <string, MethodSyringe> >(); if (classObj) { var classObjOpt = MappingManager.GetClass(clazz); if (!classObjOpt.IsPresent()) { Console.WriteLine("Syringe ClassObj not found: " + clazz); } ClassObj = classObjOpt.Get(); } else { ClassName = clazz; } }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { ClassObj @class = null; foreach (var method in methodDefs) { if (!HasStrings(method, "Cannot convert a map to osz2 which does not have a Beatmapset ID.")) { continue; } @class = MappingManager.GetClass(UnobfuscatedName) .OrElse(new ClassObj(UnobfuscatedName, className)); MappingManager.AddClass(@class); //@class.AddMethod("GetJoinedMods", method.Name); //Mods mods, bool abreviated, bool displayNone, bool parens, bool ?space? } }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { var sigCheck = methodDefs.Where(m => ClrHelper.MatchesSig(m, "?", "Double", "Double", "Double", "Vector2", "Int32")).ToList(); if (!sigCheck.Any()) { return; } var clazz = new ClassObj(UnobfuscatedName, className); MappingManager.AddClass(clazz); var callbackSearch = methodDefs .Where(m => ClrHelper.MatchesSig(m, "Object", "EventArgs")).ToList(); if (!callbackSearch.Any()) { return; } foreach (var methodDef in callbackSearch) { var insn = GetOpcodePattern(methodDef, 0, OpCodes.Ldfld, OpCodes.Brfalse_S, OpCodes.Ldarg_0, OpCodes.Ldfld, OpCodes.Ldc_I4_1, OpCodes.Callvirt); if (!insn.IsPresent()) { continue; } var i = insn.Get(); var fieldDef = i.Operand as FieldDef; clazz.AddField("SliderCallbacks", fieldDef.Name); var sliderChangeClass = new ClassObj("SliderChanged", fieldDef.FieldType.FullName); MappingManager.AddClass(sliderChangeClass); } FindSetTooltip(clazz, methodDefs); FindValueField(clazz, methodDefs); }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { ClassObj @class = null; foreach (var method in methodDefs) { var strings = GetMethodStrings(method); if (!ClrHelper.MatchesSig(method, "Mods", "Boolean", "Boolean", "Boolean", "Boolean")) { continue; } if (!strings.Contains("DoubleTime") || !strings.Contains("DT") || !strings.Contains("None") || !strings.Contains("Cinema")) { continue; } @class = MappingManager.GetClass(UnobfuscatedName) .OrElse(new ClassObj(UnobfuscatedName, className)); MappingManager.AddClass(@class); @class.AddMethod("GetJoinedMods", method.Name); //Mods mods, bool abreviated, bool displayNone, bool parens, bool ?space? } if (@class == null) { return; } foreach (var method in methodDefs) { if (!ClrHelper.MatchesSig(method, "Mods")) { continue; } if (method.Body.Instructions.Count == 5) { @class.AddMethod("IsModActive", method.Name); //Mods mods } } }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { var HasCtor = methodDefs.Where(m => ClrHelper.MatchesSig(m, "String", "Single", "Vector2", "Vector2", "Single", "Boolean", "Color", "Boolean")); var ContainsStrings = methodDefs.Where(m => HasStrings(m, "Text: ")); //string text, float textSize, Vector2 startPosition, Vector2 bounds, float drawDepth, bool alwaysDraw, Color colour, bool shadow = true if (!HasCtor.Any() || !ContainsStrings.Any()) { return; } var clazz = new ClassObj("CompLabel", className); MappingManager.AddClass(clazz); var str = methodDefs.First(m => ClrHelper.MatchesSig(m, "String")); clazz.AddMethod("SetText", str.Name); //MethodSig (1): String }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { foreach (var method in methodDefs) { if (!method.Name.Equals(".ctor")) { continue; } if (!HasStrings(method, "circle-full") && !ClrHelper.MatchesSig(method, "String", "Single", "Vector2", "Single", "Boolean", "Single")) { continue; } ClrHelper.PrintSig(method); var clazz = new ClassObj("CompCheckbox", className); MappingManager.AddClass(clazz); FindComponentList(clazz, type.Fields); FindAddCallback(clazz, methodDefs); } }
protected ClassObj FindByStrings(string className, IList <FieldDef> fieldDefs, params string[] strings) { ClassObj @class = null; foreach (var method in fieldDefs) { if (!HasStrings(method, strings)) { continue; } @class = MappingManager.GetClass(UnobfuscatedName) .OrElse(new ClassObj(UnobfuscatedName, className)); MappingManager.AddClass(@class); return(@class); //@class.AddMethod("GetJoinedMods", method.Name); //Mods mods, bool abreviated, bool displayNone, bool parens, bool ?space? } return(null); }
private void getAllObject() { StreamReader reader = new StreamReader(pathMap); for (; !reader.EndOfStream;) { GameObject gameObject = new GameObject(); ClassObj obj = new ClassObj(); string line = reader.ReadLine(); string[] stringArry = line.Split(','); gameObject.transform.position = new Vector3(float.Parse(stringArry[0].Trim()), float.Parse(stringArry[1].Trim()), float.Parse(stringArry[2].Trim())); gameObject.transform.rotation = new Quaternion(float.Parse(stringArry[3].Trim()), float.Parse(stringArry[4].Trim()), float.Parse(stringArry[5].Trim()), float.Parse(stringArry[6].Trim())); obj.transform = gameObject.transform; obj.id = int.Parse(stringArry[7]); obj.name = stringArry[8].Trim(); gameObjectArry.Add(obj); } reader.Close(); }
public override void GetMethods(string className, TypeDef type, IList <MethodDef> methodDefs) { ClassObj @class = null; foreach (var method in methodDefs) { if (!HasStrings(method, "SubmissionCache")) { continue; } if (!ClrHelper.MatchesSig(method, "String", "Boolean")) { continue; } @class = MappingManager.GetClass(UnobfuscatedName) .OrElse(new ClassObj(UnobfuscatedName, className)); MappingManager.AddClass(@class); //@class.AddMethod("GetJoinedMods", method.Name); //Mods mods, bool abreviated, bool displayNone, bool parens, bool ?space? } }
private void FindComponentManager(IList <MethodDef> methodDefs, ClassObj @class) { var ctorList = methodDefs.Where(i => i.Name == ".ctor"); if (!ctorList.Any()) { return; } var ctor = ctorList.First(); var insnOpt = GetOpcodePattern(ctor, 4, OpCodes.Newobj, OpCodes.Dup, OpCodes.Ldc_I4_0, OpCodes.Stfld, OpCodes.Stfld); insnOpt.IfPresent(insn => { if (!(insn.Operand is FieldDef field)) { return; } @class.AddField("componentManagerFld", field.Name); AddComponentManagerClass(field); }); }
/// <summary> /// Handles replacing code for most method calling OpCodes /// </summary> /// <param name="actualClass">instance</param> /// <param name="instruction">instance </param> /// <param name="classObj">Class Object </param> private void HandleGeneralMethodCall(TypeDef actualClass, Instruction instruction, ClassObj classObj) { var operandCast = (MethodDef)instruction.Operand; var methodName = operandCast.Name; if (methodName == ".ctor") { HandleCtor(actualClass, instruction); return; } var methodObjOpt = classObj.GetMethod(methodName); if (!methodObjOpt.IsPresent()) { Console.WriteLine("!! [Genera] Method Object is missing for: " + actualClass.Name + "." + operandCast.Name); return; } var methodObj = methodObjOpt.Get(); //Todo: Make this use a MethodSig for finding the method //Finds the obfuscated class' method's MethodDef var actualMethod = actualClass.FindMethod(methodObj.ObfName); //Sets the instructions operand to our new one instruction.Operand = instruction.OpCode.ToInstruction(actualMethod).Operand; }
private void FindSetTooltip(ClassObj classObj, IList <MethodDef> methodDefs) { var setTooltipMethod = methodDefs.First(m => ClrHelper.MatchesSig(m, "String")); classObj.AddMethod("SetTooltip", setTooltipMethod.Name); }
public static void AddMethod(ClassObj @class, MethodObj obfuscatedObject) { @class.Methods.Add(obfuscatedObject); }
private int ClSortFunc(ClassObj a, ClassObj b) { return(a.Order > b.Order ? 1 : (a.Order == b.Order ? 0 : -1)); }
} // end of GetDistincExamList /// <summary> /// 取得學生所有修課的成績, 包括學生自己的特殊計算規則假如有的話 /// </summary> /// <param name="ClassIdList"></param> /// <param name="exam"></param> /// <returns></returns> public static Dictionary <string, ClassVO> GetAllStudentScore(List <string> ClassIdList, ExamVO exam) { Dictionary <string, ClassVO> result = new Dictionary <string, ClassVO>(); StringBuilder sb = new StringBuilder(); sb.Append("select student.id as student_id,"); sb.Append("student.ref_class_id,"); sb.Append("class.class_name,"); sb.Append("class.grade_year,"); sb.Append("class.display_order,"); sb.Append("student.seat_no,"); sb.Append("student.name as student_name,"); sb.Append("student.student_number,"); sb.Append("course.id as course_id,"); sb.Append("course.credit,"); sb.Append("course.course_name,"); sb.Append("sce_take.score,"); sb.Append("score_calc_rule.content as student_calc_rule"); sb.Append(" from student"); sb.Append(" left join class"); sb.Append(" on student.ref_class_id = class.id"); sb.Append(" left join sc_attend"); sb.Append(" on sc_attend.ref_student_id = student.id"); sb.Append(" left join course"); sb.Append(" on course.id = sc_attend.ref_course_id"); sb.Append(" left join te_include"); sb.Append(" on te_include.ref_exam_template_id = course.ref_exam_template_id"); sb.Append(" left join sce_take"); sb.Append(" on (sce_take.ref_sc_attend_id=sc_attend.id and sce_take.ref_exam_id = te_include.ref_exam_id)"); sb.Append(" left join score_calc_rule"); sb.Append(" on score_calc_rule.id = student.ref_score_calc_rule_id"); sb.Append(" where class.id in ('" + string.Join("','", ClassIdList.ToArray()) + "')"); sb.Append(" and student.status = '" + _StudentSatus + "'"); sb.Append(" and course.school_year = '" + exam.SchoolYear + "'"); sb.Append(" and course.semester = '" + exam.Semester + "'"); sb.Append(" and te_include.ref_exam_id = '" + exam.ExamId + "'"); if (Global.IsDebug) { Console.WriteLine("[GetAllStudentScore] sql: [" + sb.ToString() + "]"); } QueryHelper qh = new QueryHelper(); DataTable dt = qh.Select(sb.ToString()); foreach (DataRow row in dt.Rows) { string ClassId = ("" + row["ref_class_id"]).Trim(); if (string.IsNullOrEmpty(ClassId)) { continue; } ClassVO ClassObj; if (result.Keys.Contains(ClassId)) { ClassObj = result[ClassId]; } else { ClassObj = new ClassVO(row); result.Add(ClassId, ClassObj); } ClassObj.AddStudent(row); } return(result); } // end of GetAllStudentScore
private void FindKeyPressMethod(ClassObj classObj, IList <MethodDef> methodDefs) { var keyPressMethod = methodDefs.First(m => HasStrings(m, "Skin reload queued.")); classObj.AddMethod("OnKeyPress", keyPressMethod.Name); }