Без экзешника дефолт открывается без проблем, ставлю твой exe и вот:Я часто использую программу UE-Explorer для декомпиляции файлов с расширением *.u. раньше мне приходилось сначала декодировать файлы с помощью других программ, а затем открывать их в UE-Explorer.
Я добавил в программу встроенный дешифратор для 111 и 121 кодировок, что избавляет от необходимости использовать сторонних программ.
Также в последней версии программы 1.4.2.7, доступной на сегодняшний день, возникала ошибка <Запрошенное значение "Ctrl" не найдено.> при запуске и программа не запускалась.
Похоже, она была связана с проблемами в работе русской версии Windows, я исправил эту ошибку и программа запускается без ошибок.
- Вы можете скачать программу с официального сайта, перейдя по следующей ссылке:
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация- После того как вы установите программу, вам нужно будет заменить файл в её папке на тот, который прикреплен к этой теме.
Все декомпилированные файлы будут подписаны как "dec-" в вкладках программы.
Посмотреть вложение 78748
Если мой файл то он должен был выдать Control так как ctrl уже нет, вот еще нашел место где он был возможно поможетБез экзешника дефолт открывается без проблем, ставлю твой exe и вот:
Если у вас есть опыт работы с C#, пожалуйста, посмотрите и подскажите, в чём может быть проблема. Я нашёл решение в интернете, и оно сработало. Я проверил его на нескольких версиях Windows, и всё работало нормально. Возможно, есть какая-то другая причина?теперь Alt
Я загрузил обновлённые исходные коды с сервера. Ошибка больше не возникает. Я создал новый проект на основе чистых исходников, добавив только декодер. Пожалуйста, проверьте.теперь Alt
у меня таких проблем нет и тем кому скидывал программу тоже их нет но я буду разбираться в чем причина.Попробовал
Выдает ошибку.
Тоже все норм с 1 раза запустилась, вчера уже проверил на одном файле, все гуд.у меня таких проблем нет и тем кому скидывал программу тоже их нет но я буду разбираться в чем причина.
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
public static class Lineage2Decrypter
{
// Ключ для дешифрования с помощью XOR
private static byte s_keyXOR; //Lineage2Ver111
private static byte[] s_lineage2Verbyte; //Lineage2Ver111,Lineage2Ver121
// Основная функция для дешифрования файла Lineage2
public static string L2DecodeU(string fileName)
{
// Проверяем, существует ли файл
if (!File.Exists(fileName)) return fileName;
// Считываем данные из файла
byte[] fileData = File.ReadAllBytes(fileName);
// Находим начальный индекс строки "Lineage2Ver111" в массиве байт
bool isLineage2Ver = FindStringIndex(fileData, Encoding.Unicode.GetBytes("Lineage2Ver111"));
if (isLineage2Ver)
{
s_keyXOR = 0xAC;
s_lineage2Verbyte = Encoding.Unicode.GetBytes("Lineage2Ver111"); //Lineage2Ver111
}
else // Если строка не найдена "Lineage2Ver111", тогда ищем "Lineage2Ver121"
{
isLineage2Ver = FindStringIndex(fileData, Encoding.Unicode.GetBytes("Lineage2Ver121"));
s_keyXOR = (byte)GetXORKey121(Path.GetFileName(fileName));
s_lineage2Verbyte = Encoding.Unicode.GetBytes("Lineage2Ver121"); //Lineage2Ver121
}
// Если строка найдена, то дешифруем файл
if (isLineage2Ver)
{
// Дешифруем данные с помощью XOR
byte[] decryptedData = DecryptData(fileData, s_lineage2Verbyte.Length, s_keyXOR);
// Создаем имя выходного файла
string outputFilePath = "temp";
int counter = 1;
string newFileName = "dec-" + Path.GetFileName(fileName);
// Проверяем, существует ли файл
if (!File.Exists("temp/dec-" + Path.GetFileName(fileName)))
{
outputFilePath = "temp/dec-" + Path.GetFileName(fileName);
}
else {
// Проверка, существует ли файл
while (File.Exists(Path.Combine(outputFilePath, newFileName)))
{
newFileName = $"({counter}){"dec-" + Path.GetFileName(fileName)}";
counter++;
}
outputFilePath = "temp/" + newFileName;
// MessageBox.Show(newFileName);
}
// Создаем папку "temp", если она не существует
string outputDirectory = Path.GetDirectoryName(outputFilePath);
if (!Directory.Exists(outputDirectory))
{
Directory.CreateDirectory(outputDirectory);
}
// Используем using-блок для автоматического закрытия файла
using (var outputFile = File.OpenWrite(outputFilePath))
{
// Сохраняем дешифрованные данные в выходной файл
outputFile.Write(decryptedData, 0, decryptedData.Length);
}
// Возвращаем имя выходного файла
return outputFilePath;
}
// Если строка не найдена, то файл не зашифрован
return fileName;
}
// Метод для поиска начала зашифрованных данных в массиве байт
private static bool FindStringIndex(byte[] data, byte[] pattern)
{
// Предполагаем, что совпадение найдено
bool match = false;
// Проходим по массиву данных, начиная с первого байта
for (int i = 0; i <= pattern.Length - 1; i++)
{
// Если байты совпадают
if (data[i] == pattern[i])
{
match = true;
}
else
{
match = false;
break;
}
}
return match;
}
// Метод для дешифрования данных с помощью XOR
private static byte[] DecryptData(byte[] data, int startIndex, byte key)
{
// Создаем массив для хранения дешифрованных данных
byte[] decryptedData = new byte[data.Length - startIndex];
// Проходим по массиву данных, начиная с заданного индекса
for (int i = startIndex, j = 0; i < data.Length; i++, j++)
{
// Дешифруем каждый байт с помощью XOR
decryptedData[j] = (byte)(data[i] ^ key);
}
// Возвращаем массив дешифрованных данных
return decryptedData;
}
// Метод для получения ключа XOR для Lineage2Ver121
private static int GetXORKey121(string filename)
{
int sum = 0;
foreach (char c in filename.ToLower())
{
sum += (byte)c;
}
return sum & 0xff;
}
// Метод для удаления временных файлов по завершению программы
public static void DeleteTempFiles()
{
if (Directory.Exists("temp"))
{
// Используем рекурсивное удаление для удаления всех файлов и подпапок
Directory.Delete("temp", true);
}
}
}
public void LoadFromFile(string filePathdec)
{
.......
.......
//Таким способом:
string filePath = Lineage2Decrypter.L2DecodeU(filePathdec); //Декомпилируем файл
.......
.......
}
СпасибоНа всякий случай я прилагаю исходный код. Возможно, кто-то, у кого возникла эта ошибка, сможет собрать его и разобраться в проблеме. Я не могу воспроизвести её ни на одном компьютере с чистой операционной системой Windows.
Собирал проект в C#:
Microsoft Visual Studio Community 2022 (64-разрядная версия) - Current Версия 17.11.5
Может кому-то отдельно понадобится дешифратор 111 и 121
C#:using System; using System.IO; using System.Text; using System.Windows.Forms; public static class Lineage2Decrypter { // Ключ для дешифрования с помощью XOR private static byte s_keyXOR; //Lineage2Ver111 private static byte[] s_lineage2Verbyte; //Lineage2Ver111,Lineage2Ver121 // Основная функция для дешифрования файла Lineage2 public static string L2DecodeU(string fileName) { // Проверяем, существует ли файл if (!File.Exists(fileName)) return fileName; // Считываем данные из файла byte[] fileData = File.ReadAllBytes(fileName); // Находим начальный индекс строки "Lineage2Ver111" в массиве байт bool isLineage2Ver = FindStringIndex(fileData, Encoding.Unicode.GetBytes("Lineage2Ver111")); if (isLineage2Ver) { s_keyXOR = 0xAC; s_lineage2Verbyte = Encoding.Unicode.GetBytes("Lineage2Ver111"); //Lineage2Ver111 } else // Если строка не найдена "Lineage2Ver111", тогда ищем "Lineage2Ver121" { isLineage2Ver = FindStringIndex(fileData, Encoding.Unicode.GetBytes("Lineage2Ver121")); s_keyXOR = (byte)GetXORKey121(Path.GetFileName(fileName)); s_lineage2Verbyte = Encoding.Unicode.GetBytes("Lineage2Ver121"); //Lineage2Ver121 } // Если строка найдена, то дешифруем файл if (isLineage2Ver) { // Дешифруем данные с помощью XOR byte[] decryptedData = DecryptData(fileData, s_lineage2Verbyte.Length, s_keyXOR); // Создаем имя выходного файла string outputFilePath = "temp"; int counter = 1; string newFileName = "dec-" + Path.GetFileName(fileName); // Проверяем, существует ли файл if (!File.Exists("temp/dec-" + Path.GetFileName(fileName))) { outputFilePath = "temp/dec-" + Path.GetFileName(fileName); } else { // Проверка, существует ли файл while (File.Exists(Path.Combine(outputFilePath, newFileName))) { newFileName = $"({counter}){"dec-" + Path.GetFileName(fileName)}"; counter++; } outputFilePath = "temp/" + newFileName; // MessageBox.Show(newFileName); } // Создаем папку "temp", если она не существует string outputDirectory = Path.GetDirectoryName(outputFilePath); if (!Directory.Exists(outputDirectory)) { Directory.CreateDirectory(outputDirectory); } // Используем using-блок для автоматического закрытия файла using (var outputFile = File.OpenWrite(outputFilePath)) { // Сохраняем дешифрованные данные в выходной файл outputFile.Write(decryptedData, 0, decryptedData.Length); } // Возвращаем имя выходного файла return outputFilePath; } // Если строка не найдена, то файл не зашифрован return fileName; } // Метод для поиска начала зашифрованных данных в массиве байт private static bool FindStringIndex(byte[] data, byte[] pattern) { // Предполагаем, что совпадение найдено bool match = false; // Проходим по массиву данных, начиная с первого байта for (int i = 0; i <= pattern.Length - 1; i++) { // Если байты совпадают if (data[i] == pattern[i]) { match = true; } else { match = false; break; } } return match; } // Метод для дешифрования данных с помощью XOR private static byte[] DecryptData(byte[] data, int startIndex, byte key) { // Создаем массив для хранения дешифрованных данных byte[] decryptedData = new byte[data.Length - startIndex]; // Проходим по массиву данных, начиная с заданного индекса for (int i = startIndex, j = 0; i < data.Length; i++, j++) { // Дешифруем каждый байт с помощью XOR decryptedData[j] = (byte)(data[i] ^ key); } // Возвращаем массив дешифрованных данных return decryptedData; } // Метод для получения ключа XOR для Lineage2Ver121 private static int GetXORKey121(string filename) { int sum = 0; foreach (char c in filename.ToLower()) { sum += (byte)c; } return sum & 0xff; } // Метод для удаления временных файлов по завершению программы public static void DeleteTempFiles() { if (Directory.Exists("temp")) { // Используем рекурсивное удаление для удаления всех файлов и подпапок Directory.Delete("temp", true); } } }
В даном исходники дешифратор вызывается из ProgramForm.cs в методе:
C#:public void LoadFromFile(string filePathdec) { ....... ....... //Таким способом: string filePath = Lineage2Decrypter.L2DecodeU(filePathdec); //Декомпилируем файл ....... ....... }
Исходные коды уже находятся в архиве. Вам нужно лишь распаковать его запустить проект и «Скомпилировал
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?