IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Найти строку в 16-ричном представлении файла
сообщение
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Нужно представить файл в шестнадцатеричном виде и найти в нём определённую текстовую строку. Вот что я смог:
var f:file of byte;
s,z,buf:string;
x:byte;
a,b,bufsize:integer;
begin
assignfile(f,'C:\***************************************************');
reset(f);
for a:=1 to filesize(f)-15 do
begin
for b:=a to a+14 do
begin
seek(f,b);
read(f,x);
s:=s+inttostr(x);
end;
bintohex(pchar(s),pchar(z),bufsize);
if z='**************' then begin
edit1.text:=z;
break;
end
else z:='';

end;

end;

По идее пограмма читает файл "порциями" по 14 символов(строка,которую надо найти,такой длины), потом переводит в шестнадцатеричный вид и, если строка соответствует нужной, останавливает цикл. Только не работает unsure.gif В делфях ещё мало понимаю,обьясните пожалуйста...


Сейчас ещё нашёл,что нужно в ASCII виде представить это...

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






BinToHex не делает того, чего ты хочешь... Эта процедура берет число (число, а не строку), и возвращает его представление в 16-ричной СС. Тебе что найти-то надо? Файл байтов, допустим, начинается сочетанием байт со значениями от 1 до 14... Тогда приведенная к 16-ричному представлению эта последовательность будет иметь вид:
0102030405060708090A0B0C0D0E
Ты будешь искать строки, заданные именно в таком виде? Тогда вот так:
  if OpenDialog1.Execute then begin
assignfile(f, OpenDialog1.FileName);
reset(f);
for a := 0 to filesize(f) - 14 do begin
s := '';
Seek(f, a);
for b := 1 to 14 do begin
read(f, X); { <--- Читаем побайтно и сразу переводим в Hex... }
s := s + IntToHex(X, 2); { <--- ... и складываем в строку }
end;

if s = '0102030405060708090A0B0C0D0E' then begin
// нашли строку, делай что нужно
end;

end; // for a
end; // OpenDialog.Execute
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Volvo, использую код,предложенный тобой, перевёл нужную для поиска строку в HeX, убедился,что она есть в нужном файле(Hex-редактором)...не ищет почему-то... unsure.gif
Код
var f:file of byte;
    s,z,buf:string;
    x:byte;
    a,b,bufsize:integer;
begin
  assignfile(f,'C:\owner.mdb');
  reset(f);
  for a := 0 to filesize(f) - 21 do
  begin
    s := '';
    Seek(f, a);
    for b := 1 to 21 do
    begin
      read(f, X);
      s := s + IntToHex(X, 2);
    end;
    if s='55006e0063006f006e006e00650063007400650064' then begin
                                                                                                 edit1.text:=s;
                                                                                                  break;
                                                                                             end;


end;


А вот когда я в качестве S ввёл 00,то бишь точка, то нашло...


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Естественно... Используй большие буквы, а не маленькие. Или
if s=UpperCase('55006e0063006f006e006e00650063007400650064') then begin


У меня строка '0E0043006F006E006E006500630074001000440061' спокойно нашлась в mdb-файле...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Спасибо,получилось! smile.gif теперь нужно часть файла конвертировать в base64. Для этого наверное тоже процедура в delphi предусмотрена?

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Со строками и с потоками - точно есть:
procedure EncodeStream(Input, Output: TStream);	// Кодирует поток в Base64
procedure DecodeStream(Input, Output: TStream); // Раскодирует поток из Base64 в нормальный вид
function EncodeString(const Input: string): string; // Кодирует строку в Base64
function DecodeString(const Input: string): string; // Раскодирует строку из Base64 в нормальный вид

(все функции - из модуля EncdDecd)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Вопрос не по теме наверно... Вот какое преобразование строки надо сделать, чтобы из '530074006F0072006500640050006100730073007700' получить
'E77D34EF8D34E85D34EF6D34EB9D34EB' ?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






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

По внешнему виду вторая строка похожа на результат хеширования MD4 или MD5 (возможно - в совокупности с другой функцией, или неоднократное применение хеширования)... Больше, извини, на эту тему я ничего говорить не буду...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Нет,подбирать хеши у меня желания нет никакого, т.к. есть уже много программ для этих целей smile.gif Моя программа "вытаскивает" из этого файла хеш пароля, и я не вижу в этом ничего страшного. Выходная строка - действительно MD5.


Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.11.2020 3:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name