-
Постов
232 -
Зарегистрирован
-
Посещение
-
Победитель дней
29
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные DenkA003
-
-
Тоже самое "Resource DLL not found". Может я что то забыл сделать? Делал так
- Закинул в ресурсы DLL
- В код добавил строки
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res: TResourceStream;
begin
Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
end;- При старте формы (TForm1.FormCreate) написал
ExtractRes('RCDATA','DLL','C:\Cheats.dll');Не советую ставить при OnCreate лучше сделай при FormShow
кароче косяки с этими ресурсами ))
Переименуй Cheats.dll в Cheats.exe
и сделай
ExtractRes('EXEFILE','DLL','C:\Cheats.dll');
при выходе из нашей программе наша Cheats.exe переименовуеться в Cheats.dll
P.S - если хочешь чтобы длл извлекалась в папку с программой просто пропиши ('Cheats.dll')
думаю помог ))) если не получиться кину пример )))
- Закинул в ресурсы DLL
-
Запутался
Попробуй так
ExtractRes('RCDATA','DLL','C:\Cheats.dll'); -
Неделю? Сам не додумаюсь, знаю как но не получается.
Старина тут все просто смотри :
Для начала нужно создать файл с расширением .rc , с таким содержанием:
Trainer EXEFILE Trainer_1.exe
Trainer - имя этого файла, может быть любым (может не совпадать с настоящим именем файла).
EXEFILE (BITMAP, CURSOR, ICON, WAVE) - тип файла
Trainer_1.exe - сам файл, т.е. путь к нему.
Далее компилим этот файл с помощью brcc32.exe (находиться в папке bin дельфи).
Скомпилированный файл (с расширением .res) копируем в папку нашей программы, после открываем дельфи, и после
{$R *.dfm}
пишем
{$R Имя_файла.res}Теперь, чтобы распаковать куда-то наш файл используем следующую функцию:
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res: TResourceStream;
begin
Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
end;
//использовать так:
ExtractRes('EXEFILE', 'Trainer', ('путь,_куда_распаковывать'));Все )) Кстати в Delphi XE2 есть специальный менеджер которой упрощает первое действие .. просто нужно добавить процедуру и все ))
-
Я то сюда и обращаюсь что знаю что тут лучше объяснят и примерчик подкинут чем на мдсн
Жди через неделю появиться норм интернет .. тогда и подкину примерчик )) может до того времини сам уже додумаешься )))
Использую. Delphi XE2++ там можно пихать в программу всякие файлики и вытаскивать их .. ну или считывать ...
-
Помоги, а как сделать распаковку и внедрение Dll из ресурсов?
в смысле ?
есть архив его нужно скачать и распаковать .... распакованный файл заинжектить в игру - программу ?
-
м я так понял язык С# ?
сорь если бы писал на Delphi помог , а так извеняй ))
-
Спасибо, то что нужно!
буду улучшать программу ))
-
Работает, но немного с другой маской, т.к НОП равен одному байту.
Ни в коем случае, искренняя благодарность
да не много на C# мозго** со сканером )) Ну и на delphi тоже самое )) только с одним отличием не нужно вводить маску )) Тупо байты - начало = конец сканирования и усе ))
-
Работает, но немного с другой маской, т.к НОП равен одному байту.
Ни в коем случае, искренняя благодарность
++ спс__))
Хотел добавить зачем обновлять переменную
static bool func1 = false;ведь у чекбокса есть свойство и так - false = True оно равно свойству CheckBox.Checked = True(False)
просто сделай так
if CheckBox1.Checked = True
bla bla bla
else
bla bla bla
end;
на много проще ))
-
ТЫ ГЕНИЙ О_О
Сарказм ?
-
Дак понятное дело .. что не будет назад менять ... допустим ты изменел вот такую сигнатуру
1)90 90 90 90 90 90
изменил ее на
2)80 90 90 90 90 90
принцип твоего трейнера в том чтобы найти 1 сигнатуру и заменить первый байт на 80 ... ну когда ты деактивируешь функцию происходить снова сканирование по первой цепочке байт ... ну увы сигнатура уже изменилась ... по этому ты и не можешь записать байты при деактивации функции
Вот должно работать
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
SigScan _sigScan = new SigScan(seap, new IntPtr(0x401000), 0x10bc000);
if (func1 == false)//если переменная [BYTE] равна 0(true - 1, false - 0)
{
byte[] buffer2 = new byte[] { 0x75, 0x05, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE };
IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0);
byte[] buffer = new byte[] { 0x90, 0x90 };//байт, который записывается,если переменная [BYTE] равна 0, то есть выключена функция.
memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты.
checkBox1.Checked = true;
func1 = true;
}
else//Иначе
{
byte[] buffer2 = new byte[] { 0x90, 0x90, 0xC6, 0x44, 0x24, 0x0B, 0x01, 0x85, 0xC0, 0x0F, 0x94, 0xC1, 0x83, 0xF8, 0x01, 0x0F, 0x94, 0x44, 0x24, 0x0C, 0x83, 0xF8, 0x02, 0x0F, 0x94, 0x44, 0x24, 0x0D, 0x80, 0xBE, 0xE9, 0x0C, 0x00, 0x00, 0x00, 0x53, 0x74, 0x13, 0xD9, 0xEE };
IntPtr num = _sigScan.FindPattern(buffer2, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0);
byte[] buffer = new byte[] { 0x75, 0x05 };//байт, который записывается, если переменная [BYTE] равна 1, то есть включена функция.
memory.WriteByteArray((IntPtr)num, buffer);//записываем в адрес байты.
checkBox1.Checked = false;
func1 = false;
} -
-
-
Доброго времени суток, собственно имеется такой код:
После нажатия на кнопку игра зависает и выкидывает, что можно сделать чтобы этого не происходило?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs,TlHelp32, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
GroupBox2: TGroupBox;
CheckBox1: TCheckBox;
GroupBox3: TGroupBox;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
prID: Cardinal;
implementation
{$R *.dfm}
//Процедура записи байт в процесс игры
procedure WriteSignatyre(GameID: Cardinal; PokeAddr: Integer; PokeVal: array of Byte);
var
pHandle:LongInt;
numwritten:SIZE_T;//Если будет ошибка заменить SIZE_T на Cardinal
begin
pHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,false,GameID);
WriteProcessMemory(pHandle,ptr(PokeAddr),@PokeVal,SizeOf(PokeVal),numwritten);
CloseHandle(pHandle);
end;
//Процедура получения ID зная название процесса
function GetProcess(FileName: string): Cardinal;
var
hSnap:THandle;
prEntry:PROCESSENTRY32;
begin
Result:=0;
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
prEntry.dwSize:=SizeOf(prEntry);
If Process32First(hSnap,prEntry) then
begin
While Process32Next(hSnap,prEntry) do
Begin
If prEntry.szExeFile = FileName then
Result:=Cardinal(prEntry.th32ProcessID);
End;
end;
CloseHandle(hSnap);
end;
//Нажатие на кнопку
procedure TForm1.Button1Click(Sender: TObject);
const
ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
begin
prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память
End;
procedure TForm1.Button2Click(Sender: TObject);
const
ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
begin
prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память
End;
procedure TForm1.Button3Click(Sender: TObject);
const
ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
begin
prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
if prID = 0 then begin
Application.MessageBox('Процесс не найден', 'Предупреждение', MB_OK +
MB_ICONINFORMATION);
end else begin
Application.MessageBox('Активировано', 'Предупреждение', MB_OK +
MB_ICONINFORMATION);
WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память
End;
end;
procedure TForm1.Button4Click(Sender: TObject);
const
ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
begin
prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
if prID = 0 then begin
Application.MessageBox('Процесс не найден', 'Предупреждение', MB_OK +
MB_ICONINFORMATION);
end else begin
Application.MessageBox('Деактивировано', 'Предупреждение', MB_OK +
MB_ICONINFORMATION);
WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память
End;
end;
//Пример записи в процесс на чекбоксе
procedure TForm1.CheckBox1Click(Sender: TObject);
const
ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
begin
if CheckBox1.Checked = True then begin
prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
WriteSignatyre(prID,Adress,SignatyreOn);//Пример записи байт в память
CheckBox1.Caption := 'Деактивировать';
end else begin
prID:=GetProcess(ProcessName);//Получаем ID процесса по названию процесса
WriteSignatyre(prID,Adress,SignatyreOFF);//Пример записи байт в память
CheckBox1.Caption := 'Активировать';
end;end;
end.- 1
-
Создатели Cheat Engine оказывается с юмором :
Сейчас поломаем UnEpic)
++ тоже испугался )) думал все пзд )) а потом вспомнил что 1 апреля ))
-
Ищи "Все > Неизвестное Значение" и смотри если таймер уменьшается делай "отсев>" "Уменьшилось" если увеличилось то "<Увеличилось"
-
нашёл инструкцию отвечающую за прыжок вот:
mov [edx+000000A8],eax
[edx+000000A8] - это смешение где хранится значение прыжка.
немогу поменять инструкцию так чтобы она грубо говоря шла так:
1.прибавили 100 к прыжку(но не заморозили!)
2.вышли из инструкции
мм не совсем понял ..
что тебе мешает сделать так
mov [edx+000000A8],#64{100}
и восстановить нормальную инструкцию
mov [edx+000000A8],eax
или поиграйся с регистрами eax,ebx,ecx и тд
-
Игра - King's Bounty.Warriors Of The North.Valhalla Edition.v 1.3.1.6280
Всем привет, вот скачал игру, поиграв в нее немного решил взломать.
Нашел адрес денег, кристаллов, армии, и.т.д но проблема заключается в том что одна инструкция отвечает за все.
Как разделить это все на несколько категорий т.е. чтобы активирования адрес денег, кристаллов, армии, и.т.д происходили разными скриптами. Описал как смог строго не судите. Заранее всем спс.
Сразу скажу что филтр знаю как искать и делать.
Смотри Смещение и пиши фильтр
-
Скорее
Address = $01E42498;
ибо приставка 0х - это прерогатива плюсов, но не дельфей )))
или просто дек кодировку 31728792 без префикса $
-
-
"METAL GEAR RISING REVENGEANCE.exe"+8B6F86
попытайся заменить данную строчку на 0554+8B6f86 = 05548B6f86
базовый адрес METAL GEAR RISING REVENGEANCE.exe + смешение +8B6F86
попытайся так ))
-
а разве занопить инструкцию это не то самое что заморозить значение ?
-
просто )) переводишь хек кодировку в дек кодировку и с дек кодировки переводишь в текст .. в делфи если следовать такому методу текст получаеться задом на перед ... тогда тебе нада юзнуть функцию реверса текста .... и вуала все работает .... делал так когда ломал КС выводил хп и ники игроков на форму
-
Всем привет )) вот кому нада .dll инжектор от меня ))
Парочка скриншотов :
Инструкция :
1) В 1 поле пишем имя вашей программы в которую хотите заинжектить длл (Пример : Saints Row 4 All Versions Plus 22 Trainer.EXE)
2) В 2 поле не чего не пишем )) там появиться наш ID процесса
3) В 3 поле указываем путь к длл (Снизу есть специальная кнопка нажимаем ее и указываем путь к длл)
4) После того как сделали все 3 предидущих операции нажимаем на кнопку снизу ("Найти Процесс")
5) Жмите Внедрить длл и ваша длл успешно внедрена в нужный вам процесс
- 1
Пишем свой DLL инжектор на Delphi 2 часть
in Высокоуровневое программирование
Опубликовано
оО чувак .. я тебе дал пример в самом первом посте этой темы .... вот и коверяй его .... )) сложно добавить таймер и запилить вместо sp.IDProcess = Edit1.Text sp.IDProcess = 'Game.exe'
и задать итервал таймера 300 милисекунд ?