Special thanks to Waffles, for his help on the project.
Notes (Be aware of the issues until they are corrected)
* There appears to be an issue when another bypass is injected before the program. Z does not require a bypass, and Z can also double as a bypass itself. So if you need to bypass HackShield, just use Z.
Z - The Packet Inspector

What is Z?
Although the project was named NzPI, the program itself is just called Z. Z is a packet editor that also includes a memory manager, and a scripting interface that is still under development.
Will Z work with EMS?
I coded it to work with both GMS and EMS, but I have no way of knowing if it actually does work with EMS since I don't play in Europe. So, feel free to try.
What is a Packet Editor?
A packet editor is any program that allows someone to capture packets in either direction, and manipulate their data. (The term itself is actually somewhat of a misnomer, since for most games, if you actually "edited" packets in real-time the game would crash because you're slower than a machine, lol).
What can I do with Z?
Z gives you the ability to intercept packets sent to and received from the MapleStory game servers, and allows you to have packets filtered, ignored, blocked, or re-injected. Currently, Z only supports injecting packets sent to the server, but will soon support injecting packets received from the server as well.
In addition to packet editing, Z also includes an experimental feature called the ZMM (Z Memory Manager). The ZMM allows you to dynamically lookup the values for static addresses comprised of bases and offsets, or AoB (Array of Bytes) values; and Z will soon make active its scripting interface ZScript. ZScript is a JavaScript-based language for interacting with Z and MapleStory and will allow you to create scripts for controlling either.
What is language was used to create Z?
I created Z using a mixture of C++, C++/CLI (Managed C++), and Assembly. The backend of Z is hardcoded in ASM, while the GUI is written in C++/CLI using Windows Forms; C++ is used as the bridge between these two layers of the program.
What are the requirements?
Since the GUI is written using Windows Forms, the only requirement for using Z is that you have a working installation of the .NET Framework version 2 or higher.
Z does NOT require a bypass. This is because Z bypasses HackShield and MapleStory's protections itself. The bypass methods used by Z are passive; so if you inject your own bypass into the game process, and then inject Z, both will still work correctly.
What new features does Z bring to the PE world?
Literal Format- Z allows you to describe packet data in literal form (i.e. numbers, characters, and strings); no longer do you have to describe packets as only a series of byte values.
Pattern Matching - Z allows you to search through packet data and packet collections using patterns. These patterns can also be used to block packets, ignore packets, or to create custom templates for packets. Patterns make it possible to manipulate packet data with only needing to know a small part about that data.
Packet Filtering- Z allows you to use patterns to search through all data packets and sort them into search results in a special packet collection window.
Features
-# The main application window display 3 tabs that contain all packets received, all packets sent, and the history tab that contains all packets sent or received.
# Both the Received, and Sent tabs include an input field which display the full packet when it is chosen from the List, or it can accept a packet or valid Z pattern to be used to ignore or block certain packets. While both tabs do include an Inject button, only the Send tab has a working one. (This means that you can inject packets into the stream of packets being sent to the server, but not those being received).
-Automatic String Parsing - When packets contain textual data, that data is automatically parsed by Z, and display in its printable format. Every string can be assumed to represent the byte codes for its character and a 2-byte value prefix for its length.
-Collecting Packets - When a packet is right-clicked in the list you are presented with a menu that allows you to create a template based on that packet, or add that packet to either the Favorites collection or 1 of 8 personal collections.
-Randomization - When you right-click the input field you are presented with a menu that allows you to have random bytes inserted into the input based on literal data types.
-Byte Transformation - Selecting a valid series of bytes from the input field allows you to transform those bytes into real data types like integers and string data.
-Packet Filtering - The Filter button searches through all packets in the buffers and automatically adds them to a special collection called Filter Results. This collection is cleared every time a new filter is applied.
Ignoring Packets - The Ignore button adds the packet or the pattern from the input field to the Ignored List for that stream. When packets are ignored, they will not appear in the Received, or Sent tabs but are still displayed in the History tab.
Blocking Packets - The Block button adds the packet or the pattern from the input field to the Blocked List for that stream. When packets are blocked, they will not appear in any tabs, and will not be processed by MapleStory. (Be careful when using this feature because certain packets must not be blocked in order for the game to operate properly)
Packet Templates
When you select 'Templates' from the Packets menu the Z Template Manager will open. The Template Manager allows to create templates that control the display format, text color, background color, and code name for packets based on patterns. This feature presents a very dynamic way of naming and color packets based on the commands they represent. It can very simple or complex based on your choosing.
* A template can either be applied to packets from the sent packet stream, the received packet stream, or both.
* Every template MUST define a codename for itself. The codename is displayed in place of the actual 2-byte command code value for the packets matching that template in the list.
* Every template is based on a pattern. When new packets are intercepted, they are tested, and the first template that matches them is the one gets applied.
* Do No Format - Enabling this option, will preserve the byte code format of the packets that match instead of automatically parsing it for textual data.
* Color All Fields - Enabling this option will apply the selected text and background colors to the size and data columns when that packet is displayed in the lists.
* You can export your templates to a file, or import template definitions from a file. This allows you to share you packet templates with other people.
* Templates present in the list when Z is exited are automatically restored the next time Z is injected. So if you forget to export your templates, there's no worry, they'll be remembered by Z.
Packet Builder
The packet builder greatly simplifies the task of making packets allows you to create a packet using literal data types (byte code, numbers, chars, strings) and then see, automatically, the byte code that represents that packet.
Pattern Management
The pattern managers allow you to activate, de-activate, or remove packets, or patterns from the Ignored or Blocked lists. Packets or patterns can be enabled or disabled from being blocked simply by checking or unchecking them in the manager.
Packet Collections
The collection windows are a fun and simple way of managing groups of packets. Any packet can be added to or removed from any collection. Collections can be saved to files.
Tools
The Tools menu will be filled with a variety of tools for multiple tasks, but for the first release of Z, the only tool included is Flood Control.
* Flood Control - An easy way of creating packet floods (spamming). Flood controls allows you to define your packets in literal or byte code format, have them sent incrementally or randomly, at an interval or your choice with the option of limiting the number of packets sent to a specific amount.
Z includes many more options and features but those are best learned through experience with the program.
Command Codes
MapleStory packets contain data that is all stored in a Little-endian format. That means the bytes for data are in the reverse order of its visual representation (i.e. DE AD BE EF is stored as EF BE AD DE). Because of this, the command code (the first 2 bytes of a packet) is also in reverse order. To remedy this, Z allows you to specify command codes in a special format; To describe a command code you use a '@' symbol followed bye the hex value for that code. This is automatically converted to its correct format. So, for the server world command (000A) which is stored in the packet as 0A 00, we would describe it as @000A so that it is automatically converted to the byte code of 0A 00.
Literal Data Types
Literal data types are data expressed in it's natural format. For example, instead of typing the byte code 0A, Z allows you to use #10 instead. Four literal data types are supported: 16-bit integers, 32-bit integers, ASCII characters, and strings.
* Integers - Integers are described by using their value with a '#' symbol in front (#10 = the value 10, #1337 = 1337). When converted into byte code, the integer is widened to whatever the minimum number of bytes necessary to store it are. (i.e. #10 is converted to 0A, but #355 is converted to 63 10). Additionally, you can specify what width you want you integer to be stored as by adding a ':' followed by a 1, 2, or 4 (i.e. #10:4 is converted to 0A 00 00 00).
* ASCII Characters - Characters are any valid printable character, that means its byte value is between 20 and 7F. A character is described by just enclosing that character in single quotes (i.e. 'A' is converted to 41).
* Strings - Strings are any valid series of printable characters (like charcters), and they are described by enclosing them in double quotes; when they are converted, their byte code is automatically preceded with a 2-byte value denoting the length of the string. (i.e. "Hello" is converted to 05 00 48 65 6C 6C 6F).
Examples
Code: Select all
@0031 05 "I'm an example of a packet described in literal format"
Patterns are comprised of the same data as packets in either byte code format, or literal format, with the addition of two special literals.
* ? - When used in a pattern, '?' matches any 1 byte with any value. That means that for that pattern "@0018 ?", any packet where the first two bytes are the command code 0018 and the third byte is any value will be a match.
* * - When used in a pattern, '*' matches any series of zero of more bytes with any value. That means that for that pattern "@0018 * 0F", any packet where the first two bytes are the command code 0018 and the last byte is 0F will be a match.
Examples
Code: Select all
// A pattern that will match any chat packet where someone said Hello.
@0031 ? "Hello" *
// A pattern that will match any packet containing the word: Galicia.
* "Galicia" *
Downloads
http://depositfiles.com/files/ds9i4kgw1
http://www.mediafire.com/?ywekmenqnym
Analysis
http://www.virustotal.com/analisis/e227 ... 1272671483

Thanks me if helped ~