mikkys1337
Новичок
- 3
- 0
Поставь preview стандарт C++ в настройках проектаПосмотреть вложение 265485
правильно закомпилил plugin-sdk, но когда компилю плагин ошибки в чем может быть проблема?
Использовать упаковщики/проекторы (UPX, VMProtect) и мутировать код (вместо вызовов API использовать Nt, шифровать строки в статике)Как защитить программу от статического анализа?
vmprotectКак защитить программу от статического анализа?
#include <iostream>
#include <string>
int main()
{
setlocale(LC_ALL, "RU");
char Buffer[20] = { '\0' };
std::cout << "Введите любой текст: " << std::endl;
std::string LineEntered;
std::getline(std::cin, LineEntered);
if (LineEntered.length() < 20)
{
strcpy(Buffer, LineEntered.c_str());
std::cout << "BufferContains: " << Buffer << std::endl;
}
else
{
std::cout << "Пошел нахуй, слишком много символов";
}
}
Отключи проверки SDL в настройках проектаВсем привет.
Проверка на переполнения буфера.
Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си
Посмотреть вложение 266391
Buffer:#include <iostream> #include <string> int main() { setlocale(LC_ALL, "RU"); char Buffer[20] = { '\0' }; std::cout << "Введите любой текст: " << std::endl; std::string LineEntered; std::getline(std::cin, LineEntered); if (LineEntered.length() < 20) { strcpy(Buffer, LineEntered.c_str()); std::cout << "BufferContains: " << Buffer << std::endl; } else { std::cout << "Пошел нахуй, слишком много символов"; } }
Это странное поведение. Попробуй вызвать эту же функцию в Lua и проверь как оно себя поведёт. Если будет так же моргать, то проблема у тебя в ГТАшке, иначе ты возможно нашёл не ту функцию или неправильно её вызываешь. Без более детального описания тут не помочь.Почему при использовании функции IsLineOfSightClear моргают обьекты?
Не рекомендовал бы тебе выключать SDL чеки. Лучше пропишиВсем привет.
Проверка на переполнения буфера.
Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си
Посмотреть вложение 266391
Buffer:#include <iostream> #include <string> int main() { setlocale(LC_ALL, "RU"); char Buffer[20] = { '\0' }; std::cout << "Введите любой текст: " << std::endl; std::string LineEntered; std::getline(std::cin, LineEntered); if (LineEntered.length() < 20) { strcpy(Buffer, LineEntered.c_str()); std::cout << "BufferContains: " << Buffer << std::endl; } else { std::cout << "Пошел нахуй, слишком много символов"; } }
_CRT_SECURE_NO_WARNINGS
в C/C++ -> Preprocessor -> Preprocessor Definitions.void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2)
{
vehicle->DoHeadLightBeam(arg0, matrix, arg2);
}
patch::RedirectCall(0x6A2EDA, Hook_DoHeadLightBeam);
patch::RedirectCall(0x6A2EF2, Hook_DoHeadLightBeam);
patch::RedirectCall(0x6BDE80, Hook_DoHeadLightBeam);
.text:006E12F6 0A0 B9 FF FF FF 00 mov ecx, 0FFFFFFh
Делаешь в хуке проверку то что функция вызвана для нужного т/с.C++:void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2) { vehicle->DoHeadLightBeam(arg0, matrix, arg2); }
C++:patch::RedirectCall(0x6A2EDA, Hook_DoHeadLightBeam); patch::RedirectCall(0x6A2EF2, Hook_DoHeadLightBeam); patch::RedirectCall(0x6BDE80, Hook_DoHeadLightBeam);
как можно покрасить луч если в void __thiscall CVehicle::DoHeadLightBeam(CVehicle *this, int a2, CMatrix *m, char a4) нету по типу r,g,b как в StoreCarLightShadow
есть тольконо как тогда красить луч только для нужного CVehicleida pro:.text:006E12F6 0A0 B9 FF FF FF 00 mov ecx, 0FFFFFFh
void setColor(unsigned char r, unsigned char g, unsigned char b){ //функция написана условна, не забываем про снятия протекта памяти.
*reinterpret_cast<unsigned char*>(0x6E12F9) = r;
*reinterpret_cast<unsigned char*>(0x6E12F8) = g;
*reinterpret_cast<unsigned char*>(0x6E12F7) = b;
}
void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2)
{
setColor(0x00, 0x00, 0xff); //требуемый цвет
vehicle->DoHeadLightBeam(arg0, matrix, arg2);
setColor(0xff, 0xff, 0xff); // восстанавливаем оригинальный цвет
}
int AddParticle(FxSystem_c* particle,
RwV3d* position,
RwV3d* velocity,
float unk,
FxPrtMult_c* particleData,
float a6,
float brightness,
float a8,
int a9)
{
particle->AddParticle(position, velocity, unk, particleData, a6, brightness, a8, a9);
return 1;
}
patch::RedirectCall(0x6DF303, AddParticle);
patch::RedirectCall(0x6DEE83, AddParticle);
patch::RedirectCall(0x6DF0C3, AddParticle);
int __thiscall FxSystem_c::AddParticle(
FxSystem_c *particle,
CVector *position,
CVector *velocity,
float unk,
FxPrtMult_c *particleData,
float a6,
float brightness,
float a8,
int a9)
{
int v10; // esi
int result; // eax
FxPrim_c *particlePrim; // ecx
float v13; // [esp+18h] [ebp-8h]
int i; // [esp+3Ch] [ebp+1Ch]
v10 = (rand() * 0.000030517578 * 100.0);
result = Fx_c::GetFxQuality(&g_fx);
if ( result || v10 >= 50 )
{
result = Fx_c::GetFxQuality(&g_fx);
if ( result != FX_MEDIUM || v10 >= 25 )
{
v13 = 1.0;
if ( brightness < a8 )
v13 = 1.0 - a8 + brightness;
result = 0;
for ( i = 0; result < particle->m_pBluePrint->m_nNumEmitters; i = ++result )
{
particlePrim = particle->PrimsList[result];
if ( particlePrim->m_bEnabled )
{
(particlePrim->vtable->field_14)(
particlePrim,
position,
velocity,
LODWORD(unk),
particleData,
LODWORD(a6),
COERCE_FLOAT(LODWORD(v13)),
a9);
result = i;
}
}
}
}
return result;
}