информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСтрашный баг в WindowsСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[Win32] Только для Win9x 02.11.01 09:51  Число просмотров: 929
Автор: 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, а за ней после модели следует серийный номер (правда там куча какой-то @#$ни).
Ну, если кто-то знает способ лучше - пусть кинет в меня им !

В любом случае - спасибо всем, вы - лучшие !!!
<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