Сейчас на форуме: bartolomeo, hgdagon (+6 невидимых) |
eXeL@B —› Программирование —› Поэтапная частичная расшифровка кода |
Посл.ответ | Сообщение |
|
Создано: 06 марта 2006 09:35 · Личное сообщение · #1 Хочу сделать в своей программе сабж. Впервые этим занимаюсь, потэтому решил спросить совета: как это лучше реализовать и что нужно не забыть учесть при кодинге. Действия примерно следующие: расшифровываем в одном потоке (А) кусок кода, передаем управление на него другому потоку (Б), кусок выполняется, затем поток (Б) останавливается, поток (А) затирает этот кусок и расшифровывает следующий. Причем хочу сделать так, чтобы разные куски расшифровывались в разные участки памяти. Буду благодарен за любые советы, критику, замечания. |
|
Создано: 06 марта 2006 09:45 · Поправил: Smon · Личное сообщение · #2 Довольно сложно реализовать на HLL такую вещь. Простейший вариант - как в арме, с помеченными как отстутствующие блоками памяти и процессом обработчиком, который собсно и помечает их (блоки) как присутствующие/отсутствующие, расшифровывает и передаёт на них управление. А по поводу написания собственной проги с данным сабжем - проблема в том, что код используется из из любой части секции кода, потому и могут возникнуть сложности... Относительно просто шифровать отдельные процедуры, но всю прогу ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 06 марта 2006 09:48 · Личное сообщение · #3 |
|
Создано: 07 марта 2006 03:42 · Личное сообщение · #4 > Я так и представлял, что без асма (как минимум вставок) не обойтись Легко без асма - тот код что должен быть зашифрован пишешь в длл, из хоста ссотвесно делаешь GetProcAddress, разшифровываешь нужную функцию, накладываешь релоки и вуоля. Дальше все зависит от фонтазии - эту длл можно заембеддить в саму прогу и раскидывать ее сразу в память без копирования на диск, а можно и расшифровывать по кусочку. Причем все это делается без единой ассемблерной вставки |
|
Создано: 07 марта 2006 06:17 · Личное сообщение · #5 |
|
Создано: 07 марта 2006 08:13 · Личное сообщение · #6 Можно и массив шифрованных байт выделять в память либо через GetMem, либо Virtual/GlobalAlloc, расшифровывать и передавать на них управление асм вставкой (предварительно проверив например CRC расшифрованного кода, если расшифровка зависит от пароля) ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 07 марта 2006 08:31 · Поправил: Mixa · Личное сообщение · #7 |
|
Создано: 07 марта 2006 08:41 · Поправил: Mordred · Личное сообщение · #8 Smon пишет: Можно и массив шифрованных байт выделять в память либо через GetMem, либо Virtual/GlobalAlloc, расшифровывать и передавать на них управление асм вставкой Ну да, я примерно так и планировал У меня основной вопрос - как при этом реализовать отслеживание конца кусочка, то есть как грамотно определять, что фрагмент выполнен и пора расшифровывать следующий. Smon пишет: предварительно проверив например CRC расшифрованного кода, если расшифровка зависит от пароля да имхо тут можно и не проверять CRC, просто если пароль неверный, то после расшифровки получим мусор, на который передастся управление => программа умирает Хотя можно, конечно, и так. |
|
Создано: 07 марта 2006 10:02 · Личное сообщение · #9 Mordred пишет: просто если пароль неверный, то после расшифровки получим мусор, на который передастся управление => программа умирает Так никто не делает обычно, это некрасиво. Mordred пишет: как при этом реализовать отслеживание конца кусочка Для этого надо оформлять процедуру так: 1)из асм вставки => call AllocMemAddr. 2)криптованная процедура должна заканчиваться ret. - и возврат должен быть именно этой процедуры, а не вложенной. ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 07 марта 2006 18:00 · Поправил: Mordred · Личное сообщение · #10 |
eXeL@B —› Программирование —› Поэтапная частичная расшифровка кода |