PDA

Просмотр полной версии : работа с реестром


Богданов
19.06.2004, 13:50
Помогите пожалуйста! Надо срочно разобраться, как работать с реестром. Как сделать запись в реестр. Как считать из реестра. :confused: Пробовал через FileSystem v.1.0 (от FlashGuru) Но никак не могу понять как это работает. Как можно работать с реестром. Помогите.

Dindin
19.06.2004, 15:10
FileSystem v.1.0 от FlashGuru - работает c оболочкой разработчика через JSAPI. А не с плеером.

Богданов
19.06.2004, 20:42
Понятно, сейчас всё-таки получилось, если запускать из jsfl - файла, но тогда не понятно - почему не работает
MMExecute('FileSystem.createFolder("file:///1myFolder");' ); ведь MMExecute - функция для запуска jsfl команд, а команды объекта FileSystem такие и есть.

Богданов
24.06.2004, 00:15
Что так таки никто и не знает, возможно ли из Flash (из плеера) работать с реестром: хотя бы читать :)

Nox Noctis
24.06.2004, 00:43
если не обернуть свф какой-нибудь программной оболочкой, то никак. ни читать ни писать - ничего с реестром не сделать. требуется тулза, которая создаёт проектор, умеющий делать операции с реестром, файлами и т п...

Flash Jester Jugglor к примеру всё это умеет. Screenweaver тоже...

xuMuk
24.06.2004, 04:39
Простите за оффтоп.
ТЕ на сколько я понял, Nox Noctis, можно на флэше написать некую "софтину" а-ля "редактор настроек выньДос" и изготовив прожектор с помощью вышеописанных тулзов всё это заработает?

Nox Noctis
24.06.2004, 04:45
именно.

(только смысла в изготовлении "редактора настроек выньДос" таким образом я не вижу если честно :) )

Богданов
24.06.2004, 20:25
Мне нужно защитить свой SWF (обучающий диск) от копирования. Хотел сделать это так:
1. Юзер берёт у меня setup.exe устанавливает к себе на машину.
2. Юзер получает у меня ключ для запуска: запускает программку регистрации (Delphi) получает число (назовём: красный ключ), основанное на его SN диска C:. Юзер отправляет мне красный ключ. Я с помощью своей програмки (назовём: программа Х) получаю из красного ключа другое число (назовём: зелёный ключ) Отправляю Зелёный ключ юзеру.
3. Юзер в программке регистрации вводит :) зелёный ключ, жамкает OK - программка пишет в реестр в ветку11 значение (в одно или несколько мест- чтоб запутать) в котором находится зелёный ключ.
4. При запуске обучающей программы состоящей из SWF, втихаря запускается програмка - аналог моей программки Х, она смотрит SN диска C:, делает красный ключ, потом сама делает зелёный ключ потом пишет в реестр в ветку22 полученное значение. Причём эта програмка запускается каждый раз при запуске диска и затирает ключ, если он уже есть.
5. Флэш (вот здесь я и не знаю :confused: ) сравнивает ветку11 и ветку22, если они разные то закрывает себя. Хотелось бы проверку сделать в самом флэше.
Вот так, посоветуйте, пожалуйста, что нибудь.

Елё
24.06.2004, 20:36
А потом пользователь берёт flash decompiler убирает твою проверку и наслаждается жизнью ;)

Не парься, не поможет

Если проект не слишком комерческий, то это вообще смысл теряет. От совсем дурака который не знает что такое flash decompiler можно защиту и на флэше написать.

Если комерческий то надо защищаться на уровне exe. При этом не самому защиту писать, а воспользоваться существующими оболочками - если ты не спец, все равно лучше не сделаешь.

styx
24.06.2004, 22:59
При запуске обучающей программы состоящей из SWF, втихаря запускается програмка - аналог моей программки Х, она смотрит SN диска C:, делает красный ключ, потом сама делает зелёный ключ потом пишет в реестр в ветку22 полученное значение. Причём эта програмка запускается каждый раз при запуске диска и затирает ключ, если он уже есть.
:mad:
Так делать не надо!

Конечно, пользуйте оболочки и живите спокойно. Против лома нет приёма, а на хлеб минимум с маргарином и так хватит :).

Nox Noctis
25.06.2004, 00:33
хочешь защитить свф - учись разбираться в байткодах.

берём flasm, декомпилируем проект в ассемблер виртуальной машины, делаем макрос этого самого ассемблера в самом фла, причем такой чтобы он ни во что валидное не компилировался, но ошибок при компиляции не давал, после этого апдейтим свф, и живём спокойно - потому что декомпиллеры АС это дело не возьмут. а вот от декомпиляции в ассемблер вирт. машины фл. плеера тебя ничего не спасёт... поэтому умельцы всё равно расковыряют. но на то нужны умельцы. это практически 98% гарантии что никто даже не станет заморачиваться...

xuMuk
25.06.2004, 03:14
Я тут снова с оффтопом...
Так что получается? Пиши на флэше себе в данный момент зловредности и пиши? Ладно activeX. Отключить можно, но флэш...
А вот ч/з "стандартный" flash player можно что-либо "вредное" сделать?

Persival Shuttenbah
25.06.2004, 12:42
Неужели и правда "нет большей радости чем сделать гадость ближнему" :confused: Flash Player сам по себе абсолютно не приспособлен делать ничего вредного или полезного кроме как воспроизведение флэшек.

Dindin
25.06.2004, 12:49
Неужели и правда "нет большей радости чем сделать гадость ближнему" Flash Player сам по себе абсолютно не приспособлен делать ничего вредного или полезного кроме как воспроизведение флэшек.
Ну, положим, навредить можно и пальцем, только зачем?

Богданов
25.06.2004, 19:38
А что такое flash decompiler, это серьёзнее Action Script Viewer 4.01 или нет?
А если я свою уже защищённую флэшку открою в Action Script Viewer 4.01, а потом сохраню в SWF, в виде байткода (есть такая функция в ASW), это обеспечит защиту?
А оболочка сможет "привязать" мой SWF к конкретному компьютеру. Вся задача для меня в том, чтобы юзер скопировав мой SWF с одного компьютера, не смог бы её просмотреть на другом компьютере.

Nox Noctis
25.06.2004, 19:45
если ты сумеешь защититься от прямой декомпиляции, то ты можешь хоть обычням стопом всё закрыть :))

но это для начала надо декомпиляторы побороть. (ASV, FLARE, Sothink (этот заглючить проще всего))...

либо, как было сказано выше, обернуть свф чем-нибудь, что очень осложнит процесс "реверс инженерии" :)

silin
25.06.2004, 21:33
вот поглядите (http://www.as-protect.com/)

Dindin
25.06.2004, 22:37
Да видели уже. Можем даже поделиться стра-а-ашным секретом.

silin
25.06.2004, 22:41
а что такое :eek: ,колись

Dindin
25.06.2004, 23:42
колюсь. Из личного опыта. ASV 12-.ю флэшку всёж-таки разколбасил. "Ага!!"-, сказали суровые сибирские лесорубы...
Хотя, имхо, 91% удачного криптования - совсем неплохой результат.

Богданов
26.06.2004, 22:36
А что значит: "обычным стопом всё закрыть"
Если это защита от импорта, то я обычно на сцену ничего не кладу, а вызываю в кадре.
Если защищать код от декомпиляции, то думаю существующих инструментов достаточно (совершать невозможное - защитить на 100% - нет ни желания, ни амбиций) ;)
Мне только нужно, чтобы флэшка скопированная с одной машины (где она стоит купленная), на другой бы машине не работала.
Если не затруднит киньте примерчиком.

Iv
28.06.2004, 23:40
колюсь. Из личного опыта. ASV 12-.ю флэшку всёж-таки разколбасил. "Ага!!"-, сказали суровые сибирские лесорубы...

- дык эта... на самом деле там сейчас стоит довольно простой алгоритм. демка можно сказать.
а как запустится в коммерческом режиме, результат будет совсем другой.

- а ты 12ю не забыл закрыть? у меня такое случалось... хехе

Богданов
10.07.2004, 23:43
SWF - файл хорошо внедряется в Дельфи проект (через компонент ActiveX), потом его вытащить уже не просто (ASV не находит). А как привязать прогу на Дельфи к компьютеру, большой сложности не вызывает.
Всем спасибо ;)

BrainSmasher
16.07.2004, 12:46
ASV может и не найдет :)) А вот редактор ресурсов (или в крайнем случае IDA) легко и непринужденно выцепит swf и, сохранит его в файло, на которое можно натравить ASV :)
И с реестром морочиться тоже не советую, утилитки типа regmon'а твою защиту покоцают на раз.

juice
17.07.2004, 16:33
ASV может и не найдет ) А вот редактор ресурсов (или в крайнем случае IDA) легко и непринужденно выцепит swf и, сохранит его в файло
Ресурсы упаковываются. Да и кто просит в ресурс кидать оригинал ?

А вообще в ресурс бросать такие штуки это не есть красиво и хорошо - смысла нет. Так или иначе даже тут тебе надо содержимое защитить. Так не проще ли это сделать с внешними файлами? И только твой проэктор знает как воспроизвести (точнее распаковать) эти файлы. Если сам не сможешь так возьмешь уже готовые алгоритмы шифрования, благо их в интернете море. Снять такую защиту смогут только хакеры. Если хочешь и с ними потягаться то пиши защиту исключительно на асме - а это не менее интересное занятие чем взлом.

Богданов
19.07.2004, 22:11
Пробовал вытаскивать редакторами ресурсов - в разделе где форма пишет что флэш, что активикс. А дальше - мульон цифр, которые в файл никак не делает. Полшьзовал res_hacker и resourse explorer. А кто такой IDA?
Да и кто просит в ресурс кидать оригинал ?
А как это не оригинал? Это сделать байт код, потом его зашифровать и спрятать в dll? А как всё это совместить друг с другом.
Если сам не сможешь так возьмешь уже готовые алгоритмы шифрования, благо их в интернете море. Снять такую защиту смогут только хакеры.
Поподробней просвятите, пожалуйста.
Сейчас думаю дополнения делать простыми swf. Но текст скриптов шифровать. И связывать их с Дельфи через fscommand (типа: а есть ли такая переменная - нету, тогда до свидания).
От хакеров смысла нет защищать. Продаю по 150 рублей. Постоянно буду делать обновления. И как всякий обучающий диск, это нужно только заинтересованным лицам :D
И с реестром морочиться тоже не советую, утилитки типа regmon'а твою защиту покоцают на раз.
Меня не беспокоит если кто-нить найдёт куда я пишу ключ. Я его и не прячу. Защиту можно снять только если понять как производится этот ключ. А для этого надо декомпилить exe - шник и искать там откуда берутся эти буковки и цифири. А у чела с такими способностями найдутся более интересные дела. ;)

Dindin
19.07.2004, 22:21
IDA - Interactive Disassembler. Самый рульный из всех.

juice
20.07.2004, 13:03
Что-то я не понял. Задача твоя распространять обучающие ролики в SWF-формате ? А проэктор ты пишешь на Delphi я так понял, и все юзеры комплектуются эти проэктором? Если так то:
Перед тем ка распространять уже готовые ролики :
Пишешь на том же Delphi модуль шифрующий файлы - шифруешь им свои swf используя обычные операции с файлами - CreateFile, CreateFileMapping и т.д. Рекомендую подобные операции (кодирование, большие изменения) производить в виде проэцируемых в память MMF. Сам алгоритм уже дело вкуса или чужой скачай. Это совсем не сложная часть.

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

BrainSmasher
20.07.2004, 13:35
И все равно, не смотря на все эти заморочки с шифрованием, последнее слово за flash.ocx, подменив который на простейшую болвань, сваянную в том же Delphi за 15 минут, аналогичного названия и гуида, можно прекрасно сохранить Ваши драгоценные swf куда угодно в удобочитаемом виде :)
А вообще эктивх и библиотеки типов в частности - гениальнейшие подспорья в расколбашивании :)

BrainSmasher
20.07.2004, 13:47
Да и еще по поводу более интересных дел,
которыми занимаются люди со способностями... Не стоит заблуждаться, ибо в этом мире все взаимосвязано, и у многих, которые сами и не обладают этими способностями, есть знакомые, которые этими способностями обладают, и которым разобраться с этой защитой не составит особого труда.
По поводу цены, хотя она и играет важную роль, но никого это особенно не останавливает, взять тот же регет, который официально купить можно за 200 руб, однако спустя неделю после появления на их сайте новой версии, на ломалке уже лежят кряки к ней.
Так что делайте выводы сами.

juice
20.07.2004, 18:30
А вообще эктивх и библиотеки типов в частности - гениальнейшие подспорья в расколбашивании
:) Что имел в виду автор ?

И все равно, не смотря на все эти заморочки с шифрованием, последнее слово за flash.ocx, подменив который на простейшую болвань, сваянную в том же Delphi за 15 минут, аналогичного названия и гуида, можно прекрасно сохранить Ваши драгоценные swf куда угодно в удобочитаемом виде
Ага, а можно еще перехват АПИ-вызовов организовать, и т.д. )
Разве это заморочки, как по мне то это пустяки ... есть вещи куда посложнее - настоящие заморочки :cool:

BrainSmasher
20.07.2004, 22:56
Juice, не знаешь не говори... для перехвата API вызовов давным давно уже созданы специальные утилиты типа apispy и никаких заморочек это не вызывает. Надеюсь набрать одно слово в гугле и сделать несколько кликов мышой не слишком большая заморочка?
А относительно type library это фактически дока по тому, какая функциональность заложена в com-компоненте и где эта функциональность расположена :) У обычных dll есть таблица экпорта, но в ней указываются только имена функций (и то не всегда, т.к. функции могут экспортироваться по ординалам) и нет никакой инфы о передаваемых в эту функцию параметрах, а в type library вся эта инфа есть и кол-во параметров и их тип и даже их имена, что облегачает понимание во много раз. Кроме того, tlb прекрасно выдирается из ocx и на его базе в delphi автоматически генерится модуль с описаловом всех интерфейсов и классов, остается лишь дописать 10-20 строчек примитивного кода и вот тебе заглушка с теми же интерфейсами, что и flash.ocx,
которую можно пихать вместо flash.ocх куда угодно.

Для пущего понимания приведу дельфишное описание основного интерфейса flash.ocx

IShockwaveFlash = interface(IDispatch)
['{D27CDB6C-AE6D-11CF-96B8-444553540000}']
function Get_ReadyState: Integer; safecall;
function Get_TotalFrames: Integer; safecall;
function Get_Playing: WordBool; safecall;
procedure Set_Playing(pVal: WordBool); safecall;
function Get_Quality: SYSINT; safecall;
procedure Set_Quality(pVal: SYSINT); safecall;
function Get_ScaleMode: SYSINT; safecall;
procedure Set_ScaleMode(pVal: SYSINT); safecall;
function Get_AlignMode: SYSINT; safecall;
procedure Set_AlignMode(pVal: SYSINT); safecall;
function Get_BackgroundColor: Integer; safecall;
procedure Set_BackgroundColor(pVal: Integer); safecall;
function Get_Loop: WordBool; safecall;
procedure Set_Loop(pVal: WordBool); safecall;
function Get_Movie: WideString; safecall;
procedure Set_Movie(const pVal: WideString); safecall;
function Get_FrameNum: Integer; safecall;
procedure Set_FrameNum(pVal: Integer); safecall;
procedure SetZoomRect(left: Integer; top: Integer; right: Integer; bottom: Integer); safecall;
procedure Zoom(factor: SYSINT); safecall;
procedure Pan(x: Integer; y: Integer; mode: SYSINT); safecall;
procedure Play; safecall;
procedure Stop; safecall;
procedure Back; safecall;
procedure Forward; safecall;
procedure Rewind; safecall;
procedure StopPlay; safecall;
procedure GotoFrame(FrameNum: Integer); safecall;
function CurrentFrame: Integer; safecall;
function IsPlaying: WordBool; safecall;
function PercentLoaded: Integer; safecall;
function FrameLoaded(FrameNum: Integer): WordBool; safecall;
function FlashVersion: Integer; safecall;
function Get_WMode: WideString; safecall;
procedure Set_WMode(const pVal: WideString); safecall;
function Get_SAlign: WideString; safecall;
procedure Set_SAlign(const pVal: WideString); safecall;
function Get_Menu: WordBool; safecall;
procedure Set_Menu(pVal: WordBool); safecall;
function Get_Base: WideString; safecall;
procedure Set_Base(const pVal: WideString); safecall;
function Get_Scale: WideString; safecall;
procedure Set_Scale(const pVal: WideString); safecall;
function Get_DeviceFont: WordBool; safecall;
procedure Set_DeviceFont(pVal: WordBool); safecall;
function Get_EmbedMovie: WordBool; safecall;
procedure Set_EmbedMovie(pVal: WordBool); safecall;
function Get_BGColor: WideString; safecall;
procedure Set_BGColor(const pVal: WideString); safecall;
function Get_Quality2: WideString; safecall;
procedure Set_Quality2(const pVal: WideString); safecall;
procedure LoadMovie(layer: SYSINT; const url: WideString); safecall;
procedure TGotoFrame(const target: WideString; FrameNum: Integer); safecall;
procedure TGotoLabel(const target: WideString; const label_: WideString); safecall;
function TCurrentFrame(const target: WideString): Integer; safecall;
function TCurrentLabel(const target: WideString): WideString; safecall;
procedure TPlay(const target: WideString); safecall;
procedure TStopPlay(const target: WideString); safecall;
procedure SetVariable(const name: WideString; const value: WideString); safecall;
function GetVariable(const name: WideString): WideString; safecall;
procedure TSetProperty(const target: WideString; property_: SYSINT; const value: WideString); safecall;
function TGetProperty(const target: WideString; property_: SYSINT): WideString; safecall;
procedure TCallFrame(const target: WideString; FrameNum: SYSINT); safecall;
procedure TCallLabel(const target: WideString; const label_: WideString); safecall;
procedure TSetPropertyNum(const target: WideString; property_: SYSINT; value: Double); safecall;
function TGetPropertyNum(const target: WideString; property_: SYSINT): Double; safecall;
function TGetPropertyAsNumber(const target: WideString; property_: SYSINT): Double; safecall;
function Get_SWRemote: WideString; safecall;
procedure Set_SWRemote(const pVal: WideString); safecall;
function Get_FlashVars: WideString; safecall;
procedure Set_FlashVars(const pVal: WideString); safecall;
function Get_AllowScriptAccess: WideString; safecall;
procedure Set_AllowScriptAccess(const pVal: WideString); safecall;
function Get_MovieData: WideString; safecall;
procedure Set_MovieData(const pVal: WideString); safecall;
property ReadyState: Integer read Get_ReadyState;
property TotalFrames: Integer read Get_TotalFrames;
property Playing: WordBool read Get_Playing write Set_Playing;
property Quality: SYSINT read Get_Quality write Set_Quality;
property ScaleMode: SYSINT read Get_ScaleMode write Set_ScaleMode;
property AlignMode: SYSINT read Get_AlignMode write Set_AlignMode;
property BackgroundColor: Integer read Get_BackgroundColor write Set_BackgroundColor;
property Loop: WordBool read Get_Loop write Set_Loop;
property Movie: WideString read Get_Movie write Set_Movie;
property FrameNum: Integer read Get_FrameNum write Set_FrameNum;
property WMode: WideString read Get_WMode write Set_WMode;
property SAlign: WideString read Get_SAlign write Set_SAlign;
property Menu: WordBool read Get_Menu write Set_Menu;
property Base: WideString read Get_Base write Set_Base;
property Scale: WideString read Get_Scale write Set_Scale;
property DeviceFont: WordBool read Get_DeviceFont write Set_DeviceFont;
property EmbedMovie: WordBool read Get_EmbedMovie write Set_EmbedMovie;
property BGColor: WideString read Get_BGColor write Set_BGColor;
property Quality2: WideString read Get_Quality2 write Set_Quality2;
property SWRemote: WideString read Get_SWRemote write Set_SWRemote;
property FlashVars: WideString read Get_FlashVars write Set_FlashVars;
property AllowScriptAccess: WideString read Get_AllowScriptAccess write Set_AllowScriptAccess;
property MovieData: WideString read Get_MovieData write Set_MovieData;
end;


Названия функций и свойств в пояснениях практически не нуждаются, да здравствует M$ :))

BrainSmasher
20.07.2004, 23:11
Кстати, о взломах swf... Года четыре назад, когда еще никаких asv, decompiler'ов FLA imperator'ов и впомине не было, я написал редактор для расколбашивания swf-ок, возможности конечно по сравнению со стандартным редактором флеша были довольно скудные, и байт код в чистый исходник он не компилировал, но удалять/добавлять элементы (картинки, шрифт, текст и кривые), а так же менять логику хода скрипта с его помощью можно было. Написал я его по одной простой причине: хотелось персонифицировать manwill'овские поздравительные открыточки, короче удалял я из них логотипы и прочую лабуду и вставлял имя поздравляемого и поздравителя. Писал как счас помню сутки, а персонификация открытки занимала в среднем от 5 до 15 минут.
А с нынешними инструментами расколбасить флешку не сможет разве что закоренелый лентяй.

juice
20.07.2004, 23:15
Juice, не знаешь не говори... для перехвата API вызовов давным давно уже созданы специальные утилиты типа apispy и никаких заморочек это не вызывает.
Сори, но я это заморочкой тоже не считаю. Кстати, от перехвата оже защита существует - и ApiSpy-подобным ее не взять.
выдирается из ocx и на его базе в delphi автоматически генерится модуль с описаловом всех интерфейсов и классов, остается лишь дописать 10-20 строчек примитивного кода и вот тебе заглушка с теми же интерфейсами, что и flash.ocx,
Но ведь можно установить подлинность flash.ocx ?
Уже становицца инетересно... ща подумаю и задам пару вопросов

Елё
20.07.2004, 23:28
Угу
я например прежде чем запускать swf регестрировал свою flash.ocx а потом возвращал регистрацию на место.

так что палок конечно можно навставлять

или swf грузящий другой swf... тогда болванка не пройдет...

BrainSmasher
21.07.2004, 12:03
Такая болванка, с загрузкой из swf действительно не пройдет, но скорее всего тогда и не пройдут методы шифрования загружаемого swf :)
НО! Загрузка swf производится с помощью функциевины loadmovie, которая, как ты обратил внимание, присутствует в приведенном мной интерфейсе. Так вот, берем оригинальный flash.ocx, элементарно находим в нем точку входа в loadmovie и вставляем вместо нее что-то типа CreateFile... Writefile ... CloseHandle. Усе, приехали, шеф!

Проверки на контрольные суммы конечно затруднят работу, но уверяю не намного, поскольку ocx можно подменять непосредственно перед запуском, т.е. когда все проверки уже пройдены ибо делается это вызовом стандартных API виндовз.
Кроме того, эти проверки элементарно находятся и обезвреживаются: один бряк на чтение памяти в области flash.ocх и вот мы уже в проверке, три-четыре нопа и проверки уже нет :)

2 Juice, а какие конкретно средства защиты от APISpy ты имел ввиду?
Если уж на то пошло, у меня есть программулина собственного сочинения, которая из любой dll за 5 секунд делает ее stub и, если отключить в win2k XP sfc, и заменить системную dll stub'ом, твоя прожка хрен поймет, что находится под колпаком.
И это тоже не ахти какая заморочка ;)

juice
22.07.2004, 17:17
Ну ты злодей!
ОК, пусть библиотеку ты обернул (stub?). И как теперь обстоят дела со смещениями относительно предпочтительного базового адреса (HINSTANCE) ? Тут мы и поймем (если захотим) что загрузили лажу а не системную библиотеку. Или GetProcAdress ты тоже перепишешь?

Nox Noctis
22.07.2004, 17:26
эхх.. вот если бы кто-нибудь сделал на флэше то что реально стоит ТАК защищать... :))

juice
22.07.2004, 22:27
Ага. А автор вопроса уже наверное думает -"Да ну ее лесом эту защиту, opensource рулит!" )))

BrainSmasher
23.07.2004, 17:50
Juice, специально для тебя я готов добавить в свою прожку пару строчек когда, чтобы смещения в моем стабе точь в точь соответствовали смещениям в оригинале, и даже пространство между этими функциями могу забить содержимым оригинала, чтобы тебе было приятнее ;)

Можно и getprocaddress хучить, но его же можно тоже обойти, так что только возни больше.

А Nox Noctis прав, ничего особливо стоящего, что следовало бы защищать как зеницу ока, на флеше мне пока наблюдать не доводилось

juice
23.07.2004, 18:07
Конечно все можно поломать, как и не существует идеального замка. Я бы в данном случае кроме всего ниже-сказаного распространял свою flash.ocx и все... И не заморачивался ;)

BrainSmasher, Ленин завещал делиться! Позволь мне увидеть своими руками столь замечательное творение :)

BrainSmasher
28.07.2004, 11:21
Я, конечно, не последователь заветов Ильича, но для хорошего человека не жалко.
Короче, лежит тут http://user.rol.ru/~fudzy/stubdll.exe

P.S. Выравнивание адресов в стабе по оригинальным rva функций я приделал, но это в своем роде полумера, для более малозаметного стаббинга надо патчить оригинальную DLL (чтобы сохранить как есть ресурсы, фиксапы, дебаг инфу и прочее прочее). Соответствующие галочки я на будущее в интерфейсе пририсовал, но со временем летом напряжно, так что когда реализую точно сейчас не скажу.

juice
28.07.2004, 15:40
tnks!