Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 559
от 30.09.2006, 00:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 348, Экспертов: 30
В номере:Вопросов: 3, Ответов: 5


Вопрос № 56532: Здравствуйте ! Например я знаю что где-то в памяти выполняутся такая команда :4b1affa1h. Как просканировать память и вычислить адрес, по которому выполняется эта команда ?...
Вопрос № 56560: Здравствуйте ! А возможно на асме установить фон для рабочего стола ? (В ХР)...
Вопрос № 56565: Здравствуйте ув. эксперты. Поразмыслив на своей задачей, я понел что мне необходимо вручную скомпилировать exe файл. Для этого требуется выдернуть некоторые функции из dll файла и вставить их в программу. Но я не знаю с какой стороны к этому подо...

Вопрос № 56.532
Здравствуйте ! Например я знаю что где-то в памяти выполняутся такая команда :4b1affa1h. Как просканировать память и вычислить адрес, по которому выполняется эта команда ?
Отправлен: 24.09.2006, 14:16
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: ENS
Здравствуйте, Whiteman!
Смотри кусок, только сначала разьерись с ним. si укажет на начало кода.
Сравниваем каждый байт ,а если неподходит то начинаем сначала.
Надеюсь я тебе помог.

Приложение:

---------
Учение - свет!

Ответ отправил: ENS (статус: 2-ой класс)
Ответ отправлен: 24.09.2006, 16:09

Отвечает: mix_mix
Здравствуйте, Whiteman!
Так как Вы пишете под Win XP, а она работает в защищенном режиме и со страничной адресацией памяти, то есть два пути:
1) Недокументированной функцией ntdll!NtOpenSection открыть объект DevicePhysicalMemory, затем найти во всей RAM компьютера эти байты, преобразовать физический адрес в линейный, определить какой процесс спроецирован на этот участок памяти.
Но это адски трудоемко и долго, если сделаете таким образом - похвала Вам и почет.
2) Гораздо проще инжектировать во все процессы код Вашей функции, которая и определит наличие и адрес этих байт. Это не так уж и сложно, здесь нету тех многих минусов первого способа, да и быстрее это может оказаться, чем в первом случае.
Почитать про инжект кода в процессы можно здесь:
http://www.wasm.ru/article.php?article=apihook_1
http://www.wasm.ru/article.php?article=apihook_2
http://www.wasm.ru/article.php?article=apihook_3
Удачи!

Приложение:

Ответ отправил: mix_mix (статус: 7-ой класс)
Ответ отправлен: 24.09.2006, 23:10
Оценка за ответ: 5


Вопрос № 56.560
Здравствуйте ! А возможно на асме установить фон для рабочего стола ? (В ХР)
Отправлен: 24.09.2006, 19:34
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: n0name
Здравствуйте, Whiteman!
Да возможно.

.data
NewWP db 'C:New.bmp', 0
.code
invoke SystemParametersInfo, SPI_SETDESKWALLPAPER, 0, NewWP, SPIF_SENDCHANGE

Код для fasm.
Ответ отправил: n0name (статус: 6-ой класс)
Ответ отправлен: 25.09.2006, 10:09
Оценка за ответ: 5


Вопрос № 56.565
Здравствуйте ув. эксперты.
Поразмыслив на своей задачей, я понел что мне необходимо вручную скомпилировать exe файл. Для этого требуется выдернуть некоторые функции из dll файла и вставить их в программу. Но я не знаю с какой стороны к этому подойти, т.к. dll откомпилированая (без исходного кода). Как мне вытащить функцию из библеотеке? Для этого требуется загружать библеотеку в память или нет? и вообще можно ли это сделать(в памяти выдернуть функцию)?
Отправлен: 24.09.2006, 20:46
Вопрос задал: 007Makc (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ADSota
Здравствуйте, 007Makc!

Один из вариантов подгрузки DLL:

libName db "yourdllname.dll",0
FuncName db 'YourFunction4Call',0
hLib dd ?

...

invoke LoadLibrary,libName;//загрузить длл
mov [hLib], eax
invoke GetProcAddress,[hLib],FuncName;//получить адрес функции в памяти
;//в EAX теперь адрес функции
; push param1 - тут в стек передаются параметры функции
; push param2
; ... etc
call eax;//запустить функцию
; invoke dword[eax],buff,16

invoke FreeLibrary,[hLib];//даль ДЛЛ команду выгрузиться


---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 25.09.2006, 08:43

Отвечает: Волков Павел Юрьевич
Здравствуйте, 007Makc!
Для рипа функции из dll:
дизассемблируем секцию кода, точку входа, на необходимую функцию,
берем из таблицы экспорта.

Обычно функция начинается с последовательности -
push ebp
mov ebp,esp

Для определения конца функции надо смотреть близлежащие функции и цепочки инструкций
leave
ret X

или

pop ebp
ret X

---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 7-ой класс)
Ответ отправлен: 25.09.2006, 14:09


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное