Сейчас на форуме: hgdagon, asfa, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Криптование EXE |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 17 августа 2006 21:16 · Личное сообщение · #1 Написал два Project'а. Один ксорит файл,а второй запускает с пом. Debug Api и расксорит. Если ксорить первые $200 байт то работает, а секцию-нет. EXE в аттаче, т.к я многое упростил. В чём трабла? d230_17.08.2006_CRACKLAB.rU.tgz - Project.rar |
|
Создано: 18 августа 2006 11:29 · Личное сообщение · #2 Текст Crypt'а. var Form1: TForm1; dos: TImageDosHeader; nt:TImageNTHeaders; sh:array[0..15] of TImageSectionHeader; f:file; i: integer; implementation {$R *.dfm} function Crypt(cr:char):char; begin result:=chr(ord(cr) xor $FF); end; procedure TForm1.Button1Click(Sender: TObject); begin if OD.Execute then Edit.Text:=OD.filename; end; procedure TForm1.Button2Click(Sender: TObject); Var buf:array[0..$200] of char; n: integer; begin AssignFile(f,edit.text); Reset(f,1); BlockRead(f,dos,SizeOf(dos)); Seek(f,dos._lfanew); BlockRead(f,nt,SizeOf(nt)); for i:=0 to (NT.FileHeader.NumberOfSections-1) do BlockRead(f,sh[i],SizeOf(TImageSectionHeader)); Seek(f,sh[0].PointerToRawData); i:=0; for i:=0 to (sh[0].SizeOfRawData div $200) do begin BlockRead(f,buf,SizeOf(buf)); for n:=0 to $200 do buf[n]:=crypt(buf[n]); Seek(f,sh[0].PointerToRawData+(i*($200+1))); BlockWrite(f,buf,SizeOf(buf)); end; CloseFile(f); end; end. Текст Decrypt'а: function Crypt(cr:char):char; begin result:=chr(ord(cr) xor $FF); end; procedure TForm1.Button1Click(Sender: TObject); Var SI: TStartUpInfo; PI: TProcessInformation; DE: TDebugEvent; buf:PChar; bsize, bw: cardinal; n:integer; begin ZeroMemory(@SI,SizeOf(TStartUpInfo)); GetStartupInfo(SI); CreateProcess(PChar(Edit.Text),nil,nil,nil,false,DEBUG_ONLY_THIS_PROCE SS, nil,nil,SI,PI); bsize:=$200; GetMem(buf,bsize); While true do begin WaitForDebugEvent(DE,INFINITE); if DE.dwDebugEventCode=EXCEPTION_DEBUG_EVENT then begin ReadProcessMemory(PI.hProcess,ptr($401000),buf,bsize,bw); for n:=0 to bsize do buf[n]:=Crypt(buf[n]); WriteProcessMemory(PI.hProcess,ptr($401000),Buf,bsize,bw); ContinueDebugEvent(DE.dwProcessId,DE.dwThreadId,DBG_CONTINUE); end; if DE.dwDebugEventCode=EXIT_PROCESS_DEBUG_EVENT then exit; ContinueDebugEvent(DE.dwProcessId,DE.dwThreadId,DBG_CONTINUE); end; end; procedure TForm1.Button2Click(Sender: TObject); begin if OD.Execute then Edit.Text:=OD.FileName; end; end. |
|
Создано: 18 августа 2006 12:50 · Личное сообщение · #3 |
|
Создано: 18 августа 2006 13:13 · Личное сообщение · #4 |
|
Создано: 18 августа 2006 13:16 · Личное сообщение · #5 |
|
Создано: 18 августа 2006 14:23 · Личное сообщение · #6 |
|
Создано: 18 августа 2006 15:09 · Личное сообщение · #7 theCollision Если ты прочтешь книгу по криптографии Брюса Шнайера - "Прикладная криптология", то узнаешь, что как бы ты не извращался с ксором, то, если ты используешь в алгоритме только его, опытный криптоаналитик сможет поломать твою систему даже не используя какие-либо программы, а прямо в голове. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 18 августа 2006 15:14 · Личное сообщение · #8 |
|
Создано: 18 августа 2006 15:36 · Личное сообщение · #9 |
|
Создано: 18 августа 2006 16:35 · Личное сообщение · #10 |
|
Создано: 18 августа 2006 16:40 · Личное сообщение · #11 |
|
Создано: 19 августа 2006 10:35 · Личное сообщение · #12 |
|
Создано: 19 августа 2006 10:44 · Личное сообщение · #13 |
|
Создано: 19 августа 2006 11:34 · Личное сообщение · #14 А зачем именно Debug Api, неужели ничего другого нельзя было приписать, например секцию с кодом разксорки и переходом к ОЕР ? Конечно, я понимаю тут много бредятины, но всё же... (смотрите аттач). Как приделаю секцию разксорки, - выложу куда-нить, если кому будет нужно это борохло 31de_19.08.2006_CRACKLAB.rU.tgz - SHProt.rar ----- все багрепорты - в личные сообщения |
|
Создано: 19 августа 2006 16:54 · Личное сообщение · #15 sniperZ пишет: Выбираешь "заксореный EXE" и он запускается под Debug API и расшифровывается в памяти. Но вопрос почему не работает Ты заксорил все, в т.ч. и секцию импорта. Соответственно загрузчик не обработал ее. Для таких задач тактика кавалерийского наскока не работает : надо сначала изучить опыт "прославленных полкодцев". Иначе получишь много раз старыми граблями |
|
Создано: 19 августа 2006 17:01 · Личное сообщение · #16 |
|
Создано: 19 августа 2006 17:09 · Личное сообщение · #17 |
|
Создано: 19 августа 2006 17:17 · Личное сообщение · #18 |
|
Создано: 19 августа 2006 17:18 · Личное сообщение · #19 |
|
Создано: 20 августа 2006 08:14 · Личное сообщение · #20 sniperZ пишет: Как заксорить тогда только код? Можно посмотреть поля BaseOfCode и SizeOfCode в IMAGE_OPTIONAL_HEADER (и вообще доку http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx ). Но если есть релоки, то при их обработке загрузчик ОС модифицирует секцию. 4kusNick пишет: как бы ты не извращался с ксором, то, если ты используешь в алгоритме только его, опытный криптоаналитик сможет поломать твою систему даже не используя какие-либо программы, а прямо в голове. ИМХО ты Шнайера не так понял. Простейший пример: длина ключа равна длине шифротекста. Шифры придуманы, что бы ключ мог быть коротким. |
|
Создано: 20 августа 2006 09:13 · Личное сообщение · #21 |
|
Создано: 01 сентября 2006 06:40 · Личное сообщение · #22 sniperZ пишет: Как заксорить тогда только код? Пхххх! Легко. Вырезаешь в hiew код, сдвигаешь на 2 байта, вставляешь в начало jmp на декодер.Сдвигаешь Import Table, меняешь jmp, loop, .. переменные и т.д. Вот экзампл: 00401000:jmp 00401028 ;Hex - коды перехода - EB26h 00401002:..... ;Закодированные инструкции... 00401028:mov ecx, 27 0040102D:push edx 0040102E:push ecx 0040102F:mov edx, [ecx+00401000] 00401035:xor edx,35 00401038:mov [ecx+00401000], edx 0040103E:pop ecx 0040103F:pop edx 00401040:loop 0040102D 00401042:jmp 00401002 ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. |
|
Создано: 01 сентября 2006 07:30 · Поправил: tundra37 · Личное сообщение · #23 Crawler А ты что свою тему бросил ?! http://www.exelab.ru/f/action=vthread&forum=5&topic=6038&p age=0#15 На хрена же push и pop в цикле делать - скорость в два раз падает. И зачем ECX сохранять, когда loop его портит. 3-- вам по программированию |
|
Создано: 02 сентября 2006 12:28 · Личное сообщение · #24 Да ладно тебе, tundra37! Это издержки. А по поводу темы - спасибо, я уж разрулил. В натуре, перекоматозтило с ECX. И с пушад тоже. Сорри. Примите к сведению. А криптовать лучше готовыми пакерами, они не юзают ксор. По поводу ГОСТа хотел тоже сказать, что theCollision ошибается, если думает, что ГОСТ замешан на голом XORe. Сам читай шнайера и жельникова "от папируса до ПК" (Без обид!) ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. |
|
Создано: 03 сентября 2006 01:40 · Личное сообщение · #25 |
|
Создано: 03 сентября 2006 02:44 · Личное сообщение · #26 |
|
Создано: 03 сентября 2006 03:36 · Личное сообщение · #27 |
|
Создано: 21 сентября 2006 12:14 · Личное сообщение · #28 |
|
Создано: 22 сентября 2006 02:26 · Поправил: tundra37 · Личное сообщение · #29 Crawler пишет: А кто говорил про легкое движение руки. Наконец-то господин Crawler появился тут. Про легкое движение, конечно, Вы не говорили. Но были слова в другой теме: сдвинул на два байта секцию кода и подредактировал импорт. И все ведь "работало", вот только violation был. Может там и не запись в секцию, а просто импрорт побит был. Или мы так и не дождемся истины .... |
|
Создано: 29 сентября 2006 07:24 · Личное сообщение · #30 В личку я вам уже отправил мессаг с объяснительной, господин tundra37 И для публики: дело было в голимой функции, выставлявшей реадонли-аттрибут. Спасибо всем. А про двигание кода - в данном примере все работает без перебивки импорта и прочего геморроя. Само собой, в другом случае все гораздо сложнее ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. |
. 1 . 2 . >> |
eXeL@B —› Программирование —› Криптование EXE |
Эта тема закрыта. Ответы больше не принимаются. |