PDA

Просмотр полной версии : Редактор .dat файлов как сделать в Delphi??


BiTru
13.02.2012, 11:04
Как сделать оболочку для консольного приложения в Delphi?

ShellExecute(h, 'open', 'l2encdec.exe',PChar(' -s ' +s), NiL, SW_SHOW); РАСШИФРОВКА.

ShellExecute(h, 'open', 'l2encdec.exe', PChar
(' ' + ComboBox1.Text + ' dec-' + s), nil, SW_HIDE); ЗАШИФРОВКА.


С l2encdec.exe я разобрался получилось раскодировать и вывести в memo а также закодировать и сохранить!

Но вот L2 asm & disasm не могу продумать алгоритм если у кого есть какие мысли пишите буду всем постам благодарен!

Гайд:

l2encdec.exe - Применяется для расшифровки/шифрования файлов Lineage

Коммандная строка:

l2encdec.exe <command> <source file> [destination file]

<command>
-l/-g : расшифровывает original L2 files/ это относится к оффициальному клиенту
-d/-s : decrypts files encrypted with "new" RSA pairs
-e/-h <met> : encrypts file with chosen method. You must provide one
of the following: 111, 120, 121, 211, 212, 411, 412, 413, 414
-t : ignore tail (i.e. Exteel files have no tail)

Optional commands:

-r <rsa> : выбирает другую rsa ключевую пару.
0 - l2encdec's невыполнение 1 использованы чтобы
декодировать файлы L2J-VN. Вы не должны обеспечить эту команду,
если Вам не нужно пара кроме #0

Пример:
Расшифровка l2encdec.exe -s ItemName-e.dat
получим dec-ItemName-e.dat
Шифрование l2encdec.exe -h 412 dec-ItemName-e.dat
получим enc-ItemName-e.dat
После расшифровки к имени файла автоматом добавляется "dec-" а после шифровки - еще и "enc-"

------------------
l2asm-disasm, применяется для привидения расшифрованных бинарных файлов к табличному текстовому виду и наоборот.
Файлы Lineage - это набор упорядоченых даных, но не подписаных и на глаз не определить где, что начинается и заканчивается.
ddf файлы содержат структуры для преобразования (бинарный файл)<->(текстовый файл).

Коммандная строка:

l2disasm <-d ddf_file> [-q] [-e экспорт] input_file output_file

-d обязательное, и так - входные и выходные файлы
-e дополнительное и выполняет украшенный ddf файл с автоматически скорректированными выборами (особенно полезный для МЯГКО* выборы для l2asm).
-q аннулирует переменную ЗАГОЛОВКА и подавляет линию заголовка печати
-l заставьте 'немой перевод с основными транслитерациями
-f заставьте экономию их ASCF's с ' намеком
- <chartab> позволенное Вы выбираете как 8- битовые символы должны быть интерпретированы - устанавливается по умолчанию на ISO-8859-1

Получете текстовый файл в виде таблицы.

l2asm <-d ddf_file> [-q] input_file output_file

-q аннулирует переменную ЗАГОЛОВКА - l2asm примет заголовок, линия не присутствует
-l заставьте 'немой перевод с основными транслитерациями
-f заставьте кодирование всех строк ASCF как 8- бит
- <chartab> позволенное Вы выбираете как 8- битовые символы должны быть интерпретированы - устанавливается по умолчанию на ISO-8859-1

Пример:
l2disasm.exe -d ItemName-e.ddf -e ItemName-e-new.ddf dec-ItemName-e.dat ItemName-e.txt
l2asm -d ItemName-e-new.ddf -q ItemName-e.txt dec-ItemName-e.dat

И не забывайте затем зашифровать. l2encdec.exe -h 412 dec-ItemName-e.dat

Dinmaite
13.02.2012, 18:43
Оформлено плохо, по сути тема не для раздела Делфи совсем. Скорее уж это просто описание приложения la2encdec. Теперь вопрос, почему я не должен удалить эту тему?

