Сейчас на форуме: bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Поэтапная частичная расшифровка кода
Посл.ответ Сообщение

Ранг: 39.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 06 марта 2006 09:35
· Личное сообщение · #1

Хочу сделать в своей программе сабж. Впервые этим занимаюсь, потэтому решил спросить совета: как это лучше реализовать и что нужно не забыть учесть при кодинге.
Действия примерно следующие: расшифровываем в одном потоке (А) кусок кода, передаем управление на него другому потоку (Б), кусок выполняется, затем поток (Б) останавливается, поток (А) затирает этот кусок и расшифровывает следующий. Причем хочу сделать так, чтобы разные куски расшифровывались в разные участки памяти.
Буду благодарен за любые советы, критику, замечания.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 06 марта 2006 09:45 · Поправил: Smon
· Личное сообщение · #2

Довольно сложно реализовать на HLL такую вещь. Простейший вариант - как в арме, с помеченными как отстутствующие блоками памяти и процессом обработчиком, который собсно и помечает их (блоки) как присутствующие/отсутствующие, расшифровывает и передаёт на них управление. А по поводу написания собственной проги с данным сабжем - проблема в том, что код используется из из любой части секции кода, потому и могут возникнуть сложности... Относительно просто шифровать отдельные процедуры, но всю прогу

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 39.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 06 марта 2006 09:48
· Личное сообщение · #3

Smon пишет:
Довольно сложно реализовать на HLL такую вещь

Я так и представлял, что без асма (как минимум вставок) не обойтись
Smon пишет:
Довольно просто шифровать отдельные процедуры, но всю прогу

Да нет, мне в общем-то можно шифровать как раз только некоторые функции




Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 07 марта 2006 03:42
· Личное сообщение · #4

> Я так и представлял, что без асма (как минимум вставок) не обойтись

Легко без асма - тот код что должен быть зашифрован пишешь в длл, из хоста ссотвесно делаешь GetProcAddress, разшифровываешь нужную функцию, накладываешь релоки и вуоля. Дальше все зависит от фонтазии - эту длл можно заембеддить в саму прогу и раскидывать ее сразу в память без копирования на диск, а можно и расшифровывать по кусочку. Причем все это делается без единой ассемблерной вставки



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

Создано: 07 марта 2006 06:17
· Личное сообщение · #5

DrGolova
А можно пример? Буду очень благодарен.
Меня тоже интересует данный вопрос, но я только недавно начал изучать С++.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 07 марта 2006 08:13
· Личное сообщение · #6

Можно и массив шифрованных байт выделять в память либо через GetMem, либо Virtual/GlobalAlloc, расшифровывать и передавать на них управление асм вставкой (предварительно проверив например CRC расшифрованного кода, если расшифровка зависит от пароля)

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




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

Создано: 07 марта 2006 08:31 · Поправил: Mixa
· Личное сообщение · #7

А как можно зашифровать функции в своей программе? Для этого обязательно делать dll?
Или есть другой способ?
Интересует реализация на Builder C++



Ранг: 39.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 07 марта 2006 08:41 · Поправил: Mordred
· Личное сообщение · #8

Smon пишет:
Можно и массив шифрованных байт выделять в память либо через GetMem, либо Virtual/GlobalAlloc, расшифровывать и передавать на них управление асм вставкой

Ну да, я примерно так и планировал У меня основной вопрос - как при этом реализовать отслеживание конца кусочка, то есть как грамотно определять, что фрагмент выполнен и пора расшифровывать следующий.
Smon пишет:
предварительно проверив например CRC расшифрованного кода, если расшифровка зависит от пароля

да имхо тут можно и не проверять CRC, просто если пароль неверный, то после расшифровки получим мусор, на который передастся управление => программа умирает Хотя можно, конечно, и так.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 07 марта 2006 10:02
· Личное сообщение · #9

Mordred пишет:
просто если пароль неверный, то после расшифровки получим мусор, на который передастся управление => программа умирает

Так никто не делает обычно, это некрасиво.

Mordred пишет:
как при этом реализовать отслеживание конца кусочка

Для этого надо оформлять процедуру так:
1)из асм вставки => call AllocMemAddr.
2)криптованная процедура должна заканчиваться ret. - и возврат должен быть именно этой процедуры, а не вложенной.

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 39.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 07 марта 2006 18:00 · Поправил: Mordred
· Личное сообщение · #10

Cпасибо за советы, буду пытаться реализовать Тему не закрываю, вдруг что еще интересного услышим, тем более вдруг и впрямь исходники кто-нить выложит


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


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