Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #4
0
    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++;
                    }
                }
            }
        }
Exemple #6
0
 public static void AddClass(ClassObj classObj)
 {
     GetClass(classObj.Name).IfNotPresent(() =>
     {
         Console.WriteLine("[log] Added Class: {0} <{1}>", classObj.Name, classObj.ObfName);
         Classes.Add(classObj);
     });
 }
Exemple #7
0
        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);
        }
Exemple #8
0
        private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            ClassObj obj = new ClassObj()
            {
                Order  = Order,
                DisTxt = ClassName,
                Link   = ClassLink
            };

            new ClassManager().AddData(obj);
        }
Exemple #9
0
 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);
        }
Exemple #13
0
        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;
            }
        }
Exemple #14
0
 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;
     }
 }
Exemple #15
0
        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);
        }
Exemple #17
0
        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
                }
            }
        }
Exemple #18
0
        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
        }
Exemple #19
0
 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);
        }
Exemple #21
0
    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);
        }
Exemple #26
0
 public static void AddMethod(ClassObj @class, MethodObj obfuscatedObject)
 {
     @class.Methods.Add(obfuscatedObject);
 }
Exemple #27
0
 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);
        }