Здравствуйте, произошло чудо и наш продукт был полностью переписан c C++ на дот нет
Ну и пришло время кодировать приложение Hardlock — ом фирмы Alladin.
Хардлок подразумевает некоторое внешнее кодирование (специальной утилитой, которая просто долбит по exe-шнику)
И внутреннее — когда есть некое api позволяющее прогнать один стринг через api и получить другой стринг.
В общем возник вопрос, куда бы вставить внутреннее кодирование То есть что можно в нете закодировать так чтобы незаметно для программиста всё реализовать? Понимаю, что вопрос немного туповат, но просто интересно какие есть идеи. Спасибо.
Здравствуйте, arkhivania, Вы писали:
A>Здравствуйте, произошло чудо и наш продукт был полностью переписан c C++ на дот нет A>Ну и пришло время кодировать приложение Hardlock — ом фирмы Alladin. A>Хардлок подразумевает некоторое внешнее кодирование (специальной утилитой, которая просто долбит по exe-шнику) A>И внутреннее — когда есть некое api позволяющее прогнать один стринг через api и получить другой стринг. A>В общем возник вопрос, куда бы вставить внутреннее кодирование То есть что можно в нете закодировать так чтобы незаметно для программиста всё реализовать? Понимаю, что вопрос немного туповат, но просто интересно какие есть идеи. Спасибо.
можно например закриптовать все классы и при загрузке раскриптовывать их ключем из хаспа, но это легко ломается, гораздо лучше было бы если хранить часть кода в зашифрованном виде в самом хаспе и по мере необходимости вытягивать, используя раскиданные, запрятанные и пошифрованные по коду ключи.
Здравствуйте, _Morpheus_, Вы писали:
_M_>можно например закриптовать все классы и при загрузке раскриптовывать их ключем из хаспа, но это легко ломается, гораздо лучше было бы если хранить часть кода в зашифрованном виде в самом хаспе и по мере необходимости вытягивать, используя раскиданные, запрятанные и пошифрованные по коду ключи.
Да тут еще выяснилось что нетовское приложение нельзя так просто внешне кодировать, оно после кодирования не запускается У нас конкретно хардлоки и вот никак не могу придумать как сделать так, чтобы часть DLL пропустить через кодировщик хардлока и чтобы в момент загрузки их раскодировать. Это был бы хороший вариант, но боюсь практически не реализуемый. Может AppDomain-у как-то при загрузке сборки можно подсунуть другой прямо бинарный кусок раскодированной сборки?
A>Да тут еще выяснилось что нетовское приложение нельзя так просто внешне кодировать, оно после кодирования не запускается У нас конкретно хардлоки и вот никак не могу придумать как сделать так, чтобы часть DLL пропустить через кодировщик хардлока и чтобы в момент загрузки их раскодировать. Это был бы хороший вариант, но боюсь практически не реализуемый. Может AppDomain-у как-то при загрузке сборки можно подсунуть другой прямо бинарный кусок раскодированной сборки?
почему нельзя, можно... В простейшем случае можно просто зашифровать сборку, а в рантайме расшифровывать и загружать ее прямо в памяти, не сохраняя на диск. Вариант посложнее, но зато более устойчивый — криптовать IL код классов, а в рантайме раскриптовывать по мере необходимости и билдить классы прямо в памяти.
Здравствуйте, arkhivania, Вы писали:
A>То есть что можно в нете закодировать так чтобы незаметно для программиста всё реализовать? Понимаю, что вопрос немного туповат, но просто интересно какие есть идеи. Спасибо.
Поинтересуйся в самом Аладдине, что-то для этого они придумывали. Года два-три назад их поддержка была очень даже не плохая .
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали: _FR>Поинтересуйся в самом Аладдине, что-то для этого они придумывали. Года два-три назад их поддержка была очень даже не плохая .
для HASP у них вроде как всё ок и современно, но для старинных Hardlock — только в разделе download немного и 2003 года
Здравствуйте, _Morpheus_, Вы писали: _M_>почему нельзя, можно... В простейшем случае можно просто зашифровать сборку, а в рантайме расшифровывать и загружать ее прямо в памяти, не сохраняя на диск. Вариант посложнее, но зато более устойчивый — криптовать IL код классов, а в рантайме раскриптовывать по мере необходимости и билдить классы прямо в памяти.
Здравствуйте, _Morpheus_, Вы писали: _M_>почему нельзя, можно... В простейшем случае можно просто зашифровать сборку, а в рантайме расшифровывать и загружать ее прямо в памяти, не сохраняя на диск. Вариант посложнее, но зато более устойчивый — криптовать IL код классов, а в рантайме раскриптовывать по мере необходимости и билдить классы прямо в памяти.
А если не сложно, не могли бы примерно ткнуть в сторону чего смотреть чтобы перехватить момент загрузки сборки и подменить её на новую. Я покоцал одну сборку и подключился у AppDomain — а ко всему к чему только можно, но в результате получаю только BadImageException в момент когда идет обращение к сборке. Как же быть? Что же делать? )
Здравствуйте, arkhivania, Вы писали:
A>Здравствуйте, _Morpheus_, Вы писали: _M_>>почему нельзя, можно... В простейшем случае можно просто зашифровать сборку, а в рантайме расшифровывать и загружать ее прямо в памяти, не сохраняя на диск. Вариант посложнее, но зато более устойчивый — криптовать IL код классов, а в рантайме раскриптовывать по мере необходимости и билдить классы прямо в памяти.
A>А если не сложно, не могли бы примерно ткнуть в сторону чего смотреть чтобы перехватить момент загрузки сборки и подменить её на новую. Я покоцал одну сборку и подключился у AppDomain — а ко всему к чему только можно, но в результате получаю только BadImageException в момент когда идет обращение к сборке. Как же быть? Что же делать? )
про перехват разрешения имен не знаю, примитивно можно сделать LoadAssembly из byte[] в памяти