![]() |
|
||||||||||
|
|||||
|
Цитата:
Что имел в виду автор ?Цитата:
Разве это заморочки, как по мне то это пустяки ... есть вещи куда посложнее - настоящие заморочки ![]()
__________________
Краткость - сестра таланта, если она не единственный ребенок в семье |
|
|||||
|
Регистрация: Jul 2004
Адрес: Москва
Сообщений: 28
|
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$ ) |
|
|||||
|
Регистрация: Jul 2004
Адрес: Москва
Сообщений: 28
|
Кстати, о взломах swf... Года четыре назад, когда еще никаких asv, decompiler'ов FLA imperator'ов и впомине не было, я написал редактор для расколбашивания swf-ок, возможности конечно по сравнению со стандартным редактором флеша были довольно скудные, и байт код в чистый исходник он не компилировал, но удалять/добавлять элементы (картинки, шрифт, текст и кривые), а так же менять логику хода скрипта с его помощью можно было. Написал я его по одной простой причине: хотелось персонифицировать manwill'овские поздравительные открыточки, короче удалял я из них логотипы и прочую лабуду и вставлял имя поздравляемого и поздравителя. Писал как счас помню сутки, а персонификация открытки занимала в среднем от 5 до 15 минут.
А с нынешними инструментами расколбасить флешку не сможет разве что закоренелый лентяй. |
|
|||||
|
Цитата:
Цитата:
Уже становицца инетересно... ща подумаю и задам пару вопросов
__________________
Краткость - сестра таланта, если она не единственный ребенок в семье |
|
|||||
|
Угу
я например прежде чем запускать swf регестрировал свою flash.ocx а потом возвращал регистрацию на место. так что палок конечно можно навставлять или swf грузящий другой swf... тогда болванка не пройдет... |
|
|||||
|
Регистрация: Jul 2004
Адрес: Москва
Сообщений: 28
|
Такая болванка, с загрузкой из 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'ом, твоя прожка хрен поймет, что находится под колпаком. И это тоже не ахти какая заморочка ![]() |
|
|||||
|
Ну ты злодей!
ОК, пусть библиотеку ты обернул (stub?). И как теперь обстоят дела со смещениями относительно предпочтительного базового адреса (HINSTANCE) ? Тут мы и поймем (если захотим) что загрузили лажу а не системную библиотеку. Или GetProcAdress ты тоже перепишешь?
__________________
Краткость - сестра таланта, если она не единственный ребенок в семье |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
эхх.. вот если бы кто-нибудь сделал на флэше то что реально стоит ТАК защищать... :))
Последний раз редактировалось Nox Noctis; 22.07.2004 в 17:32. |
|
|||||
|
Ага. А автор вопроса уже наверное думает -"Да ну ее лесом эту защиту, opensource рулит!" )))
__________________
Краткость - сестра таланта, если она не единственный ребенок в семье |
|
|||||
|
Регистрация: Jul 2004
Адрес: Москва
Сообщений: 28
|
Juice, специально для тебя я готов добавить в свою прожку пару строчек когда, чтобы смещения в моем стабе точь в точь соответствовали смещениям в оригинале, и даже пространство между этими функциями могу забить содержимым оригинала, чтобы тебе было приятнее
![]() Можно и getprocaddress хучить, но его же можно тоже обойти, так что только возни больше. А Nox Noctis прав, ничего особливо стоящего, что следовало бы защищать как зеницу ока, на флеше мне пока наблюдать не доводилось |
![]() |
Часовой пояс GMT +4, время: 17:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|