 |
08.07.2015, 13:45
|
#1
|
|
|
|
Рыцарь-лейтенант
|
 Регистрация: 10.06.2011
 Сообщений: 467
 Популярность: 31147
 Сказал(а) спасибо: 231
Поблагодарили 488 раз(а) в 226 сообщениях
|
Мой первый DLL чит
Создание DLL и альтернативный метод внедрения в процессы.Сначала о создании:
1. Открываем Delphi и создаем новый проект. File => New => Other... => Dynamic-link Library Посмотреть
2. Переименуем наш проект. В окне "Project Manager" ПКМ по "Project1.dll" => "Rename". Посмотреть
3. Добавим основную форму, где будем работать в дальнейшем. В окне "Project Manager" ПКМ по "Project1.dll" => "Add New" => "VCL Form" => "Yes". Посмотреть
4. Возвращаемся к начальному коду нашей DLL. Либо во вкладке переходим, либо в окне "Project Manager" выделяем наш "DLL Cheat" и жмем Ctrl+V 5. Добавляем Windows и Forms в uses
Код:
uses
System.SysUtils,
System.Classes,
Windows,
Forms,
Unit1 in 'Unit1.pas' {Form1};
6. Создаем основной поток, где будет стартовать наша форма
Код:
procedure MainThread; stdcall;
begin
Form1 := TForm1.Create(nil);
Form1.ShowModal;
end;
7. Запускаем этот поток, добавив выше переменную
Код:
begin
CreateThread(nil,dwTemp,@MainThread,nil,dwTemp,dwTemp);
end.
8. Итог, полный листинг файла *.dpr
Код:
library DLL_Cheat;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
System.SysUtils,
System.Classes,
Windows,
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var dwTemp: DWORD;
procedure MainThread; stdcall;
begin
Form1 := TForm1.Create(nil);
Form1.ShowModal;
end;
begin
CreateThread(nil,dwTemp,@MainThread,nil,dwTemp,dwTemp);
end.
Теперь, если мы заинжектим нашу либу, то сразу появится главная форма, но мы не будем инжектить. Бывает, что такое невозможно. Например процесс защищен внешне. Нам потребуется немного знаний в обращении со сторонним софтом.Запускаем Procmon => Настраиваем фильтр на нашу игру => Запускам игру. => Какие DLL она подтягивает из игровой папки.
Выбираем любую, открываем ее в CFF Explorer
ПосмотретьПереходим в "Import Adder" => Кликаем "Add" и выбираем наш Dll Cheat => => Во вкладке "Exported Functions" выбираем одну единственную функцию => => Кликаем на "Import By Ordinal" => Кликаем на "Rebuild Import Table" => Сохраняем изменённую игровую DLL. Теперь при запуске игры у нас будет стартовать наша DLL с функционалом, который вы сами опишите.
Например, спидхак для Aion:
Код:
BaseAddress:=GetModuleHandle('game.dll');
sp:=Ptr(Integer(Ptr(Integer(Ptr(BaseAddress + $00B45EA4)^) + $254)^) + $6C4);
sp^:=strtofloat(edit1.Text);
p.s. некоторые игры не стартуют из-за вшитой в них темида при запущенном прокмоне, перезагружаете ПК и ищите любой другой API Monitor, хотя думаю и Dependency Walker (depends.exe) подойдет.
p.p.s. это не единственный способ внедрения, можно почстать про приоритеты загрузки в Windows и так же закинуть системные либы в папку с игрой, так как обычно он сначала около себя их ищет. Так же можно использовать прокси длл. Так же слышал о пайпах (pipes), но мало о них знаю, буду рад почитать.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 07:22.
|
 |