Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - ya12

Pages: [1] 2 3 ... 11
1
Имею сомнения, что пиксель такого цвета будет один, но допустим это так.
(Хо, Yо) разрешение окна в пикселях. Координаты точки (половина от Xo , Yt). Высоту Yt замеришь сам. 
Делаешь снимок экрана и анализируешь каждую точку от 0 до Xo на высоте Yt.
Если ничего нет, значит нужно повернуться на 180 градусов.
Если нашлось и координата по X больше половины от Xo повернешь вправо, иначе влево.

2
Предложения / Re: Скорость клика
« on: April 13, 2023, 09:46:46 AM »
Функции это хорошо, но есть ньюанс. Все переменные глобальны, а значит при использовании нескольких потоков, каждому потоку нужна своя функция со своими переменными.

3
Биржа труда / Re: запаковать кликер
« on: September 11, 2022, 11:15:49 PM »
Прячь часть кода в dll. Пример работы с dll на дельфи есть на форуме.

Пример, получение hwnd активного окна:

http://crapware.aidf.org/forum/index.php?topic=4625.msg31618#msg31618

4
Добавлю и я свои пять копеек про использование потоков:
1 Мониторит нажатие клавиш, запускает и останавливает другие потоки.
2 Считывает количество жизни, маны, дебафы, координаты персонажей и вычисляет расстояние до лекарей/маназаливалок во всех окнах
3 На основании данных из 2го потока определяет последовательность кого и кем лечить/маназаливать/снимать дебафы
4 Бег бота по контрольным точкам
5 Ищет цель, если находит, останавливает 4й поток, управляет боем
6 Осуществляет 2х минутный баф
7 Осуществляет 20ти минутный баф

Кроме этого есть еще отдельный процесс написанный на Дельфи, который определяет в какой зоне расположены объекты (не боевая, боевая) и трассировку луча от дамагера до цели.
А также выводит в титул каждого объекта доступную информацию.

5
Поскольку прошлую тему удалили, выкладываю еще раз.

Получение базового адреса (БА) от адреса загруженной в память DLL.

Delphi7
Code: (Delphi7) [Select]
// Основное тело функции, идет на экспорт, вызывается из кликера

function execute(_mas: pInteger; _size: Integer): Integer; export; stdcall;
type
  pIntArr = array[0..0] of Integer;
var
  Snap: THandle;
  M32: TModuleEntry32;
  st,st1: string;
begin
  result:=0;
  st := 'Engine.dll';   
  // имя DLL которую нужно найти, чувствительно к регистру.
  // _mas  - указатель на начало массива параметров integer
  // _size - размер массива (число параметров)

  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pIntArr(_mas^)[0]);
  //if (Snap = 0) then
    //Exit;

  //ShowMessage(intTostr(snap));
  if Module32First(Snap, M32) then
    begin
      repeat
        st1:=M32.szModule;
        //ShowMessage(st1);
        if st1 = st then
          begin
            //ShowMessage(intTostr(Cardinal(M32.modBaseAddr)));
            Result := Cardinal(M32.modBaseAddr); //
            Break;
          end;
      until not Module32Next(Snap, M32);
    end;
  CloseHandle(Snap);
end;
//------------------------------------------------------------------------------

// список экспорта
exports execute;

begin
  // тело пусто
end.


Code: (clickermann) [Select]
      $_pid=HGETPID($_hwnd)
      call("BA_Engine.dll",$_pid)
      $_adr_Engine = $_return1

Поиск BA и смещения выполняется Cheat Engine.
Данные в памяти программы можно визуально определить и структурировать в шаблон с помощью ReClass2016.
https://disk.yandex.ru/d/YsInZJ3jJEh5GQ

Динамический массив в памяти выглядит так:

абсолютный адрес        указатель на начальный адрес
00000000                       <какое то число похожее на адрес>
00000001                       <число от 0 и больше; 0-первый элемент массива>

Увеличивая и уменьшая количество объектов хранящихся в динамическом массиве можно найти адрес, где храниться счетчик массива. В СЕ ищем инструкцию обращающуюся к этому адресу.
Для каждой найденной инструкции смотрим дизассемблер и пытаемся проследить как формируется адрес где хранится счетчик массива. Если результат записывается не в один и тот же регистр, то цепочка смещений разматывается легко.
Если до БА цепочка смещений не просматривается, то адрес до которого удалось определить смещения ищется в СЕ, определяются и дизассемблируются инструкции .

В итоге должно получится:
[[адр.DLL+смещение]+смещение]+смещение и тд]=счетчик массива

[0а00с561]=содержимое памяти с адресом 0а00с561

https://disk.yandex.ru/d/abXrHf4jzqJLyQ
По ссылке образец структурирования данных в памяти, смотреть через ReClass - Edit - Start_TO или Start_User.
TO - таблица объектов, не все объекты в таблице имеют тип User
User - указатель на таблицу персонажа, у моба структура аналогичная

6
Общие вопросы / Re: Кликер EXE'шник.
« on: May 07, 2022, 10:03:09 PM »
Если немного знаешь Делфи или что аналогичное можно часть кода спрятать в dll. Как работать с dll примеры на форуме были.

Возврат данных из dll в Кликермане кривой. Вернуть можно только одно целочисленное число в глобальную переменную с фиксированным именем, если есть несколько потоков вызывающих dll, поток может получить не свой результат. Поэтому данные нужно читать прямо из памяти dll. Нахождение указателя на начало динамического массива в памяти dll можно осуществить с помощью Cheat Engine.

Другой вариант безопасного возврата данных - через текстовый файл.

ps Я вообще Делфи не знал, меня Паскалю учили много лет назад. Ничего сильно сложного, по примерам разобрался, а с математическими расчетами здесь помогли. Осталось только скомпоновать в правильной последовательности.

7
Вынеси деление в отдельную строку, а результат округли до целого числа.

ROUND (arg, prec)

Параметры
arg - число
prec - точность

Пример

$r = ROUND(1.236, 0)  // $r = 1

Примечания
Округление происходит в сторону от нуля. То есть prec = 2 округлит число до сотен, а prec = -2 до сотых (два знака после точки). Откругление происходит по стандартному правилу 0.5

9
Только поэлементным копированием в цикле, потому что в КМ массивы - динамические. При копировании теряется размер массива и все элементы после первого.

В КМ нет локальных переменных. Все переменные глобальны, из-за этого приходиться для каждого потока делать свою подпрограмму с уникальными названиями. Или делать так чтобы запуск подпрограммы не пересекался во времени в разных потоках
 

10
Или считать пиксели или ковырять память игрушки, получить абсолютные координаты персонажа, посчитать в какую сторону тыкнуть мышкой и т.д.

11
Использование / Re: дублирование мыши
« on: March 14, 2021, 10:09:33 PM »
Как я понял у него случай обратный, активное окно - это виртуалка, а дублирует в не активное окно на хосте. Нажатие кнопок на мышке в не активное окно проходит, а перемещение мышки нет. Может код кривой, а может защита рубит.
Логичней было бы в виртуалке запустить второй КМ и передавать управляющие команды по сети или ковырять виртуалку.

12
Использование / Re: дублирование мыши
« on: February 24, 2021, 08:22:21 PM »
На видео с 2 машинами, один клиент запущен в виртуалке, а второй клиент на хосте. Судя по видео фокус на окне с виртуалкой, окно на хосте не активно и поэтому стреляет перед собой. Попробуй сделать наоборот. Основной фокус на окно на хосте, а дублирование в виртуалку.

13
Использование / Re: дублирование мыши
« on: February 24, 2021, 06:11:45 PM »
Проверку лучше делать на аккаунте который не жалко. А потом выждать время месяца 3-6. Если на форуме публикуются ники забаненых можно прикинуть с какой задержкой баны прилетают.

14
Использование / Re: дублирование мыши
« on: February 24, 2021, 05:15:19 PM »
В Настройки - Параметры отладчика : Использовать VEH отладчик (или отладчик в режиме ядра)
                    - Дополнительно : Процедуры обращения к региону памяти
                                                : Чтение/Запись Памяти Процесса

Выбрать процесс и найти 0, если с 0 не прокатит, то не известное значение (тип для 32х - 4 байт, float; для 64х - 4/8 байт, float/double).
Повернуть камеру влево или вправо, не изменяя угла наклона, сделать отсев изменившихся значений. Повторять до тех пор пока не останется не большое количество вариантов. В ручную не много изменить значение, если камера повернулась, значит нужный адрес найден.

Значение угла поворота лежит в диапазоне от 0 до +- X, где 0 это направление на одну из сторон света (север, юг, запад, восток) или прямо по курсу, а X - смещение от 0 вправо/влево (может принимать довольно большие значения, в одной игрушке при 360 градусном обзоре это значение равнялось -32000).


15
Использование / Re: дублирование мыши
« on: February 24, 2021, 11:19:42 AM »
Если игра защитой не прикрыта, попробуй поковырять ее память с помощью Cheat Engine.
Тебе нужно найти базовый адрес и смещение в котором расположен угол поворота камеры.


Pages: [1] 2 3 ... 11