682150de48
Loader no longer touches disk: drop the LoadLibraryW path that
extracted OpenZen.dll to %TEMP%\OpenZenLoader and replace it with
an in-process PE loader that maps the embedded DLL straight into
the target Java process.
native/loader (new manual_map.cpp/.h):
- VirtualAllocEx in the remote process for SizeOfImage,
locally apply relocations + IAT patching (kernel32 etc. are
KnownDLLs so local GetProcAddress addresses are valid in the
remote), WriteProcessMemory the finished image once,
VirtualProtectEx to match section characteristics, then run a
minimal x64 trampoline shellcode that calls DllMain with
DLL_PROCESS_ATTACH using the proper ABI (shadow space,
16-byte stack alignment).
- embedded_dll.cpp now hands back a pointer into the .rsrc
section instead of writing the DLL out. injector.cpp shrinks
to a 14-line shim around inject_in_memory.
native (top-level CMakeLists.txt):
- Force /MT (CMAKE_MSVC_RUNTIME_LIBRARY = MultiThreaded) for
both the DLL and the loader EXE. Without this the manual
mapper's local-address import resolution trips over
vcruntime140 / ucrtbase, which are not KnownDLLs and may have
different bases in the target process - leading to NULL
derefs inside msvcp140 after injection. With /MT the only
import surface left is KERNEL32.
native/dll (jar_extract.cpp):
- Replace FindResource/LoadResource/SizeofResource with a
hand-rolled PE resource directory walker. FindResource paths
through LdrFindResource_U, which depends on the PEB.Ldr table
that manual-mapped modules are not part of, so the standard
API returns NULL for the embedded zen.jar after injection.
native/loader UI:
- Drop the now-pointless DLL Path edit + Browse button.
- Add per-process "Window Class" column harvested via
GetClassNameW alongside the existing window title.
- Add a Minecraft Only checkbox (default on): show only rows
whose window title startsWith "Minecraft" and does not
contain "Launcher", filtering HMCL / MultiMC / generic Java
apps out of the picker.
build.gradle:
- Add cleanNative (Delete) hooked into clean so wiping the
project also removes native/build/ and the staged
native/zen.jar (CMake would otherwise hold onto the previous
configure).
gradle.properties:
- Fill in the real mod metadata (id=hey, name=OpenZen,
authors=Shirona1337, group=io.github.openzen, description).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
59 lines
3.3 KiB
Properties
59 lines
3.3 KiB
Properties
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
|
|
# This is required to provide enough memory for the Minecraft decompilation process.
|
|
org.gradle.jvmargs=-Xmx3G
|
|
org.gradle.daemon=false
|
|
|
|
|
|
## Environment Properties
|
|
|
|
# The Minecraft version must agree with the Forge version to get a valid artifact
|
|
minecraft_version=1.20.1
|
|
# The Minecraft version range can use any release version of Minecraft as bounds.
|
|
# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly
|
|
# as they do not follow standard versioning conventions.
|
|
minecraft_version_range=[1.20.1,1.21)
|
|
# The Forge version must agree with the Minecraft version to get a valid artifact
|
|
forge_version=47.4.20
|
|
# The Forge version range can use any version of Forge as bounds or match the loader version range
|
|
forge_version_range=[47,)
|
|
# The loader version range can only use the major version of Forge/FML as bounds
|
|
loader_version_range=[47,)
|
|
# The mapping channel to use for mappings.
|
|
# The default set of supported mapping channels are ["official", "snapshot", "snapshot_nodoc", "stable", "stable_nodoc"].
|
|
# Additional mapping channels can be registered through the "channelProviders" extension in a Gradle plugin.
|
|
#
|
|
# | Channel | Version | |
|
|
# |-----------|----------------------|--------------------------------------------------------------------------------|
|
|
# | official | MCVersion | Official field/method names from Mojang mapping files |
|
|
# | parchment | YYYY.MM.DD-MCVersion | Open community-sourced parameter names and javadocs layered on top of official |
|
|
#
|
|
# You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
|
|
# See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
|
|
#
|
|
# Parchment is an unofficial project maintained by ParchmentMC, separate from Minecraft Forge.
|
|
# Additional setup is needed to use their mappings, see https://parchmentmc.org/docs/getting-started
|
|
mapping_channel=official
|
|
# The mapping version to query from the mapping channel.
|
|
# This must match the format required by the mapping channel.
|
|
mapping_version=1.20.1
|
|
|
|
|
|
## Mod Properties
|
|
|
|
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
|
|
# Must match the String constant located in the main mod class annotated with @Mod.
|
|
mod_id=hey
|
|
# The human-readable display name for the mod.
|
|
mod_name=OpenZen
|
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
|
mod_license=All Rights Reserved
|
|
# The mod version. See https://semver.org/
|
|
mod_version=1.0
|
|
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
|
# This should match the base package used for the mod sources.
|
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
|
mod_group_id=io.github.openzen
|
|
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
|
|
mod_authors=Shirona1337
|
|
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
|
|
mod_description=Open sourced zen client |