Speedhask на VB6

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Aleksandr2
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 04.05.2008 (Вс) 0:16
Откуда: Самара

Speedhask на VB6

Сообщение Aleksandr2 » 09.07.2011 (Сб) 4:32

В широко известной в "узких кругах" программе Cheat Engine, есть функция Speedhask, которая позволяет ускорять или замедлять исполняемый процесс.
Вопрос в следующем: можно-ли реализовать подобное "чудо" средствами VB6 + WinAPI?
Задача, в общем выглядит примерно так:
Ускорить или замедлить скорость выполнения того или иного процесса на заданную величину.
Если да, то в каком направлении следует "копать", можт примеры есть?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 7:33

Что за дурь?

Процесс выполняется с такой скорость, с какой выполняет его код центральный процессор.
Speedhask в какой-то там программе, это либо развод наивный дурачков, либо делает она не то, что гласит её описание, а что-то другое, что ошибочно воспринимается как замедление.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Speedhask на VB6

Сообщение Filyus » 09.07.2011 (Сб) 9:39

Ну если менять приоритет процесса или через таймер ставить его на паузу, то вполне можно, только не факт, что процесс вылетать не будет.
В одной найденной программе как раз таймер используется http://www.softpedia.com/get/System/Sys ... ower.shtml

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 9:48

Filyus писал(а):Ну если менять приоритет процесса или через таймер ставить его на паузу, то вполне можно, только не факт, что процесс вылетать не будет.

Приоритет не влияет на скорость выполнения. Приоритеты определяют порядок, в котором задачи будут получать квант времени. Выполняться все задачи при этом будут с равной скоростью, и время работы не будет пропорционально приоритету.

Если замораживать потоки процесса, это изменит среднюю скорость выполнения, но никак не повлияет на мгновенную. То есть если цель замедления: проследить какой-то быстро-текущий эффект, то будет облом, потому что эффект проскочит очень быстро между парой разморозка→заморозка.

Единственный способ, с хоть какой-то ценностью: это подцепляться к процессу в роли отладчика и трассировать целевой процесс. Но и здесь облом: трассировка после перехода в режим ядра невозможа (до возврата в режим пользователя). Так что процесс, который в основном вызывает системные функции, замедлить таким образом не удастся. Он будет всё время торчать в ядре, и толку от того, что мы пытаемся его трассировать.

Это всё о замедлении работы. Об ускорении работы — полный бред.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Speedhask на VB6

Сообщение Filyus » 09.07.2011 (Сб) 10:28

Хакер писал(а):
Filyus писал(а):Ну если менять приоритет процесса или через таймер ставить его на паузу, то вполне можно, только не факт, что процесс вылетать не будет.

Приоритет не влияет на скорость выполнения. Приоритеты определяют порядок, в котором задачи будут получать квант времени. Выполняться все задачи при этом будут с равной скоростью, и время работы не будет пропорционально приоритету.

Если замораживать потоки процесса, это изменит среднюю скорость выполнения, но никак не повлияет на мгновенную. То есть если цель замедления: проследить какой-то быстро-текущий эффект, то будет облом, потому что эффект проскочит очень быстро между парой разморозка→заморозка.

Единственный способ, с хоть какой-то ценностью: это подцепляться к процессу в роли отладчика и трассировать целевой процесс. Но и здесь облом: трассировка после перехода в режим ядра невозможа (до возврата в режим пользователя). Так что процесс, который в основном вызывает системные функции, замедлить таким образом не удастся. Он будет всё время торчать в ядре, и толку от того, что мы пытаемся его трассировать.

Это всё о замедлении работы. Об ускорении работы — полный бред.

Ну почему же... Если запустить два процесса: один с большим приоритетом, другой - с меньшим, то второму будет выделяться меньше процессорного времени.
Заморозку можно делать не по таймеру, а по нужным функциям. Т.е., например, делать сабклассинг окна и при нужном сообщений (наприме, WM_PAINT) делать задержку. или можно замедлять всю функцию, например, glEnd для OpenGL.
SoftIce как нельзя лучше доказывает, что отлаживать в режиме ядра МОЖНО.
Ускорять процессы тоже можно: ппосле замедления это само собой, а ещё больше - за счёт оптимизации его функций, например, с помощью кеширования или подмены функций в системных DLL.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 10:54

Filyus писал(а):Ну почему же... Если запустить два процесса: один с большим приоритетом, другой - с меньшим, то второму будет выделяться меньше процессорного времени.

Увы, это не правда. Это мождет быть, но в общем случае, результат нельзя предсказать. Я сейчас запустил два одинаковых процесса и сделал им разные приоритеты. Оба давали загрузку 50 %. Результаты будут разные на одноядерном, одноядерном с HT, многоядерном процессорах.

Filyus писал(а):Заморозку можно делать не по таймеру, а по нужным функциям. Т.е., например, делать сабклассинг окна и при нужном сообщений (наприме, WM_PAINT) делать задержку. или можно замедлять всю функцию, например, glEnd для OpenGL.

Это даст грубое изменение средней скорости, но не мгновенной. Это звучит так: «как притормаживать процесс в нескольких местах», а не «как сделать, чтобы процесс выполнялся медленнее».

Filyus писал(а):SoftIce как нельзя лучше доказывает, что отлаживать в режиме ядра МОЖНО.

Как же меня раздражает, когда начинают доказывать то, сомнений в истинности ничего никто вроде бы не высказывал.

Filyus писал(а):Ускорять процессы тоже можно: ппосле замедления это само собой, а ещё больше - за счёт оптимизации его функций, например, с помощью кеширования или подмены функций в системных DLL.

Что касается оптимизации — причём тут оптимизация? Вопрос о написании функции, которая ускорит сторонний процесс. Повторяю: и причём тут оптимизация.
Что касается подмены функций в системных DLL: подробнее.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Speedhask на VB6

Сообщение Filyus » 09.07.2011 (Сб) 11:30

Хакер писал(а):Это даст грубое изменение средней скорости, но не мгновенной. Это звучит так: «как притормаживать процесс в нескольких местах», а не «как сделать, чтобы процесс выполнялся медленнее».

На практике скорее всего потребуется замедление определённых функций, а не всего процесса.
Хакер писал(а):Как же меня раздражает, когда начинают доказывать то, сомнений в истинности ничего никто вроде бы не высказывал.

А здесь что тогда имелось ввиду?
Хакер писал(а):Единственный способ, с хоть какой-то ценностью: это подцепляться к процессу в роли отладчика и трассировать целевой процесс. Но и здесь облом: трассировка после перехода в режим ядра невозможа

Хакер писал(а):Что касается оптимизации — причём тут оптимизация? Вопрос о написании функции, которая ускорит сторонний процесс. Повторяю: и причём тут оптимизация.Что касается подмены функций в системных DLL: подробнее.

Можно оптимизировать операции ввода/вывода (кеширование запросов к сети и к жёсткому диску) или же написать собственные функции, которые часто используются программами (работа с памятью и со строками) и подменять их вызовы.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 11:54

Filyus писал(а):На практике скорее всего потребуется замедление определённых функций, а не всего процесса.

Тогда я ещё раз цитирую тебе оригинальную ерунду:
Aleksandr2 писал(а):функция Speedhask, которая позволяет ускорять или замедлять исполняемый процесс.


Какой после этого разговор может быть об определённых функциях?

Filyus писал(а):А здесь что тогда имелось ввиду?

Имелась в ввиду невозможность трассировки выполнения потока из R3, когда выполнение потока переходит в R0. Софт-Айс существует. Статуя свободы существует. Много что существует. Но то, что я написал, невозможно. По крайней мере в рамках того набора практик и ограничений, которые, соответственно, приемлемы и действуют при решении задач подобного уровня.

Filyus писал(а):Можно оптимизировать операции ввода/вывода (кеширование запросов к сети и к жёсткому диску) или же написать собственные функции, которые часто используются программами (работа с памятью и со строками) и подменять их вызовы.

