Home Page
Projects > Ragnarok Packet Sender
Search:
Ragnarok Packet Sender Thumbnail
Ragnarok Packet Sender v1.0
Completed
Reverse engineering project to send custom created packets via a shortcut key in a MMORPG client
Rating: 8 (Though no longer useful, it was a good project that had a lot of positive things come out of it)
Project Time: April 2002-June 2002: 13
Languages: ASM, VB6
Requirements: VB Runtimes, Ragnarok Beta Client
Downloads: Binary (See any updates below for prior versions)
Sections: Information, Content, Concepts, Notes, Updates, Comments
Information
This was beyond useful as the server liked to accept anything from the clients even if it wasn’t supposed to be allowed.
Content

This edited the executable code in the Ragnarok MMORPG application while it was running so that whenever the user pressed the specified keyboard shortcut it would send the bound packet.


Features:
  • Packet value fields are written for quick and properly formatted HEX input
  • List of possible keyboard shortcuts for each packet
  • Extra ASCII based text field hooks into currently selected HEX input field for easy normal text input
  • Overwrite/insert options changes how keyboard input is interpreted when entering characters in both HEX and ASCII text fields
  • Option to load and save packet and shortcut configurations

This program spawned from my “Warp To Save Point” program listed on my Ragnarok site’s projects and external programs page. The intent of that program was to allow a user to automatically warp back to their town spawn location which normally only occurred after character death. This was needed due to a server bug that sometimes made characters spawn outside the actual map when entering new areas making them permanently stuck without GM (Game Master) intervention. I included a forced 1 minute timer that reset on keyboard or mouse activity to discourage abuse of the program (warping back to town whenever you wanted, for convenience sake).


The way the program worked was, first, I took the game and reverse engineered the client via the assembly level opcodes to find where it sent packets to the server, and then wrote routines to search for this spot in the exe code so updates and patches wouldn’t break things. The program then dynamically added in assembly code depending on the bound keys and packets to allow the bound keys to trigger the actions. The assembly code was changed in the exe while it was running via the stored copy in RAM, so it only changed the code for that 1 execution of the program, as opposed to writing straight to the executable file.

The GUI is also fully featured in that the textboxes automatically reformat themselves with all new input to conform to the proper packet listing format, which is a HEX byte followed by a space. The “text/ASCII” textbox is also integrated with the last clicked packet box (highlighted in red) for easy viewing and changing of HEX into ASCII and vice versa.


Screenshots:

Editor Window
Ragnarok Packet Sender: Editor Window
Concepts
Reverse Engineering
Notes
Futzing around with false security
Updates
Dakusan License v2.0 @ 2009-11-04 16:06:57 - Download

I have updated the licensing information across the board for my website and all its projects to the Dakusan License v2.0, a slightly modified version of the Original BSD License.

The Copyright page and all project downloads have been updated accordingly.

Added Readme files to all project downloads @ 2009-09-19 05:35:19

Binary and source zip downloads for all Projects now have readme files in them, except as mentioned below.

This only applies to the Draw Image Project in Web Scripts, and not the Directory Manager project (The only project zip file now without a readme).

Ragnarok Packet Sender v1.0 @ 2008-06-08 08:08:27 - Download
Uploaded v1.0 of my Rag Packet Sender and wrote the content section. The original binary file compiled in 2003 is used and has not been modified like most all my other projects with a copyright, author information, and about page.
Comments
To add comments, please go to the forum page for this project (guest comments are allowed for the Projects, Posts, and Updates Forums).
Comments are owned by the user who posted them. We accept no responsibility for the contents of these comments.

Re: Ragnarok Packet Sender on 09/28/09 10:27am by Dakusan
So this forum won't be completely void of user content during its opening, I thought I'd post an email exchange I had last week pertaining to this project. :-)

Orichi on 09/21/09 at 5:08:57 AM -0500
Quote
Hi, I'm sorry my English is poor so I use Google translator.

I have long been on the internet looking for "hotkey packet sender".

I found it on your site, but does not work. I would like to ask how to get.
       
You have written the requirements of "Ragnarok Beta Client". This means that without the "Ragnarok Beta Client" that does not work?
   
On Sasami forum (http://www.castledragmire.com/ragnarok/downloads.php) I found the BETA client, but it is removed. I think you're Sasami. And I would ask you for help, give me your work packet sender for shortcuts.

Please reply to my email {email removed}
thank you very much
Orichi

My Reply on 9/21/09 at 7:34AM -0600
Quote
The packet sender I made is specifically for a game called "Ragnarok Online", and it was for a very old version (5+ years old), and could only be used inside the game.
 
 I'm not sure exactly what you are looking for, but for the sounds of it, you want a program that just sends packets by the press of a button. You can't really do this without knowing more about networking and how network connections work. First a network connection has to be made between 2 computers (assuming you are using TCP, which most connections are) and then the program that made the connection communicates with the program that the connection was made to. You would have to send packets through the port that goes between the two programs to do what I think you want, and that is not easy, as the operating system locks the port to the specific program once the connection is made. There are ways, but its tricky.
 
 Your easiest bet might be to try looking into Winsock Packet editor v.7a, which I have on my site in the programs section (http://www.castledragmire.com/ragnarok/programs.php). With it, you can do realtime editing of packets, so if for example you make a packet go out that you know the format of (for example, sending a specific line of text in a MMORPG), you can have the program alter it to whatever you want. I have not actually tried the packet editing functionality of the program (I only use it for packet monitoring), but it might do what you need.
 
 I hope this helps.
 
 Oh, please let me know you received the email ok.

Orichi's reply on 09/21/09 at 11:13AM -0600
Quote
Thank you, that you wrote back.

Yes I use WPE pro 0.9 alpha, but there is settings for sending packets when you press the set key. WPE has the perfect property "target program".

I'm trying to solve this problem:

When you do a "ragnarok online" on dual. In one window I Priest, and the second window I Rogue.

In the window "I Priest", Priest pin "to follow" the Rogue. (SHIFT+Right Mouse) Priest then automatically go for the Rogue.

I'll put you on the window with Rogue. (ALT+TAB)
I go to increase the experience and kill monsters.

But if you want to give "boosts" (for example - "Agi up", "Bleassing ",..), I have to switch back to the window with the Priest. (again Alt Tab), but to no avail it resides.

Therefore I'm looking for software that can "target program", but that was set "hotkeys" for sending a packet.

- Seeking program in which one could adjust the transmission packet using keyboard shortcuts:
 ------------example------------
"Heal" for rogue = 38 04 0A 00 1C 00 07 F4 1E 00 (when sending the packet and squeeze "Num 0")
"Heal" for Priest = 38 04 0A 00 1C 00 41 F3 1E 00 (when sending the packet and squeeze "num 1")

"Blessing" for rogue = 38 04 0A 00 22 00 07 F4 1E 00 (when sending the packet and squeeze "num 2")
"Blessing" for Priest = 38 04 0A 00 22 00 41 F3 1E 00 (when sending the packet and squeeze "num 3")

"Agi Up" for rogue = 38 04 0A 00 1D 00 07 F4 1E 00 (when sending the packet and squeeze "num 4")
"Agi Up" for Priest = 38 04 0A 00 1D 00 41 F3 1E 00 (when sending the packet and squeeze "num 5")

"Kyrie Eleison" for rogue = 38 04 0A 00 49 00 07 F4 1E 00 (when sending the packet and squeeze "num 6")
"Kyrie Eleison" for Priest = 38 04 0A 00 49 00 41 F3 1E 00 (when sending the packet and squeeze "num 7")

"Imposition Manus' for rogue = 38 04 02 00 42 00 07 F4 1E 00 (when sending the packet and squeeze" num 8 ")
"Magnificat" = 38 04 05 00 4A 00 41 F3 1E 00 (when sending the packet and squeeze "Num 9")

smal info = ([skill packet = SS SS SS PP KK PP CH CH CH PP] (ss = ID packet?; PP= space; KK= skill; CH= ID char))

.. or any other packet under arbitrarily adjustable key.

It's my idea, which has no equivalent in the world ragnarok. :) Well, I just took your program "Sasami packet's sender, which is a lot like my idea.

I think that such a program there probably :(

Perhaps you understand what I mean, google translator to translate really broken: D

Orichi

My Final Reply on 9/21/09 at 5:41PM -0600
Quote
Ah, yes, that is what my program did, but unfortunately it was for a very old version of Ragnarok. It might still work with a new version though with some updates if you want to look into it (I have not touched Ragnarok in something like 6 years -- had some pretty large disagreements with the management of the company that was running it then).
 
 Anywho, the basic way my program worked was I loaded custom assembly code directly into the executable at runtine in the unused space of the executable (areas filled with 0s). I made a function that called the packet sending function with the passed packet when a certain key was pressed, and then had the key press function call my function whenever a key was pressed.
 
 The Ragnarok executable code base has probably gone under too many iterations for my assembly insertion code to work anymore, but that was the basic premise.
 
 If you REALLY wanted to try to continue my work, I could release the VB6 Code as open source, but I'd prefer to not deal with cleaning it up unless you were actually going to use it, and you'd have to do assembly hacking.
 
 Actually, you could do an easy test to see if my code might still work without assembly hacking. Search for the following hex strings in the current Ragnarok executable and see if they are still there.
 "08 25 FF 00 00 00 25 FF 00 00 00 85 C0 74 3B" (I think this is where the key press code was?)
 "D6 C6 45 DA 01 8D 55 D4 52 0F BF 45 D4 50" (Function table?)
 "74 00 72 6D 61 00 67 61"  (End of executable?)
 
 Unfortunately, this kind of thing takes a lot of patience to do, and can be broken by executable patches/updates :-\.
 
 An easier way would be to write a global key hook (See my halfkey project at http://www.castledragmire.com/Projects/HalfKey) and see if you cant just have it directly call the winsock sending function in the executable (again, you'd have to find it).