Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых) |
![]() |
eXeL@B —› Программирование —› Криптор на ассемблере |
Посл.ответ | Сообщение |
|
Создано: 11 мая 2008 18:05 · Личное сообщение · #1 Здравствуйте. Я новичек в программировании на ассемблере. Тем не менее пробую написать на нем простейший криптор. Моя программа шифрует по xor первую секцию и создет дополнительную секцию в конце файла. Проблема заключается в следующем: не придумал ничего лучше как брать код расшифровщика из самой программы в процессе выполнения, этот код копируется в последнюю секцию и меняется Entry Point. Но вот передать ей точные значения зашифрованной секции не могу (т.е. вместо [esi].oe_phys_size надо подставить конкретное значение): push ecx push ebx push edx mov ecx, [esi].oe_phys_size mov ebx, [esi].oe_phys_offs add ebx, [ebp-3*4] sub ecx, 1h _xor2: mov edx, dword ptr [ecx+ebx] xor edx, 77h mov [ecx+ebx], edx loop _xor2 pop edx pop ebx pop ecx Правильно ли я делаю, или это можно сделать по-другому? И как лучше подставить значения секции? (компилятор TASM5Plus) ![]() |
|
Создано: 11 мая 2008 18:12 · Поправил: El_Diablo · Личное сообщение · #2 |
|
Создано: 11 мая 2008 18:32 · Личное сообщение · #3 |
|
Создано: 11 мая 2008 18:37 · Поправил: El_Diablo · Личное сообщение · #4 Но тогда мне придеться редактировать директорию импорта и добавлять эту API? считай в секции твоего криптора значение ImageBase из PEB и дальше используй для своих нужд(собственно GeyModuleHandle(0) оттуда и считывает значение. 7C80B54C 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] 7C80B552 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] 7C80B555 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8] ![]() |
|
Создано: 11 мая 2008 19:04 · Личное сообщение · #5 |
|
Создано: 11 мая 2008 19:19 · Личное сообщение · #6 |
|
Создано: 12 мая 2008 22:58 · Личное сообщение · #7 |
|
Создано: 19 мая 2008 16:26 · Личное сообщение · #8 |
|
Создано: 19 мая 2008 20:56 · Поправил: Crawler · Личное сообщение · #9 |
|
Создано: 19 мая 2008 21:33 · Поправил: Flint · Личное сообщение · #10 вот, примерно так накидал код декриптора для всего файла, для начала естественно необходимо разрешить запись. 004041DF MOV EDX,DWORD PTR DS:[EDI+14] ; кидаем edx сохраненный и полученный заранее ImageBase = 400000 004041E2 ADD EDX,3C ; переходим к PE 004041E5 MOV EDX,DWORD PTR DS:[EDX]; переходим к PE 004041E7 ADD EDX,DWORD PTR DS:[EDI+14] ; переходим к PE 004041EA XOR ESI,ESI 004041EC MOV SI,WORD PTR DS:[EDX+6] ; узнаем кол-во секций, т.к в последней секции наш стаб 004041F0 DEC SI ; то уменьшаем кол-во секций на единицу 004041F2 MOV EBX,EDX 004041F4 ADD EBX,0F8 ; переходим к описанию первой секции 004041FA MOV EBP,DWORD PTR DS:[EBX+C] ; узнаем VirtualAddress = 1000 004041FD ADD EBP,DWORD PTR DS:[EDI+14] ; добавляем ImageBase 00404200 XOR ECX,ECX 00404202 MOV ECX,DWORD PTR DS:[EBX+8] ;узнаем VirtualSize 00404205 MOV AL,BYTE PTR DS:[ECX+EBP] ; копируем последний байт ксореного кода в AL 00404208 XOR AL,35 ; ксорим 0040420A MOV BYTE PTR DS:[ECX+EBP],AL ; ложим на место 0040420D LOOPD SHORT 00404205 ; мотаем цикл пока еще есть байты 0040420F XOR BYTE PTR DS:[EBP],35 ; ксорим последний байт в секции 00404214 DEC ESI ; уменьшаем кол-во секций 00404215 CMP ESI,0 ; не последня? 00404218 JE SHORT 0040421F ; если была последняя выходим из цикла 0040421A ADD EBX,28 ; иначе переходим к описанию сл. секции 0040421D JMP SHORT 004041FA тут чето с ксором я намудрил на скорую руку ![]() естественно после всех этих манипуляций необходимо будет разобраться и загрузить таблицу импорта, восстановить стэк и прыгнуть на OEP ----- Nulla aetas ad discendum sera ![]() |
|
Создано: 19 мая 2008 22:35 · Поправил: Mol4un · Личное сообщение · #11 |
|
Создано: 19 мая 2008 22:45 · Личное сообщение · #12 |
|
Создано: 19 мая 2008 23:30 · Личное сообщение · #13 Не могу не пропиарить свою статью, сорри )))) чет код у тя в статье неоч не проще ли было проще ли было процедуру декрипта реализовать через инструкции lodsd и stosd ? Это необходимо для совершенствования умственных способностей. Тренируйся, выдумывай себе головоломки и скоро ты постигнешь искусство работы с форматом PE без инструментов. А хрен ты че постигнешь, читая подобные статьи = Курите доки по PE форматы и все будет ок. ![]() |
|
Создано: 19 мая 2008 23:49 · Поправил: Mol4un · Личное сообщение · #14 |
|
Создано: 20 мая 2008 02:15 · Личное сообщение · #15 Ну если ты ещё пишешь такой код (просто сразу в глаза бросается) xor edx, 77h
то посоветую, просто принять на вооружение, что FS:[0] указывает на TEB, и пока не лезть в дебри ![]() Crawler пишет: Не могу не пропиарить свою статью, сорри )))) Вот - все просто и понятно об инлайн-декодере =))) - ну, Вы даёте, разве это статья? Вот об упаковщиках в последний раз - это статья. А так - будут в программе FixUp-элементы и крипт в секции кода - просто загибается, давайте не будим дурить голову тем, кто хочет разобраться сам. ;) ----- Само плывет в pуки только то, что не тонет. ![]() |
|
Создано: 24 мая 2008 16:32 · Личное сообщение · #16 El_Diablo пишет: не проще ли было проще ли было процедуру декрипта реализовать через инструкции lodsd и stosd ? Я уже на форуме писал, почему всё сделано именно так. Ибо загружать статью для новичков объяснением смысла инструкций - неправильно. Цель у статьи была другая. Хотя тут речь и о другом, сорри за флэйм ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. ![]() |
|
Создано: 25 мая 2008 10:13 · Личное сообщение · #17 |
|
Создано: 25 мая 2008 14:58 · Личное сообщение · #18 |
|
Создано: 25 мая 2008 17:27 · Личное сообщение · #19 |
|
Создано: 26 мая 2008 02:01 · Личное сообщение · #20 |
|
Создано: 26 мая 2008 07:25 · Личное сообщение · #21 |
|
Создано: 02 июня 2008 14:54 · Личное сообщение · #22 |
|
Создано: 06 июня 2008 21:34 · Поправил: Mol4un · Личное сообщение · #23 Криптор по видимому ещё очень далек от завершения. По нектороым причинам решил продолжить эксперименты с написанием криптора на MASM32. Написал как посоветовали. Но вот столкнулся с одной проблемой: Программа копирует код расшифровщика из самой себя, управление на который никогда не передается: mov eax,dword ptr fs:[18h]
tasm такой код проглотил, а вот MASM32 ругается на регистр FS: error A2108: use of register assumed to ERROR. Подскажите пожалуйста в чем может быть проблема? ![]() |
|
Создано: 06 июня 2008 21:40 · Поправил: El_Diablo · Личное сообщение · #24 |
|
Создано: 06 июня 2008 23:13 · Поправил: Mol4un · Личное сообщение · #25 |
|
Создано: 07 июня 2008 01:10 · Поправил: El_Diablo · Личное сообщение · #26 |
![]() |
eXeL@B —› Программирование —› Криптор на ассемблере |