Это какой-то жуткий бред.
Ты предлагаешь писать универсальную функцию, которая будет оптимизировать IO в любом чужом процессе, вне зависимости от его происхождения и задач, им выполняемых?

Обращения к жесткому диску и так кешируются, ОС писали догадливые люди.
Кеширование сетевых запросов — это бред.

Ну и дальше (о функциях по работе с памятью и строками) тоже бред.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Speedhask на VB6

Сообщение ger_kar » 09.07.2011 (Сб) 12:23

Прочитал спор по поводу Софт-Айс и отладки, и могу сказать, что это все рано, что сравнивать мягкое с круглым, ибо Вопрос состоял в следующем: "можно-ли реализовать подобное "чудо" средствами VB6 + WinAPI", поэтому
Хакер писал(а):это подцепляться к процессу в роли отладчика и трассировать целевой процесс.
Даже сомнительно, что это можно реализовать на VB, а не то что-бы оладку в R0.
Хакер писал(а):Но то, что я написал, невозможно. По крайней мере в рамках того набора практик и ограничений, которые, соответственно, приемлемы и действуют при решении задач подобного уровня.
Вот с этим я согласен.
Что касается сути самого вопроса, то цель с которой все это делается не совсем ясна, а точнее вообще не ясна, может автору этого поста нужно действительно изменть среднее время выполнения. Я думаю, что сам вопрос изначально некорректен, а без указания цели ради чего вообще эта затея, то и вообще непонятен. А единственной рекомендацию которую при этом можно дать - это загнать прогу, которую упоминает автор, в отладчик, да и посмореть какие API она вызывает, да и собственно понять что она делает, а потом попытаться это повторить.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 12:25

ger_kar писал(а):Даже сомнительно, что это можно реализовать на VB,

Отладчик вполне себе возможен.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Speedhask на VB6

Сообщение ger_kar » 09.07.2011 (Сб) 12:29

Хакер писал(а):Отладчик вполне себе возможен.
С миллионом ассемблерных вставок, то может быть, а стандартными средствами вряд-ли.
ИМХО писать такое на VB, наверное получится даже накладнее, чем на чистом АСМЕ.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 12:38

ger_kar писал(а):С миллионом ассемблерных вставок, то может быть, а стандартными средствами вряд-ли.

Может быть с одной-двумя. Не нужно никаких вставок чтобы вызывать WaitForDebugEvent.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 12:50

Хотя, если подумать, вообще ни одной. Подключились (DebugActiveProcess), заморозили все потоки (SuspendThread), выставили им всем TF-флаг (GetThreadContext...SetThreadContext), разморозили (ResumeThread) и ждём отладочные события в цикле (WaitForDebugEvent). Получили — делаем задержку, убираем исключение, продолжаем (ContinueDebugEvent).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Speedhask на VB6

Сообщение ger_kar » 09.07.2011 (Сб) 13:09

Хакер писал(а):и ждём отладочные события в цикле (WaitForDebugEvent)
Цикл самому надо организовывать или передавать вторым параметром беконечность и ждать. Соответственно после вызова WaitForDebugEvent приложение отладчик приостановиться до получения результата. А потом обрабатывать структуру DEBUG_EVENT?
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 13:26

ger_kar писал(а):Соответственно после вызова WaitForDebugEvent приложение отладчик приостановиться до получения результата. А потом обрабатывать структуру DEBUG_EVENT?

Событие будет сразу же, каждая инструкция будет вызывать событие.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Speedhask на VB6

Сообщение ger_kar » 09.07.2011 (Сб) 13:37

Вообще прикольно и с виду не так все и сложно, то это только с виду, а начни делать, будет как всегда куча подводных камней и встречных течений. Но во мне пробудилось любопытство и захотелось поробовать реализовать это на практике. Если я буду делать "Пример отладчика на VB" поможешь?
Бороться и искать, найти и перепрятать

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Speedhask на VB6

Сообщение iGrok » 09.07.2011 (Сб) 14:19

Вот о чём речь в первом посте:
http://wiki.cheatengine.org/index.php?t ... #Speedhack

И вот как оно (на словах) работает:
CE has 2 different types of speedhack. The old one and the new one.

The old one is located in speedhack.pas of the cehook project (cehook.dll) When it gets activated it uses a simple hook on those functions (just place with a hook and never even bother calling the original function) It then starts a very high priority thread in the game which will increase time counters for itself using timed sleeping. The speed the time increments with is determined by the speed variable

When the game then calls those functions, it just fetches the emulated timer functions and passes it to the caller.



The new one is a bit more complex, but less prone to bugs because of a too low sleeptime, or too high, and no thread that counts time for you.

The source for this is located in speedhack2.pas in the main program, and the separate speedhack project The speedhack.dll gets injected into the target process and the dll itself has some exports, like speed, addresses of original functions, and an initialize speedhack routine

Here the hooking and controlling takes place from CE's side and it's auto assembler functions. What it does is it first uses the API hook template script on the to hook functions. This results in a script that can be used to hook the functions and fills in some predetermined addresses with the location to call if you want to call the original function (thats what the exports for the original functions are for)

After it's hooked the export "speed" of the dll is modified to the wanted speed and CreateRemoteThread is called with the address of the Initialize function to start start the speedhack and set a base of reference (the current time)

Then when a timer function is called it will calculate the new time based on the initial time the speedhack got started , the current time, and the speed. returned time = basetime+((currenttime-basetime)*speed)

When speed is modified the basetime itself is modified as well to make sure the time doesn't go backwards
label:
cli
jmp label

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Speedhask на VB6

Сообщение Filyus » 09.07.2011 (Сб) 19:32

iGrok писал(а):И вот как оно (на словах) работает

В общем меняет приоритеты потоков или текущее время.
Последний раз редактировалось Filyus 09.07.2011 (Сб) 22:34, всего редактировалось 1 раз.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Speedhask на VB6

Сообщение ger_kar » 09.07.2011 (Сб) 20:02

А я честно сказать нихера не понял. Попробовал гуглом перевести, но что-то такая херня получилась, что я сути не уловил. Может по русски вкратце изложете, кто энглиш шарит?
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Speedhask на VB6

Сообщение Хакер » 09.07.2011 (Сб) 21:15

iGrok писал(а):http://wiki.cheatengine.org/index.php?t ... #Speedhack

О, так там вообще speedhack, а не неведомый speedhask. Автор два раза написал ерунду, какой позор.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Aleksandr2
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 04.05.2008 (Вс) 0:16
Откуда: Самара

Re: Speedhask на VB6

Сообщение Aleksandr2 » 10.07.2011 (Вс) 12:45

Хакер писал(а):О, так там вообще speedhack, а не неведомый speedhask. Автор два раза написал ерунду, какой позор.
Винюсь, перед уважаемым сообществом, - ступил.
iGrok писал(а):Вот о чём речь в первом посте:
http://wiki.cheatengine.org/index.php?t ... #Speedhack И вот как оно (на словах) работает:
iGroK, спасибо за ссылку.
:scratch: "Засел за словари."

tav
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 28.05.2010 (Пт) 6:48

Re: Speedhask на VB6

Сообщение tav » 25.07.2011 (Пн) 22:17

По моему опыту СХ (СпидХак) используется нехорошими игроками во многих видах он-лайн игр.

Например в шутерах(игры-стрелялки) если включают СХ, игрок перемещается по игровой карте от 1.5 до 8 раз быстрее обычного игрока, за счет этого затрудняется или делается невозможным попадание противниками.
Тоже самое используется для игр состязания в скорости онлайн (игры с авто- мото- и иными гонками)

Это ускорение действует и на отрисовку и на отправку пакетов на сервер.
Кстати на превышенни лимита пакетов в единицу времени основана защита от СХ на некоторых серверах.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 27

    TopList