IPB

Добро пожаловать, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Westwood Studios .MIX, ID и имена файлов
Siberian GRemlin
Jul 20 2006, 05:48
Сообщение #1


Advanced Member
***

Группа: CTPAX-X
Сообщений: 476
Регистрация: 4-February 08
Пользователь №: 2
Спасибо сказали: 202 раз(а)



Есть алгоритм получения ID по имени файла, реально ли сделать обратный алгоритм?!
CODE
function ROL(l:longint):longint;
begin
  ROL:=(l shl 1) or (l shr 31);
end;

function CalcID(name:string):longint;
type PLong = ^longint;
var l,i:integer;
    Calc:longint;
begin

  l:=length(name);
  if l>12 then l:=12;
  for i:=1 to l do Name[i]:=UpCase(Name[i]);
  for i:=l+1 to 13 do name[l]:=#0;

  Calc:=0;
  l:=1;
  while name[l]<>#0 do
  begin
    Calc:=ROL(Calc)+PLong(@name[l])^;
    Inc(l,4);
  end;

  CalcID:=Calc;
end;
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
jTommy
Jul 20 2006, 15:05
Сообщение #2


Наблюдающий
***

Группа: CTPAX-X
Сообщений: 197
Регистрация: 4-February 08
Из: деревня Москва
Пользователь №: 6
Спасибо сказали: 19 раз(а)



К сожалению нереально. Здесь операция сложения и известна только конечная сумма. Вариантов разложения на слагаемые очень много и какой из них правильный - неизвестно.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Xplorer
Jul 20 2006, 15:38
Сообщение #3


Advanced Member
***

Группа: CTPAX-X
Сообщений: 52
Регистрация: 4-February 08
Пользователь №: 8
Спасибо сказали: 30 раз(а)



Есть три способа узнать имена файлов:
1. поискать их в exe-файле
2. модифицировать exe-файл так, чтобы он сам выдавал имена файлов, для которых вычисляется ID
3. написать прогу, которая будет по ID выдавать подходящие имена файлов (brute force)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Mar 27 2011, 06:22
Сообщение #4


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,210
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 287 раз(а)



Siberian GRemlin!

Что-то у тебя не так с алгоритмом. Твой код, например, для имени "conquer.eng" (первый C&C, архив LOCAL.MIX) выдаёт $1ADE15FC, а должно быть $A22515FC.

Вот исправленный:
CODE
Function HashFromStr(Name: String): Longword;
Var I: Integer;
Begin
  While (Length(Name) < 12) Do Name:=Name + #0;
  Name:=Copy(Name, 1, 12);
  For I:=1 To 12 Do Name[I]:=UpCase(Name[I]);
  Name:=Name + #0;
  result:=0;
  I:=1;
  While (Name[I] <> #0) Do
  Begin
    result:=((result ShL 1) Or (result ShR 31)) + PLongword(@Name[I])^;
    I:=I + 4;
  End;
End;

Кстати, помимо предложенных Xplorer'ом способов есть ещё один: можно использовать FileMon.exe от SysInternals (правда сейчас они объеденили его с RegMon.exe в Process Monitor, но я им не пользовался), потому что, скажем, игра Blade Runner сначала пытается открыть файл в текущем каталоге, а потом уже лезет в .MIX - имена без проблем перехватываются. Главное фильтр типа "*blade.exe*" поставить, чтобы системные обращения в лог не валились.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 11th December 2019 - 15:00