Ejemplo n.º 1
0
        public void NextScan(ref NetCheatX.Core.Containers.SearchResultContainer <ISearchResult> result, ISearchType searchType, object[] args, Types.SetProgressCallback setProgress)
        {
            if (_host == null || result == null || result.Count == 0)
            {
                return;
            }

            // Grab parameters
            byte[] param0 = (byte[])args[0];
            bool   sign   = (bool)args[1];

            // Perform scan
            Search.NextScan(_host, this, setProgress, result, Search.SearchType.GreaterThanOrEqualTo, sign, param0);
        }
Ejemplo n.º 2
0
        public void FirstScan(ref NetCheatX.Core.Containers.SearchResultContainer <ISearchResult> result, ISearchType searchType, object[] args, Types.MemoryRange[] range, Types.SetProgressCallback setProgress)
        {
            if (result == null)
            {
                result = new NetCheatX.Core.Containers.SearchResultContainer <ISearchResult>();
            }
            if (_host == null)
            {
                return;
            }

            // Grab parameters
            byte[] param0 = (byte[])args[0];

            // Loop through each range and scan
            foreach (Types.MemoryRange r in range)
            {
                Search.FirstScan(_host, this, setProgress, r, result, Search.SearchType.GreaterThanOrEqualTo, searchType.Signed, searchType.Alignment, param0);
            }
        }
Ejemplo n.º 3
0
        public static bool FirstScan(IPluginHost host, ISearchMethod method, Types.SetProgressCallback setProgress, Types.MemoryRange range, NetCheatX.Core.Containers.SearchResultContainer <ISearchResult> result, SearchType type, bool signed, int align, byte[] param0, byte[] param1 = null)
        {
            bool      pass = false;
            int       progress = 0, lastProgress = 0;
            Stopwatch watch = new Stopwatch();

            // Return false if param is invalid
            if (param0 == null || param0.Length == 0 || (type == SearchType.ValueBetween && (param0 == null || param1.Length < 2)))
            {
                return(false);
            }
            // Return false if any of the other arguments are invalid
            if (host == null || method == null || result == null)
            {
                return(false);
            }

            // Define total range
            ulong distance = range.stop - range.start;

            // Define max block size
            ulong blockSize = SEARCH_BLOCK_SIZE;

            if (blockSize > distance)
            {
                blockSize = distance;
            }

            // Define block increment value
            // Subtract param0.Length-1 to ensure memory at end of blocks is scanned
            ulong blockInc = blockSize - (ulong)(param0.Length - align);

            // Initialize our buffers
            byte[] block   = new byte[blockSize];
            byte[] compare = new byte[param0.Length];

            // Reset progress bar to 0
            setProgress.Invoke(method, 0, 100, "");

            // Loop through memory, grabbing blocks and comparing them
            watch.Start();
            for (ulong addr = range.start; addr < range.stop; addr += blockInc)
            {
                // Update progress bar
                progress = (int)((float)((float)(addr - range.start) / (float)distance) * 100f);
                if (progress > lastProgress)
                {
                    lastProgress = progress;
                    setProgress.Invoke(method, progress, 100, result.Count().ToString("N0") + " results found");
                }

                // Update blockSize if range smaller than SEARCH_BLOCK_SIZE
                if (blockSize > (range.stop - addr))
                {
                    blockSize = (range.stop - addr);
                }

                // Grab block
                if (host.ActiveCommunicator.GetBytes(addr, ref block))
                {
                    for (int off = 0; off < (int)blockInc; off += align)
                    {
                        // Copy section for comparison
                        Array.Copy(block, off, compare, 0, param0.Length);

                        // Compare based on SearchType
                        switch (type)
                        {
                        case SearchType.EqualTo:
                            pass = NetCheatX.Core.Bitlogic.Compare.BAEqual(param0, compare);
                            break;

                        case SearchType.NotEqualTo:
                            pass = NetCheatX.Core.Bitlogic.Compare.BANotEqual(param0, compare);
                            break;

                        case SearchType.LessThan:
                            if (signed)
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BALessThanSigned(compare, param0);
                            }
                            else
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BALessThanUnsigned(compare, param0);
                            }
                            break;

                        case SearchType.LessThanOrEqualTo:
                            if (signed)
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualSigned(compare, param0);
                            }
                            else
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualUnsigned(compare, param0);
                            }
                            break;

                        case SearchType.GreaterThan:
                            if (signed)
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanSigned(compare, param0);
                            }
                            else
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanUnsigned(compare, param0);
                            }
                            break;

                        case SearchType.GreaterThanOrEqualTo:
                            if (signed)
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualSigned(compare, param0);
                            }
                            else
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualUnsigned(compare, param0);
                            }
                            break;

                        case SearchType.ValueBetween:
                            if (signed)
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualSigned(compare, param0);
                                if (pass)
                                {
                                    pass &= NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualSigned(compare, param1);
                                }
                            }
                            else
                            {
                                pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualUnsigned(compare, param0);
                                if (pass)
                                {
                                    pass &= NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualUnsigned(compare, param1);
                                }
                            }
                            break;
                        }

                        // If passed then add the result
                        if (pass)
                        {
                            result.Add(new NetCheatX.Core.Basic.BasicSearchResult()
                            {
                                Address = addr + (ulong)off, Value = (byte[])compare.Clone()
                            });
                        }
                    }
                }
            }
            watch.Stop();

            // Finish progress
            setProgress.Invoke(method, 100, 100, result.Count().ToString("N0") + " results found in " + watch.Elapsed.ToString("ss\\.fff") + " seconds");

            return(true);
        }
