Пример #1
0
        private void SearchThread()
        {
            Searching      = true;
            ReadPercentage = 0.0f;
            BytesRead      = 0;
            TargetSize     = 0;

            MemorySearchResult       result   = new MemorySearchResult();
            List <MemorySegmentInfo> segments = TargetProcess.EnumerateSegments((UInt64)TargetProcess.GetProcess().MainModule.BaseAddress,
                                                                                TargetProcess.GetProcess().MainModule.ModuleMemorySize);

            foreach (MemorySegmentInfo ms in segments)
            {
                TargetSize += (UInt64)ms.SegmentSize;
            }

            foreach (MemorySegmentInfo ms in segments)
            {
                SearchRegion(ms.SegmentStart, ms.SegmentStart + ms.SegmentSize, ref result);
            }

            LastResult = result;
            Searching  = false;
            ThreadSemaphore.Release();
        }
Пример #2
0
        private void SearchAgainThread()
        {
            Searching      = true;
            ReadPercentage = 0.0f;
            BytesRead      = 0;
            TargetSize     = 0;

            MemorySearchResult result = new MemorySearchResult();

            for (int i = 0; i < LastResult.Addresses.Count; i++)
            {
                UInt64 addy = LastResult.Addresses[i];

                byte[] readBytes = TargetProcess.ReadBuffer(addy, SearchArray.Length);
                if (readBytes.SequenceEqual(SearchArray))
                {
                    result.Addresses.Add(addy);
                }

                ReadPercentage = (float)(i + 1) / (float)LastResult.Addresses.Count;
            }

            LastResult = result;
            Searching  = false;
            ThreadSemaphore.Release();
        }
Пример #3
0
        public MemorySearchResult GetLastResult()
        {
            ThreadSemaphore.WaitOne();
            MemorySearchResult ret = LastResult;

            ThreadSemaphore.Release();
            return(ret);
        }
Пример #4
0
        private void WindowProcessTimer_Tick(object sender, EventArgs e)
        {
            if (!ProcessSelected())
            {
                EnableControls(false);
                return;
            }

            if (Searcher.IsSearching())
            {
                SearchProgressBar.Value = (double)Searcher.GetSearchPercentage() * 100.0;
                EnableControls(false);
                WasSearching = true;
                return;
            }

            if (WasSearching)
            {
                EnableControls(true);
                SearchProgressBar.Value = 100;
                SearchResultDataGrid.Items.Clear();
                WasSearching = false;
                TimerTick    = 4;
                MemorySearchResult res = Searcher.GetLastResult();
                foreach (UInt64 addy in res.Addresses)
                {
                    SearchEntry entry = new SearchEntry()
                    {
                        OriginalAddress = addy, Address = addy.ToString("X8"), Value = "", ValueType = CurrentSearchType, Frozen = false,
                        ValueTypeString = SearchTypeConverter.SearchTypeStrings[(int)CurrentSearchType]
                    };
                    SearchResultDataGrid.Items.Add(entry);
                }
            }

            TimerTick++;
            if (TimerTick % 5 == 0)
            {
                UpdateInfoDataGrid(SearchResultDataGrid);
                TimerTick = 1;
            }
            UpdateInfoDataGrid(AddressListDataGrid);
        }
Пример #5
0
        private void SearchRegion(UInt64 start, UInt64 end, ref MemorySearchResult result)
        {
            UInt64 baseAddr = start;

            for (; baseAddr < end; baseAddr++)
            {
                try
                {
                    byte[] readBytes = TargetProcess.ReadBuffer(baseAddr, SearchArray.Length);
                    if (readBytes.SequenceEqual(SearchArray))
                    {
                        result.Addresses.Add(baseAddr);
                    }
                }
                catch (Exception e)
                {
                }
                BytesRead++;
                ReadPercentage = (float)((double)BytesRead / (double)TargetSize);
            }
        }