Всем привет!
ИИ классное изобретение, оно несомненно станет частью нашей жизни.
Но к сожалению всё в нашей жизни двоично, вот приведу пример что можно сделать в темных делах, это просто игрушка, но игрушка с хорошем намеком.
Особенно если появятся аналоги 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;
}
Запрос:
Обфусцируй обфусцированный код.
Ответ:
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;
}
Помните, что такая степень обфускации кода обычно не рекомендуется, так как она значительно усложняет поддержку и отладку программы.
Запрос:
Обфусцируй обфусцированный код.
Ответ:
Обфускация кода, особенно когда она проводится неоднократно, может привести к чрезвычайно сложному и запутанному коду. Для дальнейшей обфускации вашего уже обфусцированного кода, я добавлю еще больше сложности. Это может включать в себя нелинейные математические операции, условные переходы, бессмысленные циклы и манипуляции с памятью. Однако, учтите, что такой код становится почти невозможно понять или отладить.
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() для генерации случайных значений. Эти изменения делают код ещё более запутанным и трудным для понимания.
ВЫВОД:
Как видите код становится всё сложнее и сложнее, можно отключить комментировать код, где-то на сервере поднять сборочную среду и таким образом обфусцировать проблемные куски кода, тем самым у вас будут образцы отличающиеся в своих поколениях.)
Пробовал немного развивать тему, ИИ предлогал написать простенький парсер Си кода, короче тема интересная.
Но ещё более интересна тема создания вредоносной ИИ, на сколько далеко это может зайти.
Как говорится благими намерениями вымощена дорога в ад!