unsafe private void ZweiundVierzig(PointerStructure pointer) { uint _referencedAddress = pointer.addresses[0]; uint _regionBeginning = (uint)pointer.regionStructure.RegionBeginning; foreach (MemoryStructure structure in MemoryDump) { size += structure.regionSize; fixed(byte *memory = structure.memory) { uint _size = (uint)memory + (uint)structure.regionSize - sizeof(uint); for (uint ptr = (uint)memory; ptr < _size; ptr++) { uint _currentValue = *(uint *)ptr; //if (_currentValue != 0 || _currentValue <= 0x7fffffff) //{ //} if (_currentValue >= _regionBeginning && _currentValue <= _referencedAddress) { PointerHistory.Last().Add(pointer); //WriteToList(pointer); } } } } long hier = size; }
private bool PointingToRegion(uint currentValue, PointerStructure pointer) { if (currentValue < (uint)pointer.regionStructure.RegionBeginning || currentValue > pointer.addresses[0]) { return(false); } else { return(true); } }
private string ModuleName(PointerStructure pointer) { for (int i = 0; i < CurrentProcess.Modules.Count; i++) { if (pointer.addresses.First() >= (uint)CurrentProcess.Modules[i].BaseAddress && pointer.addresses.First() <= (uint)CurrentProcess.Modules[i].BaseAddress + CurrentProcess.Modules[i].ModuleMemorySize) { return(CurrentProcess.Modules[i].ModuleName); } } return("arsch"); }
private bool PointingFromModule(PointerStructure pointer) { for (int i = 0; i < CurrentProcess.Modules.Count; i++) { if (pointer.addresses.First() >= (uint)CurrentProcess.Modules[i].BaseAddress && pointer.addresses.First() <= (uint)CurrentProcess.Modules[i].BaseAddress + CurrentProcess.Modules[i].ModuleMemorySize) { return(true); } } return(false); }
private void WriteToList(PointerStructure pointer) { bool done = false; while (!done) { Monitor.TryEnter(PointerHistory.Last(), ref done); //waits until no other thread is accessing the list if (done) { PointerHistory.Last().Add(pointer); Monitor.Exit(PointerHistory.Last()); } } }
public void MultiPointerSearch(PointerStructure pointer) { List <Task> tasklist = new List <Task>(); foreach (List <RegionStructure> list in regionLists) { Task task = Task.Run(() => PointerSearch(pointer, list)); tasklist.Add(task); } foreach (Task item in tasklist) { item.Wait(); } }
/// <summary> /// searches for pointer /// </summary> /// <param name="pointer"></param> unsafe private void PointerSearch(PointerStructure pointer, List <RegionStructure> list) { uint _referencedAddress = pointer.addresses[0]; uint _regionBeginning = (uint)pointer.regionStructure.RegionBeginning; foreach (RegionStructure region in list) { byte[] buffer = new byte[region.RegionSize]; ReadProcessMemory(targetHandle, region.RegionBeginning, buffer, (uint)region.RegionSize, out notNecessary); fixed(byte *memory = buffer) { uint _size = (uint)memory + (uint)region.RegionSize - sizeof(uint); for (uint ptr = (uint)memory; ptr < _size; ptr++) { uint _currentValue = *(uint *)ptr; if (_currentValue != 0 || _currentValue <= 0x7fffffff) { } //if (_currentValue >= _regionBeginning && _currentValue <= _referencedAddress) //{ // WriteToList(pointer); //} } } } //for (int i = 0; i < structure.memory.Length - (sizeof(int) - 1); i++) //{ // uint _currentValue = (uint)(structure.memory[i + 3] << 24 | structure.memory[i + 2] << 16 | structure.memory[i + 1] << 8 | structure.memory[i]); //} }
public void PointerStart() { DumpMemorySynchronously(); PointerHistory.Add(new List <PointerStructure>()); IntPtr _currentAddress = new IntPtr(BitConverter.ToInt32(CurrentAddress, 0)); MEMORY_BASIC_INFORMATION memInfo = new MEMORY_BASIC_INFORMATION(); VirtualQueryEx(targetHandle, _currentAddress, out memInfo, (uint)Marshal.SizeOf(memInfo)); PointerStructure pointer = new PointerStructure((uint)_currentAddress, new RegionStructure(memInfo.BaseAddress, (int)memInfo.RegionSize)); ZweiundVierzig(pointer); //MultiPointerSearch(pointer); int egal = 0; PointerOutput = MemoryConverter.CreateDataGridForPointer(PointerHistory); }