Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Взлом программ] >> Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878
Имя
Сообщение << Старые топики   Новые топики >>
Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878 - 2007-03-04 01:24:36.690000   
ЫгЫ

Сообщений: 4
Оценки: 0
Присоединился: 2007-03-04 00:36:18.236666
Вот была у меня одна проблемма и вот какое решение я ей нашел.Вобщем читаем,пробуем критикуем.Может у кого тоже есть такой трабл)
***Сразу поясню что надо помнить что адресса API функций на каждом компе разные, так что учитывайте это когда будете повторять ниже описанное.
***Данный метод применим к любым ТВ тюнерам (и вообще всему связаному с компом и програмированием) - надо ток немного изменить логику.
***И добавлю что я не спец в Хаке и програмированнии, просто я пользуюсь тем что мне нужно в данный момент.
Вобщем вот статья:
-
Наверняка у кого то еще есть такой ТВ-Тюнер как Jetway на чипе BT878.
Вот и у меня он есть.Впринципе хорошая штука с хорошим потенциалом, но стандартная прога для уравления при помощи ПДУ просто ужос! Работает ток с родной прогой для просмотра тв.
И вот в один прекрасный день мне это надоело.
Итак цель - Сделать так чтоб пультом можно было управлять любой программой и вообще програмировать его как хочешь.
Для переделки нам понадобиться OllyDBG и любой компилятор на любом языке - я выбрал дельфи7 так как для етой цели он более подходящий нежели другие языки,потому что прост и удобная среда.
****
Часть первая : Изучение алгоритма.
****
За работу пульта ДУ отвечает программа C7XRCtl.exe она стартует вместе с виндой и перехватывает все сообщения от ТВ тюнера и ИК приемника соответственно.И потом уже после фильтрует сообщение Тюнера и либо убавляет громкость либо переключает каналы и т.д
Берем C7XRCtl.exe и открываем его в OllyDBG.После того как OLLY (далее просто олька) проанализирует файл запускаем его при помощи CTRL+F8 пусть она пошагово выполняется без захода ы процедурры.Заоодно пока она запускаеться смотрим в стек и на регистры.
И вот она дошла до определенного call и прога теперь работает. Главной задачей для нас теперь будет найти то место куда ставить бряк (Точка останова - если программа дойдет до нее то программа остановиться)Немного поразмыслив ставим бряк на SetCurPos потомучть эта функция работает всегда даже без запуска проги для просмотра телика. SetCursorPos отвечает за перемещение указателя мышки когда мы на пульте жмем 2,4,6,8.
Как ставим бряк.Переходим в окно где дизасемблерный листинг , щелкаем правой кнопочкой, выбираем пункт SEARCH,и там выбираем All Intermodular Call . - Таким образом мы найдем Все обращения программы к API . да SetCursorPos это WinAPI ))).
После нескольких секунд раздумий олька выдаст нам целый список этих самых Апи вызовов. Теперь ищем там SetCursorPos и на всех таких вызовах ставим бряк -Нажимаем F2 - это поставить бряк.
Что имеем - Тепрь программа остановиться перед вызовом процедуры перемещения курсора ))) то что нужно. Таким образом проще будет найти процедуру обработки сообщений тв тюнера.
Короче запускаем прогу опять и жмем на пульте ДУ кнопочку 2 - переместить курсор вверх.
Опачки появилась олька как раз перед вызовом той самой SetCursorPos )))) можно сказать дело сделано )))
Код Вызова SetCursorPos:
/——————-
/*40517E*/ PUSH EAX
/*40517F*/ PUSH ECX
/*405180*/ CALL DWORD PTR DS:[<&USER32.SetCursorPos>] *****Вот он тот самый SetCursorPos )))
/*405186*/ ADD ESP,8
\——————–
*
Теперь смотрим что было перед этой командой…Олька нам специально выделила всю Эту процедуру поставив слева огромную *скобку* .Смотрим в то место откуда начинаеться данная процедура.
У меня она выглядит вот так
****
004050D0–/$ MOV EAX,DWORD PTR DS:[40B0E0]
004050D5–|. SUB ESP,8
004050D8–|. INC EAX
004050D9–|. CMP EAX,5
004050DC–|. PUSH ESI
004050DD–|. MOV DWORD PTR DS:[40B0E0],EAX
004050E2–|. JGE SHORT C7XRCtl.004050EB
****
Вот как раз там где стоит знак $ ето и есть начало процедуры.выделяем ее видим под дизасемблированным листингом в окне которое показывает разную информацию о регистрах,переходах и вызовах вот это
***
[0040B0E0]=00000000
Local call from 00404F62
***
Local call from 00404F62 Это то место откуда мы попали в процедуру SetCursorPos.Переходим к адресу 00404F62 (Для етого жмем CTRL+G и в окошке пишем этот адресс)
И так теперь мы оказались еще в какойто процедуре идем к началу процедуры это у нас будет
****
00404F40 /$ MOV EAX,DWORD PTR SS:[ESP+4]
00404F44 |. SUB ESP,8
00404F47 |. CMP EAX,0A ;Switch (cases 0..A)
00404F4A |. PUSH ESI
00404F4B |. PUSH EDI
00404F4C |. JA C7XRCtl.004050AE
***
Как несложно догадаться знак $ это практически всегда начало процедурры в ольке.Она специально его ставит после анализа.И опять же выделяем ету строку с $ и видим внизу Local call from 004044B8 и опять же идем к этому адресу.
Тут мы попадаем в огромную процедуру и олька к сожалению не выделила нам ее скобкой поэтому просто листаем вверх пока не найдем череду nop или еще какого нить бреда.
После небольшой мозголомки мы приходим к началу процедуры:
***
0040414C NOP
0040414D NOP
0040414E NOP
0040414F NOP
00404150 .51 53 55 56 57 68 00 ASCII "QSUVWh",0
00404157 DB 02
00404158 DB 00
00404159 DB 00
0040415A CALL C7XRCtl.00401530 ___*$*
0040415F AND EAX,7F00
00404164 ADD ESP,4
00404167 TEST AH,40
0040416A JNZ C7XRCtl.004046BC
00404170 MOV ECX,DWORD PTR DS:[40B114]
00404176 XOR EBX,EBX
00404178 SHR EAX,8
0040417B CMP ECX,EBX
0040417D JNZ SHORT C7XRCtl.00404188
***
Тут она у нас начинаеться с адреса 0040415A я ее пометил $.Теперь снимаем все бряки и ставим один бряк вот именно по этому адрессу 0040415A Просто выделяем и жмем F2.
Теперь запускаем прогу и она у нас тормозит на нашем новом бряке.Запускаем опять и опять останавлиется прога.Видать она циклически вызываеться поэтому поставим бряк после условного перехода JNZ C7XRCtl.004046BC по адресу 00404170 таким образом мы избавляемся от ложных остановок.Предыдущий бряк снимаем))) И запускаем прогу.И так она она у нас работает и не останавливаеться.Теперь нажмем на пульте любую кнопку.Опа!!! Остановилась прога на нашем бряке 00404170 MOV ECX,DWORD PTR DS:[40B114] как раз после того самого перехода.запускаем прогу опять и жмем другую кнопку на пульте.Прога опять остановилась.Таким образом мы нашли то место где начинаеться обработка сообщений от ТВ тюнера)))
Немного поэкспериментировав мы замечаем что код нажатой кнопки на пульте находиться в регистре EAX а точне в AX после того как прога останавливается.
Теперь есть два пути для решения нашей проблеммы.Напомню мы хотим чтоб пульт работал так как мы хотим и чтоб с пульта можно было управлять Winamp и тотал командером ))) и вообще всем чем захочеш.
****
Часть Вторая : Выбор пути истинного.
****
Путь первый - пройти еще выше по коду и найти процедурру инициализации ТВ Тюнера и все управляющие коды для запроса к нему и потом написать свою прогу и свой обработчик сообщений и потом еще модули запуска.
Путь второй - переписать C7XRCtl.exe так чтоб каким нибудь образом передавать нашей программе содержимое регистра Eax и уже наша програмка будет только обрабатывать код кнопки и запускать то что мы хотим.

Я выбрал путь номер два так как он проще(для меня покрайне мере- не научился еще напрямую с оборудованием работать)и так что мы имеем.
***
0040415A CALL C7XRCtl.00401530 ***$***
0040415F AND EAX,7F00
00404164 ADD ESP,4
00404167 TEST AH,40
0040416A JNZ C7XRCtl.004046BC
00404170 MOV ECX,DWORD PTR DS:[40B114]
00404176 XOR EBX,EBX
00404178 SHR EAX,8
0040417B CMP ECX,EBX
0040417D JNZ SHORT C7XRCtl.00404188
***
Вот код обработки сообщений от Тв тюнера.Вот команда MOV ECX,DWORD PTR DS:[40B114] которая кидает в EAX код нажатой кнопки.Вот прыжок JNZ C7XRCtl.004046BC который завершает процедуру обработки кода кнопки.
****
Часть третья : Кодим.
****
План таков - После MOV ECX,DWORD PTR DS:[40B114] дописать код который бы отправлял содержимое EAX в нашу програмку и потом вызывался бы JNZ C7XRCtl.004046BC и прога продолжала бы ждать сообщений от Пульта.(думаю понятно)
В Ольке есть такая замечательная вещь как встроенный ассемблер))) вот на нем то и будем писать код для отправки сообщения в нашу программку.Не надо пугаться писать немного и олька нам пожет.Не буду загонять почему именно такой код я написал просто сразу приведу его
***
/*404170*/ PUSHAD —————-Сохраняем регистры
/*404171*/ PUSH 0 —————-Кидаем 0 В стек
/*404173*/ PUSH AX —————Кидаем AX в стек
/*404175*/ PUSH 100 ————–Кидаем 100 в стек
/*40417A*/ PUSH C7XRCtl.0040A2C4 -Кидаем строку 'InterVideo WinDVR' Адресс данной строки нужно будет найти опытным путем в нашем экзешнике. Так будет называться наша будующая прога.
/*40417F*/ PUSH 0 —————-Кидаем 0 в стек
/*404181*/ CALL FindWindowA ——Вызываем FindWindow
/*404186*/ PUSH EAX ————–Опять заносим EAX в стек
/*404187*/ CALL PostMessageA —–Вызываем PostMessage
/*40418C*/ POPAD —————–Востанавливаем регистры
/*40418D*/ JMP C7XRCtl.004046BC –Переходим на конец процедуры.
***
*Примечание ( CALL FindWindowA и CALL PostMessageA поидее нужно будет заменить на что нить типа CALL DWORD PTR DS:[<&USER32.FindWindowA>] и CALL DWORD PTR DS:[<&USER32.PostMessageA>] или просто найди адресса по которым вызываються эти функции и вызывать их как например Call user32.654621 .Но я у себя написал именно CALL FindWindowA и олька сама отредактировала и вписала нужный адресс.)
*Примечание - Данный код я получил так - написал на winApi программку откомпилировал и потом посмотрел код в дизасемблере )))
Если код не понятен то почитайте Питера Абеля *Язык асемблерра Для IBM PC* или идите на васм.ру
И так пишем вот этот код после JNZ C7XRCtl.004046BC и вот что у нас получилось.
***
0040415A CALL C7XRCtl.00401530 ***$***
0040415F AND EAX,7F00
00404164 ADD ESP,4
00404167 TEST AH,40
0040416A JNZ C7XRCtl.004046BC
00404170 PUSHAD
00404171 PUSH 0 —————-; /Arg2 = 00000000
00404173 PUSH AX —————; |/Arg4
00404175 PUSH 100 ————–; ||Arg3 = 00000100
0040417A PUSH C7XRCtl.0040A2C4 -; ||Arg2 = 0040A2C4 ASCII "InterVideo WinDVR"
0040417F PUSH 0 —————-; ||Arg1 = 00000000
00404181 CALL FindWindowA ——; |\FindWindowA
00404186 PUSH EAX ————–; |Arg1
00404187 CALL PostMessageA— –; \PostMessageA
0040418C POPAD
0040418D JMP C7XRCtl.004046BC
***
Все теперь как только программа обработала сообщение от ТВ тюнера она делает PostMessage нашей програмке с кодом нажатой кнопки.))) Теперь осталось ток написать нашу программку и все.А пока жмем на дизасемблерном листинге правую кнопку мышки выбираем пункт Copy to Executable - All Modification.Потом в появившемся окне выбираем Save file и сохраняем.
Все с ассемблером закончили))) теперь переходим к Дельфи )
Пишем прогу *приемник* )
Создаем проэкт WIN32 .Создаем переменную Integer Key и кидаем на форму Edit1 ))) Ставим форме KeyPrewiev=True и caption=InterVideo WinDVR .Потом выбираем у формы events on KeyDown и в этом обработчике пишем наш код перехвата.
****
edit1.Text := IntToStr(key);
case key of
1792 : one;
7168 : two;
и тд.
Теперь если запустить нашу модифицированную C7XRCtl.exe и нашу ток что написанную программу то при нажатии на любую кнопку на Пульте ДУ в Edit1.text будет код нажатой кнопки ,потом идут процедуры обработки кодов.
создаем процедуры one и two
procedure one;
begin
SetForegroundWindow(FindWindow(0,'Playlist Editor'));
Keybd_Event(BYTE('Z'),0,0,0,);
Keybd_Event(BYTE('Z'),0,101,0,); end;
procedure two;
begin
SetForegroundWindow(FindWindow(0,'Playlist Editor'));
Keybd_Event(BYTE('B'),0,0,0,);
Keybd_Event(BYTE('B'),0,101,0,);
end;
И так далее.
Теперь что мы имеем.Мы имеем сравнительно простую программу которая получает коды кнопок Ду.Теперь мы можем запрограмировать любые действия на каждую кнопку) можно также сделать так чтоб прога брала информацию из конфигурационного файла и в соответствии с ним выполняла бы то что нам надо.
На этом все.
Данный текст является побочным продуктом моей жизнедеятельность и принадлежит только мне.Перепубликация только с указанием меня ЫгЫ (Virus2) .
Если что непонятно писать тут - постараюсь ответить.
Post #: 1
RE: Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878 - 2007-03-05 12:35:56.463333   
_io_lock

Сообщений: 24
Оценки: 0
Присоединился: 2006-11-16 14:12:24.843333
Аффтар, тащи зочодгу 8|
Post #: 2
RE: Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878 - 2007-03-15 15:48:51.136666   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
+1
Post #: 3
RE: Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878 - 2007-03-15 16:10:14.246666   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
Незачет, че тут такого сложного? любой дурак сделать сможет
Post #: 4
RE: Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878 - 2007-03-16 01:17:57.436666   
ЫгЫ

Сообщений: 4
Оценки: 0
Присоединился: 2007-03-04 00:36:18.236666
твой ответ показывает что ты сверхчеловек и гигант мысли и для тебя дурак это человек знающий немного ассемблер,делфи,винАпи,разбирается в регистрах процессора,умеет работать в отладчике и который запросто может придумать концепцию по перепрограмированнию сторонней программы с добавлением новых,непредусмотреных производителем функций.В таком случае ты наверняка имеешь свою ИТ компанию и зарабатываешь миллионы и участвуеш в разработках военного ПО.Если я ошибаюсь-ненадо засорять тему бессмысленними ответами
Post #: 5
Страниц:  [1]
Все форумы >> [Взлом программ] >> Совместное использование OllyDBG,Delphi и Асма или как Переписать софт от ТВ-Тюнера Jetway BT878







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.