Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Написание криптора с нуля на C#

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Написание криптора с нуля на C#
Имя
Сообщение << Старые топики   Новые топики >>
Написание криптора с нуля на C# - 2008-12-27 19:46:20   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
Решил написать свой криптор ….

Начал с изучения Формата РЕ (если знаете лучше, выкладывайте)
Не помешает не большой пример на C# или VB с описанием, чем подробней тем лучше :) , что бы лучше понять.
Спросив у Гугла получил кучу инфы, но ничего конкретного, с не известно откуда взятыми вырезками из кода. Есть примеры на ассемблере, но у меня о нем очень поверстные знания. В итоге каша из абстрактной информации, которую я не могу систематизировать.
Может я Гугл не о том спрашивал… ?
Post #: 1
RE: Написание криптора с нуля на C# - 2008-12-27 19:50:13.156666   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Все легко, пользуясь даже Windows API , открываем файл смещаемся на 3Сh относительно начала, Считываем от туда PE Header Offset затем допустим что бы узнать колличество секций файле смещаемся PE Header Offset + 06h .. А все остальное что тебе нужно почитай о PE формате.
Post #: 2
RE: Написание криптора с нуля на C# - 2008-12-27 19:57:12.910000   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Затем считываешь все секции циклом, игнорируя некоторые(Импорт,Ресурсы и т.д.) если пишешь простой криптор, описание каждой секции занимает 40 байт. Потом смотришь в описании секции Физическое смещение и размер. Циклом шифруешь как нибудь предположим XOR 1 байт. Затем добавляешь новую секцию, на нее стаившь точку входа и примерно такой код в ней будет:

MOV EAX,Виртуальное смещение+ImageBase
MOV ECX,Виртуальное смещение+Виртуальный размер+ImageBase
loop:
XOR byte [EAX],XX (xx - Это ключ)
INC EAX
CMP EAX,ECX
JNZ loop
JMP OEP
Post #: 3
RE: Написание криптора с нуля на C# - 2008-12-28 04:08:20.840000   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
На сколько я понимаю, без asm не обойтись (для написания дискриптора)
Меня интересует написание непосредственно реализации шифрования, т.к. стопор именно тут и по дискриптору.

P.S. в это все влез совсем не давно, было бы хорошо получить это в "разжеванном" виде, идеи с другими форурами не интересуют т.к. запоминание лишней пары логин/пароль меня не прикалывает, + это рейтинг для этого форума.
Post #: 4
RE: Написание криптора с нуля на C# - 2008-12-28 12:12:11.680000   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
Вот тут почитай
http://wasm.ru/article.php?article=packlast01
http://wasm.ru/article.php?article=packers2
Post #: 5
RE: Написание криптора с нуля на C# - 2008-12-28 19:35:05.013333   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Bestoloch Да , без асма не обойтись , ну а что в шифровании? XOR\ADD\SUB
Post #: 6
RE: Написание криптора с нуля на C# - 2008-12-29 06:28:06.500000   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
Если я правильно понимаю, то на ассемблере пишется только дескриптор, который вставляется в файл, остальное можно писать на разных языках. Исходя из это делаю вывод, что ОС уже умеет шифровать различными методами. Поэтому у меня возникает вопрос: Эти методы перемешиваются для получения нового варианта?

2 Sunzer
по идее XOR\ADD\SUB - это виды шифрования? Сейчас без разницы какой, мне годятся любые примеры …
Post #: 7
RE: Написание криптора с нуля на C# - 2008-12-29 11:31:29.140000   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
XOR\ADD\SUB Это операции, самые банальные,и могут использоватся для шифрования.

Пример с шифрованием XOR

Ключ: FF
Было: 1B 36 C5
Будет: E4 C9 3A

Тоесть мы своим криптором открываем файл шифруем все секции точнее все байты в секции как на примере выше.
Затем пишешь новую секцию в файл ставишь на нее EP (Entry Point) и пишешь в нее следующий код:

