Esempio n. 1
0
        public InstructionTranslater(OffsetsCollector offsets, MethodDefinition currentMethod, long currentMethodOffset)
        {
            this.offsets             = offsets;
            this.currentMethod       = currentMethod;
            this.currentMethodOffset = currentMethodOffset;

            Init();
        }
        public IList <TranslatedInstruction> DisassembleMethod(MethodDefinition method)
        {
            long offset = OffsetsCollector.GetMethodOffset(method);

            if (offset == -1)
            {
                return(null);
            }
            return(Disassembler.DisassembleMethod(method, OffsetsCollector.GetMethodOffset(method)));
        }
        public NativeDetective(string il2cppDumpPath, string nativeAssemblyPath)
        {
            Offsets = new OffsetsCollector(il2cppDumpPath);
            Offsets.ReadStrings();
            Offsets.ReadMethods();

            Disassembler = new MethodDisassembler(File.ReadAllBytes(nativeAssemblyPath), Offsets);

            UsageFinder = new MethodUsageFinder(Offsets, Disassembler);
        }
        public List <Usage> FindUsages(string textToFind)
        {
            var usages = new List <Usage>();

            foreach (MethodDefinition method in offsets.Methods)
            {
                long offset = OffsetsCollector.GetMethodOffset(method);
                if (offset > -1)
                {
                    int count = GetStringUsagesInMethod(textToFind, method);
                    if (count > 0)
                    {
                        usages.Add(new Usage {
                            Method = method, Count = count
                        });
                    }
                }
            }

            return(usages);
        }
        private int GetFieldUsagesInMethod(FieldDefinition fieldToFind, MethodDefinition methodToSearch)
        {
            var instructions = disassembler.DisassembleMethod(OffsetsCollector.GetMethodOffset(methodToSearch));

            return(instructions.Where(x => x.UsedField == fieldToFind).Count());
        }
 public MethodUsageFinder(OffsetsCollector offsets, MethodDisassembler disassembler)
 {
     this.offsets      = offsets;
     this.disassembler = disassembler;
 }
        private int GetStringUsagesInMethod(string textToFind, MethodDefinition methodToSearch)
        {
            var instructions = disassembler.DisassembleMethod(OffsetsCollector.GetMethodOffset(methodToSearch));

            return(instructions.Where(x => x.StringContent != null && x.StringContent.Contains(textToFind)).Count());
        }
Esempio n. 8
0
 public MethodDisassembler(byte[] nativeDllCode, OffsetsCollector offsets)
 {
     NativeDllCode = nativeDllCode;
     Offsets       = offsets;
 }