Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 21

Почему у меня работает а у других нет?

01.08.2013, 15:48. Показов 2984. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В крациях: Я сделал русик на онлайн игру через Delphi 7 и у меня все работает и изменяет байтbI а у друга прога сделанная с помощью Delphi 7 вbIдает ошибку или вообще не русиfицирует. Можно ли сделать не программу а .dll или как нибудь через С++, C# сделать русик а не Delphi 7, я много чего перепробbIвал но так и не сработало. У меня все работает на Ура!

Вот код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
  ProcessId: integer;
  ThreadId: integer;
  HandleWindow: Integer;
  WindowName: integer;
  write: cardinal;
  buf : array[0..1023] of WideChar;
const
  WindowTitle = 'PandoraSaga';
 
  AAddress : Array[1..61] Of Int64 = ($016012F8, $016013F4, $015F35F8, $015F38C8, $015F39A8, $015F3838, $015F3564, $015F3800, $015F3D38, $015F4ABC, $015F5254, $015FA844, $015FD77C, $01647134, $015F4C24, $015F34F4, $015F4B2C, $015F4BC0, $015FF89C, $015F352C, $016470FC, $01648BE4, $0164DEBC, $0164FD8C, $01646EC8, $01647270, $016474C8, $015F5358, $015FDB1C, $098AD2FC, $015FE030, $01651508, $0164B00C, $0164B2A8, $015F4B64, $015FFC1C, $01600EB8, $01600F28, $016021C4, $0160276C, $01602C4C, $016030D4, $01603144, $016031B4, $01603224, $0160440C, $016044EC, $0160468C, $0160759C, $0164689C, $016470C4, $016473C4, $01647884, $0164792C, $0164812C, $01648244, $0164890C, $0164B214, $0164E994, $0164EEEC, $0165108C);
  AString : Array[1..61] Of String = ('Параметры', 'Профиль', 'Сохранить Логин?', 'Подключение...', 'Вход...      ', 'Вы не ввели ваш пароль.    ', 'Войти ', 'Вы не ввели Логин.  ', 'ID/Пароль не действителен. ', 'Назд', 'Назд', 'Назд', 'Назд', 'Назд', 'Подключаемся...', 'Выхд', 'Выхд', 'Выхд из игры.', 'Выхд', 'Авторы ', 'Войти', 'Войти', 'Войти', 'Войти', 'Нет перса', 'Удалить персонаж', 'Удалить персонаж', 'Создать персонажа ', 'Чел. ', 'Воин   ', 'Без наций  ', 'Астир - Тер. Кор-ва ', 'Выход ', 'Выход из акк через %d секунд.', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена');
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button2Click(Sender: TObject);
begin
MessageDlg('Возникли проблемы? --> | Обратись в тему в нашей группе --> | ВКонтакте: ', mtInformation, [mbOK],0 );
end;
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  i : Integer;
begin
  WindowName := FindWindow(nil,WindowTitle);
  If WindowName = 0 then
  begin
    MessageDlg('Запустите сначало игру а потом Русифицируйте!', mtCustom,[mbOK],0);
    WindowName := FindWindow(nil,WindowTitle);
    If WindowName = 0 then Exit;
  end;
  ThreadId := GetWindowThreadProcessId(WindowName ,@ProcessId);
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
 
  For i:=1 To High(AAddress) Do
  WriteProcessMemory(HandleWindow, Ptr(AAddress[i]),
  StringToWideChar(AString[i],@buf,1024), Length(AString[i])*2+2, write);
  MessageDlg('Игра Русифицирована!', mtCustom,[mbOK],0);
end;
 
end.
Жду вашей помощи. Игра MMORPG, только не говорите что онлайн игрbI нельзя русиfицировать. Все можно. Игра русиfицируется у меня и все отлично а у других не хочет или ошибки прога вbIдает. Весь код вbIше. Если можно как нибудь сделать так чтоб у всех работала то я очень буду благодарен вам.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2013, 15:48
Ответы с готовыми решениями:

пишу программу, компилирую, у меня на компьютере работает, а на других нет
Создаю пустой проект в Visual Studio c++, добавляю файл c++, пишу программу, компилирую, у меня на компьютере работает, а на других нет, в...

работает в IE 6, в других нет почему
Здравствуйте, подскажите почему не работает в других браузерах? Исследование работы таймеров. <html> <head> ...

Почему JS на codepen работает, а у меня нет?
горизонтальный тач слайдер https://codepen.io/rugor/pen/XdKKYb Вроде все правильно, но не работает. Выносил CSS и JS отдельными...

37
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
05.08.2013, 13:26
Студворк — интернет-сервис помощи студентам
rainzek, Давай тогда поступим по другому. Сделай ещё один массив, в котором для каждого слова-заменителя будет исходное-слово так как оно записано в исходном варианте. Будем их искать и заменять. Я код сделаю вечером. Тебе нужно создать этот массив. Берёшь массив:
Delphi
1
2
3
4
5
6
7
8
9
10
11
  AString : Array[1..61] Of String = ('Параметры', 'Профиль', 'Сохранить Логин?',
  'Подключение...', 'Вход...      ', 'Вы не ввели ваш пароль.    ', 'Войти ',
  'Вы не ввели Логин.  ', 'ID/Пароль не действителен. ', 'Назд', 'Назд', 'Назд',
  'Назд', 'Назд', 'Подключаемся...', 'Выхд', 'Выхд', 'Выхд из игры.', 'Выхд',
  'Авторы ', 'Войти', 'Войти', 'Войти', 'Войти', 'Нет перса', 'Удалить персонаж',
  'Удалить персонаж', 'Создать персонажа ', 'Чел. ', 'Воин   ', 'Без наций  ',
  'Астир - Тер. Кор-ва ', 'Выход ', 'Выход из акк через %d секунд.', 'Отмена',
  'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена',
  'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена',
  'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена', 'Отмена',
  'Отмена', 'Отмена');
и делаешь почти такой же только исходных слов:
Delphi
1
  IAString : Array[1..61] Of String = ('Settings', 'Profile', 'Save Logs?',...
и так далее. Только это я перевёл русские на английский, и то примерно. А тебе нужно написать именно как в игре они написаны.
И выложи этот массив сюда.
А на эти ошибки компилятора не обращай внимания.
1
0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 21
06.08.2013, 14:03  [ТС]
Что-то не получается, можешь полнbIй код дать? Я вот так сделал но почему то результата вроде нет

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
  TBuf = Array[0..65535] Of Byte;
var
  Form1: TForm1;
  ProcessID, Addr, BytesRead: DWord;
  BazeAddr : Int64;
  HandleWindow: Integer;
  ProcessHandle: THandle;
  Mbi: TMemoryBasicInformation;
  BytesWrite: cardinal;
  buf : array[0..1023] of Char;
  ReadBuf: PChar;
  FindString : String = 'Log In';
  AddrString : Int64 = $015F3564;
const
  WindowTitle = 'PandoraSaga';
 
  AAddress : Array[1..7] Of Int64 = ($015F35F8, $015F38C8,
  $015F39A8, $015F3838, $015F3564, $015F3800, $015F3D38);
 
  AString : Array[1..7] Of String = ('Сохранить Логин?',
  'Подключение...', 'Вход...      ', 'Вы не ввели ваш пароль.    ', 'Войти ',
  'Вы не ввели Логин.  ', 'ID/Пароль не действителен. ');
 
  IAString : Array[1..7] Of String = ('Remember Login ID', 'Connecting...', 'Logging in...',
  'Please enter your password.', 'Log In', 'Please enter your ID.', 'ID/Password does not match.');
 
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  MessageDlg('Возникли проблемы? --> | Обратись в тему в нашей группе --> | ВКонтакте: ', mtInformation, [mbOK],0 );
end;
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  i,j : Integer;
  Finded : Boolean;
begin
  ProcessHandle := FindWindow(nil,WindowTitle);
  If ProcessHandle = 0 then
  begin
    MessageDlg('Запустите сначало игру а потом Русифицируйте!', mtCustom,[mbOK],0);
    ProcessHandle := FindWindow(nil,WindowTitle);
    If ProcessHandle = 0 then Exit;
  end;
  GetWindowThreadProcessId(ProcessHandle ,@ProcessID);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessID);
  //------------------------------------------------------------------
  //Определение базы адресов
  StringToWideChar(FindString,@buf,1024);
  Addr := 0;
  Finded := false;
  try
    while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do
    begin
      if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then
      begin
        GetMem(ReadBuf, Mbi.RegionSize);
        try
        if ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, ReadBuf, Mbi.RegionSize, BytesRead) then
        begin
          for i := 0 to BytesRead - Length(FindString)*2 do
          begin
            Finded:=true;
            for j := i to i+Length(FindString)*2-1 do
            if ReadBuf[j] <> buf[j-i] then
            begin
              Finded := false;
              break;
            end;
            if Finded then
            begin
              BazeAddr := Int64(Cardinal(Mbi.BaseAddress) + i)-AddrString;
              break;
            end;
          end;
        end else
        finally
          FreeMem(ReadBuf);
        end;
      end;
      if Finded then break;
      Addr := Addr + Mbi.RegionSize;
    end;
  except
  end;
 
  //------------------------------------------------------------------
  //Замена ...
  Try
    if Finded then
    begin
      For i:=1 To High(AAddress) Do
      WriteProcessMemory(ProcessHandle, Ptr(AAddress[i]+BazeAddr),
      StringToWideChar(AString[i],@buf,1024), Length(AString[i])*2+2, BytesWrite);
      MessageDlg('Игра Русифицирована!', mtCustom,[mbOK],0);
    end else
    MessageDlg('Не найдено ключевое слово. Игра Не Русифицирована!', mtCustom,[mbOK],0);
  finally
    CloseHandle(ProcessHandle);
  end;
end;
 
end.
Скинь пожалуйста весь код, может я не так делаю.

Добавлено через 38 минут
Стоп! Все работает отлично! И у меня и у друзей! Только есть еще 1 проблема. Почему то ID/Password does not match. не русиfицировалось до конца, как будто ей место не хватило. Может массив какой то расширить надо? Это слово русиFицировалось но вот так 'Ароль не действителен.' - это у друзей так пишет а у меня все норм пишет 'ID|Пароль ней действителен.' почему так? И нужнbI ли там байтbI вообще?

Добавлено через 8 минут
Все! Починил! Надо бbIло массив расширить. Остался 1 вопрос: байтbI обязательно нужнbI?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.08.2013, 17:57
Честно сказать не понял. Вроде код не изменился. Кроме того, что ты добавил массив исходных фраз. Я их думал использовать при поиске. Но, получается, что проблема была в другом.
Попробуй сделать так Из предыдущего кода взять эти 2 массива: AAddress и AString вставь в последний свой код вместо них же. А массив IAString - убери. А ключевое слово и адрес оставь такие как сейчас (в твоём последнем варианте).
Возможно слово 'Connecting...' встретилось где-раньше, а не на своём месте. Тогда, правда, не понятно, как она его поменяла. В общем, я не знаю, почему в предыдущем варианте не получилось.

Какие байты ты имеешь в виду, когда за них спрашиваешь. Если имеешь в виду массив AAddress - то, в таком коде он нужен. Если бы поиск был по каждому исходному слову - тогда нет. Но если у тебя так заработало - не будем пока ничего менять.
Напишешь, получилось ли полностью русифицировать? А то из твоего последнего поста не понятно, то ли всё нормально русифицировало, или только эти 7 фраз, которые в твоём последнем коде.
0
Заблокирован
06.08.2013, 18:01
Вы фигнёй страдаете.
0
06.08.2013, 18:06

Не по теме:

Dr_Quake, А у тебя никогда не было ощущения, что чего-то нужно сделать? Вот у меня такое ощущение висит, пока не закончу работу. Страдаем, но какие-то результаты всё же есть.
Я страдал и больше, когда только начал Delphi изучать. Но не зря, наверное.

0
06.08.2013, 18:09

Не по теме:

Одиночка, нет, нету. Я не пытаюсь попасть в мишень стреляя в небо и надеясь что упадёт на неё.

0
06.08.2013, 18:23

Не по теме:

Dr_Quake, Ну, в данном случае, имхо, мы стреляем во всех направлениях, в которых мишень может находиться. А потом по результатам делаем выводы.
Каюсь, это мой стиль работы с неизвестным. Сначала попытаться отстреляться с минимальными затратами. Не вдаваясь в подробности. Не получится - постараться углубиться дальше. И так до полного решения поставленной задачи. Увы, есть столько того, что я не знаю. Но мне лень изучать.

