Почему возникают 2 ошибки при компиляции ?
[dcc32 Error] Unit1.pas(49): E2033 Types of actual and formal var parameters must be identical
на
WriteProcessMemory(hProcess, ThreadAddr, Func, 256, lpNumberOfBytes);
и
WriteProcessMemory(hProcess, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);
На ХЕ работаешь? Там со строками надо мудрить. Ввели Unicodestring, что то ещё, поэтому и жалуется на тип переменных. У меня делфи 2010 , вот думаю есть смысл переходить на XE 7?
На ХЕ работаешь? Там со строками надо мудрить. Ввели Unicodestring, что то ещё, поэтому и жалуется на тип переменных. У меня делфи 2010 , вот думаю есть смысл переходить на XE 7?
Почему возникают 2 ошибки при компиляции ?
[dcc32 Error] Unit1.pas(49): E2033 Types of actual and formal var parameters must be identical
на
WriteProcessMemory(hProcess, ThreadAddr, Func, 256, lpNumberOfBytes);
и
WriteProcessMemory(hProcess, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);
[QUOTE=diagnost;5850730]Часто вопросы возникают, и пишут в личку, по поводу инжекта движения.
Сразу предупреждаю инжект движения кривой другого у меня нету.
Я пользуюсь таким же только опкодом, могу сказать что он не кривой проверено на win2003 server, win7, win8.1, win10 везде идёт нормик.
А кривость проявляется когда юзается автологин или кривые патчеры, так что пользуйтесь ИЦ и будет счастье.
Я пользуюсь таким же только опкодом, могу сказать что он не кривой проверено на win2003 server, win7, win8.1, win10 везде идёт нормик.
А кривость проявляется когда юзается автологин или кривые патчеры, так что пользуйтесь ИЦ и будет счастье.
на стадии разбора того, как сделать код для выделения моба.
Вот адреса, которые выпали при поиске "кто получает доступ к BaseAddr", после фильтрации всего до выделения, после выделения кратны вот эти
Код:
004BEE2F //апается всегда
004BEF8B //
004CA115 //апается только если удалось выделить (если достаточно близко) вызывает следующий (0086e4d0)
0086E4D3 //
008B35BD //
004A97F1 //
004A9202 //
первые два дают какую-то очень неясную вещь, понять что она делает и как ей воспользоваться - не получилось, кроме того, что было ясно изначально, что там определяется перейдёт ли таргет на тыкнутого моба или нет, в частности, в зависимости от дальности этого моба по отношению к персонажу.
во втором блоке все эти обращения прямо перед вызовом, в частности используется адрес BA+20, который где-то здесь упоминался, как адрес, связанный с SendPacket
помогите со всем этим разобраться, как научиться выделять код, который нужен от кода, который не нужен? (asm понимаю, но лучше всего же вызывать код с вершины "айсберга вызовов", а её найти не могу) куда передать управление, чтобы сымитровать выделение моба?
Инжект редактирования текста в чате (по идее должен срабатывать и с другими текстбоксами, но я не проверял). Отправка сообщения выполняется другим инжектом - при помощи GUI.
Был взят от заморских друзей, полная статья:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Собственно, метод инжекта, написанный на c#:
Код:
public static void SetText(IntPtr oph, String value, Int32 address)
{
// ---- формируем наш опкод
Byte[] setChatTextOpcode = new Byte[]
{
0x60, // PUSHAD
0xB9, 0x00, 0x00, 0x00, 0x00, // MOV ECX, {stringPointer}
0xBF, 0x00, 0x00, 0x00, 0x00, // MOV EDI, {chatBoxObjPtr}
0x8B, 0x07, // MOV EAX, DWORD PTR DS:[EDI]
0x51, // PUSH ECX
0x8B, 0xCF, // MOV ECX,EDI
0xFF, 0x50, 0x48, // CALL DWORD PTR DS:[EAX+48] это значение может сдвигаться на значение кратное 4 с обновами
0x61, // POPAD
0xC3 // RETN
};
// ---- освобождаем память под опкод в памяти клиента
IntPtr setChatTextOpcodeAddress = WinApi.VirtualAllocEx(oph, IntPtr.Zero, setChatTextOpcode.Length, WinApi.AllocationType.Commit, WinApi.MemoryProtection.ExecuteReadWrite);
// ---- записываем опкод в освобожденную память
Int32 number_of_bytes_written_3;
WinApi.WriteProcessMemory(oph, (Int32)setChatTextOpcodeAddress, setChatTextOpcode, setChatTextOpcode.Length, out number_of_bytes_written_3);
// ---- формируем массив данных
Byte[] bytes_2 = Encoding.Unicode.GetBytes(value);
// ---- выделяем место в памяти клиента
IntPtr text_address = WinApi.VirtualAllocEx(oph, IntPtr.Zero, bytes_2.Length, WinApi.AllocationType.Commit, WinApi.MemoryProtection.ExecuteReadWrite);
// ---- записываем массив данных в выделенное место
Int32 number_of_bytes_written;
WinApi.WriteProcessMemory(oph, (Int32)text_address, bytes_2, bytes_2.Length, out number_of_bytes_written);
// ---- конвертируем указатель на массив данных в массив байтов
Byte[] new_value = BitConverter.GetBytes((Int32)text_address);
new_value.Reverse();
// ---- записываем указатель на массив данных по адресу опкода + 2
Int32 number_of_bytes_written_4;
WinApi.WriteProcessMemory(oph, (Int32)setChatTextOpcodeAddress + 2, new_value, new_value.Length, out number_of_bytes_written_4);
// ---- address - указатель на структуру контрола текстбокса чата, ищу в цикле по названию контрола
// ---- конвертируем адрес структуры контрола в массив байтов
Byte[] chatBoxObjPtrBytes = BitConverter.GetBytes(address);
chatBoxObjPtrBytes.Reverse();
// ---- записываем указатель на текстбокс по адресу опкода + 2
Int32 number_of_bytes_written_5;
WinApi.WriteProcessMemory(oph, (Int32)setChatTextOpcodeAddress + 7, chatBoxObjPtrBytes, chatBoxObjPtrBytes.Length, out number_of_bytes_written_5);
// ---- запускаем записанную в память функцию
IntPtr lpThreadId;
IntPtr hProcThread = WinApi.CreateRemoteThread(oph, IntPtr.Zero, 0, (IntPtr)setChatTextOpcodeAddress, IntPtr.Zero, 0, out lpThreadId);
// ---- Ожидаем завершения функции
WinApi.WaitForSingleObject(hProcThread, WinApi.INFINITE);
// ---- Подчищаем за собой
WinApi.VirtualFreeEx(oph, hProcThread, 20, WinApi.FreeType.Release);
WinApi.VirtualFreeEx(oph, setChatTextOpcodeAddress, 20, WinApi.FreeType.Release);
WinApi.VirtualFreeEx(oph, text_address, 20, WinApi.FreeType.Release);
}
Если вдруг у кого-то есть другой способ отправки сообщения (кроме подмены указателей на текст), прошу скинуть в личку