ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с поиском строки в PE файле
  #1  
Старый 13.11.2008, 23:47
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию Проблема с поиском строки в PE файле

Пробую найти байт с которого начинается текстовая строка находящяся в PE файле
Пытаюсь делать вот так
Код:
int segg(char str[100],char path[300],char sub[100])
{
int seg=0;DWORD rb;
char *fil=new char[1024*1024];
HANDLE f=CreateFile(path,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
ReadFile(f,fil,1024*1024,&rb,NULL);
for(;;)
{
if(strlen(fil)==0)
{
fil+=1;seg++;
if(strstr(fil,str)!=NULL){strcpy(sub,fil);break;}
}
seg=seg+strlen(fil);
fil+=strlen(fil);
if(seg==rb)
{
MessageBox(Form1->Handle,"Не тот файл","Ошибка",MB_ICONERROR);
break;
}
}
CloseHandle(f);
return(seg);
}
Проблема заключается в том что эта ф-ция может находить одни строки и ненаходить другие.Хотя WinHEX их находит Немогу понять в чем прикол
 
Ответить с цитированием

  #2  
Старый 14.11.2008, 01:05
cash$$$
Banned
Регистрация: 06.01.2008
Сообщений: 413
Провел на форуме:
1301036

Репутация: 1334
Отправить сообщение для cash$$$ с помощью ICQ
По умолчанию

Попробуй сделать так.

Код:
{$IFDEF WIN32}

{$R STRTBL32.RES}
{$ELSE}

{$R STRTBL16.RES}
const
  LANG_ENGLISH = $09;
const
  LANG_SPANISH = $0A;
const
  LANG_SWEDISH = $1D;
{$ENDIF}

function GetLanguage: word;
{$IFDEF WIN32}
{$ELSE}

var
  s: string;
  i: integer;
{$ENDIF}
begin
{$IFDEF WIN32}

  GetLanguage := GetUserDefaultLangID and $3FF;
{$ELSE}

  s[0] := Char(GetProfileString('intl',
    'sLanguage',
    'none',
    @s[1],
    sizeof(s) - 2));
  for i := 1 to length(s) do
    s[i] := UpCase(s[i]);
  if s = 'ENU' then
    GetLanguage := LANG_ENGLISH
  else if s = 'ESN' then
    GetLanguage := LANG_SPANISH
  else if s = 'SVE' then
    GetLanguage := LANG_SWEDISH
  else
    GetLanguage := LANG_ENGLISH;
{$ENDIF}
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  a: array[0..255] of char;
  StrTblOfs: integer;
begin
  {Получаем текущий язык системы и начало соответствующих строк в таблице}
  case GetLanguage of
    LANG_ENGLISH: StrTblOfs := 0;
    LANG_SPANISH: StrTblOfs := 16;
    LANG_SWEDISH: StrTblOfs := 32;
  else
    StrTblOfs := 0;
  end;

  {Загружаем и устанавливаем заголовок кнопки "Yes" в соответствии с языком}
  if LoadString(hInstance,
    StrTblOfs + 1,
    @a,
    sizeof(a)) <> 0 then
    Button1.Caption := StrPas(a);

  {Загружаем и устанавливаем заголовок кнопки "No" в соответствии с языком}
  if LoadString(hInstance,
    StrTblOfs + 2,
    @a,
    sizeof(a)) <> 0 then
    Button2.Caption := StrPas(a);
end;
 
Ответить с цитированием

  #3  
Старый 14.11.2008, 01:23
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Я в паскале абсолютно ни как не шарю
 
Ответить с цитированием

  #4  
Старый 14.11.2008, 14:10
0verbreaK
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме:
379101

Репутация: 136
По умолчанию

Попробуй перевести указатель на начало файла


SetFilePointer (hFile, lDistLow, &lDistHigh, FILE_BEGIN);
 
Ответить с цитированием

  #5  
Старый 14.11.2008, 21:32
groupby
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме:
127017

Репутация: 61
По умолчанию

По моему все проще. Разный регистр символов. Оно?
 
Ответить с цитированием

  #6  
Старый 14.11.2008, 21:37
groupby
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме:
127017

Репутация: 61
По умолчанию

И ещё.. Ты сравниваешь по моему не все строки. Если строка находится не внутри твоего мегабайта, где ты проводишь сравнение, а в середине, т.е. к примеру половина строки в 1м мегабайте, другая половина во 2м мегабайте. Тогда ты естессно ничего не найдешь )))
 
Ответить с цитированием

  #7  
Старый 16.11.2008, 03:59
0verbreaK
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме:
379101

Репутация: 136
По умолчанию

