Перейти к публикации

ГАРАНТ-СЕРВИС

Для обеспечения защиты

от мошенничества

при проведении сделок на

форуме работает Гарант-сервис.

ВОСПОЛЬЗОВАТЬСЯ
  • Гавань Пиратов!

    Добро пожаловать в DarkNet! Вы на теневом ресурсе - Гавань Пиратов!

    Чтобы стать участником форума вы должны "Зарегистрироваться", после этого вы сможете писать пользователям в Личные сообщения.

    Для новичков введена "предмодерация" перед публикацией "Тем" и "Cообщений" в темах. Подробнее

    А также, если вы впервые находитесь в DarkNet, вам полезно изучить "Сленг" и "Вопросы и ответы" Подробнее

vasiliev

Автоматизации аудио дампов

Рекомендованные сообщения

Здравствуйте, господа воры! В данной статье я расскажу о том, как можно частично автоматизировать работу с декодированием аудиодампов + частично покажу в исходном коде. В качестве бонуса сама программа.
Возможно данная тема обсуждалась много раз, но я покажу свой вариант решения данного вопроса.

Наверняка все слышали про "ручной" декод аудио дампов средствами exel. Данная программа построена так же.

Передо мной была поставлена задача автоматизировать работу дешифровки дампов. Дано - пример аудио + exel-файл.

Для начала нам понадобится wav-файл (программа умеет работать только с wav-файлами) с дампом. Идеальные характеристики wav: 8 bit, 44100, mono. Необходимо, чтобы в этом файле был только один дамп, возможно состоящий из нескольких частей + она умеет работать с реверсом, т.е. обратный выход карты из картоприемника. Весь код построен на Delphi.

Вся работа программы основывается на нескольких этапах:
- определить дискреты и вычислить тайминги;
- определение битов;
- сравнение;
- декод.

Каждый этап работы программы должен быть визуализирован для четкого понимания где может быть ошибка или потеря бита. Так же она хорошо подходит для отладки устройства (скима).

Открываем файл и считываем начальные данные (дискреты) и определяем тайминги:

var r : TWaveResult; i : integer; W1, W2 : SmallInt; _tp:boolean; temp:integer; buf:string;

...

_tp:=false;

temp:=0;

if opendialog1.Execute then begin

r : TWaveResult;

r := ReadWave(opendialog1.FileName);

r.Data.seek(0, soFromBeginning);

for i := 1 to r.Data.Size{ div 1}

do Begin

r.Data.readBuffer(W1, 1);

if (W1 > 138) or (W1 < 118) then tup := true;

if _tp then temp := temp + 1;



if (W1 > 138) and (temp > 2) then begin

if temp <> 3 then

buf := buf + IntToStr(temp)+#13+#10;

temp := 0;

end;



if (W1 < 118) and (temp > 2) then begin

if temp <> 3 then

buf := buf + IntToStr(temp)+#13+#10;

temp := 0;

end;



end;

Memo1.Lines.Add(buf); // добавляем для визуализации

После определения таймингов приступаем к этапу определения битов:
 

...

// Опять же Memo4 добавлен для визуализации

for i:=0 to Memo1.Lines.Count-1 do begin

temp := Memo1.Lines.Strings[i];

if i=0 then begin Memo4.Lines.Add('0'); goto ggg end;

if (temp = '') or (temp = ' ') or (temp = 'ПРОПУСК') then goto ggg;

if temp > 160 then Memo4.Lines.Add('ПРОПУСК') else

if Memo4.Lines.Strings[Memo4.Lines.Count-1] = 'ПРОПУСК' then Memo4.Lines.Add('0') else

if (temp * 3 / 4) > StrToInt(Memo1.Lines.Strings[i-1]) then Memo4.Lines.Add('0') else

if (StrToInt(Memo1.Lines.Strings[i-1]) * 3 / 4) > temp then begin

if Memo4.Lines.Strings[Memo4.Lines.Count-1] = '0' then begin Memo4.Lines.Add('1'); goto ggg; end;

if Memo4.Lines.Strings[Memo4.Lines.Count-1] = '1' then begin Memo4.Lines.Add('-1'); goto ggg; end;

if Memo4.Lines.Strings[Memo4.Lines.Count-1] = '-1' then begin Memo4.Lines.Add('1'); goto ggg; end;

end else begin

if Memo4.Lines.Strings[Memo4.Lines.Count-1] = '1' then begin Memo4.Lines.Add('-1'); goto ggg; end;

if Memo4.Lines.Strings[Memo4.Lines.Count-1] = '-1' then begin Memo4.Lines.Add('1'); goto ggg; end;

Memo4.Lines.Add(Memo4.Lines.Strings[Memo4.Lines.Count-1]);

end;

ggg: begin end;

end;

...

В этом куске кода нихрена не понятно, но оно работает :-)

Далее идет этап сравнения:
 

// Это добавлено для смещения если идет потеря битов

off0:=true;

off1:=false;

off2:=false;

off3:=false;

off4:=false;



found := false;

for i:=0 to Memo4.Lines.Count-1 do begin

temp := Memo4.Lines.Strings[i];

if temp = 1 then found := true;

if (temp = 0) and (not found) then begin

goto ttt;

end else begin

check := check + 1;

Memo3.Lines.Add(Memo4.Lines.Strings[i]);

if check >= 5 then

begin

Memo3.Lines.Add('---');

check := 0;

end;

end;

ttt: begin end;

end;



check := 0;



for i:=0 to Memo3.Lines.Count-1 do begin

temp := Memo3.Lines.Strings[i];

if temp = '---' then goto sss;

check := check + 1;



if check = 1 then bit1 := StrToInt(Memo3.Lines.Strings[i]);

if check = 2 then bit2 := StrToInt(Memo3.Lines.Strings[i]);

if check = 3 then bit3 := StrToInt(Memo3.Lines.Strings[i]);

if check = 4 then bit4 := StrToInt(Memo3.Lines.Strings[i]);

if check = 5 then bit5 := StrToInt(Memo3.Lines.Strings[i]);



if check >= 5 then

begin

if checkbits(bit1,bit2,bit3,bit4,bit5) then begin

Memo5.Lines.Add(IntToStr(bit1));

Memo5.Lines.Add(IntToStr(bit2));

Memo5.Lines.Add(IntToStr(bit3));

Memo5.Lines.Add(IntToStr(bit4));

Memo5.Lines.Add(IntToStr(bit5));

Memo5.Lines.Add('TRUE');

end else begin

Memo5.Lines.Add(IntToStr(bit1));

Memo5.Lines.Add(IntToStr(bit2));

Memo5.Lines.Add(IntToStr(bit3));

Memo5.Lines.Add(IntToStr(bit4));

Memo5.Lines.Add(IntToStr(bit5));

Memo5.Lines.Add('FALSE');

Edit1.Text := Edit1.Text + '!';

end;

check := 0;

end;



sss: begin

end;

...

Вот сама функция проверки битов и определения символа:
 

function TForm1.checkbits(tbit1, tbit2, tbit3, tbit4,

tbit5: integer): boolean;

var buf:string;

begin

buf := '';

result := false;

// 0

if (tbit1 = 0) and (tbit2 = 0) and (tbit3 = 0) and (tbit4 = 0) and (tbit5 = 1) then begin buf := '0'; result := true; end;

// 1

if (tbit1 = 1) and (tbit2 = 0) and (tbit3 = 0) and (tbit4 = 0) and (tbit5 = 0) then begin buf := '1'; result := true; end;

// 2

if (tbit1 = 0) and (tbit2 = 1) and (tbit3 = 0) and (tbit4 = 0) and (tbit5 = 0) then begin buf := '2'; result := true; end;

// 3

if (tbit1 = 1) and (tbit2 = 1) and (tbit3 = 0) and (tbit4 = 0) and (tbit5 = 1) then begin buf := '3'; result := true; end;

// 4

if (tbit1 = 0) and (tbit2 = 0) and (tbit3 = 1) and (tbit4 = 0) and (tbit5 = 0) then begin buf := '4'; result := true; end;

// 5

if (tbit1 = 1) and (tbit2 = 0) and (tbit3 = 1) and (tbit4 = 0) and (tbit5 = 1) then begin buf := '5'; result := true; end;

// 6

if (tbit1 = 0) and (tbit2 = 1) and (tbit3 = 1) and (tbit4 = 0) and (tbit5 = 1) then begin buf := '6'; result := true; end;

// 7

if (tbit1 = 1) and (tbit2 = 1) and (tbit3 = 1) and (tbit4 = 0) and (tbit5 = 0) then begin buf := '7'; result := true; end;

// 8

if (tbit1 = 0) and (tbit2 = 0) and (tbit3 = 0) and (tbit4 = 1) and (tbit5 = 0) then begin buf := '8'; result := true; end;

// 9

if (tbit1 = 1) and (tbit2 = 0) and (tbit3 = 0) and (tbit4 = 1) and (tbit5 = 1) then begin buf := '9'; result := true; end;

// :

if (tbit1 = 0) and (tbit2 = 1) and (tbit3 = 0) and (tbit4 = 1) and (tbit5 = 1) then begin buf := ':'; result := true; end;

// ;

if (tbit1 = 1) and (tbit2 = 1) and (tbit3 = 0) and (tbit4 = 1) and (tbit5 = 0) then begin buf := ';'; result := true; end;

// <

if (tbit1 = 0) and (tbit2 = 0) and (tbit3 = 1) and (tbit4 = 1) and (tbit5 = 1) then begin buf := '<'; result := true; end;

// =

if (tbit1 = 1) and (tbit2 = 0) and (tbit3 = 1) and (tbit4 = 1) and (tbit5 = 0) then begin buf := '='; result := true; end;

// >

if (tbit1 = 0) and (tbit2 = 1) and (tbit3 = 1) and (tbit4 = 1) and (tbit5 = 0) then begin buf := '>'; result := true; end;

// ?

if (tbit1 = 1) and (tbit2 = 1) and (tbit3 = 1) and (tbit4 = 1) and (tbit5 = 1) then begin buf := '?'; result := true; end;



// это необходимо для смещения

if off0 then Edit1.Text := Edit1.Text + buf;

if off1 then Edit2.Text := Edit2.Text + buf;

if off2 then Edit3.Text := Edit3.Text + buf;

if off3 then Edit4.Text := Edit4.Text + buf;

if off4 then Edit5.Text := Edit5.Text + buf;

end;

После работы в поле Edit1 будет декодированный текст.

http://www.sendspace.com/file/hzj3yy
pass:vasiliev

Только для carder.pro

// добавлено
На бесплатной основе предоставляю исходники, но при условии, что будут дописаны функции, которые будут необходимы другим участникам борда. В проге есть весь базовый функционал и очень удобно дописывать свой код.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хоть что то получилось раскодировать с помощью твоей проги?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут как я понял, по одному дампу втыкать ? Или можно просто запись со скима с кучей дампов ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чето у меня ни че не определил, как толку от этого ??? Помойму хорошая прога. Если работать будет. На соседней площадке, если я не ошибаюсь такое же творение продают за 300$

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, безусловно. Хоть прога изначально и создавалась, как основное средство для декода данных, но в дальнейшем ее предназначение было для отладки. С помощью нее можно понять какая головка лучше, какая хуже, какая скорость считывания более оптимальная (следовательно какой банкомат больше подходит для идеального декода данных) и т.д. В данный момент прога является базовой, но в нее можно с легкостью дописывать функции, для большего удобства работы.

В данный момент я ее не использую, т.к. работаю с флеш-кишками. Прогу можно допилить к примеру для работы с блютуз-гарнитурой.

 

---------- Сообщение добавлено в 12:58 AM ---------- Предыдущее сообщение размещено в 12:55 AM ----------

 

Тут как я понял, по одному дампу втыкать ? Или можно просто запись со скима с кучей дампов ?

В прогу втыкается один файл, но с несколькими кусками одной карты. К примеру карта вставилась в картоприемник - один кусок. Банкомат выплюнул и засунул карту обратно - второй кусок. И после работы банкомат полностью выплюнул карту - трутий кусок. В принципе в прогу можно дописать декод большого количества данных с одного файла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот вся проблема в том, что многие реальщики не хотят аудио - запары с декодом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
по одному дампу. только толку от этого)

В начале статьи написано, что прога работает на основе exel-файла. Здесь не полная, а частичная автоматизация декода. Но опять же повторюсь, что можно дописать под все, что угодно. Кароч, если кто-то хочет дописать прогу - могу на безплатной основе поделиться исходниками, но при условии что будут дописаны функции, которые будут обговорены и интересны другим участникам борда. Повторюсь, что прога базовая и в нее можно с легкостью дописывать все необходимые функции.

 

---------- Сообщение добавлено в 01:05 AM ---------- Предыдущее сообщение размещено в 01:03 AM ----------

 

Вот вся проблема в том, что многие реальщики не хотят аудио - запары с декодом.

Да, совершенно правильно. Вот и я перешел на асики, т.к. намного больше плюсов, посравнению с аудио.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

готов проинвестировать проект. у меня не получается расдекодить даже половину трека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Могу сказать, что очень интересны твои начинания. Надеюсь, что сработаешься с кем-то из нашего коллектива.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
готов проинвестировать проект. у меня не получается расдекодить даже половину трека.

В данный момент в инвестициях я не нуждаюсь, но помощь с декодом безусловно могу. Пиши в ЛС, что не получается раскодить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Распознать вавку и понаставить битов - это половина задачи.

Вторая половина - распознать кривые руки холдера, которые двигают карту неравномерно.

Так бит 1 может быть растянут простым рывком до 00. Равно как и 00 небольшим толчком сожмется до 1. Собственно, можно декодить и подряд, проверяя в конце весь трек через LRC , но тут кроется микро-пиздец: если поменять местами цифры в треке, то LRC будет одинаков, а трек будет уже неверный.

На практике имеем - холдер дернул карту, прога распознала не 12301, а 12310... показывает - LRC вроде бы совпало, радуемся, идем в банкомат, а там - хуй, плюемся, идем обратно декодить заново и искать ошибку.

 

Так что, учи прогу распознавать кривые руки. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Распознать вавку и понаставить битов - это половина задачи.

Вторая половина - распознать кривые руки холдера, которые двигают карту неравномерно.

Так бит 1 может быть растянут простым рывком до 00. Равно как и 00 небольшим толчком сожмется до 1. Собственно, можно декодить и подряд, проверяя в конце весь трек через LRC , но тут кроется микро-пиздец: если поменять местами цифры в треке, то LRC будет одинаков, а трек будет уже неверный.

На практике имеем - холдер дернул карту, прога распознала не 12301, а 12310... показывает - LRC вроде бы совпало, радуемся, идем в банкомат, а там - хуй, плюемся, идем обратно декодить заново и искать ошибку.

 

Так что, учи прогу распознавать кривые руки.

Большое спасибо за подсказку! Учту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Читайте оба трека. Валид реально будет при похуй че там дергали под 100проц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Читайте оба трека. Валид реально будет при похуй че там дергали под 100проц.

Сейчас она умеет только один трек читать. В принципе добавить второй - так же не есть проблема. Спасибо. Учту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Там неразбирался в софт твой, мерялка длительностей на тини85 нада? Их можно в эксель загонять сходу или назат в звук превратить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×