trainerbase 3.11.2__tar.gz → 3.11.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. {trainerbase-3.11.2 → trainerbase-3.11.4}/PKG-INFO +1 -1
  2. {trainerbase-3.11.2 → trainerbase-3.11.4}/pyproject.toml +1 -1
  3. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/codeinjection.py +21 -19
  4. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/main.py +6 -3
  5. {trainerbase-3.11.2 → trainerbase-3.11.4}/LICENSE +0 -0
  6. {trainerbase-3.11.2 → trainerbase-3.11.4}/README.rst +0 -0
  7. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/__init__.py +0 -0
  8. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/common/__init__.py +0 -0
  9. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/common/abc.py +0 -0
  10. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/common/helpers.py +0 -0
  11. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/common/keyboard.py +0 -0
  12. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/common/teleport.py +0 -0
  13. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/config.py +0 -0
  14. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gameobject.py +0 -0
  15. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/__init__.py +0 -0
  16. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/helpers.py +0 -0
  17. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/injections.py +0 -0
  18. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/misc.py +0 -0
  19. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/objects.py +0 -0
  20. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/scripts.py +0 -0
  21. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/speedhack.py +0 -0
  22. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/teleport.py +0 -0
  23. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/gui/types.py +0 -0
  24. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/memory.py +0 -0
  25. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/scriptengine.py +0 -0
  26. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/speedhack.py +0 -0
  27. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase/tts.py +0 -0
  28. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase_vendor/FASM.EXE +0 -0
  29. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase_vendor/speedhack32.dll +0 -0
  30. {trainerbase-3.11.2 → trainerbase-3.11.4}/trainerbase_vendor/speedhack64.dll +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: trainerbase
3
- Version: 3.11.2
3
+ Version: 3.11.4
4
4
  Summary: Framework for creating game trainers/mods
5
5
  Home-page: https://gitlab.com/python-trainers/trainer-base
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "trainerbase"
3
- version = "3.11.2"
3
+ version = "3.11.4"
4
4
  description = "Framework for creating game trainers/mods"
5
5
  authors = ["v01d <v01d@v01d.ru>", "doomayka <zd@doomayka.ru>"]
6
6
  license = "MIT"
@@ -47,8 +47,10 @@ class CodeInjection(AbstractCodeInjection):
47
47
 
48
48
  @override
49
49
  def inject(self):
50
- self.original_code = pm.read_bytes(self.address.resolve(), len(self.code_to_inject))
51
- pm.write_bytes(self.address.resolve(), self.code_to_inject, len(self.code_to_inject))
50
+ injection_point = self.address.resolve()
51
+
52
+ self.original_code = pm.read_bytes(injection_point, len(self.code_to_inject))
53
+ pm.write_bytes(injection_point, self.code_to_inject, len(self.code_to_inject))
52
54
  self._injected = True
53
55
 
54
56
  @override
@@ -90,33 +92,34 @@ class AllocatingCodeInjection(AbstractCodeInjection): # pylint: disable=too-man
90
92
 
91
93
  @override
92
94
  def inject(self):
93
- self.original_code = pm.read_bytes(self.address.resolve(), self.original_code_length)
95
+ injection_point = self.address.resolve()
96
+
94
97
  self.new_memory_address: int = pm.allocate(self.new_memory_size)
95
98
 
99
+ self.original_code = pm.read_bytes(injection_point, self.original_code_length)
100
+
96
101
  if pm.is_64_bit:
97
- new_mem_jump_code_generator = get_long_x64_jump_to_new_mem_code
98
- jump_back_code_generator = get_long_x64_jump_back_code
102
+ jump_to_new_mem = compile_asm(get_long_x64_jump_to_new_mem_code(self.new_memory_address))
103
+ jumper_length = len(jump_to_new_mem)
104
+ jump_back_address = injection_point + jumper_length - 1
105
+ jump_back = compile_asm(get_long_x64_jump_back_code(jump_back_address))
99
106
  else:
100
- new_mem_jump_code_generator = get_simple_jump_code
101
- jump_back_code_generator = get_simple_jump_code
102
-
103
- jump_to_new_mem = compile_asm(new_mem_jump_code_generator(self.new_memory_address))
104
- jumper_length = len(jump_to_new_mem)
107
+ jump_to_new_mem = compile_asm(get_simple_jump_code(self.new_memory_address, injection_point))
108
+ jumper_length = len(jump_to_new_mem)
109
+ jump_back_address = injection_point + jumper_length
110
+ jump_back = compile_asm(
111
+ get_simple_jump_code(jump_back_address, self.new_memory_address + len(self.code_to_inject)),
112
+ )
105
113
 
106
114
  if jumper_length < self.original_code_length:
107
115
  jump_to_new_mem += b"\x90" * (self.original_code_length - len(jump_to_new_mem))
108
116
  elif jumper_length > self.original_code_length:
109
117
  raise ValueError(f"Jumper length > original code length: {jumper_length} > {self.original_code_length}")
110
118
 
111
- jump_back_address = self.address.resolve() + jumper_length
112
- if pm.is_64_bit:
113
- jump_back_address -= 1
114
-
115
- jump_back = compile_asm(jump_back_code_generator(jump_back_address))
116
119
  code_to_inject = self.code_to_inject + jump_back
117
120
 
118
121
  pm.write_bytes(self.new_memory_address, code_to_inject, len(code_to_inject))
119
- pm.write_bytes(self.address.resolve(), jump_to_new_mem, len(jump_to_new_mem))
122
+ pm.write_bytes(injection_point, jump_to_new_mem, len(jump_to_new_mem))
120
123
 
121
124
  @override
122
125
  def eject(self):
@@ -158,10 +161,9 @@ def compile_asm(code: Code) -> bytes:
158
161
  return code
159
162
 
160
163
 
161
- def get_simple_jump_code(address: int) -> str:
164
+ def get_simple_jump_code(address: int, ip: int) -> str:
162
165
  return f"""
163
- push {address}
164
- ret
166
+ jmp {address - ip}
165
167
  """
166
168
 
167
169
 
@@ -11,7 +11,7 @@ from trainerbase.scriptengine import Script, system_script_engine
11
11
  from trainerbase.speedhack import SpeedHack
12
12
 
13
13
 
14
- def run(
14
+ def run( # pylint: disable=too-complex
15
15
  run_gui: Callable[[Callable], None],
16
16
  on_gui_initialized_hook: Callable | None = None,
17
17
  on_shutdown_hook: Callable | None = None,
@@ -32,13 +32,16 @@ def run(
32
32
  if on_gui_initialized_hook is not None:
33
33
  try:
34
34
  on_gui_initialized_hook()
35
- except Exception: # pylint: disable=broad-exception-caught
35
+ except: # pylint: disable=bare-except
36
36
  print(format_exc(), file=stderr)
37
37
  on_shutdown()
38
38
 
39
39
  system_script_engine.register_script(Script(update_frozen_objects, enabled=True))
40
40
  system_script_engine.register_script(Script(update_displayed_objects, enabled=True))
41
41
 
42
- run_gui(on_gui_initialized)
42
+ try:
43
+ run_gui(on_gui_initialized)
44
+ except: # pylint: disable=bare-except
45
+ print(format_exc(), file=stderr)
43
46
 
44
47
  on_shutdown()
File without changes
File without changes