Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Старый 08.07.2015, 14:45   #1
 Рыцарь-лейтенант
Аватар для mars2107
 
mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(mars2107 сломал счётчик популярности :(
Регистрация: 10.06.2011
Сообщений: 466
Популярность: 31147
Сказал(а) спасибо: 231
Поблагодарили 488 раз(а) в 226 сообщениях
Отправить сообщение для mars2107 с помощью ICQ Отправить сообщение для mars2107 с помощью Skype™
 
Post Мой первый 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. Запускаем этот поток, добавив выше переменную
Код:
var dwTemp: DWORD;
Код:
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 [Ссылки могут видеть только зарегистрированные пользователи. ]
  • CFF Explorer [Ссылки могут видеть только зарегистрированные пользователи. ]
Запускаем 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пасибо:
=PaLeTiZaToR= (28.12.2015), Павел.DO (09.08.2015), MembRupt (08.07.2015), vadyash (29.12.2015)
Ответ

Метки
cheat, dll injection, обход защиты

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 23:53.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net