private void pointer_list_view_add_to_cheat_list_Click(object sender, EventArgs e) { if (pointer_list_view.SelectedRows == null) { return; } DataGridViewSelectedRowCollection items = pointer_list_view.SelectedRows; for (int idx = 0; idx < items.Count; ++idx) { try { DataGridViewRow pointerRow = items[idx]; PointerResult pointerResult = pointerResults[pointerRow.Index]; ulong baseAddress = ulong.Parse((string)pointerRow.Cells[pointerRow.Cells.Count - 2].Value, NumberStyles.HexNumber); //"DC2630" ulong tailAddress = pointerList.GetTailAddress(pointerResult, processManager.MappedSectionList); string data = MemoryHelper.BytesToString(MemoryHelper.GetBytesByType(tailAddress)); string dataType = MemoryHelper.GetStringOfValueType(MemoryHelper.ValueType); string description = ""; for (int oIdx = 0; oIdx < pointerResult.Offsets.Length; ++oIdx) { description += "+" + pointerResult.Offsets[oIdx].ToString("X"); } description = (string)baseAddress.ToString("X") + description; mainForm.new_pointer_cheat(baseAddress, pointerResult.Offsets.ToList(), dataType, data, false, description); } catch (Exception exception) { MessageBox.Show(exception.Message, exception.Source, MessageBoxButtons.OK, MessageBoxIcon.Hand); } } }
public ulong GetTailAddress(PointerResult pointerResult, MappedSectionList mappedSectionList) { ulong tailAddress = pointerResult.GetBaseAddress(mappedSectionList); if (pointerResult.Offsets.Length > 0) { int j = 0; Pointer pointer = new Pointer(); int index = GetPointerByAddress(tailAddress, ref pointer); if (index < 0) { return(0); } tailAddress = pointer.PointerValue; for (j = 0; j < pointerResult.Offsets.Length - 1; ++j) { index = GetPointerByAddress((ulong)((long)tailAddress + pointerResult.Offsets[j]), ref pointer); if (index < 0) { return(0); } tailAddress = pointer.PointerValue; } tailAddress = (ulong)((long)tailAddress + pointerResult.Offsets[j]); } return(tailAddress); }
/// <summary> /// Invoke thread-safe calls with a delegate event /// </summary> private void NextFinderWorkerEvent(PointerList pointerList, PointerFinderWorkerArgs pointerFinderWorkerArgs) { if (InvokeRequired) { NextFinderHandler ng = new NextFinderHandler(NextFinderWorkerEvent); this.Invoke(ng, pointerList, pointerFinderWorkerArgs); } else { List <PointerResult> newPointerResultList = new List <PointerResult>(); pointer_list_view.Rows.Clear(); for (int i = 0; i < pointerResults.Count; ++i) { if (i % 100 == 0) { next_pointer_finder_worker.ReportProgress((int)(30 * (float)(i) / pointerResults.Count) + 70); } PointerResult pointerResult = pointerResults[i]; ulong tailAddress = pointerList.GetTailAddress(pointerResult, processManager.MappedSectionList); if (tailAddress == pointerFinderWorkerArgs.Address) { newPointerResultList.Add(pointerResult); ++result_counter; if (result_counter < 2000) { int row_index = pointer_list_view.Rows.Add(); DataGridViewCellCollection row = pointer_list_view.Rows[row_index].Cells; for (int j = 0; j < pointerResult.Offsets.Length; ++j) { row[j].Value = (pointerResult.Offsets[j].ToString("X")); //offset } if (pointerResult.Offsets.Length > 0) { row[row.Count - 2].Value = (pointerResult.GetBaseAddress(processManager.MappedSectionList).ToString("X")); //address row[row.Count - 1].Value = (processManager.MappedSectionList.GetSectionName(pointerResult.BaseSectionID)); //section } } } } if (newPointerResultList.Count == 0 && MessageBox.Show("Whether to continue?", "Next Scan results are zero", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes || newPointerResultList.Count > 0) { pointerResults = newPointerResultList; } next_pointer_finder_worker.ReportProgress(100); } }
private void pointer_finder_worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progress_bar.Value = e.ProgressPercentage; if (e.UserState != null) { PointerFinderWorkerListViewUpdate pointerFinderWorkerListViewUpdate = (PointerFinderWorkerListViewUpdate)e.UserState; List <long> path_offset = pointerFinderWorkerListViewUpdate.PathOffset; List <Pointer> path_address = pointerFinderWorkerListViewUpdate.PathAddress; int baseSectionID = pointerFinderWorkerListViewUpdate.SectionID; try { ulong baseOffset = path_address[path_offset.Count - 1].Address - processManager.MappedSectionList[baseSectionID].Start; PointerResult pointerResult = new PointerResult(baseSectionID, baseOffset, path_offset); pointerResults.Add(pointerResult); if (result_counter < 2000) { int row_index = pointer_list_view.Rows.Add(); DataGridViewCellCollection row = pointer_list_view.Rows[row_index].Cells; for (int i = 0; i < path_offset.Count; ++i) { row[i].Value = (path_offset[i].ToString("X")); //offset int sectionID = processManager.MappedSectionList.GetMappedSectionID(path_address[i].Address); } if (path_offset.Count > 0) { row[row.Count - 2].Value = (path_address[path_address.Count - 1].Address.ToString("X")); //address int sectionID = processManager.MappedSectionList.GetMappedSectionID(path_address[path_address.Count - 1].Address); row[row.Count - 1].Value = (processManager.MappedSectionList.GetSectionName(sectionID)); //section } } ++result_counter; if (result_counter % 1024 == 0) { msg.Text = result_counter.ToString() + " results"; } } catch (Exception exception) { MessageBox.Show(exception.Message); } } }
private void pointer_list_view_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) { return; } PointerResult pointerResult = pointerResults[e.RowIndex]; ulong baseAddress = pointerResult.GetBaseAddress(processManager.MappedSectionList); ulong tailAddress = pointerList.GetTailAddress(pointerResult, processManager.MappedSectionList); string data = MemoryHelper.BytesToString(MemoryHelper.GetBytesByType(tailAddress)); string dataType = MemoryHelper.GetStringOfValueType(MemoryHelper.ValueType); mainForm.new_pointer_cheat(baseAddress, pointerResult.Offsets.ToList(), dataType, data, false, ""); }
private void pointer_list_view_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) { return; } PointerResult pointerResult = pointerResults[e.RowIndex]; ulong baseAddress = pointerResult.GetBaseAddress(processManager.MappedSectionList); ulong tailAddress = pointerList.GetTailAddress(pointerResult, processManager.MappedSectionList); string data = MemoryHelper.BytesToString(MemoryHelper.GetBytesByType(tailAddress)); string dataType = MemoryHelper.GetStringOfValueType(MemoryHelper.ValueType); string description = ""; for (int oIdx = 0; oIdx < pointerResult.Offsets.Length; ++oIdx) { description += "+" + pointerResult.Offsets[oIdx].ToString("X"); } description = (string)baseAddress.ToString("X") + description; mainForm.new_pointer_cheat(baseAddress, pointerResult.Offsets.ToList(), dataType, data, false, description); }
private void next_pointer_finder_worker_DoWork(object sender, DoWorkEventArgs e) { PointerFinderWorkerArgs pointerFinderWorkerArgs = (PointerFinderWorkerArgs)e.Argument; result_counter = 0; pointerList.Clear(); next_pointer_finder_worker.ReportProgress(0); for (int section_idx = 0; section_idx < processManager.MappedSectionList.Count; ++section_idx) { if (next_pointer_finder_worker.CancellationPending) { break; } MappedSection mappedSection = processManager.MappedSectionList[section_idx]; if (mappedSection.Name.StartsWith("libSce")) { continue; } mappedSection.PointerSearchInit(processManager, MemoryHelper, pointerList); next_pointer_finder_worker.ReportProgress((int)(((float)section_idx / processManager.MappedSectionList.Count) * 30)); } if (next_pointer_finder_worker.CancellationPending) { return; } next_pointer_finder_worker.ReportProgress(30); pointerList.Init(); next_pointer_finder_worker.ReportProgress(50); List <PointerResult> newPointerResultList = new List <PointerResult>(); pointer_list_view.Rows.Clear(); for (int i = 0; i < pointerResults.Count; ++i) { if (i % 100 == 0) { next_pointer_finder_worker.ReportProgress((int)(50 * (float)(i) / pointerResults.Count) + 50); } PointerResult pointerResult = pointerResults[i]; if (pointerList.GetTailAddress(pointerResult, processManager.MappedSectionList) == pointerFinderWorkerArgs.Address) { newPointerResultList.Add(pointerResult); ++result_counter; if (result_counter < 2000) { int row_index = pointer_list_view.Rows.Add(); DataGridViewCellCollection row = pointer_list_view.Rows[row_index].Cells; for (int j = 0; j < pointerResult.Offsets.Length; ++j) { row[j].Value = (pointerResult.Offsets[j].ToString("X")); //offset } if (pointerResult.Offsets.Length > 0) { row[row.Count - 2].Value = (pointerResult.GetBaseAddress(processManager.MappedSectionList).ToString("X")); //address row[row.Count - 1].Value = (processManager.MappedSectionList.GetSectionName(pointerResult.BaseSectionID)); //section } } } } pointerResults = newPointerResultList; next_pointer_finder_worker.ReportProgress(100); }