Перейти к содержанию

Vlad2

Ветераны
  • Постов

    279
  • Зарегистрирован

  • Посещение

  • Победитель дней

    13

Весь контент Vlad2

  1. Не знаю С++, но по-моему ты передаешь 0x0263A518 + 0x14. Нужно ведь сначала по указателю получать адрес, а потом в него записать число. То есть: address = Read4Byte(0263A518)+14; //Прочитали куда указывает адрес по 1ому смещениюaddress = Read4Byte(address)+18; //Куда указывает по второму смещениюaddress = Read4Byte(address)+1С8; // Третье смещениеaddress = Read4Byte(address)+14; // Четвертоеaddress = Read4Byte(address)+14; // Ну и тут мы уже вышли на нужный адрес. Ни и потом:WriteProcessMemory(hProcess, address, &value, 4, 0);address = Read4Byte(Read4Byte(Read4Byte(Read4Byte(address)+18)+1С8)+14)+14; // А можно и такНу тут соответственно нужно сделать функцию Read4Byte и исправить синтаксис))
  2. Грузишь html код страницы в прогу. Делаешь чтоб программа искала url ссылку на картинку. Потом подгружаешь с инета картинку и отображаешь в проге.
  3. Denis97832, Мог бы поделиться результатом, может кому-то да пригодилась.
  4. Ребят, ну помогите, я уже как только не пробовал передавать динамический массив, не ищет его и все. function ScanSignature(base: Cardinal; size: Cardinal; sign: PByte; mask: PAnsiChar): integer;функция принимает PByte, но как? Мы же массив передаем... Пробовал и так poisk[0] := PByte($xx);Не получается.
  5. Может есть карта по исходникам СЕ, где видно как реализован это метод? а то что-то не выходит у меня найти...
  6. А что тут сложного? Через HttpAnalyzer посмотрел, какой POST запрос отправляется и с какими параметрами и эмитировал его через свою программу. Если есть капча, то подгрузил ее в прогу, чтоб юзер ввел ее. Как POST запросы отправлять, я думаю ты уже умеешь...
  7. Ну вот смоти, у тебя есть столбец Key, ты внем хочешь найти 123, а что ты хочешь вывести то, если у тебя больше там нет никаких данных?
  8. Я не понимаю, как выглядит твоя таблица и по каким критериям нужно искать. Как ты объяснил, имеет следующий вид; |Key|value0value1value2value3Ищем допустим value1, ну найдется оно и что? Выводить его чтоли нужно? Или же у тебя таблица имеет такой вид? Table | Key |value0 ABCvalue1 DEFvalue2 GHIvalue3 JKLИ тебе нужно найти GHI и посмотреть чему она принадлежит? В данном случае value2. Или такая у тебя таблица? Table | Key | String |value0 ABC Вася value1 DEF Коляvalue2 GHI Петяvalue3 JKL ДимаИ ты хочешь найти ABC, посмотреть чему принадлежит(value0), и из value0 прочесть String и получить "Вася"? объясни подробней.
  9. var post : TStringList;res: string;beginpost := TStringList.Create;IdHTTP1.HandleRedirects := True;trypost.Add('klop='+Edit1.Text);res := UTF8Decode(IdHTTP1.Post('http://site.ru/key.php', post)); if (res = 'YES') then button1.visible := false else button1.visible := true;exceptpost.Free;end;IdHTTP Не забудь добавить. И отслеживай, какой ответ от сервера тебе приходит. Потому что может еще html код вернуться и его нужно будет отрезать. P.S. Если ты делаешь авторизацию, то применяй хотябы 64byte кодинг. И еще такой метод авторизации легко обойти. Через Denwer сделать эмулятор твоего скрипта, который будет всегда возвращать YES Нужно реализовать еще 1 идентификатор. Например: Ключ у тебя длиной 16 символов. Тогда лепим строку key + номер раздела диска С. Шифруем строку. Отправляем на сервер. Сервер отрезает от строки 16 символов и заносит строку в переменную key. Далее если такой ключ существует, то серв возвращает остаток строки, в зашифрованном виде, с номером раздела. Прога приняла эти данные и расшифровала. Далее, если номер раздела совпадает с текущем, то авторизация прошла успешна. Принимать константы с сервера - это самый бестолковый способ при авторизации. А так хоть у всех пользователей разные данные будут отправляться, и всякие школьники не додумаются, как из изменить, чтоб авторизация прошла.
  10. Ребята такой вопрос... Почему если искать сигнатуру так: var poisk: array of byte;constmask = 'xxxxxxxxx';beginsetLength(poisk, 9); poisk[0] := $xx ; poisk[1] := $xx ; poisk[2] := $xx ; poisk[3] := $xx ; poisk[4] := $xx ; poisk[5] := $xx ; poisk[6] := $xx ; poisk[7] := $xx ; poisk[8] := $xx ; poisk[9] := $xx ; // p.s. xx - какойто байт.m_Sign := ScanSignature(integer(module.modBaseAddr), $7fffffff, @poisk, Mask);end;то сканер ничего не находит? А если искать так: constmask = 'xxxxxxxxx';poisk: array [0..9] of byte = ($xx, $xx, $xx, $xx, $xx, $xx, $xx, $xx, $xx, $xx); // xx - какой то байтbeginm_Sign := ScanSignature(integer(module.modBaseAddr), $7fffffff, @poisk, Mask);end;То сигнатура найдется. Почему через динамический массив не хочет искать?
  11. Ну подскажите, как выделить память в чужом процессе и получить права на запись? Как я предполагаю реализацию скрипта: 1. Выделяем память. 2. В выделенной памяти пишем нужный нам код. + прыжок в код игры 3. Делаем прыжок из кода игры в нашу память. Ну собственно так я предполагаю включения скрипта. Выключение: 1. Пишем вместо прыжка в выделенную память код нашей оригинальной инструкции. 2. Удаляем выделенную память. Теперь меня интересует, 1. как в Delphi выделить память нужного размера, узнать адрес по которому выделена память и устанавливать права на чтение/запись? 2. как эту память потом удалить? С остальным вопросов пока нет
  12. Я такое делал, но почему то трейнер на win8 не открывается, а на win7, winXP работает. Самая успешная защита, которую мне удавалось делать. (пример реализации в прикреплениях) Она подойдет для трейнеров с большим кодом. Правда опубликовать ли реализацию не знаю. Ведь если рассказать, как защищен, то будет от чего отталкиваться при взломе. ghl.rar
  13. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure ButtonDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Buttons: array of TButton; implementation {$R *.dfm} procedure TForm1.ButtonDestroy(Sender: TObject);beginsender.Free;end; procedure TForm1.Button1Click(Sender: TObject);var n: integer;begin n := Length(Buttons); n := 1+n; setLength(Buttons, n); n := n-1; Buttons[n] := TButton.Create(Form1); Buttons[n].Parent := Form1; Buttons[n].Name := 'Button'+inttostr(random(100)); Buttons[n].Height := 20; Buttons[n].Width := 80; Buttons[n].Left := random(200); Buttons[n].Top := random(200); Buttons[n].OnClick := ButtonDestroy;end; end.Вот с динамическим массивом. Каждая кнопочка в отдельной ячейки, но все равно ошибка остается прежней(Может я делаю чтото не то? Все кнопки реагируют на нажатие, например, если вместо sender.Free; написать ShowMessage('hello!');. При нажатии на каждую созданную кнопку будет выводиться hello!. Так что по логике все работает. Я так понял что (Sender:TObject) Не передает созданный объект. Потому и ошибка, а почему не передает, загадка...
  14. Нет тоже самое. Все работает только если создать 1 кнопку и потом нажатием удалить ее. Потом создать и удалить. В общем по одной кнопке все работает. Хорошо, попробую поискать получше. Если найду - отпишусь.
  15. Всем здравствуйте)) Вот я придумал себе задачу (в учебных целях) сделать программку, на форме которой будет располагаться 1 кнопка. При нажатии на которую на форме будет создаваться еще одна кнопка, а за ней еще одна и т.д. и при нажатии на те динамически созданные кнопки, они должны удаляться. Кажется, что может быть проще?)) Но нет, все же есть загвоздки)) unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure ButtonDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ButtonDestroy(Sender: TObject);beginsender.Destroy;end;procedure TForm1.Button1Click(Sender: TObject);var btn: TButton;begin btn := TButton.Create(Form1); btn.Parent := Form1; btn.Name := 'Button'+inttostr(random(100)); btn.Height := 20; btn.Width := 80; btn.Left := random(200); btn.Top := random(200); btn.OnClick := ButtonDestroy;end;end.В общем все создается, но вот при удалении возникает ошибка abstract error. Как быть? Надеюсь на вашу помощь)
  16. Как можно прочитать память собственно процесса программу, не используя readprocessmemory и как записать не без writeprocess?
  17. У меня вообще проблем не возникает. В любое время дня и ночи захожу, все мгновенно открывает))
  18. DarkPan, спасибо попробую)) keng, Я с тобой согласен. Вот только мне не хочется, чтоб всякие "школьники" следили что я пишу и читаю. DarkPan, CheatsHolder.dcu хочет еще
  19. или может проще както запретить загрузку посторонних dll?
  20. А разумно ли будет сделать процедуру, которая будет подключаться к собственному процессу трейнера, делать поиск сигнатуры функции ReadProcessMemory, по таймеру, например каждые 500мс, и если такая сигнатура не находится, то делать закрытие программы?
  21. Проблема - сканер сканирует только статическую память. Статическая память - эта та область памяти, которая в СЕ обозначается зеленым цветом. А та что никак не подсвечивается - Динамическая.
  22. Спасибо администрации за минус в репу, но я все же спрошу ещё раз. Если у которой есть .dll с нормальным сканером поделитесь плиз.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.