подскажите чем выдрать строки из бинарников ( dll, exe etc ) написанных на C++ я пользуюсь ida но она слишком громоздкая для таких целей. уточняю речь идет о строках вшитых в бинарник, а не хранящихся в ресурсах
Что подразумевается под словом "выдирать"? уточняю речь идет о строках вшитых в бинарник, а не хранящихся в ресурсах Строки и хранятся в PE файле, в секции рессурсов
ну, к примеру, оля -> прав кнопка -> search for -> all referenced text strings или W32dasm знаменитый - string references... вообще это все программки вроде умеют делать...
>> Строки и хранятся в PE файле, в секции рессурсов да ну.то есть я не могу их положить в секцию кода?) ии это самое, господа, не повторяйтесь. один раз сказали, что оля хорошо, думаю товарищ понял. 2 ТС кстати в иде это удобней всего делать, не знаю что уж там такого громоздкого. другое дело, что файл мб быть пакованным чем-либо/строки расшифровываются в процессе выполнения кодеса. тогда конечно непосредственно под отладчиком надо рипать (и в иде кстати тоже отладчик есть).
ну зачем же микроскопом гвозди забивать? (с) для строк можешь и HDasm заюзать, очень шустрая штука и даже русские буковки ищет
а можно написать что-то своё ^____-- Code: #include <stdio.h> #include <conio.h> #include <string.h> #define BUFFSIZE 100 int main(int argc, char *argv[]) { FILE *in_file; char buffer[BUFFSIZE]; char word[BUFFSIZE]; int counter = 0; int wordflag = 0; int offset = 0; if(argc != 2) { printf("USAGE : filter file"); return 1; } in_file = fopen(argv[1], "rb"); if(in_file == NULL) { printf("Error : unable to open file %s", argv[1]); getch(); return 2; } else printf("File %s is open\n", argv[1]); while(fread(buffer, 1, 1, in_file) > 0) { if(buffer[0] >= ' ' && buffer[0] <= '~') { if(wordflag != 1) wordflag = 1; word[counter] = buffer[0]; counter++; } else { if(counter != 0) { word[counter + 1] = '\0'; if(strlen(word) > 5) printf("%8.8X : %s\n", offset, word); } counter = 0; wordflag = 0; } offset++; } getch(); return 0; } но это лирика ... и к Юникоду не подходит ...
Ладно с этим понятно теперь вопрос возможно ли изменять длину строк ? и существуют ли вообще какие-либо редакторы строк ?
шиздец ... а не судьба про приведенные выше инструменты прочитать? В Олли, ИДЕ и в любом hex редакторе это можно сделать. При некоторых ограничениях конечно (или при некоторых знаниях ^____^ которых у мну нет). А можно просто в секции данных найти пустое место, вписать туда нужную строку и помять указатели при выводе. А можно ... а много чего можно.
если длпустим фасмом будешь компилить, хранится будет в секции данных .data, а не ресурсах. открывай хекс-едитором да правь как захо4ешь
TC, в С строки (если не ресурсах) заканчиваются нулём, сколько от начала строки до нуля, такая и длина строки. Т.е. если в середине строки (можно и в другом месте) заменить имеющийся байт на ноль, длина строки уменьшится. Чтобы увеличить длину строку, нужно смотреть по обстоятельствам. Если после строки есть ничем не занятое пространство, заканчивающий строку ноль сместить насколько возможно. Можно найти все ссылки на данную строку и подменить её (ссылку) на не занятое пространство, длина строки варьируется от размеров этого самого пространства, если его мало, можно создать новую секцию нужного размера. Совет всем пишущим ответы на вопросы: читать их (вопросы) внимательнее.
Строки еще можно смотреть плагином для PEID, плагин называется String Viewer Вот ссылка: http://www.rapidshare.ru/861276 (24 КБ)
Применительно к строкам приложений сделанных в delphi, надо не забывать о числе (длине строки) перед искомой строкой и менять его соответственно в нужную сторону.