Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2009, 18:10   #1
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию Как утащить данные с компа по аудио кабелю

Заранее извиняюсь перед модераторами, если тему не по адресу создал. Сам не знаю в какой раздел ее пихать.

А суть вопроса такова. Есть комп без приводов, дисководов, и USB-, COM- и LPT-портов. Скинуть на комп данные можно через админов. Скачать нельзя никак. А надо.
Вспомнились мне добрые 90-е, когда данные хранили на аудио кассетах, и я подумал, что байты с тех самых пор ничуть не изменились, и если их можно записать на кассету, то можно и передать на другой комп по аудио кабелю.
Предполагаю, что для этого понадобятся ноутбук и 2 кабеля (от аудио выхода компа к микрофону ноутбука и наоборот). Это имеется в наличии. Что дальше. Может кто уже видел такие программы. Если нет то, как ее написать (думаю это не сложно, просто у меня совершенно нет опыта работы с аудио сигналами) и нужны ли для этого права в системе. У меня простой пользователь.
Sibedir вне форума Ответить с цитированием
Старый 07.02.2009, 19:37   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

То есть не музыку, а информацию?
Ну, если б это было так просто, то и лаборатории по проверке уровня излучений ЭВТ и поиску закладок не нужны были бы.
Без спецаппаратуры у вас ничего не получится, тем более через аудио выход.
Или вы имели в виду написать для вас программу, преобразующую содержимое любого файла в некую звуковую последовательность? Чтобы получилось нечто похожее на "журчание" Спектрума?
И вторую - позволяющую сделать обратное преобразование?
Задачка забавная, но вряд ли найдется желающий делать ее "за так".
Так что вы действительно ошиблись разделом - вам во "Фриланс".
mihali4 вне форума Ответить с цитированием
Старый 07.02.2009, 21:31   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию Что-то похожее

Ну не знаю, может поможет чем нибудь

Это АМ-MSK модулятор (для вашего случая передатчик).
Делал я его годов так несколько назад, поэтому могут быть нюансы.

Ну и вобщем всё это на ассемблере, хотя там всё вполне очевидно.
Вложения
Тип файла: rar zvuk_mainMin.rar (31.5 Кб, 22 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 07.02.2009, 23:44   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

СПС Ulex. Но ASM для меня - это слишком.
Вот чё нашел
http://www.delphisources.ru/pages/fa...soundcard.html

Немного подшаманил. Практически вслипую, так как формата WAVE не знаю. Но кое что получилось:

Код:
uses
  MMSystem;

type
  TVolumeLevel = 0..127;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  F: file of Byte;
  fs: Integer;
  b: Byte;
  WaveFormatEx: TWaveFormatEx;
  MS: TMemoryStream;
  i, TempInt, DataCount, FullDataCount, RiffCount: integer;
  SoundValue: byte;
  w: double; // omega ( 2 * pi * frequency)
  Frequency {Hz}: Integer;
  Duration {mSec}: Real;
  Volume: TVolumeLevel;
const
  Mono: Word = $0001;
  SampleRate: Integer = 22050; // 8000, 11025, 22050, or 44100
  RiffId: string = 'RIFF';
  WaveId: string = 'WAVE';
  FmtId: string = 'fmt ';
  DataId: string = 'data';
begin
  if OpenDialog1.Execute then begin
    AssignFile (F, OpenDialog1.FileName);
    Reset (F);
    fs := FileSize (F);

    with WaveFormatEx do begin
      wFormatTag := WAVE_FORMAT_PCM;
      nChannels := Mono;
      nSamplesPerSec := SampleRate;
      wBitsPerSample := $0008;
      nBlockAlign := (nChannels * wBitsPerSample) div 8;
      nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
      cbSize := 0;
    end;

    Duration := 0.1;
    Volume := 20;
    MS := TMemoryStream.Create;
    {Calculate length of sound data and of file data}
    DataCount := trunc((Duration * SampleRate) / 1000); // sound data
    FullDataCount := DataCount * fs;
    RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
      SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + FullDataCount;
        // file data
    {write out the wave header}
    MS.Write(RiffId[1], 4); // 'RIFF'
    MS.Write(RiffCount, SizeOf(DWORD)); // file data size
    MS.Write(WaveId[1], Length(WaveId)); // 'WAVE'
    MS.Write(FmtId[1], Length(FmtId)); // 'fmt '
    TempInt := SizeOf(TWaveFormatEx);
    MS.Write(TempInt, SizeOf(DWORD)); // TWaveFormat data size
    MS.Write(WaveFormatEx, SizeOf(TWaveFormatEx)); // WaveFormatEx record
    MS.Write(DataId[1], Length(DataId)); // 'data'
    MS.Write(FullDataCount, SizeOf(DWORD)); // sound data size

    while not Eof (F) do begin
      Read (F, b);
      Frequency := b * 40;
      {calculate and write out the tone signal}// now the data values
      w := 2 * Pi * Frequency; // omega
      for i := 0 to DataCount - 1 do
      begin
        SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate));
          // wt = w * i / SampleRate
        MS.Write(SoundValue, SizeOf(Byte));
      end;
      {now play the sound}
    end;
    sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
    MS.Free;
    CloseFile (F);
  end;
end;
Осталось считать этот звук с микрофона и преобразовать его в набор байт.
Sibedir вне форума Ответить с цитированием
Старый 08.02.2009, 00:04   #5
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Да, действительно, раздел на тему безопасности/защиты информации, а тут ухищрения по пережу последней, ...забавно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 08.02.2009, 00:05   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Неа, не выйдет. Модем должен быть именно побитным. Слишком сложный и нестабильный демодулятор получится в побайтном модеме.
Ну и вот это:

Цитата:
Frequency := b * 40;
сразу в брак (как нолик будет передаваться?).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 08.02.2009, 00:07   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ну да. Собственно поэтому и помесил сюда. Расчитывал на готовое решение. Но теперь ее видимо надо в раздел по мультимедиа.
Sibedir вне форума Ответить с цитированием
Старый 08.02.2009, 00:08   #8
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
как нолик будет передаваться?
Точно. Надо
Код:
Frequency := (b+1) * 20;
Цитата:
Модем должен быть именно побитным. Слишком сложный и нестабильный демодулятор получится в побайтном модеме.
Ну и вот это:
Возможно. Но это уже нюансы. Все будет зависеть от того, как этот сигнал будет считываться с микрофона и преобразовываться в байты. Если методом обратным приведенному, то речи нет, нужны биты. Замучаешься тон сигнала определять. Но я слышал, что есть модули для работы со звуком, так в них вроде есть функции, которые сразу выдают тон.

Последний раз редактировалось Sibedir; 08.02.2009 в 00:14.
Sibedir вне форума Ответить с цитированием
Старый 08.02.2009, 00:31   #9
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Замучаешься тон сигнала определять. Но я слышал, что есть модули для работы со звуком, так в них вроде есть функции, которые сразу выдают тон.
Не просто замучаешься. А это принципиально невозможно. Шаг в данном случае 20 Гц, т.е. от 20-5100 Гц - весь диапазон. А как же АЧХ линии - это коаксиал, который имеет свои ёмкости и индуктивности (по сути фильтр).
Нееет. Надо две частоты (0/1-1200/2400).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 08.02.2009, 15:26   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ulex, а зачем именно по битам и почему именно частоты 1200 и 2400 Гц. Ведь для обеспечения более или менее приемлемой скорости придется значительно уменьшать интервал импульса, что в свою очередь приведет к увеличению влияния этой самой индукции.
Мне все-таки кажется лучше работать сразу с байтами. Я вообще решил уйти от частотных характеристик. Каждый байт это сигнал определенной силы. Вот что получилось:
Код:
uses
  MMSystem;

...

var
  F: TFileStream;
  MS: TMemoryStream;
  NameSize: Word;
  FileSize, FullSize: Integer;
  FullTime, Speed: Real;
  WaveFormatEx: TWaveFormatEx;
  i, j, TempInt, DataCount, RiffCount: integer;
  SampleRate: Integer;
const
  Mono: Word = $0001;
  RiffId: string = 'RIFF';
  WaveId: string = 'WAVE';
  FmtId: string = 'fmt ';
  DataId: string = 'data';
begin
  if OpenDialog1.Execute then begin
    FullSize := 0;
    for i := 0 to OpenDialog1.Files.Count - 1 do begin
      F := TFileStream.Create (OpenDialog1.Files [i], fmOpenRead);

      NameSize := Length (OpenDialog1.Files [i]);
      FileSize := F.Size;

      FullSize := FullSize + 2 + NameSize + 4 + FileSize;

      F.Free;
    end;

    SampleRate := 44100; // Количество тактов в секунду (8000, 11025, 22050, или 44100)
    with WaveFormatEx do begin
      wFormatTag := WAVE_FORMAT_PCM;
      nChannels := Mono;
      nSamplesPerSec := SampleRate;
      wBitsPerSample := 16; // Это получается вроде как количество бит за такт (8 или 16)
      nBlockAlign := (nChannels * wBitsPerSample) div 8;
      nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
      cbSize := 0;
    end;

    DataCount := 1; // sound data
    FullSize := DataCount * FullSize;
    RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
      SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + FullSize;
        // file data
    {write out the wave header}

    MS := TMemoryStream.Create;
    MS.Write(RiffId[1], 4); // 'RIFF'
    MS.Write(RiffCount, SizeOf(DWORD)); // file data size
    MS.Write(WaveId[1], Length(WaveId)); // 'WAVE'
    MS.Write(FmtId[1], Length(FmtId)); // 'fmt '
    TempInt := SizeOf(TWaveFormatEx);
    MS.Write(TempInt, SizeOf(DWORD)); // TWaveFormat data size
    MS.Write(WaveFormatEx, TempInt); // WaveFormatEx record
    MS.Write(DataId[1], Length(DataId)); // 'data'
    MS.Write(FullSize, SizeOf(DWORD)); // sound data size

    for i := 0 to OpenDialog1.Files.Count - 1 do begin
      F := TFileStream.Create (OpenDialog1.Files [i], fmOpenRead);

      NameSize := Length (OpenDialog1.Files [i]);
      FileSize := F.Size;

      MS.Write (NameSize, 2);
      for j := 1 to NameSize do
        MS.Write (OpenDialog1.Files [i][j], 1);
      MS.Write (FileSize, 4);
      MS.CopyFrom (F, FileSize);

      F.Free;
    end;

    Speed := WaveFormatEx.wBitsPerSample * SampleRate;
    FullTime := FullSize / (Speed / 8);
    Label1.Caption := 'FullTime = ' + FloatToStr (FullTime) + ' сек'   ;
    Label2.Caption := 'FullSize = ' + FloatToStr (FullSize / 1024) + ' кБ'    ;
    Label3.Caption := 'Speed = '    + FloatToStr (Speed / 1024)        + ' кб/сек';
    Application.ProcessMessages;

    sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
    MS.Free;
  end;
end;
Пока немножко топорно, но чисто теоретически удалось добиться скорости 689.0625 кб/сек. Хотя верится в эту скорость маловато. У обычной звуковой карты, думаю, нет такой чувствительности, да и помехи наведенные и от индукции будут слишком сильно влиять. В общем, практика покажет. Кстати, можно увеличить пропускную способность сигнала использую стереозвук. И еще можно поразбираться с wav-форматами, думаю параметр WaveFormatEx.wBitsPerSample может принимать большее значение, чем 16.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с аудио Виталий Гонак Компьютерное железо 4 17.06.2008 10:19
Как правильно удалить с компа Keylogger? Кира Помощь студентам 4 17.12.2007 16:51
Как экспортировать данные Малявка Microsoft Office Excel 5 20.10.2007 11:53
с компа по не желаемым мне сайтам не лазили. как сделать? Iceman Софт 8 26.09.2007 19:03
Помогите утащить тяжелый кусок Image Travych Помощь студентам 1 26.05.2007 19:51