Ejemplo n.º 4
0
        public static bool NextScan(IPluginHost host, ISearchMethod method, Types.SetProgressCallback setProgress, NetCheatX.Core.Containers.SearchResultContainer <ISearchResult> result, SearchType type, bool signed, byte[] param0, byte[] param1 = null)
        {
            bool  pass = false;
            int   progress = 0, lastProgress = 0;
            ulong lastAddr = 0;

            NetCheatX.Core.Basic.BasicSearchResult resultEdit;

            // Return false if param is invalid
            if (param0 == null || param0.Length == 0 || (type == SearchType.ValueBetween && (param0 == null || param1.Length < 2)))
            {
                return(false);
            }
            // Return false if any of the other arguments are invalid
            if (host == null || method == null || result == null || result.Count == 0)
            {
                return(false);
            }

            // Initialize counters
            int resultSize  = result.Count;
            int resultIndex = 0;
            int resultFound = 0;

            // Initialize our buffers
            byte[] block   = new byte[SEARCH_BLOCK_SIZE];
            byte[] compare = new byte[param0.Length];

            // Reset progress bar to 0
            setProgress.Invoke(method, 0, 100, "");

            for (int off = 0; off < result.Count; off++)
            {
                // Update progress bar
                progress = (int)((float)((float)resultIndex / (float)resultSize) * 100f);
                if (progress > lastProgress)
                {
                    lastProgress = progress;
                    setProgress.Invoke(method, progress, 100, resultFound.ToString() + " results found");
                }

                // Grab current result
                resultEdit = (NetCheatX.Core.Basic.BasicSearchResult)result.ElementAt(off);

                // Update block if address is out of block range
                if (resultEdit.Address > (lastAddr + SEARCH_BLOCK_SIZE - (ulong)(param0.Length - 1)) || off == 0)
                {
                    // Load block
                    lastAddr = result[off].Address;
                    host.ActiveCommunicator.GetBytes(lastAddr, ref block);
                }

                // Copy section for comparison
                Array.Copy(block, (int)(resultEdit.Address - lastAddr), compare, 0, param0.Length);

                // Compare based on SearchType
                switch (type)
                {
                case SearchType.EqualTo:
                    pass = NetCheatX.Core.Bitlogic.Compare.BAEqual(param0, compare);
                    break;

                case SearchType.NotEqualTo:
                    pass = NetCheatX.Core.Bitlogic.Compare.BANotEqual(param0, compare);
                    break;

                case SearchType.LessThan:
                    if (signed)
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BALessThanSigned(compare, param0);
                    }
                    else
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BALessThanUnsigned(compare, param0);
                    }
                    break;

                case SearchType.LessThanOrEqualTo:
                    if (signed)
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualSigned(compare, param0);
                    }
                    else
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualUnsigned(compare, param0);
                    }
                    break;

                case SearchType.GreaterThan:
                    if (signed)
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanSigned(compare, param0);
                    }
                    else
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanUnsigned(compare, param0);
                    }
                    break;

                case SearchType.GreaterThanOrEqualTo:
                    if (signed)
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualSigned(compare, param0);
                    }
                    else
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualUnsigned(compare, param0);
                    }
                    break;

                case SearchType.ValueBetween:
                    if (signed)
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualSigned(compare, param0) &
                               NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualSigned(compare, param1);
                    }
                    else
                    {
                        pass = NetCheatX.Core.Bitlogic.Compare.BAGreaterThanOrEqualUnsigned(compare, param0) &
                               NetCheatX.Core.Bitlogic.Compare.BALessThanOrEqualUnsigned(compare, param1);
                    }
                    break;
                }

                if (!pass)
                {
                    // Clean up
                    resultEdit.Value = null;
                    result[off]      = resultEdit;

                    // Remove
                    result.RemoveAt(off);

                    // Lower off so the next result is not skipped
                    off--;
                }
                else
                {
                    // Update result
                    resultEdit.Value = compare;
                    result[off]      = resultEdit;

                    resultFound++;
                }

                resultIndex++;
            }

            return(true);
        }
Ejemplo n.º 5
0
        public void NextScan(ref NetCheatX.Core.Containers.SearchResultContainer <ISearchResult> result, ISearchType searchType, object[] args, Types.SetProgressCallback setProgress)
        {
            if (_host == null || result == null || result.Count == 0)
            {
                return;
            }

            // Grab parameters
            byte[] param0 = (byte[])args[0];
            byte[] param1 = (byte[])args[1];

            // Perform scan
            Search.NextScan(_host, this, setProgress, result, Search.SearchType.ValueBetween, searchType.Signed, param0, param1);
        }
Ejemplo n.º 6
0
        public void ScanFirst(ISearchType type, ISearchMethod method, Types.MemoryRange[] ranges, object[] args, Types.SetProgressCallback setProgress)
        {
            if (_list == null)
            {
                throw new Exception("Results list is null on start of initial scan.");
            }

            PopulateColumns();
            method.FirstScan(ref _list, type, args, ranges, setProgress);

            this._stopWatch.Stop();
            Invoke((MethodInvoker) delegate
            {
                this.VirtualListSize = _list.Count;
            });
        }