Как найти в exe файле строку

Голосование за лучший ответ

драгзонт

Профи

(904)


12 лет назад

Поменяй расширение на .txt

Егорик

Мастер

(1295)


12 лет назад

Resource Hacker юзай

А.К. (лично)

Искусственный Интеллект

(247048)


12 лет назад

любым HEX-редактором…. но правит можно букву текста на букву

например ERROR – ОШИБКА

И.А. Голованов

Оракул

(75272)


12 лет назад

любым текстовым редактором открыть и искать
но обычно в exe уже закодировано в бинарное и найти не удастся

gruz

Мыслитель

(8290)


12 лет назад

бред, в блокноте попробуй ;))

пользуй total commander
просто открой через F3, (нажми “1”) и найди текст, нажав F7.

Кодировки тоже смотри

сочетания при открытом EXE 1, 2, a, s — ето кнопки.

is

find

function can’t work with exe? i try to find wstring in an exe. it always not match. but if i create a txt and copy binary inside exe to txt and it can find it.

    std::wifstream file(L"D:/file.exe", std::ios::binary);
if (file.is_open())
{
    file.seekg(0, file.end);
    std::streamoff length = file.tellg();
    file.seekg(0, file.beg);
    wchar_t *buffer = new wchar_t[length];
    file.read(buffer, length);
    std::wstring sFile;
    sFile = buffer;
    size_t index = sFile.find(L"Something");
    if (index != std::string::npos) std::cout << "It's found";
    file.close();
    delete[] buffer;
}
else
{
    std::cout << "It's not open";
}

asked Nov 15, 2018 at 13:36

Dwerson busch's user avatar

4

The executable probably has a number of 0 bytes (i.e. 0x00) early on in the file. When you do sFile = buffer; it assumes that buffer is a C-style string that ends in a 0 byte. So sFile will only contain the bytes up to that point.

To fix it you should put the whole buffer into the string:

std::wstring sFile(buffer, length); // Directly using the constructor, or
sFile.assign(buffer, length);       // after construction

answered Nov 15, 2018 at 13:42

Kevin's user avatar

KevinKevin

6,9231 gold badge14 silver badges23 bronze badges

Just change

std::wstring sFile;
sFile = buffer;

to

std::wstring sFile(buffer, buffer+length);

When you assigning char-buffer to wstring object, the length of the string is determined by the first null character. So, the first 0x00 byte containing in your file denotes the end of string.

answered Nov 15, 2018 at 13:43

snake_style's user avatar

snake_stylesnake_style

1,1497 silver badges16 bronze badges

1


  1. HPC

    HPC

    New Member

    Публикаций:

    0

    Регистрация:
    30 мар 2011
    Сообщения:
    37

    Всем привет.
    Люди подскажите как в exe-шнике найти строку,например такую: 31 00 21 45
    как проще решить данную задачу?

    вот например открываю фаил,ставлю точку на начало файла а как дальше ? как найти ?

    Подскажите кто знает.

    1.   invoke CreateFile,pFile,GENERIC_READ+GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    2.   invoke SetFilePointer,esi,[RAWOFFSET],0,0,0
    3.    push rBytes                 ;результат поиска
    4.    section ‘.idata’ import data readable writeable
    5.  library kernel32,’KERNEL32.DLL’,
    6.   include ‘api/kernel32.inc’
  2. В смысле последовательность цифр? Или ’31 00 21 45′?


  3. HPC

    HPC

    New Member

    Публикаций:

    0

    Регистрация:
    30 мар 2011
    Сообщения:
    37

    Вот как например в редакторе WinHex,
    есть кнопочка Find Hex Values тыкаем её ,вбиваем ’31 00 21 45′
    и он находит в проге кусок кода(если есть конечно такой код)

  4. Тогда это поиск не строки ’31 00 21 45′, а данных
    db 0x31, 0x00, 0x21, 0x45

    А в чём сложность то? Самое простое – загружай файл целиком в буфер, и ищи.
    http://algolist.manual.ru/search/index.php


  5. klzlk

    klzlk

    New Member

    Публикаций:

    0

    Регистрация:
    2 июн 2011
    Сообщения:
    449

    Замапить модуль и найти в памяти. Мапится через секции.


WASM

Опять же на том форуме, где я искал подобный ответ
мне один товарищ прислал архив в раздел для VB
там как я понял утилита и описание команд
к сожалению не успел расспросить…

ниже текст в архиве readme_rus.txt

-*- SH 1.1 * Copyright (c) Aleph 2001-2003 -*-

String Hunter – ASCII/UNICODE string dumper

Usage: sh.com PatternFile VictimFile [-{e|r}] [-p] [MinStrLen [MaxStrLen]]

-e – dump UNICODE strings (English)
-r – dump UNICODE strings (Russian)
-p – printable output

complains_n_suggestions direct to

alephz@yahoo.com

[Win32] [Console]

String Hunter – утилита предназначенная для поиска текстовых литералов в
нетекстовых файлах.

Вот как, например, выглядит фрагмент вывода для команды

sh.com common.pat COMMAND.COM

> 000033DE Incorrect MS-DOS version
> 000033F9 Out of environment space
> 00003413 E
> 00003418 Microsoft(R) Memphis
> 0000342E (C)Copyright Microsoft Corp 1981-1996.
> 00003459 (Specified COMMAND search directory bad
> 00003482 7Specified COMMAND search directory bad, access denied
> 000034BA 9Starts a new copy of the Windows Command Interpreter.
> 000034F5 COMMAND [[drive:]path] [device] [/E:nnnnn] [/L:nnnn] [/U:nnn] [/P] [/MSG]
> 00003540 [/LOW] [/Y [/[C|K] command]]
> 00003575 C [drive:]path Specifies the directory containing COMMAND.COM.
> 000035B9 M device Specifies the device to use for command input and output.
> 00003607 E /E:nnnnn Sets the initial environment size to nnnnn bytes.
> 0000364D = (nnnnn should be between 256 and 32,768).
> 0000368B L /L:nnnn Specifies internal buffers length (requires /P as well).
> 000036D8 ; (nnnn should be between 128 and 1,024).
> 00003714 L /U:nnn Specifies the input buffer length (requires /P as well).
> 00003761 8 (nnn should be between 128 and 255).
> 0000379A M /P Makes the new Command Interpreter permanent (can’t exit).
> 000037E8 N /MSG Stores all error messages in memory (requires /P as well).
> 00003837 K /LOW Forces COMMAND to keep its resident data in low memory.
> 00003883 J /Y Steps through the batch program specified by /C or /K.
> 000038CE ? /C command Executes the specified command and returns.
> 0000390E I /K command Executes the specified command and continues running.
> 00003958 H
> 0000395D Microsoft(R) Windows 95
> 00003976 (C)Copyright Microsoft Corp 1981-1996.

Левая колонка содержит шестнадцатеричное смещение символьной строки, а
правая – саму эту строку.

SH принимает в командной строке от 2 до 7 параметров. Первые два
обязательны.

Usage: sh.com Pattern Victim [MinStrLen [MaxStrLen]]

Pattern – двоичный или текстовый файл, содержащий все символы (pattern),
которые будут рассматриваться как допустимые (все символы с
кодом < 020h и символ 07Fh игнорируются). Дубликаты также
игнорируются.

В комплект поставки входят несколько “стандартных” паттернов,
которые Вы можете использовать как образцы для создания
собственных.

Victim – файл, в котором производится поиск текстовых литералов.

MinStrLen – Необязательный параметр. Должен быть положительным числом или
нулем. Если задан, то будут выводиться только строки с
длиной, не меньше заданной.

MaxStrLen – Необязательный параметр. Должен быть положительным числом,
равнм или большим MinStrLen. Если задан, то будут выводиться
только строки с длиной, не больше заданной. В случае равенства
параметров MinStrLen и MaxStrLen будут выводиться только
строки точно заданной длины.

Ни для кого не секрет, что поиск Windows 7 – удобный и мощный инструмент. Его глубокая интеграция в Проводник, меню “Пуск”, сохраняемые результаты и индексируемые расположения действительно позволяют экономить время, если что-то нужно быстро найти, открыть или запустить.
В недрах Windows 7 скрывается ряд консольных утилит для поиска, которые порой не менее эффективны при использовании в различных сценариях командной строки и могут сослужить вам добрую службу.

Первая программа, входящая в состав средств консольного поиска Windows 7, – find.

FIND

Программа find осуществляет поиск текстовой строки в одном или нескольких файлах. Синтаксис её таков:
[code]find [/опции] “строка для поиска” ДИСК:ПапкаШаблонИмениФайла*.*[/code]
Программа find отличается от графического инструментария поиска Windows 7, что может искать текст во всех типах файлов, например, в DLL или EXE. Графические средства поиска Windows 7, как известно, текст в подобных файлах не ищут.

Программа find имеет следующий перечень опций, влияющих на её поведение и возможности:

  • find /V – вывод всех строк, НЕ содержащих заданную строку.
  • find /C – вывод только общего числа строк, содержащих заданную строку.
  • find /N – вывод номеров отображаемых строк.
  • find /OFF[LINE] – не пропускать файлы с установленным атрибутом “Автономный”.
  • find /I – поиск без учета регистра символов.

Программа FINDSTR

Утилита findstr выглядит функционально расширенной версией программы find. Синтаксис их схож:
[code]findstr [/опции] “строка для поиска” ДИСК:ПапкаШаблонИмениФайла*.*[/code]
Однако, findstr поддерживает сразу несколько шаблонов имени файлов и несколько поисковых строк, которые нужно разделять пробелами. Кроме того, findstr поддерживает работу с регулярными выражениями. Опции при работе с ней таковы:

  • /B – искать указанную строку-образец только в начале строк.
  • /E – искать указанную строку-образец только в конце строк.
  • /L – поиск строк дословно, т.е. в точном соответствии с введенной фразой
  • /R – искать указанную строку-образец с использованием регулярных выражений.
  • /S – поиск файлов в текущей папке и всех ее подкаталогах.
  • /I – поиск будет вестись без учета регистра.
  • /X – выводить строки, которые совпадают точно.
  • /V – выводить строки, не содержащие совпадений с искомыми.
  • /N – выводить номер строки, в которой найдено совпадение.
  • /M – выводить только имя файла, в котором найдено совпадение.
  • /O – выводить найденные строки через пустую строку.
  • /P – пропуск строки, содержащей непечатаемые символы.
  • /OFF[LINE] – искать в файлах с установленным атрибутом “Автономный”.
  • /A:цвета – две шестнадцатеричные цифры – атрибуты цвета вида (Цвет фона)(Цвет текста). Список цветов таков:

    0 = Черный 8 = Серый
    1 = Синий 9 = Светло-синий
    2 = Зеленый A = Светло-зеленый
    3 = Голубой B = Светло-голубой
    4 = Красный C = Светло-красный
    5 = Лиловый D = Светло-лиловый
    6 = Желтый E = Светло-желтый
    7 = Белый F = Ярко-белый

    Совет: Выполните команду Color /?, чтобы узнать, как устанавливать цвета в окне команд.

  • /F:файл – Читает список файлов из заданного файла (/ для консоли).
  • /C:строка – Использует заданную строку как искомую фразу поиска.
  • /G:файл – Получение строк из заданного файла (/ для консоли).
  • /D:список_папок – Поиск в списке папок (разделяются точкой с запятой).

Краткая сводка по синтаксису регулярных выражений:

  • . – любой символ.
  • * – ноль или более вхождений предыдущего символа или класса
  • ^ – начало строки
  • $ – конец строки
  • [класс] – набор символов: любой символ из перечисленных в скобках
  • [^класс] – обратный класс символов: любой символ из НЕ перечисленных в скобках
  • [x-y] – любые символы из указанного диапазона, например [a-b]
  • x – служебный символ х: t – табуляция, n – начало строки
  • ?xyz – позиция в слове: в начале слова
  • xyz> – позиция в слове: в конце слова

Примеры использования:
[code]findstr /I windows microsoft.txt[/code]
Поиск всех слов “windows” без учёта регистра в файле microsoft.txt
[code]findstr /s /i /m “<microsoft>” *.txt[/code]
Построить список txt-файлов в текущем каталоге и его подкаталогах, содержащий слово “microsoft”, игнорируя регистр.
[code]findstr “Привет от штиблет” file.txt[/code]
Поиск слов “Привет”, “от” и “штиблет” в файле file.txt с учётом регистра.
[code]findstr /C:”Привет от штиблет” file.txt[/code]
Поиск фразы “Привет от штиблет” в файле file.txt с учётом регистра.

Программа WHERE

И последняя программа, на которую мне бы хотелось обратить ваше внимание, это where. Она выполняет поиск файла по указанному шаблону его имени. Синтаксис в общем случае таков:
[code]where Каталог:шаблон[/code]
Для случая, когда каталог не указан, поиск файлов осуществляется в текущем каталоге и в каталогах, указанных в переменной окружения PATH.

Например,
[code]WHERE “c:windows:*.exe”[/code]
Поиск исполняемых файлов в каталоге c:Windows

Каталогов для поиска может быть указано несколько, для этого применяется конструкция вида:
[code]where c:windows;c:windowssystem32:*.txt[/code]
При этом можно использовать только один шаблон.

Параметры программы Where:

  • /R – рекурсивный поиск и отображение файлов, соответствующих указанному шаблону, начиная с указанного каталога. При использовании опции /R можно использовать несколько шаблонов, но для одного каталога. Синтаксис таков:
    [code]where  /R c:windows *.txt *.wav[/code]
  • /Q – интересная опция с точки зрения использования в командных файлах. При её указании утилита переходит в тихий режим, списка файлов не выводит, но устанавливает код возврата, указывающего на результат её выполнения. Считать код возврата можно из переменной окружения %ERRORLEVEL%.
    • %ERRORLEVEL%=0 – поиск успешен/файлы найдены
    • %ERRORLEVEL%=1 – ничего не найдено
    • %ERRORLEVEL%=2 – поиск завершен с ошибками

  • /F – отображение найденных файлов в кавычках.
  • /T – отображение размера, даты и времени изменения для всех найденных файлов.

Отмечу, что в качестве шаблона пути можно использовать переменные окружения, вот так:
[code]where $path:*.exe
where $windir:*.exe
where $windir:*.exe
where $temp:*.tmp[/code]
Микрософт не рекомендует использовать рекурсивный поиск при наличии переменных окружения в командной строке where. Полагаю, из-за вероятности повторения результатов и замедления работы поиска.

💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.

Судя по тому, что вы читаете этот текст, вы дочитали эту статью до конца. Если она вам понравилась, поделитесь, пожалуйста, с помощью кнопок ниже. Спасибо за вашу поддержку!

Добавить комментарий