и сразу бамп
Кусок кода, ответственный за шифрацию и дешифрацию, в студию.
>>65763109
Дешифрофщик
for (unsigned int i=0; i < *n; i++)
{
unsigned char c = (unsigned char)(adr + i) ^ *k;
HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, 0, GetCurrentProcessId());
WriteProcessMemory(h, (LPVOID)(adr+i), &c, 1, &r);
}
Щифрофщик
for (unsigned int cr = i + 13; cr < to; cr++)
{
b[cr] ^= key;
}
Шифровщик/дешифровщик работают правильно, пробовал делать пикрелейтед: заполнил в winhex секцию кода числами от 00 до FF и некоторые из них поменялись после загрузки процесса в память.
>>65763460
*шифровщик
самофикс
бамп
>>65762908
почитай про релоки и импорт, наконец
*прочитай
>>65764446
а причем тут релоки?
релоки компилятор выставляет
>>65764446
>релоки
По каким ключевым словам гуглить, как правильно на инглише называется?
>>65762908
ОП а скажи как ты потом управление передаешь?
выставляешь релоки или нет?
>>65764676
При загрузке кода в память, в числа по адресам, прописанных в релоках, добавляется база. Отсюда у тебя расхождения между статичным содержимым и содержимым в памяти.
Ты ставишь break, когда загрузчик исполняемых файлов уже отработал. А теперь поставь на system breakpoint и посмотри как в процессе загрузки до EP в памяти меняются "проблемные" значения.
>>65764702
Portable executable relocations section .reloc
На кряклабе статья про формат PE есть.
>>65764797
Шифрованный код идет сразу после кода дешифратора. Как только отработает цикл дешифратора управление передастся на уже расшифрованный код, который следует далее. После выполнения он шифруется обратно.
>>65765015
Как обратно управление передаешь? Обработчиком эксепшенов?
>>65764926
да но его код в памяти уже есть
и когда он грузился, релоков не было, они были зашифрованы, он сам должен позаботится о них
>>65765094
Всмысле обратно? Все выполняется последовательно. Вот черновик Хулловворлда с расшифровщиком (щифруется посе компилляции другой программой)
#include <Windows.h>
#include <stdio.h>
void __stdcall decrypt();
int main()
{
unsigned int adr=0;
unsigned int *n;
unsigned char *k;
SIZE_T r = 0;
_asm{
jmp lb2
lb1:
add adr, 0x8
}
n = (unsigned int*)(adr - 17);
k = (unsigned char*)(adr - 18);
for (unsigned int i=0; i < *n; i++)
{
unsigned char c = (unsigned char)(adr + i) ^ *k;
HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, 0, GetCurrentProcessId());
WriteProcessMemory(h, (LPVOID)(adr+i), &c, 1, &r);
}
_asm{
jmp lb3
_emit 0xFF
_emit 0xFF
_emit 0xFF
_emit 0xFF
_emit 0xFF
lb2:
call $ + 5
pop adr
jmp lb1
lb3:
}
printf("test");
_asm{
jmp lab2
_emit 0x53
_emit 0x53
_emit 0x53
_emit 0x53
_emit 0x53
_emit 0x53
_emit 0x53
_emit 0x53
lab2:
}
return 0;
}
Я не оп и мне интересно, потому бамп.
Побампаю еще
>>65762908
Нихуя не понимаю в этом вашем говне, но по-моему это очень круто. Посижу тут
мимовебмакака
>>65765786
Ты пишешь что после выполнения код шифруется обратно. Как ты отлавливаешь момент, когда код выполнился?
Обычно в конце секции ставят что-то вроде xor eax, eax / mov [eax], eax и в обработчике эксепшенов зашифровывают код обратно.
>>65765786
>void __stdcall decrypt();
Извиняюсь за мусор в коде, забыл потереть.
>>65765855
Хуле бампать, если ОПу уже всё объяснили?
>>65765786
ОП а ты не вычленяешь структуру шифруемого PE файла, так и оставляешь все заговочные секции?
>>65762908
зачем тебе тупой ксор? поставь себе wincrypt2 и шифруй трипл-десом или еще чем
студентота по специальности информ. безопасности
>>65766161
Шифровщик буде находится непосредственно после кода (после сигнатуры конца кода _emit 0x53 или вместо нее). Будет выполнен своим чередом после того, как отработает шифрованный код.
>>65765786
Пиздец, ну у тебя и черновик. Сишнико-выблядки должны страдать, это же пиздец - писать в свою память при помощи WriteProcessMemory.
>>65766270
Ну а хули юзать крипт, если даже банальный ксор нихуя не работает.
мимо-не-оп
>>65766270
да нет смысла чем-то сильным шифровать
смысл в том что бы защитить от расшифровки
и от дампа расшифрованного образа
ну конечно если шифровать заголовочные данные коротки ключом
смысла нет
>>65766428
Есть другие варианты?
На асме это выглядело бы не лучше
push ...
call WriteProcessMemory
Иначе access violation, ведь в венде нельзя напрямую писать в секции кода.
>>65762908
Не нужно.
Алсо, ОП, даже в черновике хуярить открытие процесса внутри цикла это зашквар. Какой курс\класс и специальность? Охуенно интересно где вас таких учат.
>>65766642
Ебать да это же ваще лютый пиздец!!!!
мимо-не-оп
>>65766270
Ну, тупой ксор - это для примера в итоге там будет алгоритм по изъебистее. тот же ксор и сдвиг с динамическим ключем
>>65766156
Круто быть в комьюнити, пахнущем дорогим одеколоном, и ездить в Европу на деловые встречи.
А быть байтопидором так же круто, как быть безногим ветераном войны в чечне.
>>65766944
>пахнущем дорогим одеколоном
А чё мешает байтопидорам тоже пить дорогой одеколон?
>>65767059
Порадовал.
>>65766642
1 курс Мухосранского универа компьютерные системы и сети. Учат писать хелловворлды в Ексцеле. Я у мамки хацкер пытаюсь самостоятельно чему-то научиться. Та прав, OpenProcess нужно вынести за цикл и правильно закрыть дескриптор.
>>65762908
>пишу шифровальщик кода на с/асме для скрытия кода от сторонних глаз.
ты какую - то еболу пишешь
>>65766612
Едритъ вы содомитъ, государь. Первое что приходит в голову - на этапе компиляции дать кодосекции аттрибуты записи. Еще можно их дать в рантайме, есть для этого апи, VirtualProtect емнип сгодится.
И если уж пишешь со вставками на асме, то на асме и ксорь и записывай. xor byte ptr [hMem], bytekey ну или типа того.
>>65768415
Всей кодосекции опасно давать право на запись, пусть лучше в случае ошибки вылетит с access violation, чем случится перезапись кода и исполнение данных. Чем VirtualProtect лучше WriteProcessMemory?
>>65769088
Ну так эти две функи же имеют разное назначение - одна права ставит, другая пишет в память, как их сравнивать-то, ёба?
Вообще ставим VirtualProtect'ом права на запись и смело пишем в свой код прямо на асме. Нахуя вообще юзать WriteProcessMemory для записи в свой процесс?
Всем спасибо за помощь начинающему байтоебу. Я побежал в гугл за инфой по релокам.
Няша пикрелейтед.
Сап, двач, пишу шифровальщик кода на с/асме для скрытия кода от сторонних глаз. Просто ксорю исполняемый код с ключом. Проблема в том, что при проецировании шифрованного кода в память некоторые его биты отличаются от тех, что в были exe файле и код расшифровывается не правильно. Почему венда модифицирует поксоренный код и как с этим бороться? На пикрелейтед код, поксоренный ключом E3. Буду бампать фап-контентом.