MOV EAX,xxx ;xxx - ImageBase+VirtualOffset Секции
MOV ECX,yyy ;yyy - ImageBase+VirtualOffset+VirtualSize Секции
loop: ; метка цикла
XOR byte[EAX],FF ;FF - Ключ на которые мы шифровали байты выше
INC EAX ; Увеличиваем регистр на 1 байт
CMP EAX,ECX ; Сравниваем EAX и ECX
JNZ loop
Post #: 8
RE: Написание криптора с нуля на C# - 2008-12-29 18:20:50.806666   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
значит если просто поместить дескриптор в конец файла, то сам алгоритм и ключ при дизасемблировании будут доступны?
Post #: 9
RE: Написание криптора с нуля на C# - 2008-12-29 20:12:51.516666   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666

quote:

ORIGINAL: Bestoloch

значит если просто поместить дескриптор в конец файла, то сам алгоритм и ключ при дизасемблировании будут доступны?


Не понял смысла твоего сообщения. Но скажу что тебе еще рано крипторы писать. Изучи PE формат пользуйся OllyDbg
Post #: 10
RE: Написание криптора с нуля на C# - 2008-12-29 21:47:38.190000   
spikky

Сообщений: 211
Оценки: 0
Присоединился: 2008-10-26 14:50:23.676666
quote:

Изучи PE формат пользуйся OllyDbg

Что то не пойму зачем для изучения PE нужен ollydbg?
Post #: 11
RE: Написание криптора с нуля на C# - 2008-12-29 21:55:07.356666   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
Хотя бы потому что в оле есть карта памяти, где PE хидер представлен в удобочитаемом виде, с описанием всех полей

$ ==&gt;&nbsp;&nbsp;&nbsp; &gt; &gt;ASCII "PE"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; PE signature (PE) $+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 014C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Machine = IMAGE_FILE_MACHINE_I386 $+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfSections = 4 $+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 4751493C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; TimeDateStamp = 4751493C $+C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToSymbolTable = 0 $+10&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfSymbols = 0 $+14&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 00E0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfOptionalHeader = E0 (224.) $+16&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 010F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Characteristics = EXECUTABLE_IMAGE|32BIT_MACHINE|RELOCS_STRIPPED|LINE_NUMS_STRIPPED|LOCAL_SYMS_STRIPPED $+18&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 010B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; MagicNumber = PE32 $+1A&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DB 05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MajorLinkerVersion = 5 $+1B&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DB 0C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MinorLinkerVersion = C (12.) $+1C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfCode = 200 (512.) $+20&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001600&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfInitializedData = 1600 (5632.) $+24&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfUninitializedData = 0 $+28&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; AddressOfEntryPoint = 1000 $+2C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; BaseOfCode = 0 $+30&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00002000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; BaseOfData = 2000 $+34&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00400000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; ImageBase = 400000 $+38&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SectionAlignment = 1000 $+3C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; FileAlignment = 200 $+40&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MajorOSVersion = 4 $+42&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MinorOSVersion = 0 $+44&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MajorImageVersion = 0 $+46&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MinorImageVersion = 0 $+48&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MajorSubsystemVersion = 4 $+4A&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; MinorSubsystemVersion = 0 $+4C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Reserved $+50&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00006000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfImage = 6000 (24576.) $+54&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfHeaders = 400 (1024.) $+58&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; CheckSum = 0 $+5C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI $+5E&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; DLLCharacteristics = 0 $+60&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00100000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfStackReserve = 100000 (1048576.) $+64&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfStackCommit = 1000 (4096.) $+68&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00100000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfHeapReserve = 100000 (1048576.) $+6C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfHeapCommit = 1000 (4096.) $+70&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; LoaderFlags = 0 $+74&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfRvaAndSizes = 10 (16.) $+78&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Export Table address = 0 $+7C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Export Table size = 0 $+80&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00002010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Import Table address = 2010 $+84&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 0000003C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Import Table size = 3C (60.) $+88&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00004000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Resource Table address = 4000 $+8C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Resource Table size = 1160 (4448.) $+90&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Exception Table address = 0 $+94&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Exception Table size = 0 $+98&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Certificate File pointer = 0 $+9C&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Certificate Table size = 0 $+A0&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Relocation Table address = 0 $+A4&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Relocation Table size = 0 $+A8&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Debug Data address = 0 $+AC&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Debug Data size = 0 $+B0&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Architecture Data address = 0 $+B4&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Architecture Data size = 0 $+B8&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Global Ptr address = 0 $+BC&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Must be 0 $+C0&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; TLS Table address = 0 $+C4&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; TLS Table size = 0 $+C8&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Load Config Table address = 0 $+CC&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Load Config Table size = 0 $+D0&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Bound Import Table address = 0 $+D4&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Bound Import Table size = 0 $+D8&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00002000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Import Address Table address = 2000 $+DC&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Import Address Table size = 10 (16.) $+E0&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Delay Import Desсriрtor address = 0 $+E4&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Delay Import Desсriрtor size = 0 $+E8&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; COM+ Runtime Header address = 0 $+EC&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Import Address Table size = 0 $+F0&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Reserved $+F4&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Reserved $+F8&nbsp;&nbsp;&nbsp;&nbsp; &gt; &gt;ASCII ".text"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; SECTION $+100&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualSize = 26 (38.) $+104&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualAddress = 1000 $+108&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfRawData = 200 (512.) $+10C&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRawData = 400 $+110&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRelocations = 0 $+114&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToLineNumbers = 0 $+118&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfRelocations = 0 $+11A&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfLineNumbers = 0 $+11C&nbsp;&nbsp;&nbsp; &gt; &gt;DD 60000020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Characteristics = CODE|EXECUTE|READ $+120&nbsp;&nbsp;&nbsp; &gt; &gt;ASCII ".rdata"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; SECTION $+128&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualSize = 92 (146.) $+12C&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00002000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualAddress = 2000 $+130&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfRawData = 200 (512.) $+134&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000600&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRawData = 600 $+138&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRelocations = 0 $+13C&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToLineNumbers = 0 $+140&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfRelocations = 0 $+142&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfLineNumbers = 0 $+144&nbsp;&nbsp;&nbsp; &gt; &gt;DD 40000040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Characteristics = INITIALIZED_DATA|READ $+148&nbsp;&nbsp;&nbsp; &gt; &gt;ASCII ".data"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; SECTION $+150&nbsp;&nbsp;&nbsp; &gt; &gt;DD 0000001D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualSize = 1D (29.) $+154&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00003000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualAddress = 3000 $+158&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfRawData = 200 (512.) $+15C&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRawData = 800 $+160&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRelocations = 0 $+164&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToLineNumbers = 0 $+168&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfRelocations = 0 $+16A&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfLineNumbers = 0 $+16C&nbsp;&nbsp;&nbsp; &gt; &gt;DD C0000040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Characteristics = INITIALIZED_DATA|READ|WRITE $+170&nbsp;&nbsp;&nbsp; &gt; &gt;ASCII ".rsrc"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; SECTION $+178&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualSize = 1160 (4448.) $+17C&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00004000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; VirtualAddress = 4000 $+180&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00001200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; SizeOfRawData = 1200 (4608.) $+184&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000A00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRawData = A00 $+188&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToRelocations = 0 $+18C&nbsp;&nbsp;&nbsp; &gt; &gt;DD 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; PointerToLineNumbers = 0 $+190&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfRelocations = 0 $+192&nbsp;&nbsp;&nbsp; &gt; &gt;DW 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; NumberOfLineNumbers = 0 $+194&nbsp;&nbsp;&nbsp; &gt; &gt;DD C0000040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; Characteristics = INITIALIZED_DATA|READ|WRITE
Post #: 12
RE: Написание криптора с нуля на C# - 2008-12-29 22:12:28.983333   
spikky

Сообщений: 211
Оценки: 0
Присоединился: 2008-10-26 14:50:23.676666
quote:

Хотя бы потому что в оле есть карта памяти, где PE хидер представлен в удобочитаемом виде, с описанием всех полей

Есть более удобные программы для изучения PE формата… которые позволяют не только показывать но и легко менять значения этих самых полей. Да и написать такую программу при минимальных навыках программирования не составляет труда. Да и "PE Header в удобно читаемом виде" удобно представлен в описании PE формата…


p.s. Я не хочу наговаривать на olly, но для этого есть более удобные вещи…
Post #: 13
RE: Написание криптора с нуля на C# - 2008-12-30 04:45:54.830000   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
Может кто нибудь написать (C# или VB) простое консольное приложение, которое будет шифровать файлик операцией XOR с ключом FF и вписывать в его конец дескриптор
quote:

ORIGINAL: Sunzer

MOV EAX,xxx ;xxx - ImageBase+VirtualOffset Секции
MOV ECX,yyy ;yyy - ImageBase+VirtualOffset+VirtualSize Секции
loop: ; метка цикла
XOR byte[EAX],FF ;FF - Ключ на которые мы шифровали байты выше
INC EAX ; Увеличиваем регистр на 1 байт
CMP EAX,ECX ; Сравниваем EAX и ECX
JNZ loop
меня интересует сейчас сам код

2 Sunzer
в смысле если зашифрованный файл дезассемблировать, то по дескриптору можно будет узнать алгоритм шифрования.

2 spikky
я спорить не могу о существовании более удобных программ для изучения PE, но без примеров это выглядит голословно.
Post #: 14
RE: Написание криптора с нуля на C# - 2008-12-30 05:10:25.473333   
spikky

Сообщений: 211
Оценки: 0
Присоединился: 2008-10-26 14:50:23.676666
quote:

2 spikky
я спорить не могу о существовании более удобных программ для изучения PE, но без примеров это выглядит голословно.

Вот тут программы для работы с PE файлами:
http://cracklab.ru/download.php?action=list&amp;n=MzU=
Несколько статей описывающих PE формат:
Путеводитель по написанию вирусов под Win32: 3. Заголовок PE
Об упаковщиках в последний раз: Часть первая - теоретическая

Еще где-то в msdn была статья Мэта Питрека описвающая этот формат.




Post #: 15
RE: Написание криптора с нуля на C# - 2008-12-30 05:17:19.210000   
spikky

Сообщений: 211
Оценки: 0
Присоединился: 2008-10-26 14:50:23.676666
quote:

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

Что вы имете ввиду под словом "дескриптор"? Что-то никак не могу врубиться
Post #: 16
RE: Написание криптора с нуля на C# - 2008-12-30 05:26:46.210000   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666

quote:

ORIGINAL: spikky

quote:

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

Что вы имете ввиду под словом "дескриптор"? Что-то никак не могу врубиться

блок команд на asm для расшифровки и на который устанавливается точка входа.
Post #: 17
RE: Написание криптора с нуля на C# - 2008-12-30 05:46:54.226666   
spikky

Сообщений: 211
Оценки: 0
Присоединился: 2008-10-26 14:50:23.676666
тогда это декриптором называется, а не дескриптором…
и не обязательно на asm..
Post #: 18
RE: Написание криптора с нуля на C# - 2008-12-30 06:08:36.536666   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
Спасибо за исправление…
quote:

и не обязательно на asm..
можно по подробнее… ?
Post #: 19
RE: Написание криптора с нуля на C# - 2008-12-30 06:25:14.283333   
spikky

Сообщений: 211
Оценки: 0
Присоединился: 2008-10-26 14:50:23.676666
Что значит по подбробнее? Щас утро наверное, я не совсем понимаю суть вопроса. Ты спросил тебе вроде все что нужно ответили. Цитирую:
quote:

Все легко, пользуясь даже Windows API , открываем файл смещаемся на 3Сh относительно начала, Считываем от туда PE Header Offset затем допустим что бы узнать колличество секций файле смещаемся PE Header Offset + 06h ..

quote:

Затем считываешь все секции циклом, игнорируя некоторые(Импорт,Ресурсы и т.д.) если пишешь простой криптор, описание каждой секции занимает 40 байт. Потом смотришь в описании секции Физическое смещение и размер. Циклом шифруешь как нибудь предположим XOR 1 байт. Затем добавляешь новую секцию, на нее стаившь точку входа и примерно такой код в ней будет:

Затем дали ссылки на описание формата PE. Объяснили суть шифрования XOR'ом. Что еще нужно-то?

p.s. декриптор действиельно удобнее на асме писать - погорячился.
Post #: 20
RE: Написание криптора с нуля на C# - 2008-12-30 06:33:40.420000   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
quote:

можно по подробнее… ?
Относилось к фразе: - "и не обязательно на asm.." :)
Что касается:
quote:

quote:

Все легко, пользуясь даже Windows API , открываем файл смещаемся на 3Сh относительно начала, Считываем от туда PE Header Offset затем допустим что бы узнать колличество секций файле смещаемся PE Header Offset + 06h ..

quote:

Затем считываешь все секции циклом, игнорируя некоторые(Импорт,Ресурсы и т.д.) если пишешь простой криптор, описание каждой секции занимает 40 байт. Потом смотришь в описании секции Физическое смещение и размер. Циклом шифруешь как нибудь предположим XOR 1 байт. Затем добавляешь новую секцию, на нее стаившь точку входа и примерно такой код в ней будет:
тут вопросов нет
Post #: 21
RE: Написание криптора с нуля на C# - 2008-12-30 09:59:27.923333   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
quote:

2 Sunzer
в смысле если зашифрованный файл дезассемблировать, то по дескриптору можно будет узнать алгоритм шифрования.


Да конечно, если это будет банальный криптор.
Post #: 22
RE: Написание криптора с нуля на C# - 2008-12-30 14:48:30.663333   
Bestoloch

Сообщений: 10
Оценки: 0
Присоединился: 2008-12-26 22:53:05.126666
ИТОГО:
Для написания криптора нам понадобится:[ul]
  • Представления о PE формате (а лучше его знание)
  • Знание ассемблера и что либо из высокоуровнего языка программирования для удобства написания пользовательского интерфейса и алгоритма кодирования
  • Некоторые остальные знания придут в процессе его написания
  • [/ul]Если у кого есть опыт в написании криптора, может есть какие советы? ну в общем то о чем не упомянуто в статьях или просто для новичка в этом деле.
    Post #: 23
    RE: Написание криптора с нуля на C# - 2008-12-30 15:00:21.666666   
    _SaZ_

    Сообщений: 4329
    Оценки: 398
    Присоединился: 2008-01-30 02:18:05.553333
    Да вроде ты в нужную копаешь. Если потянешь - хорошо. Если нет - начни с чего-то более простого. Написать свой хороший криптор (на русском - упаковщик) - задача достаточно тяжёлая. На wasm,ru есть полезные статьи по этой теме.

    Если планируешь использовать в коммерческих продуктах - то можно, к примеру, для каждого клиента выпускать отдельную сборку и в качестве ключа использовать серийник винта конечного пользователя (к примеру). Это достаточно эффективно защитит программу от незаконного распостранения. + Можно подпорчитьвать уже загруженный и распакованный образ, чтобы у злоумышленнику было не так просто извлечь рабочий дамп твоей распакованный программы.

    Но такие вещи не очень логично писать на C#. Лучше всего Си + WinAPI, дабы не привязываться ни к каким разширениям ОС.
    Post #: 24
    RE: Написание криптора с нуля на C# - 2008-12-30 22:01:51.426666   
    spikky

    Сообщений: 211
    Оценки: 0
    Присоединился: 2008-10-26 14:50:23.676666
    quote:

    Но такие вещи не очень логично писать на C#. Лучше всего Си + WinAPI, дабы не привязываться ни к каким разширениям ОС.

    Как по мне так без разницы. В С# ведь можно ассемблерные ставки делать? Да и .net уже наверное у каждого стоит…
    Post #: 25
    RE: Написание криптора с нуля на C# - 2008-12-30 22:07:10.383333   
    Sunzer

    Сообщений: 253
    Оценки: 31190
    Присоединился: 2007-06-15 19:23:32.436666

    quote:

    ORIGINAL: spikky

    quote:

    Но такие вещи не очень логично писать на C#. Лучше всего Си + WinAPI, дабы не привязываться ни к каким разширениям ОС.

    Как по мне так без разницы. В С# ведь можно ассемблерные ставки делать? Да и .net уже наверное у каждого стоит…


    А зачем ассемблерные вставки? декриптор можно и записать легче, мы же опкоды знаем.
    Post #: 26
    RE: Написание криптора с нуля на C# - 2008-12-31 10:19:24.656666   
    _SaZ_

    Сообщений: 4329
    Оценки: 398
    Присоединился: 2008-01-30 02:18:05.553333
    Правильно, зачем делать предназначенными для этого средствами, когда можно всё через (_!_) на C#? Нафиг париться с экспортированием и ассемблерными вставками, тем более, что это уже unmanaged код будет? Чем выбор C# аргументирован?
    Post #: 27
    RE: Написание криптора с нуля на C# - 2008-12-31 10:43:03.293333   
    Sunzer

    Сообщений: 253
    Оценки: 31190
    Присоединился: 2007-06-15 19:23:32.436666

    quote:

    ORIGINAL: _SaZ_

    Правильно, зачем делать предназначенными для этого средствами, когда можно всё через (_!_) на C#? Нафиг париться с экспортированием и ассемблерными вставками, тем более, что это уже unmanaged код будет? Чем выбор C# аргументирован?


    Ассемблерные вставки не обязательны.
    Post #: 28
    RE: Написание криптора с нуля на C# - 2008-12-31 10:53:10.056666   
    Light Alloy

    Сообщений: 1055
    Оценки: 0
    Присоединился: 2008-06-26 22:19:38.730000
    мне тоже нужен криптор только написать не смогу а все крипторы уже давно палятся антивирусами
    Post #: 29
    RE: Написание криптора с нуля на C# - 2008-12-31 11:08:11.650000   
    _SaZ_

    Сообщений: 4329
    Оценки: 398
    Присоединился: 2008-01-30 02:18:05.553333
    С каких это пор крипторы палятся антивирусами?
    Post #: 30
    RE: Написание криптора с нуля на C# - 2008-12-31 11:09:13.860000   
    _SaZ_

    Сообщений: 4329
    Оценки: 398
    Присоединился: 2008-01-30 02:18:05.553333

    quote:

    ORIGINAL: Sunzer

    quote:

    ORIGINAL: _SaZ_

    Правильно, зачем делать предназначенными для этого средствами, когда можно всё через (_!_) на C#? Нафиг париться с экспортированием и ассемблерными вставками, тем более, что это уже unmanaged код будет? Чем выбор C# аргументирован?


    Ассемблерные вставки не обязательны.


    Я цитировал автора. Он скорее всего сам не представляет, что ему нужно.
    Post #: 31
    RE: Написание криптора с нуля на C# - 2008-12-31 18:02:58.240000   
    VENOM4X

    Сообщений: 246
    Оценки: 0
    Присоединился: 2008-02-18 22:49:08.960000
    Light Alloy:
    Сами крипторы, как правило, не палятся антивирусами. Просто антивири их снимают/декриптуют, и потом палят то, что ты криптанул - т.е. саму малварь. Но, если создатели антивиря люди ленивые, то они не реализуют свой алгоритм расшифровки для каждого криптора, а просто добавляют в базу сигнатуру секции-декриптора. В таком случае действительно палится всё обработанное данным криптором, даже notepad.exe.

    Насчёт ассемблерных вставок: Зачем? Можно писать сразу опкоды. NOP - 90h, RETN - C3h, JMP ECX - FFE1 и т.д. В таком случае не принципиально на чём написан сам криптор.
    Post #: 32
    RE: Написание криптора с нуля на C# - 2009-01-01 12:47:24.183333   
    Light Alloy

    Сообщений: 1055
    Оценки: 0
    Присоединился: 2008-06-26 22:19:38.730000
    я криптовал троян который не палится каспером, проверил его каспером, файл размером 50 kb расшифровывал 50 сек.
    незаполил его а вот его загрузил на сервер и закрыли мне доступ по фтп иза вредоносной программы

    я не думаю что антивири будут умело расшифровывать все крипторы и палить то что криптонул, но в базе криптор может быть и поэтому может считатся подозрительным файлом
    Post #: 33
    RE: Написание криптора с нуля на C# - 2009-01-01 13:48:46.446666   
    Sunzer

    Сообщений: 253
    Оценки: 31190
    Присоединился: 2007-06-15 19:23:32.436666

    quote:

    ORIGINAL: Light Alloy

    я криптовал троян который не палится каспером, проверил его каспером, файл размером 50 kb расшифровывал 50 сек.
    незаполил его а вот его загрузил на сервер и закрыли мне доступ по фтп иза вредоносной программы

    я не думаю что антивири будут умело расшифровывать все крипторы и палить то что криптонул, но в базе криптор может быть и поэтому может считатся подозрительным файлом


    Распаковщики к банальным крипторам делаются очень просто. А чаще всего палят саму сигнатуру криптора.
    Post #: 34
    RE: Написание криптора с нуля на C# - 2009-01-01 14:10:03.576666   
    VaZoNeZ

    Сообщений: -6758
    Оценки: 0
    Присоединился: 2008-10-31 14:38:43.796666
    есть длл-ка готовая для работы с секциями и т.д.
    Post #: 35
    RE: Написание криптора с нуля на C# - 2009-01-05 13:03:10.483333   
    treemout

    Сообщений: 17
    Оценки: 0
    Присоединился: 2008-12-30 18:31:38.580000
    а что такое криптор? это что-то вроде шифрования программы?
    Post #: 36
    RE: Написание криптора с нуля на C# - 2009-01-05 13:55:46.400000   
    repne_stosd

    Сообщений: 10
    Оценки: 0
    Присоединился: 2008-12-08 08:45:25.093333
    Криптор - это программа для защиты других программ от детектирования файловыми анализаторами антивирусов.
    Антивирусы используют две принципиально различающиеся технологии защиты:
    1. Файловый анализ - анализ файла на диске (запуск, распаковка, в эмуляторе авера), детектирование по сигнатурам.
    2. Проактивная защита - анализ поведения запущенного exe, осуществляется перехватом кернел-модных функций. Например в программе вызывается функция recv, происходит переход в ядро, а там стоит хук авера. Авер смотрит какой процесс пытается что-то отправить, и если его нет в списке разрешенных - ругается матом. Аналогично с WriteProcessMemory - опасное действие нах!!!
    Крипторы защищают только от первого. Чтобы не палила проактивная защита нужно лезть в ядро. И криптор способный на такое будет стоить на 50$, 10050$.
    Чтобы защититься от файлового анализа нужно сбить сигнатуру криптуемого файла (для этого файл и шифруется). Но! Когда криптованный файл будет запущен, он неминуемо будет расшифрован. Для этого и предназначены эмуляторы. Они запускают файл в своей песочнице (sandbox) (маленькая виртуальная машина, изолированная от окружающей среды) трейсят его до тех пор пока не дойдут до процедуры расшифровки и не выполнят ее. После расшифровки снова пробегаются своими сигнами по расшифрованным данным(коду). Найден вирус - ругаемся, нет - молчим. Чтобы избежать этого, нужно отправить эмулятор по ложному пути. Есть множество способов достижения этой цели, например, rdtsc, GetLastError и еще много чего. Ищите, кто ищет, тот всегда найдет;)
    Post #: 37
    RE: Написание криптора с нуля на C# - 2009-01-06 01:28:44.816666   
    Flint_ta

    Сообщений: 3720
    Оценки: 1120
    Присоединился: 2007-01-26 15:49:18.323333
    вот про GetLastError поподробнее пожалуйста

    quote:

    Например в программе вызывается функция recv


    P.S. может не recv, а send? :)
    Post #: 38
    RE: Написание криптора с нуля на C# - 2009-01-06 02:12:25.703333   
    _SaZ_

    Сообщений: 4329
    Оценки: 398
    Присоединился: 2008-01-30 02:18:05.553333
    Обычно и то и то вызывается :)

    Сэнд с ресивом ходят парой… хотя синхронные сокеты - зло.
    Post #: 39
    RE: Написание криптора с нуля на C# - 2009-01-06 17:27:47.363333   
    Archivarius

    Сообщений: 164
    Оценки: 0
    Присоединился: 2008-10-26 00:16:25.630000
    quote:

    ORIGINAL: spikky

    В С# ведь можно ассемблерные ставки делать?
    Каким образом?
    Post #: 40
    Страниц:  [1] 2
    Все форумы >> [Компилируемые языки] >> Написание криптора с нуля на C#







    Связаться:
    Вопросы по сайту / xakep@glc.ru

    Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.