@wlastas

Как защитить offsets от RE?

Есть динамическая библиотека DLL котора защищается, в которой есть метод Fill_Data
Fill_Data заполняет переданую структуру данными, которые берутся из базы по определенным офсетам, заданным через FieldOffset.
Как защитить эти офсеты от RA.
Бибилотека может быть написана на С++, тут же для примера код на C# который копилируется в нативный через Native AOT

using System.Runtime.InteropServices;

internal class TestDll {
    [UnmanagedCallersOnly(EntryPoint = "Fill_Data")]
    public static int Fill_Data(Data data) {
        data.A = 5; data.B = 9786;  data.C = 5f;
        return 0;
    }
    [StructLayout(LayoutKind.Explicit, Pack = 1)]
    public struct Data {
        [FieldOffset(0x1D9)] public byte A;
        [FieldOffset(0x0EC)] public int B;
        [FieldOffset(0x118)] public float C;
    }
}
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rPman
Наилучшая (но само собой ничего не гарантирующая) защита от реверс инженеринга - это обфускация кода, причем не (как вариант не только) на уровне исходных кодов программы но ниже - на уровне компиляции.

Промежуточные передаваемые данные защищай шифрованием, т.е. буквально запрос нужно видоизменить до неузноваемости, а код который это делает должен быть защищен обфускацией и критпостойкими алгоритмами (т.е. простого xor будет недостаточно), отличным примером может быть использование ассиметричное шифрование, когда секретный ключ для шифрования запроса должен находиться не у клиента а у dll, а клиенту достаточно публичной части.

И повторюсь - взломать можно все, вопрос только в цене процесса и целесообразности. Обычно стоимость защиты сравнима со стоимостью взлома и чаще всего взлом (специалистом) будет немного проще. Как минимум не пользоваться типовыми решениями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы