Малварь как искусство Криптор исходного кода при помощи ChatGPT


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 055
Репутация
8 161
1701716731627.png


Всем привет!

ИИ классное изобретение, оно несомненно станет частью нашей жизни.

Но к сожалению всё в нашей жизни двоично, вот приведу пример что можно сделать в темных делах, это просто игрушка, но игрушка с хорошем намеком.

Особенно если появятся аналоги ChatGPT заточенные на создание вредоносного софта, а ждать думаю этого момента осталось не долго.

Как известно защитные средства заточены на сигнатурный анализ, не важно детект это по поведению, детект по сигнатурам, детект в облаке.
Всё это так или иначе правила...)

До сех-пор вирусописатели делали скрытие кода, не меняя исходники программы, ну например шифрование кода, запуски в памяти и т.д.
Такие вирусы стали детектиться очень быстро, поэтому собственно и эпидемий нет...)

А теперь представим, что появится вирус, который действительно будет мутировать, программа будет усложняться в каждой эволюции, задетектить это существующими правилами может-быть весьма проблемотично.

Всё это нужно для обхода сигнатурного анализа и правил конечно, так называемой чистки, которая стала даваться очень не легко.

Приведу пример как можно сделать при помощи ChatGPT, который не заточен под вредоносную деятельность, а представьте если появится что-то заточенное под это.

Тем не менее ChatGPT имеет API и всё что я сейчас напишу можно автоматизировать и делать абсолютно чистые бинарники, или части кода.


Итак пример, запрос:


Обфусцируй этот код сложной логикой, циклами, ветвлениями, вызовами различных Windows API:

C:
 #include <stdio.h>
int main()
{   
    int a = 5;   
    int b = 10;    p
    rintf("Sum = %d\n", a + b);   
    return 0;
}

Ответ:

ChatGPT
Для обфускации вашего кода я добавлю сложную логику, циклы, ветвления и вызовы Windows API, чтобы сделать его менее понятным и более запутанным. Однако, обратите внимание, что такая обфускация может значительно усложнить понимание и отладку кода. Вот пример обфусцированного кода:

C:
#include <stdio.h>
#include <windows.h>

int complexFunction(int x) {
    return (x ^ 0xDEADBEEF) + (x << 4) - (x >> 3);
}

int main() {
    int a = 5, b = 10;

    // Использование Windows API для усложнения логики
    SYSTEMTIME st;
    GetSystemTime(&st);
    int day = st.wDay;
    int complexA = complexFunction(a + day);
    int complexB = complexFunction(b + day);

    // Дополнительные циклы и условия
    int sum = 0;
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            sum += (complexA - complexFunction(day)) / complexFunction(i + 1);
        } else {
            sum += (complexB - complexFunction(day)) / complexFunction(i + 1);
        }
    }

    // Восстановление оригинального значения суммы
    sum = (sum + complexFunction(day) * 10) / complexFunction(1);

    printf("Sum = %d\n", sum);
    return 0;
}
Этот код включает в себя сложные математические операции, циклы, условные конструкции и использование Windows API для получения системного времени, которые все вместе усложняют понимание того, как именно рассчитывается сумма a и b. Обратите внимание, что использование такого подхода для обфускации кода не рекомендуется в нормальных условиях разработки, так как это значительно затрудняет чтение и поддержку кода.

Запрос:
Обфусцируй обфусцированный код.

Ответ:

ChatGPT
Для дополнительной обфускации уже обфусцированного кода, можно добавить ещё больше сложностей, таких как дополнительные функции с запутанными вычислениями, макросы, условные операторы и, возможно, даже некоторые элементы, вводящие в заблуждение, такие как неиспользуемые переменные и функции. Ниже приведен пример такого кода:
C:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

#define OBFUSCATE(x, y) ((x) ^ (y)) + ((y) & ~(x))
#define DEOBFUSCATE(x, y) (((x) - (y)) ^ (y)) + ~((y) & ~(x))

int complexFunction(int x, int y) {
    return (x ^ y) - (x << (y % 3)) + (y >> (x % 4));
}

int misleadingFunction(int x) {
    return (x * x) - 42;
}

int main() {
    int a = 5, b = 10;
    int unused_var = 100;

    SYSTEMTIME st;
    GetSystemTime(&st);
    int day = st.wDayOfYear;
    int complexA = complexFunction(a, day);
    int complexB = complexFunction(b, day);

    int sum = 0;
    for (int i = 0; i < 10; i++) {
        sum += OBFUSCATE(complexA, i) - DEOBFUSCATE(complexB, i);
    }

    sum = (sum + misleadingFunction(day) - unused_var) / complexFunction(day, 1);

    printf("Sum = %d\n", sum);
    return 0;
}
В этом коде использованы макросы OBFUSCATE и DEOBFUSCATE для добавления еще одного слоя запутанности в вычисления. Также добавлены функции, которые могут вводить в заблуждение, например, misleadingFunction, и некоторые неиспользуемые переменные, такие как unused_var, чтобы усложнить анализ кода.

Помните, что такая степень обфускации кода обычно не рекомендуется, так как она значительно усложняет поддержку и отладку программы.

Запрос:
Обфусцируй обфусцированный код.

Ответ:

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

C:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

#define COMPLEX_OP(x, y) ((x * y + 7) ^ (y | x) - 33)
#define REVERSE_OP(x, y) ((x & y | 3) + (x ^ y) + 15)

char* confusingFunction(int x, int y) {
    char* str = malloc(10);
    sprintf(str, "%d", (x * y - x + y) ^ 0xABCDEF);
    return str;
}

int main() {
    int a = 5, b = 10;
    char *unused_str;

    SYSTEMTIME st;
    GetSystemTime(&st);
    int day = st.wDayOfYear;
    int complexA = COMPLEX_OP(a, day);
    int complexB = REVERSE_OP(b, day);

    int sum = 0, i = 0;
    while (i < 10) {
        if (i % 2) {
            sum += COMPLEX_OP(complexA, i) - REVERSE_OP(complexB, i);
        } else {
            sum -= REVERSE_OP(complexB, i) + COMPLEX_OP(complexA, i);
        }
        i++;
    }

    unused_str = confusingFunction(sum, day);
    sum = (sum + atoi(unused_str)) / (day % 3 + 1);
    free(unused_str);

    printf("Sum = %d\n", sum);
    return 0;
}

В этом коде я добавил бессмысленные макросы, функции, которые выполняют сложные и неочевидные операции, и даже работу с динамической памятью, которая не влияет на основную логику программы. Такой подход делает код крайне сложным для понимания и отладки.

Запрос:
Обфусцируй обфусцированный код.

Ответ:
Для дальнейшей обфускации кода, который уже был обфусцирован, я добавлю ещё больше слоёв сложности. Это включает в себя введение дополнительных бессмысленных переменных, более сложные математические операции, непонятные циклы и ветвления, а также намеренно запутанные комментарии. Однако, помните, что такая обфускация может сделать код практически нечитаемым и неотлаживаемым.

C:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>

#define OBFUSCATE_MORE(x, y, z) (((x) * (y) + (z)) ^ ((z) - (y)) + 0xBADF00D)
#define DEOBFUSCATE_MORE(x, y, z) ((((x) + (y) - (z)) ^ 0xDEADC0DE) / ((y) | 1))

void pointlessFunction(int *p, int x) {
    *p = (x ^ 0xFEEDFACE) - *p;
}

int main() {
    int a = 5, b = 10, c = 20;
    int *ptr = &c;
    char random_str[50];
    int complex_variable = 0;

    SYSTEMTIME st;
    GetSystemTime(&st);
    srand(st.wMilliseconds); // Используем миллисекунды для генерации случайного числа

    int day = st.wDayOfYear;
    int complexA = OBFUSCATE_MORE(a, day, *ptr);
    int complexB = DEOBFUSCATE_MORE(b, day, complexA);
    pointlessFunction(ptr, complexB);

    for (int i = 0; i < 15; i++) {
        complex_variable += (i % 2) ? OBFUSCATE_MORE(complexA, i, *ptr) : DEOBFUSCATE_MORE(complexB, i, complexA);
        if (complex_variable % 3 == 0) {
            sprintf(random_str, "Random: %d", rand());
            complex_variable -= strlen(random_str);
        }
    }

    complex_variable = (complex_variable + (*ptr)) / (day % 5 + 1);

    printf("Sum = %d\n", complex_variable);
    return 0;
}

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

ВЫВОД:

Как видите код становится всё сложнее и сложнее, можно отключить комментировать код, где-то на сервере поднять сборочную среду и таким образом обфусцировать проблемные куски кода, тем самым у вас будут образцы отличающиеся в своих поколениях.)

Пробовал немного развивать тему, ИИ предлогал написать простенький парсер Си кода, короче тема интересная.

Но ещё более интересна тема создания вредоносной ИИ, на сколько далеко это может зайти.

Как говорится благими намерениями вымощена дорога в ад!:Mem25:
 

offsec

Уважаемый пользователь
Форумчанин
Регистрация
12.11.2023
Сообщения
19
Репутация
17
Я вот тоже думал об этом, когда вместе с чатжпт разбирался с webshell'ом) Потому что он щас тупой(а это новейшая ультрасовременная гпт4-турбо-супер макс edition)000) Ну я конечно утрирую, но для написания чего то действительного мощного у него не получится. Потому что это всего лишь large-language model. Даже если выйдет AGI, очевидно что никто простым смертным давать его не будет) Или к тому времени Китайские друзья сами создадут такое, и конечно, *надеюсь* раздадут. Зато с жпт можно хорошо изучать материал, скажем так думать о прочитанном. Писать простой код, всякие мини-скрипты, но что-то серьезно - думаю нет.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 055
Репутация
8 161
но что-то серьезно - думаю нет.
Серьезное нет, но отлично справляется с мини задачами, поисками небольших ошибок в коде.
Анализ неплохо делает в коде.

В общем не плохо помогает, это только начало ведь, тут в будущем по любому будут и заточенные под темные дела ИИ.
 

MKII

Администратор
Администрация
Регистрация
03.10.2022
Сообщения
258
Репутация
187
Делал подобный эксперимент, только не с вирусами, а делал обфускацию авторизации в лоадере, как сказал мой знакомый (он хороший реверсер) - получился полный ад
 
Верх Низ