Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
UpLvL
0 / 0 / 0
Регистрация: 13.04.2016
Сообщений: 14
1

Чтение 64bit адреса

17.03.2019, 21:11. Просмотров 248. Ответов 2
Метки нет (Все метки)

Прошу помочь, я не программист и мне эта нужна одноразова. код
class MemoryEditor
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
 
namespace Teso
{
    class MemoryEditor
    {
        public MemoryEditor(string process_name)
        {
            this.pName = process_name;
 
        }
 
        public int GetProcessByName()
        {
            this.pId = 0;
            IntPtr handleToSnapshot = IntPtr.Zero;
            try
            {
                PROCESSENTRY32 procEntry = new PROCESSENTRY32
                {
                    dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32))
                };
                handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
                if (Process32First(handleToSnapshot, ref procEntry))
                {
                    do
                    {
                        if (this.pName == procEntry.szExeFile)
                        {
                            this.pId = (int)procEntry.th32ProcessID;
                            break;
                        }
                    } while (Process32Next(handleToSnapshot, ref procEntry));
                }
                else
                {
                    throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Can't get the process.", ex);
            }
            finally
            {
 
                CloseHandle(handleToSnapshot);
            }
            return this.pId;
        }
 
 
 
        public void WriteMemory(IntPtr address, byte[] value)
        {
            IntPtr hProceess = OpenProcess(ProcessAccessFlags.All, false, this.pId);
            UIntPtr bytesWritten = UIntPtr.Zero;
            WriteProcessMemory(hProceess, address, value, (uint)value.Length, out bytesWritten);
            CloseHandle(hProceess);
        }
 
        public byte[] ReadMemory(IntPtr address, uint size)
        {
            byte[] buffer = new byte[size];
            IntPtr BytesRead = IntPtr.Zero;
            IntPtr hProcess = OpenProcess(ProcessAccessFlags.All, false, this.pId);
            ReadProcessMemory(hProcess, address, buffer, size, out BytesRead);
            CloseHandle(hProcess);
            return buffer;
        }
        public int ReadPointer(int addr, Int32[] offsets)
        {
            for (int i = 0; i < offsets.Length; i++)
                addr = BitConverter.ToInt32(ReadMemory((IntPtr)addr, (uint)4), 0) + offsets[i];
            return addr;
        }
        private readonly string pName;
        public int pId;
 
        [Flags]
        private enum SnapshotFlags : uint
        {
            HeapList = 0x00000001,
            Process = 0x00000002,
            Thread = 0x00000004,
            Module = 0x00000008,
            Module32 = 0x00000010,
            Inherit = 0x80000000,
            All = 0x0000001F,
            NoHeaps = 0x40000000
        }
        //inner struct used only internally
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        private struct PROCESSENTRY32
        {
            const int MAX_PATH = 260;
            internal UInt32 dwSize;
            internal UInt32 cntUsage;
            internal UInt32 th32ProcessID;
            internal IntPtr th32DefaultHeapID;
            internal UInt32 th32ModuleID;
            internal UInt32 cntThreads;
            internal UInt32 th32ParentProcessID;
            internal Int32 pcPriClassBase;
            internal UInt32 dwFlags;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
            internal string szExeFile;
        }
 
        [Flags]
        enum ProcessAccessFlags : uint
        {
            All = 0x001F0FFF,
            Terminate = 0x00000001,
            CreateThread = 0x00000002,
            VirtualMemoryOperation = 0x00000008,
            VirtualMemoryRead = 0x00000010,
            VirtualMemoryWrite = 0x00000020,
            DuplicateHandle = 0x00000040,
            CreateProcess = 0x000000080,
            SetQuota = 0x00000100,
            SetInformation = 0x00000200,
            QueryInformation = 0x00000400,
            QueryLimitedInformation = 0x00001000,
            Synchronize = 0x00100000
        }
 
        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern IntPtr CreateToolhelp32Snapshot([In]UInt32 dwFlags, [In]UInt32 th32ProcessID);
 
        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32First([In]IntPtr hSnapshot, ref PROCESSENTRY32 lppe);
 
        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32Next([In]IntPtr hSnapshot, ref PROCESSENTRY32 lppe);
 
        [DllImport("kernel32", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool CloseHandle([In] IntPtr hObject);
 
        [DllImport("kernel32.dll")]
        static extern IntPtr OpenProcess(ProcessAccessFlags processAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int processId);
 
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
 
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr ipBaseAddress, [Out] byte[] buffer, UInt32 size, out IntPtr IpNumberofBytesRead);
 
    }
}
 
код в form
namespace TesoCheat
{
    public partial class Form1 : MetroForm
    {
        public Form1()
        {
            InitializeComponent();
        }
        MemoryEditor ME = new MemoryEditor("eso64.exe");
 
          private void button1_Click(object sender, EventArgs e)
        { 
       ME.GetProcessByName();
       Int32[] offsets = { 0x4E4 };
       metroLabel1.Text = BitConverter.ToInt64(ME.ReadMemory((IntPtr)ME.ReadPointer(0xC890F54, offsets), (uint)4), 0).ToString();     
        }
ошибка в BitConverter.ToInt64(ME.ReadMemory((IntPtr)ME.ReadPointer(0xC890F54, offsets), (uint)4), 0).ToString(); . если адрес 32bit ошибки нет, если 64 bit выдаёт ошибку Представляет 64 разрядное число со знаком, не удалось преобразовать из long в int
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2019, 21:11
Ответы с готовыми решениями:

Получение MAC адреса из IP адреса
Доброго времени суток, форумчане! Скажите, пожалуйста, как получить MAC адрес из IP адреса на C#...

C# mdb Windows7 64bit
Установил Windows7 64bit. Не установился драйвер ODBC Access (ODBCJT32.DLL). В драйверах...

SetupDiGetClassDevs возвращает ошибку в Win 8.1-64bit
После запуска программы в Win 8.1 внезапно оказалось, что SetupDiGetClassDevs возвращает -1. В Win...

Работа с памятью процесса в 64bit
Здравствуйте! Существует ли какой нибудь способ работать с памятью процесса в 64 битной среде?

Сканирование сети с получением IP-адреса и MAC-адреса
помогите в создании приложения ,которое при сканировании сети выдавало IP-адреса и MAC-адреса машин...

2
nicolas2008
329 / 285 / 98
Регистрация: 30.04.2009
Сообщений: 927
Завершенные тесты: 1
19.03.2019, 11:38 2
Для начала попробуйте не пихать все в одну строку. Это никак не способствует диагностике проблемы, а как раз наоборот.
0
SeIZVeIZ
740 / 669 / 284
Регистрация: 08.02.2014
Сообщений: 2,050
Завершенные тесты: 3
19.03.2019, 16:12 3
1) у Вас метод ReadProcessMemory возвращает Int32 как вы хотите из этого получить Int64? (скорее даже наоборот хотите Int64 запихнуть в 32)
2) странно что вообще работает т.к ReadProcessMemory должен bool возвращать
3) как уже сказали выше не пытайтесь весь код впихнуть в 1 строку, вы сами себе усложняете дальнейший поиск и исправление ошибок
4) в глубине своего творения вы вызываете ReadPointer который пытается сделать BitConverter.ToInt32 что тоже потенциальная ошибка в 64 разрядах
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2019, 16:12

Известны фамилии, адреса и телефоны в формате XXX-XX-XX 20-ти человек. Найти фамилии и адреса людей, чей телеф
Известны фамилии, адреса и телефоны в формате XXX-XX-XX 20-ти человек. Найти фамилии и адреса...

Настройка IPv6 (Debian 7 64bit/CentOS 6 64bit) на VPS
На VPS (Debian 7 64bit / CentOS 6 64bit), к основному IPv4, провайдер выдает блок IPv6. Но в ОС...

Чтение длинного адреса
Привет нужно прочитать значение Address длиной - $XXXXXXXX0000 Но ReadProcessMemory тупо выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru