Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Криптор на ассемблере
Посл.ответ Сообщение

Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 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)



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 11 мая 2008 18:12 · Поправил: El_Diablo
· Личное сообщение · #2

Но вот передать ей точные значения зашифрованной секции не могу (т.е. вместо [esi].oe_phys_size надо подставить конкретное значение):
Вызывай GetModuleHandle(0), а дальше работай с полученным значение или считай ImageBase из PEB
А дальше доходи до первой секции и расшифровывай ее =)))



Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 мая 2008 18:32
· Личное сообщение · #3

Можно по подробнее? Сами значения у меня уже есть- [esi].oe_phys_size,... и т.д. я просто не могу их записать. Ты предлагаешь вызывать GetModuleHandle уже из закриптованного exe-файла?. Но тогда мне придеться редактировать директорию импорта и добавлять эту API? Не будет ли проблем с антивирусами?



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 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]



Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 мая 2008 19:04
· Личное сообщение · #5

Спасибо! Несовсем ясно, но по крайне мере понял в каком направлении копать дальше.



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 11 мая 2008 19:19
· Личное сообщение · #6

www.wasm.ru/article.php?article=packers2
почитай для начала дальше уже смотри исходники крипторов и пакеров =)))



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 12 мая 2008 22:58
· Личное сообщение · #7

Mol4un Посмотри крипт Morphine там есть интерфейс машинных опкодов, очень удобно и без компилятора обходиться будешь



Ранг: 10.8 (новичок)
Активность: 0.030
Статус: Участник

Создано: 19 мая 2008 16:26
· Личное сообщение · #8

Читай.

3b87_19.05.2008_CRACKLAB.rU.tgz - own.packer.zip




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 19 мая 2008 20:56 · Поправил: Crawler
· Личное сообщение · #9

Не могу не пропиарить свою статью, сорри ))))
Вот - все просто и понятно об инлайн-декодере =)))

www.xakep.ru/magazine/xa/104/068/1.asp

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 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




Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 мая 2008 22:35 · Поправил: Mol4un
· Личное сообщение · #11

Всем спасибо за ответы!! Криптор я почти дописал)).

Заинтересовала TIB и TEB структуры, а также регистр FS. Не могли бы поделиться ссылками где можно почерпнуть о них более подробную информацию?




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 19 мая 2008 22:45
· Личное сообщение · #12

--> Об упаковщиках в последний раз. Часть вторая <-- http://wasm.ru/article.php?article=packers2

-----
Nulla aetas ad discendum sera




Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 19 мая 2008 23:30
· Личное сообщение · #13

Не могу не пропиарить свою статью, сорри ))))
чет код у тя в статье неоч
не проще ли было проще ли было процедуру декрипта реализовать через инструкции lodsd и stosd ?
Это необходимо для совершенствования умственных способностей. Тренируйся, выдумывай себе головоломки и скоро ты постигнешь искусство работы с форматом PE без инструментов.
А хрен ты че постигнешь, читая подобные статьи =
Курите доки по PE форматы и все будет ок.



Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 мая 2008 23:49 · Поправил: Mol4un
· Личное сообщение · #14

Васм я уже перечитывал. Но вот что за fs такой таинственный, для чего он нужен, где он находится физически, откуда он взялся и почему он вдруг указывает на TEB так и не понял!..... может я упустил какой-то ключевой момент???



Ранг: 200.3 (наставник)
Активность: 0.090
Статус: Участник

Создано: 20 мая 2008 02:15
· Личное сообщение · #15

Ну если ты ещё пишешь такой код (просто сразу в глаза бросается)
xor edx, 77h
то посоветую, просто принять на вооружение, что FS:[0] указывает на TEB, и пока не лезть в дебри

Crawler пишет:
Не могу не пропиарить свою статью, сорри ))))
Вот - все просто и понятно об инлайн-декодере =)))
- ну, Вы даёте, разве это статья? Вот об упаковщиках в последний раз - это статья. А так - будут в программе FixUp-элементы и крипт в секции кода - просто загибается, давайте не будим дурить голову тем, кто хочет разобраться сам. ;)

-----
Само плывет в pуки только то, что не тонет.





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 24 мая 2008 16:32
· Личное сообщение · #16

El_Diablo пишет:
не проще ли было проще ли было процедуру декрипта реализовать через инструкции lodsd и stosd ?


Я уже на форуме писал, почему всё сделано именно так. Ибо загружать статью для новичков объяснением смысла инструкций - неправильно. Цель у статьи была другая. Хотя тут речь и о другом, сорри за флэйм

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 10.8 (новичок)
Активность: 0.030
Статус: Участник

Создано: 25 мая 2008 10:13
· Личное сообщение · #17

Mol4un
Если хочешь, можно в крипторе использовать полиморфный движок. Если что, ы личку или тут.



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 25 мая 2008 14:58
· Личное сообщение · #18

Ага в morphine можешь поглядеть на реализацию интерфейса к полидвижку, ну и мусорные вставки, щас не эфективны, но все же...



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 25 мая 2008 17:27
· Личное сообщение · #19

> ну и мусорные вставки, щас не эфективны, но все же...
это почему ещё)

-----
Shalom ebanats!




Ранг: 10.8 (новичок)
Активность: 0.030
Статус: Участник

Создано: 26 мая 2008 02:01
· Личное сообщение · #20

GlOFF
кто это тебе сказал что хлам в программе не эфективен?




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 26 мая 2008 07:25
· Личное сообщение · #21

Mol4un

_http://wasm.ru/pub/6/files/VirGan.zip

Посмотри лучше это...

-----
aLL rIGHTS rEVERSED!




Ранг: 10.8 (новичок)
Активность: 0.030
Статус: Участник

Создано: 02 июня 2008 14:54
· Личное сообщение · #22

Ты уже криптор сделал? Если да, скинь на мыло.



Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июня 2008 21:34 · Поправил: Mol4un
· Личное сообщение · #23

Криптор по видимому ещё очень далек от завершения. По нектороым причинам решил продолжить эксперименты с написанием криптора на MASM32. Написал как посоветовали. Но вот столкнулся с одной проблемой:
Программа копирует код расшифровщика из самой себя, управление на который никогда не передается:

mov eax,dword ptr fs:[18h]
mov eax,dword ptr ds:[eax+30h]
mov eax,dword ptr ds:[eax+8]
mov ebx,eax
add eax,dword ptr ds:[eax+3ch]
add eax,248d
mov ecx,dword ptr ds:[eax+10h]
add ebx,dword ptr ds:[eax+0ch]
sub ecx,4h
_xor2:
mov edx, dword ptr [ecx+ebx]
xor edx,ecx
not edx
xor edx, 77777777h

mov [ecx+ebx],edx
loop _xor2
jmp ebx


tasm такой код проглотил, а вот MASM32 ругается на регистр FS:
error A2108: use of register assumed to ERROR.
Подскажите пожалуйста в чем может быть проблема?



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 06 июня 2008 21:40 · Поправил: El_Diablo
· Личное сообщение · #24

а вот MASM32 ругается на регистр FS:
error A2108: use of register assumed to ERROR.

assume fs:nothing
Ты код декриптора добавляешь в файл как отдельную секцию?
Если да, то где ты сохраняешь OEP?



Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июня 2008 23:13 · Поправил: Mol4un
· Личное сообщение · #25

Спасибо!
Да, я создаю свою секцию. С OEP у меня пока тоже проблемы. Я допускаю что OEP указывает на начало первой секции. Может подскажете как его можно передать в криптуемый exe-файл?



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 07 июня 2008 01:10 · Поправил: El_Diablo
· Личное сообщение · #26

Я допускаю что OEP указывает на начало первой секции.Может подскажете как его можно передать в криптуемый exe-файл?
оверлей или сохраняй в секции декриптора как константу.
Еще при создании отдельной секции надо учитывать:
1. секция должна быть выровнена
2. должен быть увеличен размер образа =)


 eXeL@B —› Программирование —› Криптор на ассемблере
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати