HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #3931  
Старый 16.08.2019, 12:18
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

Репутация: 113
По умолчанию

Цитата:
Сообщение от p1cador  

@Stiopko, код, реализующий перенаправление из функции в другое место хоть и [S]говно[/S]плоховат, но свою задачу выполняет (не поленился, проверил дебагером).
Возможно, ты создал объект Hook на стеке, в результате чего после выхода из области видимости, автоматически вызвался деструктор. Попробуй создавать его на куче через new
а что в коде говно, хочу узнать чтоби в будущем писать меньше говна

upd: нашел ошибку там вместо memset((void*)(addr - 4), 0x90, size-4);

нужно memset((void*)(addr + 4), 0x90, size-4);

Цитата:
Сообщение от p1cador  

@Stiopko
Возможно, ты создал объект Hook на стеке, в результате чего после выхода из области видимости, автоматически вызвался деструктор. Попробуй создавать его на куче через new
upd: не знал что такое может быть, я просто его в вектор записываю, попробую указатель записывать

upd: все работает, спасибо
 
Ответить с цитированием

  #3932  
Старый 16.08.2019, 22:47
ШPEK
Познавший АНТИЧАТ
Регистрация: 22.02.2017
Сообщений: 1,474
С нами: 4852492

Репутация: 88


По умолчанию

Цитата:
Сообщение от Stiopko  

Здарова, сделал я структуру для хука, но она почему-то не ставит хук, хотя просто функция работала нормально, как можно решить?

C++:





Код:
struct
Hook
{
DWORD addr
=
NULL
;
byte
*
data
=
nullptr
;
size_t size
=
NULL
;
Hook
(
const
DWORD
&
addr
,
const
DWORD
&
func
,
const
size_t
&
size
=
5
)
{
this
->
data
=
new
byte
[
size
]
;
this
->
size
=
size
;
this
->
addr
=
addr
;
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
data
,
(
void
*
)
addr
,
size
)
;
memset
(
(
void
*
)
(
addr
-
4
)
,
0x90
,
size
-
4
)
;
*
(
byte
*
)
(
addr
)
=
0xE9
;
// jmp
*
(
unsigned
int
*
)
(
addr
+
1
)
=
func
-
(
addr
+
5
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
}
~
Hook
(
)
{
if
(
data
!=
nullptr
)
{
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
(
void
*
)
addr
,
data
,
size
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
delete
[
]
data
;
}
}
}
;

C++:





[CODE]
void
injectCall
(
char
*
mainaddrress
,
char
*
target
,
size_t bytes
=
5
)
{
DWORD protection
=
PAGE_READWRITE
;
VirtualProtect
(
mainaddrress
,
bytes
,
protection
,
&
protection
)
;
*
mainaddrress
=
0xE8
;
*
reinterpret_cast

(
mainaddrress
+
1
)
=
reinterpret_cast

(
target
)
-
(
reinterpret_cast

(
mainaddrress
)
+
5
)
;
for
(
size_t i
=
5
;
i

(
mainaddrress
+
1
)
=
reinterpret_cast

(
target
)
-
(
reinterpret_cast

(
mainaddrress
)
+
5
)
;
for
(
size_t i
=
5
;
i

 
Ответить с цитированием

  #3933  
Старый 17.08.2019, 16:43
p1cador
Участник форума
Регистрация: 19.03.2014
Сообщений: 222
С нами: 6395080

Репутация: 128
По умолчанию

Цитата:
Сообщение от Stiopko  

а что в коде говно, хочу узнать чтоби в будущем писать меньше говна
не предусмотрена возможность вызова оригинальной функции

не предусмотрена возможность установки более одного хука на функцию

не сохранены значения регистров
 
Ответить с цитированием

  #3934  
Старый 17.08.2019, 16:50
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

Репутация: 113
По умолчанию

Цитата:
Сообщение от p1cador  

не предусмотрена возможность вызова оригинальной функции
не предусмотрена возможность установки более одного хука на функцию
не сохранены значения регистров
Цитата:
Сообщение от p1cador  

не предусмотрена возможность установки более одного хука на функцию
Будит)

Только, что закончил

C++:





Код:
struct
Hook
{
DWORD addr
=
NULL
;
byte
*
data
=
nullptr
;
size_t size
=
NULL
;
DWORD trampoline
=
NULL
;
size_t addBytesSize
=
NULL
;
Hook
(
const
DWORD
&
addr
,
const
DWORD
&
func
,
const
char
*
addBytes
,
const
size_t
&
addBytesSize
,
const
size_t
&
size
=
5
)
{
// addBytes для пуша аргументов функции func
this
->
data
=
new
byte
[
size
]
;
this
->
size
=
size
;
this
->
addr
=
addr
;
this
->
addBytesSize
=
addBytesSize
;
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
data
,
(
void
*
)
addr
,
size
)
;
trampoline
=
(
DWORD
)
VirtualAlloc
(
0
,
addBytesSize
+
size
+
12
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_EXECUTE_READWRITE
)
;
// pushad / addBytes / call func / popad / замененные байты / джамп назад
*
(
byte
*
)
trampoline
=
0x60
;
// pushad
memcpy
(
(
void
*
)
(
trampoline
+
1
)
,
addBytes
,
addBytesSize
)
;
// addBytes
*
(
byte
*
)
(
trampoline
+
addBytesSize
+
1
)
=
0xE8
;
//call
*
(
size_t
*
)
(
trampoline
+
addBytesSize
+
2
)
=
func
-
(
trampoline
+
addBytesSize
+
6
)
;
// func
*
(
byte
*
)
(
trampoline
+
addBytesSize
+
6
)
=
0x61
;
// popad
memcpy
(
(
void
*
)
(
trampoline
+
addBytesSize
+
7
)
,
data
,
size
)
;
// замененные байты
*
(
byte
*
)
(
trampoline
+
addBytesSize
+
size
+
7
)
=
0xE9
;
// jmp
*
(
size_t
*
)
(
trampoline
+
addBytesSize
+
size
+
8
)
=
addr
+
5
-
(
trampoline
+
addBytesSize
+
size
+
12
)
;
// jmp to
memset
(
(
void
*
)
(
addr
+
4
)
,
0x90
,
size
-
4
)
;
*
(
byte
*
)
(
addr
)
=
0xE9
;
// jmp
*
(
unsigned
int
*
)
(
addr
+
1
)
=
trampoline
-
(
addr
+
5
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
}
~
Hook
(
)
{
if
(
data
!=
nullptr
)
{
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
(
void
*
)
addr
,
data
,
size
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
memset
(
(
void
*
)
trampoline
,
NULL
,
addBytesSize
+
size
+
12
)
;
VirtualFree
(
(
void
*
)
trampoline
,
addBytesSize
+
size
+
12
,
MEM_RELEASE
)
;
delete
[
]
data
;
}
}
}
;
 
Ответить с цитированием

  #3935  
Старый 17.08.2019, 17:04
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

Репутация: 113
По умолчанию

Цитата:
Сообщение от ШPEK  

Ты используешь jmp, вместо ret
где, я не понил?

Есть ли у кого-то адрес функции которая вызывается когда в чате нажимают ентер? Мне просто нужно заменить текст, я искал в СЕ, всегда когда я заменял текст было уже поздно и плагин узнавал что его вызывают

-----------------------

Решено, если кому надо вот по этому адресу 0x65DB4 делаем хук там сохраняем регистры , потом lea ebp,[esi+000014E5] и все в ebp адрес нашей строки далее пушим в стек и вызываем функу
 
Ответить с цитированием

  #3936  
Старый 18.08.2019, 09:58
MuhaPW
Новичок
Регистрация: 12.08.2019
Сообщений: 6
С нами: 3555044

Репутация: 1
По умолчанию

Цитата:
Сообщение от Cake_  

рпк и пакеты это разные вещи. рпк отправляются / приходят в момент какого-то события например сервер показал нам диалог в этот момент нам приходит ShowDialog - ID: 61. а пакеты же используются для того чтобы отправлять информацию серверу об твоём хп / позиции / положении твоей камеры / являешься ли ты наблюдателем / отправка BULLET SYNC(в момент стрельбы) пример, когда мы двигаемся отправляется он фут дата (ID_PLAYER_SYNC), оно отправляется даже когда персонаж не двигается(отправляется с меньшей частотой)

update: https://github.com/BrunoBM16/samp-pa.../wiki/RPC-List тут можешь глянуть инфу об всех пакетах / rpc
Здравствуйте. Это опять я

Ссылку которую вы отправили, там кажется некоторые устарели (или я что то не понял, вообщем иногда данные не правильно берутся). Как мне понять это самому по RPC ? Ну например я перехватил RPC которую отправил клиент -> сервер. Как мне его прочитать ? Есть ли какой либо способ сделать так, что бы я мог определять параметры пакета ?
 
Ответить с цитированием

  #3937  
Старый 18.08.2019, 10:30
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

Репутация: 163
По умолчанию

Цитата:
Сообщение от MuhaPW  

Здравствуйте. Это опять я
Ссылку которую вы отправили, там кажется некоторые устарели (или я что то не понял, вообщем иногда данные не правильно берутся). Как мне понять это самому по RPC ? Ну например я перехватил RPC которую отправил клиент -> сервер. Как мне его прочитать ? Есть ли какой либо способ сделать так, что бы я мог определять параметры пакета ?
Софт - RakLogger+ (0.3.7)

RakLogger+ by FYP BLASTHACK.NET Сниффер RakNet-трафика для SA-MP. Функционал: Логирование в файл входящих/исходящих пакетов и RPC. Получение списка зарегистрированных RPC. Вывод данных на экран. Сохранение в формате JSON. Гибкая настройка. Описание настроек Секция "settings" - основные...

blast.hk
 
Ответить с цитированием

  #3938  
Старый 18.08.2019, 10:31
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

Репутация: 133
По умолчанию

Цитата:
Сообщение от MuhaPW  

Здравствуйте. Это опять я
Ссылку которую вы отправили, там кажется некоторые устарели (или я что то не понял, вообщем иногда данные не правильно берутся). Как мне понять это самому по RPC ? Ну например я перехватил RPC которую отправил клиент -> сервер. Как мне его прочитать ? Есть ли какой либо способ сделать так, что бы я мог определять параметры пакета ?
Нечего там не устарело. Читать битсрим нужно строго в той последовательности которой они иницилизированы на гитхабе.
 
Ответить с цитированием

  #3939  
Старый 18.08.2019, 10:57
enziweee
Новичок
Регистрация: 13.10.2017
Сообщений: 28
С нами: 4516996

Репутация: 13
По умолчанию

hi

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

и еще, имгуи тоже оставляет следы, как исправить?





 
Ответить с цитированием

  #3940  
Старый 18.08.2019, 11:50
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

Репутация: 163
По умолчанию

Цитата:
Сообщение от enziweee  

hi
как правильно настроить проект так, чтобы не оставалось всяких следов в памяти связанных с твоей учетной записью, самой студией и тд
и еще, имгуи тоже оставляет следы, как исправить?
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...