0
Заблокирован
06.08.2013, 18:32
Анализ показывает - ресурсы шифрованы, реверсить пока лень, констатирую факт - адреса будут полностью динамические, надо строго искать по контенту в памяти.
1
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.08.2013, 18:43
адреса будут полностью динамические, надо строго искать по контенту в памяти.
Почему тогда у него последний раз получилось? Правда, интересно, почему не получилось предпоследний раз? Код остался тот же. Изменилась только фраза для расчёта базы.
Ну, попробует, а там, если что - переделаем на поиск и замену по контенту.

Не по теме:

Я, честно сказать, ещё до конца не понял размещения программы в памяти. С этой виртуализацией. Ну, если нужно будет - разберёмся.

0
Заблокирован
06.08.2013, 19:02
ImageBase скорее всего вообще не имеет отношения к сдвигу.
0
0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 21
07.08.2013, 18:19  [ТС]
Всё работает!
Dr_Quake, как видишь метод тbIка сработал. Придираться к людям не надо, умеешь - делай а если не умеешь то не мешай другим.

Одиночка, на счет байтов, скорее всего они не нужнbI потому что с байтами не работало у других а с поиском слов работает хорошо. Спасибо, дальше я сам справлюсь
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.08.2013, 18:23
Да, какие байты ты имеешь в виду. В последнем коде не используется поиск слов. Всё так как было в предыдущем коде. Прочитай мой пост после твоего предыдущего поста.
Можешь поэкспериментировать. Убрать можно просто закоментить (//). Если не пойдёт - уберёшь слэши комментария и всё.
0
Заблокирован
07.08.2013, 19:15
Одиночка, поиск слов тоже не панацея, в следующем патче поменяют и по кругу... Надо выделять слова и фразы по #00#00 хотя бы в участке памяти, а потом уже только сравнивать и заменять, тогда будет в разы легче с новыми версиями выпускать патчи.
1
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
07.08.2013, 19:38
Dr_Quake, Спасибо, конечно, но код ещё на поиск слов даже не переделан. Я только предполагал это сделать. Т.е. тот массив, который он там создал из исходных фраз - пока не у дел. Ну, пошло, и хорошо. Может причина в том, что поменял слово для поиска базового адреса. Или сделал ошибку в коде, а потом исправил.
Но, в общем-то, если работает, я считаю свою миссию законченной. Глубже копать не охота.
Два ноля: имеешь в виду - конечные ноли юникодовской строки? А какой смысл их искать, если всё равно нужно сравнивать всю фразу? Существенно это поиск не ускорит. А ему всё равно придётся переписывать весь массив исходных фраз и фраз-замен. Другое дело, что по фразам не нужно было-бы изменять код. Да и вообще можно эти массивы сделать в *ini файле. И менять только в ini, а программа (exe-ник) останется та же. Но это уже другая тема.

Не по теме:

Помнишь с чего началась эпопея? Как сделать вместо числа - текст?. А вылилось уже в русификатор для игры. При желании сам доделает.

0
Заблокирован
07.08.2013, 19:39
Разделитель #00#00 в любом случае, не слова же переводить отдельно. Теперь его ждёт открытая бета и бан аккаунта в любом раскладе как только античит введут, жаль конечно, но результата добился и научился чему-то.
0
07.08.2013, 19:43

Не по теме:

Надеюсь он все посты читает.

0
0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 21
09.08.2013, 04:12  [ТС]
Читаю, Dr_Quаke, с чего тbI взял что это палится? Я уже этим год занимаюсь и ничего, но раньше русик делал через CE и не только русиком занимался.
0
Заблокирован
09.08.2013, 09:21
Мда... Тяжёлый случай...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2013, 09:21

Почему в мазиле код работает правильно а в других браузерах нет?
Есть файл удаления и файл в котором выводятся картинки .После нажатия кнопки под картинкой выполняется код в файле удаления и происходит...

Почему в одних IDE код работает, а в других нет? (Visual Studio vs DevC++)
Есть простой код, который находит максимальное значение в массиве. Но есть странность одна: 1)На Visual Studio программа работает...

кто может объяснить,почему на моем компе программа работает на других нет?код в Delphi
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,...

Помогите! Почему у меня не идёт программа на других компьютерах?

отправка почти у других не работает а у меня робит
IdMessage1-&gt;From-&gt;Name = &quot;rinof1&quot;; // отправитель IdMessage1-&gt;From-&gt;Address = &quot;rinof1-1@mail.ru&quot;; // адресс ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru