Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 20.07.2004, 18:30
juice вне форума Посмотреть профиль Отправить личное сообщение для juice Найти все сообщения от juice
  № 31  
juice
 
Аватар для juice

Регистрация: Jan 2004
Адрес: Украина, Киев
Сообщений: 179
Отправить сообщение для juice с помощью ICQ
Цитата:
А вообще эктивх и библиотеки типов в частности - гениальнейшие подспорья в расколбашивании
Что имел в виду автор ?

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

Старый 20.07.2004, 22:56
BrainSmasher вне форума Посмотреть профиль Отправить личное сообщение для BrainSmasher Найти все сообщения от BrainSmasher
  № 32  
BrainSmasher

Регистрация: 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$ )

Старый 20.07.2004, 23:11
BrainSmasher вне форума Посмотреть профиль Отправить личное сообщение для BrainSmasher Найти все сообщения от BrainSmasher
  № 33  
BrainSmasher

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

Старый 20.07.2004, 23:15
juice вне форума Посмотреть профиль Отправить личное сообщение для juice Найти все сообщения от juice
  № 34  
juice
 
Аватар для juice

Регистрация: Jan 2004
Адрес: Украина, Киев
Сообщений: 179
Отправить сообщение для juice с помощью ICQ
По умолчанию Уже становицца инетересно...

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

Старый 20.07.2004, 23:28
Елё вне форума Посмотреть профиль Отправить личное сообщение для Елё Посетить домашнюю страницу Елё Найти все сообщения от Елё
  № 35  
Елё
 
Аватар для Елё

Регистрация: Jun 2002
Адрес: Москва
Сообщений: 287
Отправить сообщение для Елё с помощью Skype™
Угу
я например прежде чем запускать swf регестрировал свою flash.ocx а потом возвращал регистрацию на место.

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

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

Старый 21.07.2004, 12:03
BrainSmasher вне форума Посмотреть профиль Отправить личное сообщение для BrainSmasher Найти все сообщения от BrainSmasher
  № 36  
BrainSmasher

Регистрация: 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'ом, твоя прожка хрен поймет, что находится под колпаком.
И это тоже не ахти какая заморочка

Старый 22.07.2004, 17:17
juice вне форума Посмотреть профиль Отправить личное сообщение для juice Найти все сообщения от juice
  № 37  
juice
 
Аватар для juice

Регистрация: Jan 2004
Адрес: Украина, Киев
Сообщений: 179
Отправить сообщение для juice с помощью ICQ
Ну ты злодей!
ОК, пусть библиотеку ты обернул (stub?). И как теперь обстоят дела со смещениями относительно предпочтительного базового адреса (HINSTANCE) ? Тут мы и поймем (если захотим) что загрузили лажу а не системную библиотеку. Или GetProcAdress ты тоже перепишешь?
__________________
Краткость - сестра таланта, если она не единственный ребенок в семье

Старый 22.07.2004, 17:26
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 38  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
эхх.. вот если бы кто-нибудь сделал на флэше то что реально стоит ТАК защищать... :))


Последний раз редактировалось Nox Noctis; 22.07.2004 в 17:32.
Старый 22.07.2004, 22:27
juice вне форума Посмотреть профиль Отправить личное сообщение для juice Найти все сообщения от juice
  № 39  
juice
 
Аватар для juice

Регистрация: Jan 2004
Адрес: Украина, Киев
Сообщений: 179
Отправить сообщение для juice с помощью ICQ
Ага. А автор вопроса уже наверное думает -"Да ну ее лесом эту защиту, opensource рулит!" )))
__________________
Краткость - сестра таланта, если она не единственный ребенок в семье

Старый 23.07.2004, 17:50
BrainSmasher вне форума Посмотреть профиль Отправить личное сообщение для BrainSmasher Найти все сообщения от BrainSmasher
  № 40  
BrainSmasher

Регистрация: Jul 2004
Адрес: Москва
Сообщений: 28
Juice, специально для тебя я готов добавить в свою прожку пару строчек когда, чтобы смещения в моем стабе точь в точь соответствовали смещениям в оригинале, и даже пространство между этими функциями могу забить содержимым оригинала, чтобы тебе было приятнее

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

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

Создать новую тему   Часовой пояс GMT +4, время: 17:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:30.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.