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

  #1  
Старый 16.11.2024, 01:54
Receiver
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами: 5332594

Репутация: 163


По умолчанию

QQ TEAM! думаю многие знают или даже сталкивались с проверками от админов сервочков и вас сто процентов заставляли открывать панельку нвидиа, чтобы прочекать проги с гуишкой. так вот, щас разберём что это такое, как оно устроено изнутри и как это наебошить. значится список программулек по пути
Код:
C:\ProgramData\NVIDIA Corporation\Drs\nvAppTimestamps
. казалось бы можно просто удалить этот файлик, но тогда вас забанят за то что в панельке ничего нет=) поэтому я расчекал этот файл (по закону подлости там содержится: хуня + хуня + путь) и на кондициях написал функцию удаляющую путь по условию из коллбека.

Разбор формата файла:




из курса C++ за 2 часа мы помним то что каждая C-строка оканчивается нуль-терминатором. поэтому берём строку с запасом в 1 байт. помимо наших предположений, это так же учитывается в поле с размером строки, доказать это просто: 4A = 74. 74 / 2 = 37. значит длина первого пути со скриншота равна 37 байтам памяти.

Исходный код:


C++:





Код:
namespace
nvAppTimestamps
{
/**
 * Удалить запись из NVIDIA Control Panel
 * @param timestamp_path Путь до nvAppTimestamps (включительно)
 * @param condition Callback функция условия удаления
 * @return Nihua! Дропает рядом файл с расширением .new
 **/
void
remove_if
(
const
std
::
string
&
timestamp_path
,
const
std
::
function

&
condition
)
{
std
::
ifstream ifs
{
timestamp_path
,
std
::
ios
::
in
|
std
::
ios
::
binary
}
;
ifs
.
unsetf
(
std
::
ios
::
skipws
)
;
std
::
ofstream ofs
{
timestamp_path
+
".new"
,
std
::
ios
::
out
|
std
::
ios
::
binary
}
;
ofs
.
unsetf
(
std
::
ios
::
skipws
)
;
std
::
uint8_t
unused
{
}
;
ifs
.
read
(
reinterpret_cast

(
&
unused
)
,
sizeof
(
unused
)
)
;
ofs
.
write
(
reinterpret_cast

(
&
unused
)
,
sizeof
(
unused
)
)
;
while
(
true
)
{
std
::
uint8_t
unused_2
[
3
]
{
}
;
ifs
.
read
(
reinterpret_cast

(
&
unused_2
)
,
sizeof
(
unused_2
)
)
;
if
(
ifs
.
eof
(
)
)
break
;
std
::
uint16_t
path_size
{
}
;
ifs
.
read
(
reinterpret_cast

(
&
path_size
)
,
sizeof
(
path_size
)
)
;
wchar_t
*
path
=
new
wchar_t
[
path_size
]
;
ifs
.
read
(
reinterpret_cast

(
path
)
,
path_size
)
;
std
::
uint8_t
unused_3
[
7
]
{
}
;
ifs
.
read
(
reinterpret_cast

(
&
unused_3
)
,
sizeof
(
unused_3
)
)
;
if
(
!
condition
(
path
)
)
{
ofs
.
write
(
reinterpret_cast

(
&
unused_2
)
,
sizeof
(
unused_2
)
)
;
ofs
.
write
(
reinterpret_cast

(
&
path_size
)
,
sizeof
(
path_size
)
)
;
ofs
.
write
(
reinterpret_cast

(
path
)
,
path_size
)
;
ofs
.
write
(
reinterpret_cast

(
&
unused_3
)
,
sizeof
(
unused_3
)
)
;
}
delete
[
]
path
;
}
ofs
.
write
(
"\x01"
,
1
)
;
}
}
;
// namespace nvAppTimestamps


Пример использования:

C++:





Код:
std
::
filesystem
::
path nvidia_path
{
"C:\\ProgramData\\NVIDIA Corporation\\Drs\\nvAppTimestamps"
}
;
nvAppTimestamps
::
remove_if
(
nvidia_path
.
string
(
)
,
[
]
(
wchar_t
*
path
)
{
return
std
::
wstring
{
path
}
.
find
(
L
"app.exe"
)
!=
std
::
wstring
::
npos
;
// true - удалить, false - оставить
}
)
;
std
::
filesystem
::
rename
(
nvidia_path
.
string
(
)
+
".new"
,
nvidia_path
)
;
 
Ответить с цитированием

  #2  
Старый 15.02.2025, 18:02
JustAmnesia
Новичок
Регистрация: 11.02.2025
Сообщений: 29
С нами: 660951

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

Ебать, спасибо большое
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.