 |

24.06.2021, 17:13
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
очередной высер
C++:
Код:
#pragma once
#include
#include
namespace
memory
{
class
c_unprotect
{
void
*
m_address
{
nullptr
}
;
std
::
size_t m_size
{
0
}
;
u_long m_protect
{
PAGE_EXECUTE_READWRITE
}
;
public
:
c_unprotect
(
void
*
a_address
,
std
::
size_t a_size
)
:
m_address
(
a_address
)
,
m_size
(
a_size
)
{
VirtualProtect
(
m_address
,
a_size
,
m_protect
,
&
m_protect
)
;
}
~
c_unprotect
(
)
{
VirtualProtect
(
m_address
,
m_size
,
m_protect
,
&
m_protect
)
;
}
}
;
void
copy
(
void
*
a_dst
,
void
*
a_src
,
std
::
size_t a_size
)
{
c_unprotect unprot
{
a_dst
,
a_size
}
;
std
::
memcpy
(
a_dst
,
a_src
,
a_size
)
;
}
void
set
(
void
*
a_dst
,
std
::
uint8_t
a_value
,
std
::
size_t a_size
)
{
c_unprotect unprot
{
a_dst
,
a_size
}
;
std
::
memset
(
a_dst
,
a_value
,
a_size
)
;
}
void
nop
(
void
*
a_dst
,
std
::
size_t a_size
)
{
memory
::
set
(
a_dst
,
0x90
,
a_size
)
;
}
void
byte
(
void
*
a_dst
,
std
::
uint8_t
a_value
)
{
memory
::
set
(
a_dst
,
a_value
,
1
)
;
}
class
c_nop
{
std
::
unique_ptr
m_bytes
{
}
;
void
*
m_pointer
{
nullptr
}
;
std
::
size_t m_size
{
0
}
;
public
:
c_nop
(
)
=
default
;
c_nop
(
void
*
a_address
,
std
::
size_t a_size
)
{
this
->
install
(
a_address
,
a_size
)
;
}
c_nop
(
std
::
uintptr_t a_address
,
std
::
size_t a_size
)
{
this
->
install
(
a_address
,
a_size
)
;
}
~
c_nop
(
)
{
this
->
restore
(
)
;
}
void
install
(
void
*
a_address
,
const
std
::
size_t a_size
)
{
m_bytes
=
std
::
make_unique
(
a_size
)
;
m_pointer
=
a_address
;
m_size
=
a_size
;
memory
::
copy
(
m_bytes
.
get
(
)
,
m_pointer
,
m_size
)
;
memory
::
nop
(
m_pointer
,
m_size
)
;
}
void
install
(
std
::
uintptr_t a_address
,
const
std
::
size_t a_size
)
{
this
->
install
(
reinterpret_cast
(
a_address
)
,
a_size
)
;
}
void
restore
(
)
{
memory
::
copy
(
m_pointer
,
m_bytes
.
get
(
)
,
m_size
)
;
}
}
;
}
C++:
Код:
memory
::
c_nop mq
{
0xAABBCCu
,
3
}
;
// ставит 3 нопа на адресе 0xAABBCC
// ваша ***ня
mq
.
restore
(
)
;
// ставит ориг. байты
// ещё варик
memory
::
c_nop mq
;
mq
.
install
(
0xAABBCCu
,
3
)
;
// ставит 3 нопа на адресе 0xAABBCC
// ваша ***ня
mq
.
restore
(
)
;
// ещё варик
memory
::
c_nop mq
{
0xAABBCCu
,
3
}
;
// ваша ***ня
delete
&
mq
;
// тут вас посылает на*** (budet CRASH)

|
|
|

24.06.2021, 17:23
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Код:
char* original_bytes + size_t patch_size
=
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|