internal void ThreadButtonState() { int LastSearchTime = Config.ButtonStateUpdateInterval; while (true) { if (Form.NTRConnection.HardwarePID != null) { SearchCriteria Criteria = new SearchCriteria(); Criteria.ProcessID = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Form.NTRConnection.HardwarePID), 0); Criteria.DataType = DataTypeExact.Bytes1; Criteria.StartAddress = BUTTON_STATES_START; Criteria.Length = BUTTON_STATES_SIZE; Criteria.SearchType = SearchTypeBase.Unknown; Criteria.SearchValue = new byte[] { 0 }; Criteria.Size = 1; Criteria.HideSearch = true; Form.NTRConnection.SearchCriteria.Add(Criteria); Form.NTRConnection.SendReadMemoryPacket(Criteria); ButtonState = (ButtonState)Criteria.AddressesFound[BUTTON_STATES_START + Offset_Button][0]; ShoulderState = (ShoulderState)Criteria.AddressesFound[BUTTON_STATES_START + Offset_Shoulder][0]; StickState = (StickState)Criteria.AddressesFound[BUTTON_STATES_START + Offset_Stick][0]; StickHoriz = Criteria.AddressesFound[BUTTON_STATES_START + Offset_Horiz][0]; StickVert = Criteria.AddressesFound[BUTTON_STATES_START + Offset_Vert][0]; LastSearchTime = Math.Max(LastSearchTime, (int)Criteria.Duration); Form.NTRConnection.SetCurrentOperationText2 = ButtonState.ToString() + "|" + ShoulderState.ToString() + "|" + StickState.ToString() + "|" + StickHoriz + "|" + StickVert + "|" + LastSearchTime; } Thread.Sleep(LastSearchTime * 2); } }
private void SearchButton_Click(object sender, EventArgs e) { uint Pointer = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(TextAddress.Text).Reverse().ToArray(), 0); SearchCriteria Criteria = new SearchCriteria(); Criteria.ProcessID = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(ProcessID), 0); Criteria.DataType = DataTypeExact.Bytes4; if (CheckFullSearch.Checked) { Criteria.StartAddress = Criteria.Length = uint.MaxValue; Criteria.Length = 4; } else { KeyValuePair<uint, uint> KVP = MainForm.GetAddressSpaceForAddress(Pointer).Value; Criteria.StartAddress = KVP.Key; Criteria.Length = KVP.Value; } Criteria.Size = 4; Criteria.SearchType = SearchTypeBase.Range; Criteria.SearchValue = BitConverter.GetBytes(Pointer - BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(TextMaxOffset.Text.PadLeft(8, '0')).Reverse().ToArray(), 0)); Criteria.SearchValue2 = BitConverter.GetBytes(Pointer); MainForm.NTRConnection.SearchCriteria.Add(Criteria); MainForm.NTRConnection.SendReadMemoryPacket(Criteria); foreach (var a in Criteria.AddressesFound.OrderByDescending(x => BitConverter.ToUInt32(x.Value, 0)).ThenBy(x => x.Key)) { int RowIndex = ResultsDataGrid.Rows.Add(); ResultsDataGrid[0, RowIndex].Value = Utilities.GetStringFromByteArray(BitConverter.GetBytes(a.Key).Reverse().ToArray()); ResultsDataGrid[1, RowIndex].Value = Utilities.GetStringFromByteArray(BitConverter.GetBytes(Pointer - BitConverter.ToUInt32(a.Value, 0)).Reverse().ToArray()).TrimStart('0'); } }
internal byte[] GetMemoryAtAddress(uint ProcessID, uint Address, DataTypeExact DataType) { SearchCriteria Criteria = new SearchCriteria(); Criteria.ProcessID = ProcessID; Criteria.DataType = DataType; Criteria.StartAddress = Address; Criteria.Length = Criteria.Size = Form.GetSearchMemorySize(DataType); Criteria.SearchType = SearchTypeBase.Unknown; Criteria.SearchValue = new byte[] { 0 }; Form.NTRConnection.SearchCriteria.Add(Criteria); Form.NTRConnection.SendReadMemoryPacket(Criteria); return Criteria.AddressesFound.Values.First(); }
private void ResetButton_Click(object sender, EventArgs e) { ComboSearchType.Items.Clear(); ComboSearchType.Items.AddRange(SearchTypeInitialTool.GetValues()); ComboSearchType.SelectedIndex = 0; LastSearchCriteria = null; ResultsGrid.Rows.Clear(); ControlEnabledSearchType = ControlEnabledMemoryRange = ControlEnabledDataType = true; if (MemoryRange.SelectedIndex == MemoryRange.Items.Count - 1) { ControlEnabledStart = ControlEnabledSize = true; } LabelLastSearch.Text = "Last Search\n"; }
internal static void Execute() { NTRRemoteConnection Conn = new NTRRemoteConnection(); Console.WriteLine("Connecting..."); Conn.IP = "192.168.1.29"; Conn.Port = 8000; while (!Conn.Connect()) ; Thread t = new Thread(delegate() { while (true) { Conn.SendHeartbeatPacket(); Thread.Sleep(100); } }); t.Start(); Thread.Sleep(1000); Console.WriteLine("Getting Processes..."); Conn.SendListProcessesPacket(); while (!Conn.IsProcessListUpdated) { Thread.Sleep(10); } Dictionary<string, Dictionary<uint, uint>> Procs = new Dictionary<string, Dictionary<uint, uint>>(); foreach (string ProcFull in Conn.Processes) { string Proc = ProcFull.Split('|')[0]; Console.WriteLine("Fetching memregions for process " + Proc); Conn.SendReadMemoryAddressesPacket(Proc); while (!Conn.IsMemoryListUpdated) { Thread.Sleep(10); } Procs.Add(Proc, Conn.AddressSpaces); Conn.IsMemoryListUpdated = false; } Directory.CreateDirectory("Temp"); for (int i = 0; i < 3; ++i) { Directory.CreateDirectory("Temp" + Path.DirectorySeparatorChar + i); Console.WriteLine("Dumping memory set " + i + "..."); foreach (string Proc in Procs.Keys) { foreach (uint Start in Procs[Proc].Keys) { uint Size = Procs[Proc][Start]; SearchCriteria Criteria = new SearchCriteria(); Criteria.ProcessID = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Proc), 0); Criteria.DataType = DataTypeExact.Bytes1; Criteria.StartAddress = Start; Criteria.Length = Size; Criteria.SearchType = SearchTypeBase.Unknown; Criteria.SearchValue = new byte[] { 0 }; Criteria.Size = 1; Conn.SearchCriteria.Add(Criteria); byte[] Data = new byte[Size]; Console.WriteLine("Dumping PID " + Proc + ", MR " + Start + "+" + Size + "..."); Conn.SendReadMemoryPacket(Criteria); while (!Criteria.SearchComplete) { Thread.Sleep(10); } foreach (uint Addr in Criteria.AddressesFound.Keys) { Data[Addr - Start] = Criteria.AddressesFound[Addr][0]; } File.WriteAllBytes("Temp" + Path.DirectorySeparatorChar + i + Path.DirectorySeparatorChar + Proc + "_" + Start + ".raw", Data); } } if (i == 1) { Console.WriteLine("Press any key..."); Console.ReadKey(false); Console.WriteLine(); } } t.Abort(); Conn.Disconnect(); }
public void SendReadMemoryPacket(SearchCriteria NewSearchCriteria) { if (!NewSearchCriteria.HideSearch) { this.LockControls = true; } while (SearchCriteria[0] != NewSearchCriteria) { Thread.Sleep(10); } SearchTimerStopwatch.Start(); SendReadMemoryPacketPre(); SearchTimerStopwatch.Stop(); NewSearchCriteria.Duration = (uint)SearchTimerStopwatch.ElapsedMilliseconds; SearchTimerStopwatch.Reset(); if (!NewSearchCriteria.HideSearch) { this.LockControls = false; } }