eXeL@B —› Программирование —› Как подменить байты при проигравании видео файлов |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 31 августа 2008 08:45 · Личное сообщение · #1 |
|
Создано: 31 августа 2008 09:02 · Личное сообщение · #2 |
|
Создано: 31 августа 2008 09:21 · Личное сообщение · #3 Суть в том, что без спросу копируют файлы. Я там заранее подменил несколько байтов, чтобы нельзя было воспроизвести файл никаким плеером. При загрузке в мой видео плеер, я хочу под вернуть эти байты на место, есть конечно вариант каждый раз переписывать файл, но это не нравится. Хотелось бы в память загрузить и там подменить байты, а потом уже загрузить в видео плеер. |
|
Создано: 31 августа 2008 09:38 · Личное сообщение · #4 |
|
Создано: 31 августа 2008 09:41 · Личное сообщение · #5 |
|
Создано: 31 августа 2008 10:09 · Личное сообщение · #6 |
|
Создано: 31 августа 2008 10:15 · Личное сообщение · #7 |
|
Создано: 31 августа 2008 10:37 · Личное сообщение · #8 |
|
Создано: 31 августа 2008 10:47 · Поправил: x-code · Личное сообщение · #9 Tim пишет: наверняка свой плеер - это какой-нибудь готовый компонент? поэтому и вопросы такие... А что проблемы какие-то с компонентами? Нельзя использовать компоненты? Форум для этого и существует чтобы задавать вопросы. Я так и не понял к чему твой вопрос, только для поднятия ранга? Лучше бы помог с вопросом. Не все такие умные как ты. YDS спасибо! |
|
Создано: 31 августа 2008 12:04 · Личное сообщение · #10 x-code, у такого варианта есть несколько подводных камней: 1) Забивать нужно весь header, так как иначе этот порченый поток просто пропустят через VirtualDub и получат воспроизводимый файл. 2) Чуть более продвинутый пользователь сможет исправить заголовок вручную и сделать универсальный патч. Даже реверсить плеер не придётся |
|
Создано: 31 августа 2008 12:15 · Личное сообщение · #11 x-code не хотел никого обижать! просто имел в виду, что когда используется компонент, то контроля над данными почти нет. я так понимаю, проект пишется на дельфи. можешь взять advApiHook библиотеку от Ms-Rem и перехватить ReadFile. прямо в коде своего плеера. затем в функции-заглушке сделать подмену или вызвать настоящий ReadFile. общий принцип такой. если что-то не ясно, пиши, здесь помогут. ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 31 августа 2008 12:47 · Личное сообщение · #12 |
|
Создано: 31 августа 2008 12:52 · Личное сообщение · #13 |
|
Создано: 31 августа 2008 12:56 · Личное сообщение · #14 |
|
Создано: 31 августа 2008 13:29 · Личное сообщение · #15 |
|
Создано: 31 августа 2008 15:26 · Личное сообщение · #16 |
|
Создано: 31 августа 2008 18:30 · Личное сообщение · #17 Вот как я вижу решение, вкратце: получаем адрес функции, которая файл читает, при помощи VirtualProtect меняем атрибуты страницы памяти (запись разрешаем), записываем поверх оригинального кода апи свой, который будет исправлять файл. Ну, или делаем так, как YDS сказал, что ещё проще. ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. |
|
Создано: 31 августа 2008 18:34 · Личное сообщение · #18 |
|
Создано: 31 августа 2008 18:57 · Личное сообщение · #19 x-code не могу пока для дельфи пример написать - нет времени вот из своего проекта вырезал код: typedef HANDLE WINAPI (*CREATEFILEA)(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); CREATEFILEA __CreateFileA; HANDLE WINAPI _CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { return __CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); } здесь сначала описание функции-переходника идет. это моя функция. все что она пока делает - запускает настоящую системную. а вот как делается перехват: HookProc("kernel32.dll", "CreateFileA", (void *)_CreateFileA, (void *)__CreateFileA); естественно, тебе вряд ли нужна CreateFile. я бы лучше взял ReadFile и из своей функции переходника следил за тем, что считывается. по хэндлу можно определить имя файла - если твой, значит смотреть какой диапазон считывается, и если в этом диапазоне есть байты, которые необходимо заменить - тогда читаешь данные настоящей функцией и изменяешь их в памяти. ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 31 августа 2008 19:13 · Личное сообщение · #20 |
|
Создано: 04 сентября 2008 20:12 · Личное сообщение · #21 |
|
Создано: 05 сентября 2008 09:04 · Личное сообщение · #22 |
|
Создано: 05 сентября 2008 09:17 · Личное сообщение · #23 x-code судя по тому как тут всё разжевали и после этого x-code пишет: пока еще не получается , то врядли вообще получится без написания готового кода. Лучше закинь тому же Timу несколько WMZ за готовую реализацию, чем раздувать топик избитыми истенами, которые кстати уже описывались везде где только можно, на васме даже циклы статей есть. ----- Yann Tiersen best and do not fuck |
|
Создано: 05 сентября 2008 09:39 · Поправил: x-code · Личное сообщение · #24 PE_Kill пишет: x-code судя по тому как тут всё разжевали Вы все тут умные как я посмотрю, пару фраз кинули и все типа ответили. Конкретно где обсуждались, скинь ссылки. PE_Kill Я уже столько ссылок перелазил, там кроме слов типа уже описывались везде где только можно, на васме даже циклы статей есть. ничего нет И к тому же я сказал что подбираю варианты, какой более подойдет тот и буду использовать. |
|
Создано: 05 сентября 2008 12:08 · Личное сообщение · #25 x-code пишет: Вы все тут умные как я посмотрю, пару фраз кинули и все типа ответили. Ууу, а нам надо диссертацию? Так и быть поучу юзать google. Берем пост тима. Tim пишет: можешь взять advApiHook библиотеку от Ms-Rem и перехватить ReadFile. прямо в коде своего плеера. затем в функции-заглушке сделать подмену или вызвать настоящий ReadFile. общий принцип такой. Вбиваем в гугле advApiHook и сразу попадаем на несколько форумов, включая васм. Там и примерчики и теория и исходники и инструменты. Нельзя же быть настолько ленивым. x-code пишет: И к тому же я сказал что подбираю варианты Тогда пиши что уже сделал и почему такой то вариант не подходит, пока от тебя тут ничего нет, только просьба написать примерчики. На этом форуме такое не проканает. ----- Yann Tiersen best and do not fuck |
|
Создано: 05 сентября 2008 13:07 · Личное сообщение · #26 x-code Суть в том, что без спросу копируют файлы. У кого воруют? у тебя на компе?, за твоим компом десять человек работает? ограничь доступ к своему компу. Воруют когда ты на сторону для просмотра отдаешь? тогда и с твоим плейером и подменами байтов Camtasia Studio справится без труда и опять скопируют/своруют. Или надо принципиально написать плейер, чтоб было. Отдаешь на сторону видео, зарарь его с паролем, после оплаты работы по телефону пароль скажешь, а так просто превьюху предоставляй заказчику. |
|
Создано: 05 сентября 2008 14:18 · Поправил: Crawler · Личное сообщение · #27 Гыгы =) придется разжевать, раз уж никто не хочет мучить свой мозг такой простой задачей. Типа маленькое руководство, как сделать из обычного мп3-плеера проигрыватель зашифрованных файлов, ну, или файлов с подмененными байтами . За видеоплеер я не взялся, ибо они большие, хотя суть та же самая, но маленький mp3-плеер 1by1 я покопал. На примере плеера 1by1 объясняю, очень простой пример, мы будем шифровать файл, неважно, каким способом, и потом байты на лету перекодировать обратно прямо в модифицированной функции ReadFile, или не в ней самой, а сразу после её выполнения перейдем на собственный код, который будет править буфер, юзанный этой функцией, что более логично. Итак, открываем плеер под отладчиком, ставим брекпойнт на ReadFile и запускаем программу. Далее - пробуем какой-нибудь файл запустить на проигрывание. Естественно, сработает брекпойнт. По адресу 0040F033. Смотрим, какие параметры передаются перед вызовом ReadFile: Code:
Лезем в MSDN и видим, что передается структура: Code:
Естественно, все в обратном порядке, так как это стек =) Что мы тут видим? Читаем 128 байт, которые запихиваются по адресу 0043с610. В окошке hex - дампа жмем ctrl+g и идем по этому адресу. Что мы там видим? Видим считанный набор ID3-тегов, или что-то такое, я хз, не в этом суть ))). Естественно, если мы зашифруем весь файл, нам необходимо будет вставить расшифровку блока прямо в ReadFile. Как это сделать? Первый приходящий в голову (но от этого не самый лучший) вариант - перебазировать ReadFile на другой адрес, например, прямо в тело PE, предварительно вшив в код простой декодировщик (ну или, например, заменитель байт), после чего подменить все вызовы ReadFile на переход на модифицированную функцию. Можно, конечно, и прыжок по адресу 0041f5c4 подменить, что проще будет, чем все вызовы править. Но мы не будем так делать, ибо это ну очень гемморойно, мы просто посмотрим, куда можно впихнуть наш код после того уже, как кусок файла будет прочитан в буфер. Начинаем отлаживать ReadFile с заходом и смотреть, где и что подменять нужно, в зависимости от алгоритма правки файла. Доходим до места 7с802511 и видим, что это - самое удобное место для правки нашего хозяйства, ибо в стеке лежат адрес нашего буфера, куда кусок файла читается, и размер этого самого буфера: ebp +1c - размер буфера; ebp+c - адрес буфера Смотрим адрес возврата в стеке, он равен 7с801898. Так как данные считаны, а под адресом 7с802511 есть нопы, мы вставим туда переход на наш код =) Естественно, перед этим убиваем RET, который располагается по адресу 7с802511, мы потом еще его заюзаем в собственном коде. Можно вставить наш код куда угодно, туда, где ничего нет, например, в область выравнивания, где нолики =) Итак, пишем вот что: 7с802511 jmp адрес_где_будет_код Выполняем этот переход и пишем туда свой код, с возвратом последующим по адресу 7с801898. Если до сих пор не понятно, я через некоторое время дофаршмачу код и выложу готовый вариант =) Конечно, проигрывание обычных файлов (незашифрованных) в таком случае резко обламывается, но у нас цель - получить проигрыватель для защищенных файлов, а остальное нас ниипёт ни разу. Только это всё извращения, и лучше закодить на Си =) ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. |
|
Создано: 05 сентября 2008 15:09 · Личное сообщение · #28 |
|
Создано: 05 сентября 2008 15:15 · Личное сообщение · #29 Вот материал по теме, довольно интересный, мб чем-то поможет. Хотя это всё настолько неактуально, воровство мм-контента в таком случае возможно простым снятием видео с экрана тем же SnagIt-ом, если дополнительно не защитить файл. www.xakep.ru/post/30364/default.asp?print=true ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. |
|
Создано: 05 сентября 2008 15:24 · Поправил: x-code · Личное сообщение · #30 Crawler пишет: http://www.xakep.ru/post/30364/default.asp?print=true http://www.xakep.ru/post/30364/default.asp?print=true Я уже с этим материалом ознакомлен давно, в принципе нормальный материал. Но дело в том что там каждый раз происходит копирование и переписывание. Это мне не нравится. У меня на подобие этой статьи есть уже плеер. Спасибо еще раз. |
. 1 . 2 . >> |
eXeL@B —› Программирование —› Как подменить байты при проигравании видео файлов |