Переименование l2.exe

  • Автор темы Автор темы Neo`
  • Дата начала Дата начала

Neo`

Хозяин тайги
Powered by PTS
Сообщения
663
Розыгрыши
0
Решения
1
Репутация
282
Реакции
1 237
Баллы
1 753
Подскажите такой момент. В разных клиентах l2.exe ведет себя по-разному, где-то можно переименовать l2.exe например в l3.exe и он запустится и будет работать, а в других клиентах при переименовании l2.exe при запуске выдает ошибку File corrupted. Как убрать эту проверку названия запускаемого файла ?
 
Последнее редактирование:
Решение
А запускать своим экзешником, переименовав оригинальный в l2.bin?

Вот минимальный код на c# (.NET Framework 2.0)
C#:
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;

namespace L2
{
    class Program
    {
        static void Main(string[] args)
        {
            var executableFile = "l2.bin";
            if (!File.Exists(executableFile))
            {
                MessageBox(IntPtr.Zero, $"File {executableFile} not found!", "Warning!", MB_ICONWARNING);
                return;
            }
           
            try
            {
                _ = new Process
                {                
                    StartInfo = new ProcessStartInfo()
                    {...
неужели никто не сталкивался? у многих проектов в т.ч. asterios видел, что запускается не l2.exe
 
На глобале (286 клиент) помимо простого переименования пришлось реверсить нормальный такой кусок в дллках клиента, так что не всё так просто
 
А запускать своим экзешником, переименовав оригинальный в l2.bin?

Вот минимальный код на c# (.NET Framework 2.0)
C#:
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;

namespace L2
{
    class Program
    {
        static void Main(string[] args)
        {
            var executableFile = "l2.bin";
            if (!File.Exists(executableFile))
            {
                MessageBox(IntPtr.Zero, $"File {executableFile} not found!", "Warning!", MB_ICONWARNING);
                return;
            }
           
            try
            {
                _ = new Process
                {                
                    StartInfo = new ProcessStartInfo()
                    {
                        FileName = executableFile,
                        UseShellExecute = false,
                        Verb = "runas"
                    }
                }.Start();
            }
            catch (Exception e)
            {
                MessageBox(IntPtr.Zero, e.ToString(), e.Message, 0);
            }
        }

        // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
        public static readonly long MB_ICONWARNING = 0x00000030L;

        // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, long uType);
    }
}

Проект в архиве во вложении (в папке /bin/x86/Release компиленный). В итоге экзешник можно именовать как хочешь
Что-то подобное уже было в этой теме
 

Вложения

  • l2.zip
    l2.zip
    31,1 КБ · Просмотры: 12

Neo`

Баллов: 18
Огромнейшее спасибо за помощь!

Pikachu

Баллов: 18
Красавчег
Решение
А запускать своим экзешником, переименовав оригинальный в l2.bin?

Вот минимальный код на c# (.NET Framework 2.0)
C#:
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;

namespace L2
{
    class Program
    {
        static void Main(string[] args)
        {
            var executableFile = "l2.bin";
            if (!File.Exists(executableFile))
            {
                MessageBox(IntPtr.Zero, $"File {executableFile} not found!", "Warning!", MB_ICONWARNING);
                return;
            }
         
            try
            {
                _ = new Process
                {              
                    StartInfo = new ProcessStartInfo()
                    {
                        FileName = executableFile,
                        UseShellExecute = false,
                        Verb = "runas"
                    }
                }.Start();
            }
            catch (Exception e)
            {
                MessageBox(IntPtr.Zero, e.ToString(), e.Message, 0);
            }
        }

        // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
        public static readonly long MB_ICONWARNING = 0x00000030L;

        // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, long uType);
    }
}

Проект в архиве во вложении (в папке /bin/x86/Release компиленный). В итоге экзешник можно именовать как хочешь
Что-то подобное уже было в этой теме
Спасибо огромнейшее! Это как раз то, что нужно! Вчера пробовал реализовать на .net 10 подобное, но у меня при запуске файла l2.bin требовало повышение прав до администратора, а в вашем исходнике - без прав администратора всё отлично запускается! Еще раз огромнейшее спасибо за помощь!

UPD: ваша программа тоже запускается с правами администратора (только сейчас обратил, что в ней просто есть requireAdministrator, а это не вариант т.к. сразу лишит возможность играть игроков у которых нет возможности запустить клиент от администратора (например, если запустить игровой клиент на работе, где нет прав админа на пк) :(
 
Последнее редактирование:
в файле манифеста изменить на asInvoker и пересобрать. Вот только это не поможет, если оригинальный экзешник требует запуск с правами администратора
 
в файле манифеста изменить на asInvoker и пересобрать. Вот только это не поможет, если оригинальный экзешник требует запуск с правами администратора
оригинальный exe не требует прав администратора, проблема в том, что ОС по-умолчанию не умеет запускать l2.bin, а чтобы запустить его из программы - уже требуется права администратора, вот в этом и вопрос: либо как это обойти, либо найти в каком месте l2 проверяет название бинарника который запускается (почему l2.exe можно запускать, а l3.exe уже вызовет ошибку File Corrupted).
 
оригинальный exe не требует прав администратора, проблема в том, что ОС по-умолчанию не умеет запускать l2.bin, а чтобы запустить его из программы - уже требуется права администратора, вот в этом и вопрос: либо как это обойти, либо найти в каком месте l2 проверяет название бинарника который запускается (почему l2.exe можно запускать, а l3.exe уже вызовет ошибку File Corrupted).
в l2.ini есть вот такая вот строка EXEName=l2.exe, но что-то мне подсказывает это не учитывается при запуске. Попробовать конечно можно. У меня лично не прокатило такое на 140 протоколе
 
оригинальный exe не требует прав администратора, проблема в том, что ОС по-умолчанию не умеет запускать l2.bin, а чтобы запустить его из программы - уже требуется права администратора, вот в этом и вопрос: либо как это обойти, либо найти в каком месте l2 проверяет название бинарника который запускается (почему l2.exe можно запускать, а l3.exe уже вызовет ошибку File Corrupted).
На сколько я помню, в функции l2Init ( которая находиться в engine.dll) , указано строковое значение "l2.exe" , либо что то похожее( т.е название может браться из какого то файла ).
 
Назад
Сверху Снизу