Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Program: NXPatcher Lite
Version: 2.1
Language: C++
Download: http://static.southperry.net/NXPatch.../NXPatcher.exe
Changelog: Link
Audience: Absolute noobies that want a simple, easy, and fast way to make pre-patchers.
Usage:
- From the command line: "NXPatcher.exe <filename>"
- Drag and drop any patch file onto NXPatcher.exe
- Execute NXPatcher.exe and it will show you a dialog window so you can select the patch file you want.
Note: This is beta software. Please test it!
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Just in case anyone else (guests) were getting "This program can't start because MSVCP110.dll is missing from your computer," from this most recent (beta) version. Try installing the MS Visual C++ Redistributable (2012), this is especially applicable on machines that can be deemed as old potatoes which might only be used as mule computers. Otherwise, no problems on computers I didn't fish out of the basement. Thanks for the great work.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Hi Fiel
do you know of anything about the wz file being encoded ? recently in GMS
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
WARNING: It is no longer recommended to use Orbit Downloader. Recent versions of this program have been performing SYN Flooding against Vietnamese IP addresses. For that reason I have removed the Orbit Downloader recommendation. Please consider using some other file download manager.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Hello, I am a Maple Story user in South Korea. I ran into a trouble while I was analyzing this NXPatcher with great interest. I'm sending this message because I wanted to know about checking Maple Story's latest version, and how I can check minor patch files when it is minor patch.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Quote:
Originally Posted by krnis
how to apply the minor patch with compare each latest version of exe file and minor patch version of exe file?
and do you know website address of latest version of maplestory?
For minor patches:
The program connects to the patch directory, but instead of downloading the patch file it downloads Version.info. Version.info contains all of the versions which that directory has the patch for, a CRC of the Maplestory patcher, and a CRC of the Maplestory.exe file. It then runs a CRC check on Maplestory.exe. If the CRC is different, then it downloads the new EXE from the patch FTP. It downloads ExePatch.dat which gets renamed as Maplestory.exe on your computer. This is how minor patches work.
The CRC used is the same CRC that's used for the patch files. The source code for how to compute this CRC is in the source code provided in the NXPatcher Advanced spoiler.
As far as how to figure out where the next patch will be, that information on how to find it is located in the NXPatcher Lite and NXPatcher Advanced spoilers. You can use Patchwatcher.net if you'd rather not figure it out yourself.
Here is an example of what the patch directory looks like:
ftp://tw.patch.maplestory.gamania.co...atchdir/00160/
Of course, that's for the Taiwanese version.
If there is a new version of maplestory and we need to figure out where the patch file is being downloaded from, then it's so easy to load up the program in a debugger (WinDBG, IDA Pro) and get the HTTP/FTP address.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Quote:
Originally Posted by
Fiel
If there is a new version of maplestory and we need to figure out where the patch file is being downloaded from, then it's so easy to load up the program in a debugger (WinDBG, IDA Pro) and get the HTTP/FTP address.
Or sniff where it tries to go, to be less invasive.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
So I've been trying to use this multiple times but I always get the same error.
I heard of people still using this so I'm pretty sure it's a problem on my side.
It gives me the error 'Out of memory!' every time I try. I've done what the FAQ tells me to do and I have plenty of RAM left over (I have 8GB and about 3 GB was used pre-NXPatcher.
Since Fiel isn't the extractor anymore he's not as active anymore (for which he deserves absolutely no blame, of course), but maybe someone else can point out the big obvious error that I'm making that I haven't spotted yet.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
NXPatcher uses malloc to allocate memory which has a limit that depends on the operating system. Chances are Windows doesn't allow you to malloc such huge amounts of memory from the free store and just errors out. 1.056 GB is a lot of memory to allocate so malloc will probably always fail. This is because the algorithm that Fiel uses to allocate memory naively just multiplies the memory of the patch by two (which is good for 99% of the use cases) so if a patch is 250 MB it'll try to allocate 500 MB and this can become troublesome with big patches as you see there.
It's probably best to just use patch the usual way when this occurs.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Being a 32 bit app it also may not be able to find that much contiguous memory available to it.
A 64 bit app on a 64 bit OS has more flexibility there, but a 32 bit app on a 64 bit OS may not be able to get around certain quirks of memory management.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
I updated the post with information about the patch file format if anyone else is curious as to how it works.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
NXPatcher Lite has been updated to version 2.1.
The main post has been updated to reflect this change.
If you have already downloaded NXPatcher Lite from the link provided in post #161, then there is no reason to download it again as no further updates have been made.
You can see a changelog for how NXPatcher Lite is far improved here: Link.
Good luck, and have fun patching.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Quote:
Originally Posted by
Fiel
NXPatcher Lite has been updated to version 2.1.
The main post has been updated to reflect this change.
If you have already downloaded NXPatcher Lite from the link provided in post #161, then there is no reason to download it again as no further updates have been made.
You can see a changelog for how NXPatcher Lite is far improved here:
Link.
Good luck, and have fun patching.
Hey @Fiel
any news about the Advanced NXPatcher by using CMD =\ It was way faster but the Out of Memory error seems never have been looked at
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
@Fiel NXPatcher Lite doesn't seem to be downloading for me. On Orbit, it just says connecting.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Quote:
Originally Posted by
Fiel
NXPatcher Lite has been updated to version 2.1.
The main post has been updated to reflect this change.
Good luck, and have fun patching.
I can't run it. Getting an error message "NXPatcher.exe is illegal in Win32 application" (rough translation of the Hebrew message. It makes little sense in that language, too). Running on Windows XP.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Quote:
Originally Posted by
SaptaZapta
I can't run it. Getting an error message "NXPatcher.exe is illegal in Win32 application" (rough translation of the Hebrew message. It makes little sense in that language, too). Running on Windows XP.
Try downloading this and putting it in the same directory as NXPatcher.exe:
http://download.dll-files.com/7c3b44...zip?0WLmR0dJgS
If that still doesn't work, please post a screenshot of the error message.
Quote:
Originally Posted by
Shadow Trainer
@Fiel NXPatcher Lite doesn't seem to be downloading for me. On Orbit, it just says connecting.
Can't do anything about that. All I can say is "works for me". Try downloading it without Orbit.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Quote:
Originally Posted by
Fiel
This link has expired.
Also the English version of the error is apparently "is not a valid Win32 application".
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
Find msvcr110.dll online, download it, and put it in your NXPatcher directory.
If it's really saying that, then it might be that the download is corrupted. Try downloading it again.
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
In doing some more research on the patch format, I have discovered that Nexon's patching algorithm has a small mistake in it. It's very, very rare that this mistake might actually come to fruition, but it is possible.
Programmers, Try to see if you can catch the mistake. I've labeled it in the spoiler.
This is the file rebuilding algorithm ripped straight from patcher.exe:
Code:
for(Command = GetInt(&zlibBlock); Command != 0x00000000; Command = GetInt(&zlibBlock))
{
if((Command & 0xC0000000) == 0xC0000000)
{
//This is a repeat block. It's essentially run length encoding.
repeatedByte = Command & 0x000000FF
lengthOfBlock = (Command & 0x3FFFFF00) >> 8;
//use memset in C to write to a buffer containing the repeatedByte for lengthOfBlock number of bytes, then write it to the file.
}
else if((Command & 0x80000000) == 0x80000000)
{
// This is a direct write block. The bytes to be written are contained directly in the zlib stream. Simply write these bytes out to the file.
lengthOfBlock = Command & 0x7FFFFFFF;
}
else
{
//This means we take from the old file and write to the new file.
lengthOfBlock = Command
oldFileOffset = GetInt(&zlibBlock);
//So open the old file, seek to the oldFileOffset, read lengthOfBlock number of bytes, then write those bytes to the new file.
}
}
Re: NXPatcher - Create your own pre-patcher & list of Maple FTPs
I need to learn C# for work, and what better way to do that than to fix NXPatcher?
Currently I'm working on NXPatcher Advanced. Here are the following features I'm adding:
- Complete rewrite in a different language.
- Patching DLL created in C# to allow others to do whatever they want to with patch files.
- NXPatcher logic and patch logic are now separate.
- No more running out of realloc space. The C# garbage collector will use swap space instead of running out of RAM.
I do not plan on rewriting NXPatcher Lite because it already does everything I need it to do.
Here's an example of the code I'm working with to apply a patch file to a directory.
Code:
namespace NXPatcherCS
{
class Program
{
static void Main(string[] args)
{
var accessor = new PatchAccessor(@"H:\Maplestory\GMS\00155to00159.patch");
accessor.ValidateCRC();
// DumpDeflateStream returns an emitter, which is a dumb, low level accessor for the unpacked patch file. It only fetches the bytes and doesn't do any interpretation.
var dumpPatchEmitter = accessor.DumpDeflateStream();
// Setup where the dump file is, where all of the original files are, and where all of the new files will go.
var dirName = Path.GetDirectoryName(dumpPath);
var outDir = Path.Combine(dirName, "patcher");
// Let's patch, baby!
var dpa = new DumpPatchApplier(dumpPatchEmitter, dirName, outDir);
dpa.ApplyPatch();
}
}
}
I tested this code on a 600 MB patch file. While there was a performance penalty for using C# instead of C/C++, at least it will patch now. For some reason, my algorithm soaks up RAM worse than Chrome when patching sound.wz. I will need to profile my code to figure out what's taking up gobs of RAM.
Already written features:
- Access patches, check CRCs/headers, and dump the patch file
- Read the dumped patch files
- Apply the dumped patch files
- Accessor for patch EXE files
- Writer for patch EXE files
Still need to write:
- NXPatcher Advanced logic
- WZ version checking