По моему все проще. Разный регистр символов. Оно?

ага у аффтара спрашиваешь?
 
Ответить с цитированием

  #8  
Старый 17.11.2008, 21:18
Грот
Участник форума
Регистрация: 24.01.2008
Сообщений: 110
Провел на форуме:
359408

Репутация: 209
Отправить сообщение для Грот с помощью ICQ
По умолчанию

ясли я правельно тебя понял то этот исходник должен тебе помочь

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    S:string;
 size,he:integer;
   c:byte;
begin
  { TODO -oUser -cConsole Main : Insert code here }

  S:= fileSearch(edit1.text, 'E:\gav\');
 if S<>'' then
 begin
 he:=fileOpen(S,fmOpenReadWrite);
  size:=Windows.GetFileSize(he,nil);
  edit2.text:= intToStr(size);
    end;
  fileread(he,c,1);  // считать один байт
  if C <>ord('M')then
  begin
   exit;
   end;
   fileread(he,c,1);  // считать один байт
   if c<> ord('Z')then
    begin
    exit;
    end;


 MessageBox(0,'обнаружена стандартная'#10#13' структура РЕ файла','файл найден',MB_ICONINFORMATION);





end;

procedure TForm1.Button2Click(Sender: TObject);
begin

OpenDialog1.Execute;
  Edit1.Text:=  OpenDialog1.FileName  ;
end;

end.

или вот правда придеться расписать структуру ре фаила зато ты сможешь смотреть и мнеять весь фаил неплохо зная его тип (исползуеться при написании крипторов)


Код:
tupe
pe_head=record // структура PE //Signature:dword;
CPU_Type:word;
Num_of_Objects:word;
Time_Date_Stamp:dword;
Pointer_to_COFF_table:dword;
COFF_table_size:dword;
NT_Header_Size:word;
Flags:word;
Magic:word;
Link_Major:byte;
Link_Minor:byte;
Size_of_Code:dword;
Size_of_Init_Data:dword;
Size_of_UnInit_Data:dword;
Entry_point_RVA:dword;
Base_of_Code:dword;
Base_of_Data:dword;
Image_Base:dword;
Object_Align:dword;
File_Align:dword;
OS_Major:word;
OS_Minor:word;
USER_Major:word;
USER_Minor:word;
SubSys_Major:word;
SubSys_Minor:word;
Reserved:dword;
Image_Size:dword;
Header_Size:dword;
File_CheckSum:dword;
SubSytem:word;
DLL_Flags:word;
Stack_Reserve_Size:dword;
Stack_Commit_Size:dword;
Heap_Reserve_Size:dword;
Heap_Comit_Size:dword;
Loader_Flags:dword;
Num_of_RVA_and_Sizes:dword;
Export_Table_RVA:dword;
Export_Data_Size:dword;
Import_Table_RVA:dword;
Import_Data_Size:dword;
Resource_Table_RVA:dword;
Resource_Data_Size:dword;
Exception_Table_RVA:dword;
Exception_Data_Size:dword;
Security_Table_RVA:dword;
Security_Data_Size:dword;
Fix_Ups_Table_RVA:dword;
Fix_Ups_Data_Size:dword;
Debug_Table_RVA:dword;
Debug_Data_Size:dword;
Image_Description_RVA:dword;
Description_Data_Size:dword;
Machine_Specific_RVA:dword;
Machnine_Data_Size:dword;
TLS_RVA:dword;
TLS_Data_Size:dword;
Load_Config_RVA:dword;
Load_Config_Data_Size:dword;
Reserved1:array[1..8] of byte;
IAT_RVA:dword;
IAT_Data_Size:dword;
Reserved2:array[1..24] of byte;
end;

Section_table=record // структура таблица секции
Object_Name:array[1..8] of char;
Virtual_Size:dword;
Section_RVA:dword;
Physical_Size:dword;
Physical_Offset:dword;
Reserved:array[1..12] of byte;
Object_Flags:dword;
после ты сможешь спокойно получить доступ к любой секции без гимароя например

begin
name:=st[y].Object_Name; // получить имя секции
end; ну и так далие пример на Delphi из криптора слеша

Последний раз редактировалось Грот; 17.11.2008 в 21:30..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полезные Linux команды в 1-м листе PandoraBox *nix системы 20 24.10.2009 16:05
Проблема с поиском музыки. Ventrue Болталка 1 24.08.2008 18:40
Анатомия Oracle Часть 2: Locating dropped objects VERte][ Чужие Статьи 3 12.12.2007 12:50
ВАЖНАЯ ПРОБЛЕМА!!! Sn_key Уязвимости 13 08.06.2005 15:50



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