![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() Immortal Сообщений: 2 359 Спасибо сказали: 461 раз ![]() |
Требуются программисты на Си (ковыряние чужих исходников на языке, являющимся близкой производной Си) и реверс-инженеры (ковыряние чужого экзешника, откомпилированного с Си, и ничем не защищенного и не запакованного). Также приветствуются любые люди, умеющие писать распаковщики под хитрые деф-подобные форматы файлов.
Тема проекта: http://forum.df2.ru/index.php?showtopic=8422&st=220 -------------------- Бак, ты чего? Усмотрел в моём сообщении крамолу? ;)
hippocamus Руки бы тебе отрезать за такие предложения по тактике и балансу. И клизму с патефонными иголками. Бак |
|
|
![]() |
![]()
Сообщение
#2
|
|
![]() Immortal Сообщений: 2 415 Спасибо сказали: 60 раз ![]() |
Это содержимое плагина экстрактора на Яве для PAK файлов игры
Код import java.io.File; public class Plugin_PAK_HMMSYS extends ArchivePlugin { public Plugin_PAK_HMMSYS() { name = "PAK_HMMSYS"; canRead = true; canWrite = false; canReplace = false; canRename = false; allowImplicitReplacing = true; games = (new String[] { "Rising Kingdoms" }); extensions = (new String[] { "pak" }); columns = Archive.getColumns(); } public int getMatchRating(FileManipulator filemanipulator) { int i; i = 0; if(filemanipulator.getExtension().equals(extensions[0])) i += 25; if(filemanipulator.readString(15).equals("HMMSYS PackFile")) i += 50; filemanipulator.skip(17); int j = filemanipulator.getLength(); ArchivePlugin.check; if(FieldValidator.numFiles(filemanipulator.readIntL())) i += 5; ArchivePlugin.check; if(FieldValidator.length(filemanipulator.readIntL(), j)) i += 5; return i; Throwable throwable; throwable; return 0; } public Resource[] read(File file) { Resource aresource[]; addFileTypes(); FileManipulator filemanipulator = new FileManipulator(file, "r"); filemanipulator.skip(32); int i = filemanipulator.readIntL(); ArchivePlugin.check; FieldValidator.numFiles(i); filemanipulator.skip(4); int j = filemanipulator.getLength(); aresource = new Resource[i]; WSProgressDialog.loadProgress(i); String s = ""; for(int k = 0; k < i; k++) { int l = filemanipulator.readByteU(); int i1 = filemanipulator.readByteU(); int j1 = l - i1; String s1 = ""; if(i1 > 0) s1 = s.substring(0, i1); s1 = s1 + filemanipulator.readString(j1); s = s1; int k1 = filemanipulator.getOffset(); byte byte0 = 4; int l1 = filemanipulator.readIntL(); ArchivePlugin.check; FieldValidator.offset(l1, j); int i2 = filemanipulator.getOffset(); byte byte1 = 4; int j2 = filemanipulator.readIntL(); ArchivePlugin.check; FieldValidator.length(j2, j); aresource[k] = new ReplacableResource(file, s1, l1, k1, byte0, j2, i2, byte1); WSProgressDialog.setProgress(k); } filemanipulator.close(); return aresource; Throwable throwable; throwable; Plugin.logError(throwable); return null; } А вот описание: Код // The filenames are stored so that directory names etc are reused, thus minimising repeats.
// To determine the filename, take the first "Previous Filename Reuse Length" chars of the // filename of the previous file, and append the "Filename Part" to it. // In other words, if a directory repeats, you would keep the first X bytes of the previous // file and just append the actual name of the file. 16 - Header ("HMMSYS PackFile" + (byte)10) 4 - Unknown (26) 12 - null 4 - Number Of Files? 4 - Directory Length [+40 archive header] // for each file 1 - Filename Length 1 - Previous Filename Reuse Length X - Filename Part (length = filenameLength - previousFilenameReuseLength) 4 - File Offset 4 - File Length X - Padding (repeating 153,121,150,50) until first file offset X - File Data -------------------- |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 12 October 2025 - 22:23 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|