Сохранен 52
https://2ch.hk/b/res/65762908.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Призываю байтоебов

 Аноним Вск 06 Апр 2014 14:59:37  #1 №65762908 
1396781977803.png

Сап, двач, пишу шифровальщик кода на с/асме для скрытия кода от сторонних глаз. Просто ксорю исполняемый код с ключом. Проблема в том, что при проецировании шифрованного кода в память некоторые его биты отличаются от тех, что в были exe файле и код расшифровывается не правильно. Почему венда модифицирует поксоренный код и как с этим бороться? На пикрелейтед код, поксоренный ключом E3. Буду бампать фап-контентом.

Аноним Вск 06 Апр 2014 15:00:50  #2 №65762981 
1396782050119.jpg

и сразу бамп

Аноним Вск 06 Апр 2014 15:02:25  #3 №65763069 
1396782145661.jpg
Аноним Вск 06 Апр 2014 15:03:15  #4 №65763109 

Кусок кода, ответственный за шифрацию и дешифрацию, в студию.

Аноним Вск 06 Апр 2014 15:03:24  #5 №65763118 
1396782204673.jpg
Аноним Вск 06 Апр 2014 15:11:16  #6 №65763460 
1396782676057.png

>>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 и некоторые из них поменялись после загрузки процесса в память.

Аноним Вск 06 Апр 2014 15:12:38  #7 №65763523 

>>65763460
*шифровщик
самофикс

Аноним Вск 06 Апр 2014 15:14:12  #8 №65763602 
1396782852963.jpg

бамп

Аноним Вск 06 Апр 2014 15:16:11  #9 №65763713 
1396782971551.jpg
Аноним Вск 06 Апр 2014 15:18:42  #10 №65763848 
1396783122438.jpg
Аноним Вск 06 Апр 2014 15:21:50  #11 №65764023 
1396783310685.jpg
Аноним Вск 06 Апр 2014 15:22:22  #12 №65764059 
1396783342297.jpg
Аноним Вск 06 Апр 2014 15:24:43  #13 №65764171 
1396783483141.jpg
Аноним Вск 06 Апр 2014 15:30:03  #14 №65764446 

>>65762908
почитай про релоки и импорт, наконец

Аноним Вск 06 Апр 2014 15:30:52  #15 №65764489 

*прочитай

Аноним Вск 06 Апр 2014 15:34:38  #16 №65764676 

>>65764446
а причем тут релоки?
релоки компилятор выставляет

Аноним Вск 06 Апр 2014 15:35:00  #17 №65764702 

>>65764446
>релоки
По каким ключевым словам гуглить, как правильно на инглише называется?

Аноним Вск 06 Апр 2014 15:36:43  #18 №65764797 

>>65762908
ОП а скажи как ты потом управление передаешь?
выставляешь релоки или нет?

Аноним Вск 06 Апр 2014 15:39:02  #19 №65764926 

>>65764676
При загрузке кода в память, в числа по адресам, прописанных в релоках, добавляется база. Отсюда у тебя расхождения между статичным содержимым и содержимым в памяти.
Ты ставишь break, когда загрузчик исполняемых файлов уже отработал. А теперь поставь на system breakpoint и посмотри как в процессе загрузки до EP в памяти меняются "проблемные" значения.

Аноним Вск 06 Апр 2014 15:40:22  #20 №65764992 

>>65764702
Portable executable relocations section .reloc
На кряклабе статья про формат PE есть.

Аноним Вск 06 Апр 2014 15:40:45  #21 №65765015 

>>65764797
Шифрованный код идет сразу после кода дешифратора. Как только отработает цикл дешифратора управление передастся на уже расшифрованный код, который следует далее. После выполнения он шифруется обратно.

Аноним Вск 06 Апр 2014 15:42:48  #22 №65765094 

>>65765015
Как обратно управление передаешь? Обработчиком эксепшенов?

Аноним Вск 06 Апр 2014 15:42:54  #23 №65765104 

>>65764926
да но его код в памяти уже есть
и когда он грузился, релоков не было, они были зашифрованы, он сам должен позаботится о них

Аноним Вск 06 Апр 2014 15:44:32  #24 №65765180 
1396784672071.jpg

>>65763460

Аноним Вск 06 Апр 2014 15:56:23  #25 №65765786 

>>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;
}

Аноним Вск 06 Апр 2014 15:57:43  #26 №65765855 

Я не оп и мне интересно, потому бамп.

Аноним Вск 06 Апр 2014 16:01:16  #27 №65766051 
1396785676508.jpg

Побампаю еще

Аноним Вск 06 Апр 2014 16:03:20  #28 №65766156 

>>65762908
Нихуя не понимаю в этом вашем говне, но по-моему это очень круто. Посижу тут
мимовебмакака

Аноним Вск 06 Апр 2014 16:03:21  #29 №65766161 

>>65765786
Ты пишешь что после выполнения код шифруется обратно. Как ты отлавливаешь момент, когда код выполнился?
Обычно в конце секции ставят что-то вроде xor eax, eax / mov [eax], eax и в обработчике эксепшенов зашифровывают код обратно.

Аноним Вск 06 Апр 2014 16:04:23  #30 №65766210 

>>65765786
>void __stdcall decrypt();
Извиняюсь за мусор в коде, забыл потереть.

Аноним Вск 06 Апр 2014 16:04:52  #31 №65766233 

>>65765855
Хуле бампать, если ОПу уже всё объяснили?

Аноним Вск 06 Апр 2014 16:05:14  #32 №65766259 

>>65765786
ОП а ты не вычленяешь структуру шифруемого PE файла, так и оставляешь все заговочные секции?

Аноним Вск 06 Апр 2014 16:05:24  #33 №65766270 

>>65762908
зачем тебе тупой ксор? поставь себе wincrypt2 и шифруй трипл-десом или еще чем

студентота по специальности информ. безопасности

Аноним Вск 06 Апр 2014 16:08:20  #34 №65766425 

>>65766161
Шифровщик буде находится непосредственно после кода (после сигнатуры конца кода _emit 0x53 или вместо нее). Будет выполнен своим чередом после того, как отработает шифрованный код.

Аноним Вск 06 Апр 2014 16:08:22  #35 №65766428 
1396786102322.jpg

>>65765786
Пиздец, ну у тебя и черновик. Сишнико-выблядки должны страдать, это же пиздец - писать в свою память при помощи WriteProcessMemory.

Аноним Вск 06 Апр 2014 16:09:53  #36 №65766517 

>>65766270
Ну а хули юзать крипт, если даже банальный ксор нихуя не работает.
мимо-не-оп

Аноним Вск 06 Апр 2014 16:10:18  #37 №65766544 

>>65766270
да нет смысла чем-то сильным шифровать
смысл в том что бы защитить от расшифровки
и от дампа расшифрованного образа
ну конечно если шифровать заголовочные данные коротки ключом
смысла нет

Аноним Вск 06 Апр 2014 16:11:30  #38 №65766612 

>>65766428
Есть другие варианты?
На асме это выглядело бы не лучше
push ...
call WriteProcessMemory
Иначе access violation, ведь в венде нельзя напрямую писать в секции кода.

Аноним Вск 06 Апр 2014 16:11:41  #39 №65766627 
1396786301315.jpg

>>65762908
Не нужно.

Аноним Вск 06 Апр 2014 16:11:55  #40 №65766642 
1396786315044.jpg

Алсо, ОП, даже в черновике хуярить открытие процесса внутри цикла это зашквар. Какой курс\класс и специальность? Охуенно интересно где вас таких учат.

Аноним Вск 06 Апр 2014 16:13:12  #41 №65766716 

>>65766642
Ебать да это же ваще лютый пиздец!!!!
мимо-не-оп

Аноним Вск 06 Апр 2014 16:15:58  #42 №65766876 

>>65766270
Ну, тупой ксор - это для примера в итоге там будет алгоритм по изъебистее. тот же ксор и сдвиг с динамическим ключем

Аноним Вск 06 Апр 2014 16:17:07  #43 №65766944 

>>65766156
Круто быть в комьюнити, пахнущем дорогим одеколоном, и ездить в Европу на деловые встречи.
А быть байтопидором так же круто, как быть безногим ветераном войны в чечне.

Аноним Вск 06 Апр 2014 16:19:09  #44 №65767059 

>>65766944
>пахнущем дорогим одеколоном
А чё мешает байтопидорам тоже пить дорогой одеколон?

Аноним Вск 06 Апр 2014 16:20:23  #45 №65767118 

>>65767059
Порадовал.

Аноним Вск 06 Апр 2014 16:20:52  #46 №65767155 

>>65766642
1 курс Мухосранского универа компьютерные системы и сети. Учат писать хелловворлды в Ексцеле. Я у мамки хацкер пытаюсь самостоятельно чему-то научиться. Та прав, OpenProcess нужно вынести за цикл и правильно закрыть дескриптор.

sageАноним Вск 06 Апр 2014 16:23:56  #47 №65767319 

>>65762908
>пишу шифровальщик кода на с/асме для скрытия кода от сторонних глаз.
ты какую - то еболу пишешь

Аноним Вск 06 Апр 2014 16:43:11  #48 №65768415 
1396788191728.jpg

>>65766612
Едритъ вы содомитъ, государь. Первое что приходит в голову - на этапе компиляции дать кодосекции аттрибуты записи. Еще можно их дать в рантайме, есть для этого апи, VirtualProtect емнип сгодится.

Аноним Вск 06 Апр 2014 16:46:44  #49 №65768632 
1396788404660.jpg

И если уж пишешь со вставками на асме, то на асме и ксорь и записывай. xor byte ptr [hMem], bytekey ну или типа того.

Аноним Вск 06 Апр 2014 16:54:15  #50 №65769088 

>>65768415
Всей кодосекции опасно давать право на запись, пусть лучше в случае ошибки вылетит с access violation, чем случится перезапись кода и исполнение данных. Чем VirtualProtect лучше WriteProcessMemory?

Аноним Вск 06 Апр 2014 17:03:46  #51 №65769709 
1396789426750.jpg

>>65769088
Ну так эти две функи же имеют разное назначение - одна права ставит, другая пишет в память, как их сравнивать-то, ёба?
Вообще ставим VirtualProtect'ом права на запись и смело пишем в свой код прямо на асме. Нахуя вообще юзать WriteProcessMemory для записи в свой процесс?

Аноним Вск 06 Апр 2014 17:11:21  #52 №65770180 
1396789881373.jpg

Всем спасибо за помощь начинающему байтоебу. Я побежал в гугл за инфой по релокам.
Няша пикрелейтед.

comments powered by Disqus

Отзывы и предложения