-
Постов
207 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Laziz
-
-
Ну меня в чем задумка то... Хочу сделать dll'ку которая будет просто выводить заданный текст по заданным координатам в окне игры. И что б эту dll'ку можно было инжектить в процесс игры, изменять значение выводимого текста, координат, размера шрифта итд,..
Например: Пишу приложение на C#, инжектю мою dll'ку в процесс игры, запускаю свое приложение написанное на C#, ввожу в поле нужный мне текст "OneTwoThre", dll'ка принимает этот текст и в окне игры выводит его, меняю текст на другой, жму применить, и dll'ка выводит уже другой текст...
Вот какой мне метод под такую идею подойдет лучше всего? Думаю тут только "shared memory section" и прокатит...
Та прога который я дал, делает тоже самое, Только немного надо понастроить, и будет работать на всех версиях ДиректИкса и где хочешь там и будет выводить сообщение, плюс, С++ там не участвует, все на C# и длл тоже. (ссылку дал на прошлой теме). (Ну... Это все к тому, если тебя тянет на С#))
-
Пробовал на играх:
Lineage2 C6 - работает
B&S (RU) - зависает после аттача
Need for speed shift - работает
Need for Speed™ Rivals - зависает после аттача
CS 1.6(D3DMode) - не происходит ничего после аттача.
забыл сказать, "Корректно работает в играх, где DirectX9 версия" 10 и 11 версия пока не корректно, возможно вообще не будет работать.
Может из за этого? Версии директ икса проверь.
-
Я немного поковырял SharpDX и SlimDX но не сумел найти способ рисовать в чужом процессе. Конечно могу сильно ошибаться но, думаю что с помощью этих обертков нельзя рисовать в чужой процесс.
тут я не совсем прав был, SharpDX и EasyHook если соединить(условно) то получаеться это http://forum.gamehacklab.ru/topic/2749-d3d-hook-%d0%ba%d0%be%d0%b4-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0/page__view__findpost__p__18664
-
Вот такой вот подход подойдет?
https://yadi.sk/d/6slQHKnlZbccg
если че... C#
в проекте, в Preferences добавляешь
DXC.dll
EasyHook.dll
SharpDX.D3DCompiler.dll
SharpDX.Direct3D10.dll
SharpDX.Direct3D11.dll
SharpDX.Direct3D11.Effects.dll
SharpDX.Direct3D9.dll
SharpDX.dll
SharpDX.DXGI.dll
остальные кидаеш в папку с exe.
CaptureProcess _captureProcess;
int processId = 0;
Process _process;
private void button1_Click(object sender, EventArgs e)
{
if (_captureProcess == null)
{
button1.Enabled = false;
AttachProcess();
}
else
{
HookManager.RemoveHookedProcess(_captureProcess.Process.Id);
_captureProcess.CaptureInterface.Disconnect();
_captureProcess = null;
}
if (_captureProcess != null)
{
button1.Text = "Detach";
button1.Enabled = true;
}
else
{
button1.Text = "Atach";
button1.Enabled = true;
}
}
private void AttachProcess()
{
string exeName = textBox2.Text; // Имя процесса
Process[] processes = Process.GetProcessesByName(exeName);
foreach (Process process in processes)
{
// Simply attach to the first one found.
// If the process doesn't have a mainwindowhandle yet, skip it (we need to be able to get the hwnd to set foreground etc)
if (process.MainWindowHandle == IntPtr.Zero)
{
continue;
}
// Skip if the process is already hooked (and we want to hook multiple applications)
if (HookManager.IsHooked(process.Id))
{
continue;
}
Direct3DVersion direct3DVersion = Direct3DVersion.Direct3D10;
direct3DVersion = Direct3DVersion.AutoDetect;
CaptureConfig cc = new CaptureConfig()
{
Direct3DVersion = direct3DVersion,
ShowOverlay = true
};
processId = process.Id;
_process = process;
var captureInterface = new CaptureInterface();
try
{
_captureProcess = new CaptureProcess(process, cc, captureInterface);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
break;
}
System.Threading.Thread.Sleep(10);
if (_captureProcess == null)
{
MessageBox.Show("В списке процессов не найдень: '" + exeName + "'");
}
}
private void button2_Click(object sender, EventArgs e)
{
_captureProcess.CaptureInterface.DisplayInGameText("Текст который надо показат в чужом окне", 20, 20, 20); // цыферки положения размер
}Код целиком не мой, взял с интернета, (http://spazzarama.co...ct3d-api-hooks/ (имя автора не нашел))
-
-
А просто на экран можно рисовать?
А зачем на экран рисовать? Я что то не понимаю наверно...
Ничего по библиотеке не скажу, т.к. очень лень. Могу дать мелкий совет. Перед тем как рисовать что-то в чужой игре на C# желательно пройти 4 этапа
1. Рисовать в своем окне на C++
2. Рисовать в чужом окне на C++
3. Рисовать в чужом окне на C# переписав программу на C++.
4. Разобраться в библиотеке, которую вы хотите прикрутить
Те кто предпочитают С++, то этим счастливчикам повезло. Им не нужны пункты 3 и 4.
Идея понятно, попробую осилить.
-
Я немного поковырял SharpDX и SlimDX но не сумел найти способ рисовать в чужом процессе. Конечно могу сильно ошибаться но, думаю что с помощью этих обертков нельзя рисовать в чужой процесс.
-
скажем проще в игре чтобы галочку на полноэкранный/оконный режим можно было ставит с помощью чит энджина!
там галочку достаточно,
да... умеешь вопросы задавать. Пока читал чуть мозг не сломал.
-
Благодарю SER[G]ANT за русификацию СЕ от себя и наверное от многих не знающих английского или просто не хотят знать.
- 1
-
Laziz, зачем тебе этот плеер? Вряд ли от него какая-то прибыль будет
Если есть желание, то попробуй поставить Unity3d фришную и придумай себе игру на Андроид на Гугл Плей (или Yahoo), ну или под Windows (с возможность платежей sms через робокассу и вывод с пейпал). Писать будешь на любимом C#.
Встраивай рекламу и
. Может получится и прибыль будет.Особенно интересно многопользовательские игры (посмотри например на игру "Трагедия Белок", 2д игра, а донатят там постоянно). Логику удаленного сервера может выполнять сервис яхоо геймс. Есть тариф бесплатный на определенное количество пользователей
Знаю что плеер никому не нужно и пользы тоже нет. Просто другого занятие себе не нашел.
За идею огромная спасибо, с этим обязательно буду заниматься.
Совмещать приятного с пользой - это куул ), да и C# - то что надо.
- 1
-
вот так лучше )
Может быт... у каждого свой вкус. Но я хотел оригинальности, WMP как то... просто.
- 1
-
ооо все таки сделал ) молодец ) проверил плеер 2 норм пашет ))) еще эквалайзер сбоку скачает)
а первый тупит до ужаса
Спасибо за проверку, но я разобрался уже. (Для WPF приложения нужны не только сам *.exe но еще ряд других файлов в сборке)
Да первый и меня разочаровал, в библиотеке Naudio оказывается мала возможностей и пришлась несколько потоков создавать. А потоки быстро не останавливаются.
- 1
-
работает штат но
Спасибо
-
Кому не лень проверти второй плеер на WPF. Почему то на втором компе не запускается, хер поймешь почему...
-
Скриншоты где?
Ок, добавил
-
Вид поменял
-
Все значения заранее искал через CE.
искал значения за какую расу играю.
Получил тип: byte
А значения расы меняется от 0 до 4 (в игре 5 рас)
если тип 1-байт то конвертировать не надо. Скорее всего не тот адрес читаешь
-
Так во что нужно конвертировать?
Значение race в памяти от 0 до 4
так внятно объясни. Что искал?, через СЕ искал?, какой тип был когда искал?, что за от 0 до 4?
-
Как я понял, значения size отвечает за тип значения который мы читаем.
size отвечает за количество байтов который надо читать. К примеру: если на CheatEngine`е посмотреть в память, "4 байт" и "float" обе четыре байта занимает в памяти.
//exp - 4 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x3a4 };
size = 4;
ReadBytes(address, offsets, size);
exp.Text = Convert.ToString(result);
//race - 1 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x11 };
size = 1;
ReadBytes(address, offsets, size);exp - читает правильно
race - выдает отрицательные значения, Как исправить?
а тут не совсем понял вопрос. подозреваю, тебе надо переконвертировать на нужный тип и все.
-
Вид, имхо, бред полный. Дизайн любой программы должен на интуитивном уровне подсказывать ее предназначение. То есть, если это плеер, то кнопки в нем должны быть выполнены в стиле, привычном всем с детства.
Пожалуй ты прав, к томе же никуда не могу пристроит полосу прокрутки.
Поменяю вид и выложу заново и исходник тоже выложу (кто то просил).
-
Плеер для ВКонтакте:
UPD: (внешний вид сделал обычным)
________________________________________
Этот плеер создана с помощью библиотеки Naudio: (Этот пример на любителя, с исходным кодом)
Исходник на VS 2010 C#
Плеер (.NET 4.0)
Скриншот
_______________________________________
Windows Presentation Foundation
Этот плеер создана с помощью библиотеки BASS.NET:
Плеер (WPF NET 4.0)
Плеер пока сырой, много чего надо делать.
Если что, пишите об ошибках и предложениях
P.S. В многих форумах пишет что библиотек BASS.NET хуже чем Naudio, но мне больше нравиться BASS.NET. Во первых, сразу воспроизводить не дожидаясь полного загрузки с интернета. Во вторых быстрее.
- 1
-
2 суток сижу над следующей проблемой, не получается организовать запись своего значения в память.
Имеется (пример):
Textbox.text="50000"; //значение денег который я получил из игры
//Я хочу ввести свое значение, допустим 250000
Textbox.text="250000"; //ввели значение через формуКак теперь это значение перевести в hex и записать в массив byte[], для последующей записи в память через WriteProcessMemory?
из своих кодов взял, думаю разберешься
if (comboBox1.Text == "4 Байт")
{
Int32 int32Z = Int32.Parse(writeString);
byte[] write = BitConverter.GetBytes(int32Z);
writeMetod(write);
}
if (comboBox1.Text == "1 Байт")
{
Int16 intZ = Int16.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "2 Байт")
{
short intZ = short.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "8 Байт")
{
Int64 intZ = Int64.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "Float")
{
float intZ = float.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
}
if (comboBox1.Text == "Double")
{
double intZ = double.Parse(writeString);
byte[] write = BitConverter.GetBytes(intZ);
writeMetod(write);
} -
Адрес и поинтеры значения опыта:
address = 0x00800150;
offsets = new byte[] { 0x38, 0x4, 0x0, 0x3a4};Выдает ошибку на массиве byte: 0x3a4
byte принимаяет от 0 до 255 (десятичный) или 0 до FF (Hex)
а массив смещение хранит лучше в Int.
к примеру
address = 0x00800150;
int[] offsets = new int[] { 0x38, 0x4, 0x0, 0x3a4}; -
Получение любых привилегий для процесса на C# может это поможет. И соответственно от имени админа
Что сравнивает оператор if?
in Низкоуровневое программирование
Опубликовано
Что именно сравнивает оператор if в этом коде?