информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСтрашный баг в WindowsАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
 Microsoft Authenticator прекращает... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Извратный вариант, может подойдет ... ;) 31.10.01 15:32  Число просмотров: 924
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Сразу скажу, что могу ошибаться.

Я слышал, что есть api-функции, эмулирующие прерывание v86 - те доса или биоса. По крайней мере можно выполнить функцию биоса для записи на дискету. Наверное, что-то вроде:
ExecuteV86Interrupt(reg.ax=0X0201...)
Ну и ты поищи среди апи ф-цию для чтения твоей F000:0000...

Это есть вариант 1.

Вариант номер два.

Теми же самыми апи для эмуляции прерывний v86 вызываешь прерывание 21h(dos) таким образом:
- Открываешь дос-файл;
- Делаешь запись блока в файл с ds=F000, dx=0000(твой сегмент);
- Закрываешь файл;
И твой сегмент в файле ?!
<programming>
[Win32] Скопировать память по физическому адресу 31.10.01 14:26  
Автор: PepperLover Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Уважаемые хракеры !
Есть проблема, которая для вас не проблема.
Пишу прогу под Delphi (не надо плеваться).
В какой-то момент мне надо прочитать 64к памяти по физическому адресу
$F000:0000 (типа ПЗУшка).
И все !
Но, маленькое но...
Прога работает или под Win9x или под WinNT/2000.
Ну версию операционки я определить смогу...

Да, because я не кулхацкер, просилось бы реал примеры с кодом, ну токо не на Сы (++ - - * * = =).
[Win32] Скопировать память по физическому адресу 01.11.01 11:19  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Уважаемые хракеры !
> Есть проблема, которая для вас не проблема.
> Пишу прогу под Delphi (не надо плеваться).
> В какой-то момент мне надо прочитать 64к памяти по
> физическому адресу
> $F000:0000 (типа ПЗУшка).
> И все !
> Но, маленькое но...
> Прога работает или под Win9x или под WinNT/2000.
> Ну версию операционки я определить смогу...

не пролучится
кроме DOS (без EMM386) и NOVEL все остальные оськи работают с PAGING_ENABLE (бит 31 в CR0) и адрес памяти по которому ты читаешь или пишешь из своей проги это не настоящий адрес и никак с настоящим не связан
возможные способы решения:
набор драйверов для разных OS: *.vxd, *.sys которые либо используют системные вызовы отображения физ.памяти ДОСТУПНЫЕ ТОЛЬКО ДЛЯ КЕРНЕЛ-МОДЕ ДРАЙВЕРОВ (искать нужно что-то связанное с DMA т.к. именно таким девайсам нужна ФИЗ.ПАМЯТЬ) либо сами производят обратный поиск по таблицам страниц со всевозможными CLI и блокировками
либо чистый DOS

а у твоей проге на дельфи во всем ее адесном пространстве адреса соответствующего F0000 НЕТ ВООБЩЕ. и системной функции для получения такового тож нет...
[Win32] Скопировать память по физическому адресу 01.11.01 14:19  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>


> не пролучится
> кроме DOS (без EMM386) и NOVEL все остальные оськи работают

Ну в EMM386, QEMM и etc есть VCPI, так что проблем нет.

> с PAGING_ENABLE (бит 31 в CR0) и адрес памяти по которому
> ты читаешь или пишешь из своей проги это не настоящий адрес
> и никак с настоящим не связан
> возможные способы решения:
> набор драйверов для разных OS: *.vxd, *.sys которые либо
> используют системные вызовы отображения физ.памяти
> ДОСТУПНЫЕ ТОЛЬКО ДЛЯ КЕРНЕЛ-МОДЕ ДРАЙВЕРОВ (искать нужно
> что-то связанное с DMA т.к. именно таким девайсам нужна
> ФИЗ.ПАМЯТЬ) либо сами производят обратный поиск по таблицам
> страниц со всевозможными CLI и блокировками
> либо чистый DOS
>
> а у твоей проге на дельфи во всем ее адесном пространстве
> адреса соответствующего F0000 НЕТ ВООБЩЕ. и системной
> функции для получения такового тож нет...