BiTru
13.02.2012, 19:43
Описание писал для того что бы было понятно что я хочу от вас!
Мне всего навсего нужен алгоритм для двух приложений L2asm и disasm что бы реализовать оболочку Визуальный Редактора dat файлов клиента Lineage!
Программу пишу на Delphi и за этого выбран раздел Delphi!

Dinmaite
13.02.2012, 19:45
Тогда неверно выбран раздел, тему перенесу.

BiTru
13.02.2012, 19:56
Вопрос так и остался как средствами Delphi реализовать визуальную работу с консольным приложениями L2asm и disasm прошу хотя бы алгоритм остальное сам сделаю!

Для полного понимания выложу исходник в исходнике реализована расшифровка и зашифровка файлов с помощью l2encdec.exe
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, Forms,
Dialogs, StdCtrls, Shellapi, ImgList,
XPMan, FileCtrl, ComCtrls, ExtCtrls, Menus, ToolWin;

type
TForm1 = class(TForm)
ImageList1: TImageList;
XPManifest1: TXPManifest;
Panel3: TPanel;
ToolBar1: TToolBar;
ToolButton2: TToolButton;
ComboBox1: TComboBox;
StatusBar1: TStatusBar;
Panel1: TPanel;
Panel2: TPanel;
FileListBox1: TFileListBox;
FilterComboBox1: TFilterComboBox;
PopupMenu1: TPopupMenu;
N6: TMenuItem;
N7: TMenuItem;
PopupMenu2: TPopupMenu;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
Timer1: TTimer;
ToolButton1: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
Memo1: TMemo;
Memo2: TMemo;
Panel4: TPanel;
Panel5: TPanel;
ToolBar2: TToolBar;
Edit1: TEdit;
ToolButton6: TToolButton;
ToolButton8: TToolButton;
Edit2: TEdit;
ToolButton5: TToolButton;
ToolButton7: TToolButton;
ToolButton9: TToolButton;
Timer2: TTimer;
ToolButton10: TToolButton;
Timer3: TTimer;
Edit3: TEdit;
Memo3: TMemo;
Splitter1: TSplitter;
procedure N5Click(Sender: TObject);
procedure ToolButton2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FileListBox1DblClick(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure FileListBox1Click(Sender: TObject);
procedure ColorBox1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure ToolButton6Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure ToolButton9Click(Sender: TObject);
procedure Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Edit2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private

{ Private declarations }
public

{ Public declarations }
end;

var
Form1: TForm1;
s: string;
chosenDirectory: string;

implementation

uses Unit2;
{$R *.dfm}

procedure TForm1.ColorBox1Click(Sender: TObject);
begin
// Memo1.Font.Color:= ColorBox1.Selected; // Выбор цвета текста
end;

procedure TForm1.Edit2MouseDown(Sender: TObject; Button: TMouseButton;
// почистить Edit2
Shift: TShiftState; X, Y: Integer);
begin
Edit2.Clear;
end;

procedure TForm1.FileListBox1Click(Sender: TObject); // Статус бар
begin
StatusBar1.Panels[0].Text := 'Имя файла: ' + FileListBox1.Items
[FileListBox1.ItemIndex];
end;

procedure TForm1.FileListBox1DblClick(Sender: TObject); { РАСШИФРОФКА }
var
h: hwnd;
i: Integer;
begin

copyfile(PChar('l2encdec.exe'), PChar(FileListBox1.Directory), False);
// Открыть файл для расшифровки
// Выдергиваем имя файла и расширение
s := FileListBox1.Items[FileListBox1.ItemIndex];
Memo3.Lines.Add('{ РАСШИФРОФКА... } ' + s);
begin

// Теперь нам следует указать файл который нам нужен.
// Команды Раскодировать -s полный путь к файлу. Пример: C:\l2encdec.exe -s C:\l2.ini
// запуск скрыт SW_HIDE заУпск виден SW_SHOW

ShellExecute(h, 'open', 'l2encdec.exe',PChar(' -s ' +s), NiL, SW_SHOW);
begin
// батник
//Memo4.Lines.Text:= 'start '+'l2encdec.exe' + PChar (' -s ' +FileListBox1.FileName);
// Memo4.Lines.SaveToFile('Clean.bat');
begin
// Открыть в Memo1 раскодированый файл

sleep(1000);
Memo1.Clear;
Memo1.Lines.LoadFromFile('dec-' + s);
begin

// Подсчет строк в Memo
Memo2.Clear;
For i := 0 to Memo1.Lines.Count - 1 do // Запускаем цикл поиска строки
Memo2.Lines.Add(IntToStr(i));
Edit1.Text := IntToStr(i);
Memo3.Lines.Add('{ РАСШИФРОФКА ЗВЕРШИНА } ' + s);
end;
end;
end;
end;
end;

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
ToolButton2.ImageIndex := 6; // смена значка не сохранен
end;

procedure TForm1.N10Click(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;

procedure TForm1.N11Click(Sender: TObject);
begin
Memo1.ClearSelection;
end;

procedure TForm1.N12Click(Sender: TObject);
begin
Memo1.SelectAll;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
close;
end;

procedure TForm1.N8Click(Sender: TObject);
begin
Memo1.CutToClipboard;
end;

procedure TForm1.N9Click(Sender: TObject);
begin
Memo1.CopyToClipboard;
end;

procedure TForm1.Timer1Timer(Sender: TObject); // Перемотка 2-х Memo вместе
var
P1, P2: Integer;
FirstVisibleLine: Integer;
begin
P1 := SendMessage(Memo1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
P2 := SendMessage(Memo2.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
SendMessage(Memo2.Handle, EM_LINESCROLL, 0, P1 - P2);

end;

procedure TForm1.Timer2Timer(Sender: TObject); // Авто перемотка текста
begin
Memo1.Perform(WM_VSCROLL, SB_LINEDOWN, WM_VSCROLL);

end;

procedure TForm1.ToolButton1Click(Sender: TObject); // выбор папки
begin
SelectDirectory(' Укажите папку system вашей игры!', ' ', chosenDirectory);
FileListBox1.Directory := chosenDirectory;
end;

procedure TForm1.ToolButton2Click(Sender: TObject); { ЗАШИФРОВКА }
var
h: hwnd;
begin
// Сохранить изменение
Memo3.Lines.Add('{ ЗАШИФРОВКА... } ' + s);
Memo1.Lines.SaveToFile('dec-' + s);

// Теперь нам следует указать файл который нам нужен.
// Команды Закодировать -h 111, 120, 121, 211, 212, 411, 412, 413, 414 полный путь к файлу. Пример: C:\l2encdec.exe -h 412 C:\l2.ini

ShellExecute(h, 'open', 'l2encdec.exe', PChar
(' ' + ComboBox1.Text + ' dec-' + s), nil, SW_HIDE);

begin
// Копировать закодированый файл

sleep(1000);
if copyfile(PChar('enc-dec-' + s), PChar(FileListBox1.FileName), False) then

Memo3.Lines.Add('{ ЗАШИФРОВКА ЗАВЕРШИНА } ' + s);


end;
end;

procedure TForm1.ToolButton2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ToolButton2.ImageIndex := 2; // смена значка сохранен
end;

procedure TForm1.ToolButton4Click(Sender: TObject);
var
h: hwnd;
begin
// A:\l2Notepad Version 1.0.0.1\l2disasm.exe -d C4/dec-armorgrp.ddf dec-armorgrp.dat dec-armorgrp.txt
// "X:\l2asm-disasm_097\l2disasm.exe" -d "X:\l2asm-disasm_097\DDF\C4\sysstring-e.ddf" "X:\work\sysstring-e.dec" "X:\work\sysstring-e.txt"

ShellExecute(h, 'open', 'l2disasm.exe', PChar
(' -d ' + FileListBox1.FileName + ' ' + FileListBox1.FileName + ' ' +
FileListBox1.FileName), nil, SW_SHOW);
sleep(1000);

Memo1.Lines.LoadFromFile('dis-dec-' + s);

end;

procedure TForm1.ToolButton5Click(Sender: TObject); // Поиск текста в Memo1
var // Объявляем переменные
Find: string; // Искомая строка
i: Integer; // Счетчик для цикла
begin
Find := Edit2.Text; // Записываем в find текст из Edit
For i := 0 to Memo1.Lines.Count - 1 do // Запускаем цикл поиска строки
If Pos(Find, Memo1.Lines.Text) <> 0 Then
Begin
Memo1.SetFocus();
Memo1.SelStart := Pos(Find, Memo1.Lines.Text) - 1;
Memo1.SelLength := Length(Find);
end;
end;

procedure TForm1.ToolButton6Click(Sender: TObject); // Поиск строки по номеру

var
line: Integer;
begin
Memo1.SetFocus;
line := StrToIntDef(Edit1.Text, 1);
Memo1.SelStart := Memo1.Perform(EM_LINEINDEX, line, 0);
Memo1.Perform(EM_SCROLLCARET, 0, 0);
Memo1.SelLength := 1;
end;

procedure TForm1.ToolButton9Click(Sender: TObject);
// Визуальный поиск включение
begin
if Timer2.Enabled = True then
Timer2.Enabled := False

else
Timer2.Enabled := True;
begin

if Timer2.Enabled = True then
ToolButton9.ImageIndex := 14
else
ToolButton9.ImageIndex := 11;
end;
end;

end.

VeTaL_UA
13.02.2012, 21:43
Смотришь в хекс редакторе структуру файла и по ней вынимаешь нужную информацию...

BiTru
13.02.2012, 22:04
Смотришь в хекс редакторе структуру файла и по ней вынимаешь нужную информацию...
Вы наверно не правильно поняли меня я хочу сделать только оболочку для l2encdec l2disasm l2asm

l2encdec:
ShellExecute(h, 'open', 'l2encdec.exe',PChar(' -s ' +s), NiL, SW_SHOW); Раскодировал!
ShellExecute(h, 'open', 'l2encdec.exe', PChar (' ' + ComboBox1.Text + ' dec-' +s), nil, SW_HIDE); Закодировал!

l2disasm Не знаю как реализовать
l2asm Тут тоже не знаю

Так же сделана программа L2 FileEdit оболочка для утилит (l2encdec l2disasm l2asm) я хочу сделать тоже самое только свое)

Добавлено через 12 часов 26 минут
Или поправьте меня возможно я не туда копаю(

Как правильно пользоваться l2asm disasm что куда писать расскажите чтоб я понял)

BiTru
18.02.2012, 20:40
Так никто и не поможет мне?)

Dinmaite
18.02.2012, 21:30
ТС, что там обьяснять?
Пользуешся все тем же shellexecute, только верно расставляегшь параметры.
А если ты хочешь консольный вывод получать в свое оконное приложение то так и спроси у гуглы.

BiTru
19.02.2012, 08:45
(l2asm disasm) Если честно я не разу не пользовался этими программами,
в мануалах непонятное описание откуда какой файл берется?
и за этого мне трудно придумать алгоритм. Объясните пожалуйста как правильно пользоваться этими программами?

P/S
Код в Delphi мне не нужен я сам его прекрасно знаю! Мне нужна подробная информация пользования программой l2asm disasm

(я не спорю возможно я жестко туплю но все же жду помощи)

Dinmaite
19.02.2012, 13:27
Ждать помощи нужно не здесь, а в разделе ЛА2.
Здесь обсуждается разработка, а не использование прогграмм.

Закрывать?

BiTru
19.02.2012, 14:20
Я думал что кто то писал подобные программы оказалось что нет думаю нет смысла ждать можете закрыть.