Чем выдирать строки из бинарников

Discussion in 'Реверсинг' started by fire64, 11 Dec 2008.

  1. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    подскажите чем выдрать строки из бинарников ( dll, exe etc ) написанных на C++

    я пользуюсь ida но она слишком громоздкая для таких целей.

    уточняю речь идет о строках вшитых в бинарник, а не хранящихся в ресурсах
     
  2. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Что подразумевается под словом "выдирать"?

    уточняю речь идет о строках вшитых в бинарник, а не хранящихся в ресурсах

    Строки и хранятся в PE файле, в секции рессурсов
     
  3. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    ну, к примеру, оля -> прав кнопка -> search for -> all referenced text strings
    или W32dasm знаменитый - string references... вообще это все программки вроде умеют делать...
     
    1 person likes this.
  4. ртуть

    ртуть Elder - Старейшина

    Joined:
    31 Aug 2007
    Messages:
    314
    Likes Received:
    389
    Reputations:
    29
    strings *.exe *.dll | grep aj00nigga
     
  5. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    OllyDbg как вариант
     
  6. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    OllyDbg согласен.
     
  7. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    >> Строки и хранятся в PE файле, в секции рессурсов

    да ну.то есть я не могу их положить в секцию кода?)

    ии это самое, господа, не повторяйтесь. один раз сказали, что оля хорошо, думаю товарищ понял. 2 ТС кстати в иде это удобней всего делать, не знаю что уж там такого громоздкого. другое дело, что файл мб быть пакованным чем-либо/строки расшифровываются в процессе выполнения кодеса. тогда конечно непосредственно под отладчиком надо рипать (и в иде кстати тоже отладчик есть).
     
    #7 0x0c0de, 11 Dec 2008
    Last edited: 12 Dec 2008
    1 person likes this.
  8. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    401
    Likes Received:
    153
    Reputations:
    48
    ну зачем же микроскопом гвозди забивать? (с)

    для строк можешь и HDasm заюзать, очень шустрая штука и даже русские буковки ищет :)
     
  9. procedure

    procedure Elder - Старейшина

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    Если .net, то IL dasm || Reflector.
     
  10. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    а можно написать что-то своё ^____--

    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;
    }
    
     
    но это лирика ... и к Юникоду не подходит ...
     
  11. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    Ладно с этим понятно

    теперь вопрос

    возможно ли изменять длину строк ?
    и существуют ли вообще какие-либо редакторы строк ?
     
    #11 fire64, 12 Dec 2008
    Last edited: 12 Dec 2008
  12. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    restorator
     
  13. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    я уже говорил что речь идет о строках находящихся в сегменте с данными, а не в ресурсах
     
  14. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    шиздец ... а не судьба про приведенные выше инструменты прочитать?
    В Олли, ИДЕ и в любом hex редакторе это можно сделать. При некоторых ограничениях конечно (или при некоторых знаниях ^____^ которых у мну нет). А можно просто в секции данных найти пустое место, вписать туда нужную строку и помять указатели при выводе. А можно ... а много чего можно.
     
  15. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    вы меня утомили все,

    20x0code да если хочешь можешь я даю добро
    ;)
     
  16. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    .data

    sz0xcode db "0x0code",0

    Где будет хранится строка?
     
  17. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    если длпустим фасмом будешь компилить, хранится будет в секции данных .data, а не ресурсах. открывай хекс-едитором да правь как захо4ешь
     
  18. fromRIDDER

    fromRIDDER Member

    Joined:
    2 Aug 2008
    Messages:
    8
    Likes Received:
    5
    Reputations:
    2
    TC, в С строки (если не ресурсах) заканчиваются нулём, сколько от начала строки до нуля, такая и длина строки. Т.е. если в середине строки (можно и в другом месте) заменить имеющийся байт на ноль, длина строки уменьшится. Чтобы увеличить длину строку, нужно смотреть по обстоятельствам. Если после строки есть ничем не занятое пространство, заканчивающий строку ноль сместить насколько возможно. Можно найти все ссылки на данную строку и подменить её (ссылку) на не занятое пространство, длина строки варьируется от размеров этого самого пространства, если его мало, можно создать новую секцию нужного размера.

    Совет всем пишущим ответы на вопросы: читать их (вопросы) внимательнее.
     
    3 people like this.
  19. Sunzer

    Sunzer Member

    Joined:
    17 May 2008
    Messages:
    29
    Likes Received:
    9
    Reputations:
    2
    Строки еще можно смотреть плагином для PEID, плагин называется String Viewer
    Вот ссылка: http://www.rapidshare.ru/861276 (24 КБ)
     
    1 person likes this.
  20. neprovad

    neprovad Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    899
    Likes Received:
    274
    Reputations:
    59
    Применительно к строкам приложений сделанных в delphi, надо не забывать о числе (длине строки) перед искомой строкой и менять его соответственно в нужную сторону.