Это тока в NT/2K.
В Win9x у процесса немного другое адресное пространство, и по 0xF0000 можно обращаться.
Также это можно делать из 16-битовых прог под Win9x - KRNL386.EXE экспортирует следующие функции, смещения которых являются значениями соответствующих селекторов:
__0000H, __0040H, __A000H, __B000H, __B800H, __C000H, __D000H, __E000H, __F000H, __ROMBIOS
[Win32] Скопировать память по физическому адресу 02.11.01 10:45  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> В Win9x у процесса немного другое адресное пространство, и
> по 0xF0000 можно обращаться.

ты прав конечно - это же копируемая часть нулевой ВМ -отвык я уже от чикаги
[Win32] Только для Win9x 31.10.01 18:35  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
Обращайся к ней обычным образом по физическому адресу F0000h:
FILE *f = fopen("rom", "wb");
fwrite((void *) 0xF0000, 1, 65536, f);
fclose(f);

> Да, because я не кулхацкер, просилось бы реал примеры с
> кодом, ну токо не на Сы (++ - - * * = =).

На Delphi вроде так:
BlockWrite(F, Ptr($F0000), 65536)

В WinNT/2K это не будет работать
[Win32] Только для Win9x 02.11.01 09:51  
Автор: PepperLover Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Обращайся к ней обычным образом по физическому адресу
> F0000h:
> FILE *f = fopen("rom", "wb");
> fwrite((void *) 0xF0000, 1, 65536, f);
> fclose(f);
>
> > Да, because я не кулхацкер, просилось бы реал примеры
> с
> > кодом, ну токо не на Сы (++ - - * * = =).
>
> На Delphi вроде так:
> BlockWrite(F, Ptr($F0000), 65536)
>
> В WinNT/2K это не будет работать

Вау ! Супер ! Я бесконечно благодарен господину :-)
простите не знаю как зовут...

Следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
F : file;
P : pointer;
begin
P := Ptr($F0000);

AssignFile(F, 'C:\rom.dat');
Rewrite(F, 1);
BlockWrite(F, P^, 65535);
CloseFile(F);
end;

работает под Win98 без проблем !
Написать сразу: BlockWrite(F, Ptr($F0000), 65536)
нельзы, т.к. компилер ругается, второй параметр должен быть переменной.

А знаете для чего мне это надо было ?

Некая фирма Hewlett-Packard хранит где-то в BIOSe серийный (заводской)
номер компа. Так вот, чтобы мне не обходить все 500 компов для инвентаризации, я пишу маленькую прогу, которая при входе в сеть записывает серийный номер куда-то в файл.
Самое мерзопакостное в том, что они хранят этот номер где-то хрен знает где, т.е. на одних моделях он где-то по адресу $F3xxx- Vectra XM4 $FCxxx-Vectra VEi7. Но тут выход есть, ищу аббревиатуру Hewlett-Packard, а за ней после модели следует серийный номер (правда там куча какой-то @#$ни).
Ну, если кто-то знает способ лучше - пусть кинет в меня им !

В любом случае - спасибо всем, вы - лучшие !!!
[Win32] Только для Win9x 02.11.01 11:39  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> работает под Win98 без проблем !
> Написать сразу: BlockWrite(F, Ptr($F0000), 65536)
> нельзы, т.к. компилер ругается, второй параметр должен быть
> переменной.

Можно, только надо так (я там забыл разыменовать указатель):
BlockWrite(F, Ptr($F0000)^, 65536);
Отвык уже от Дельфи :)
[Win32] Извратный вариант, может подойдет ... ;) 31.10.01 15:32  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Сразу скажу, что могу ошибаться.

Я слышал, что есть api-функции, эмулирующие прерывание v86 - те доса или биоса. По крайней мере можно выполнить функцию биоса для записи на дискету. Наверное, что-то вроде:
ExecuteV86Interrupt(reg.ax=0X0201...)
Ну и ты поищи среди апи ф-цию для чтения твоей F000:0000...

Это есть вариант 1.

Вариант номер два.

Теми же самыми апи для эмуляции прерывний v86 вызываешь прерывание 21h(dos) таким образом:
- Открываешь дос-файл;
- Делаешь запись блока в файл с ds=F000, dx=0000(твой сегмент);
- Закрываешь файл;
И твой сегмент в файле ?!
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach