Jump to content

Recommended Posts

Posted

Pictures are worth more than words. This one doubles as a hyperlink.

E61eG6I.png

 

Additionally, you can view individual packet opcode summaries, such as this for RequestBR_GamePoint:

fbhvlVr.png

 

(also accessible from a protocol version's overview)

 

The lists are made for NA L2, which should be fine for NA/EU/RU servers. Neither PTS nor Korean protocols are included. So if you are looking for (e.g. KR-only) 597, 598, 599, 19, 21 or similar ones, you're out of luck.

  • Upvote 2
Posted (edited)

Very nice job! You are getting those packets from client directly?

Technically, yes and no. Yes, these opcode mappings were generated automatically. No, because I did some manual validation, as in certain protocol versions, there have been some issues (the generator was being updated, so older lists of older protocols had some opcodes incorrectly skipped/assigned, or doubly assigned some opcodes). I also tried to synchronize packet names with reality, so a few might not exactly match what's in that exact client – the name would come from a later client (see the large explanation below), because the original name is misleading due to changes to logic.

 

For packets that never had a name (some private store packets) had their names assigned manually. 'DummyPacket's that to this day serve a very specific purpose had a name assigned based on how equivalent packets for other features were named.

 

And the biggest letdown you may notice, is the missing SendPrivateStoreBuyBuyList (replaced with SendPrivateStoreSellList).

 

Excellent work. Any way you can suck up the structures as well?

NOT THIS AGAIN.

Look. The strings are manually maintained by NC employees. So if someone forgets to update some packet, e.g. 'RequestPartyMatchConfig' for like 3 years after it's structure and logic has been already changed to 'RequestListPartyWaiting', it does not mean that packet still is 'RequestPartyMatchConfig' for these additional 3 years.

 

The same applies to structure strings, EXCEPT it seems that on updates, NC omits certain fields ON PURPOSE. That's why usually the structure presented for widely used packets like ItemList, CI, UI and similar will be outright wrong.

 

E.g. with CI and UI, it is often that you see something like this:

  • You start with some baseline protocol version (some fields may be omitted)
  • A protocol version update arrives, which does not specify CI/UI structure change
  • In reality, you find out new fields have been added, and not necessarily at the end of the packet
  • Another protocol version update arrives, which does specify new fields in CI/UI, but omits those you already found
  • In reality, you find out that the omitted fields are still there
  • Another protocol version update arrives, which specifies even more new fields in CI/UI, but those you found are still nowhere to be seen
  • In reality, you find out that omitted fields are there, and not all new fields are specified AGAIN
  • Another protocol update; both omissions are nowhere to be found, but new fields have arrived
  • This goes on and on with various packets…
So really, NC with its project-based workflow and employee migration between them (some employees simply leave) DOES NOT CARE to maintain those structure strings properly (sometimes, that also applies to packet names).

 

Since there is no way to automatically check whether the structure string is up-to-date (esp. if 'x' is involved), I'd rather not present them. Yes, for a fair amount of "simpler" packets, that would work. But that can easily cause people to believe that those strings are actually correct, and fall right into a trap.

 

 

If someone would like, I could try to jog my memory and check up my validated structs against NC (client) structs to give you at least 10 packets over various protocol versions, where the client struct is just wrong (and continues to be wrong for extended amounts of time).

Edited by Zeeyo
Posted

Wrong client structure ? I would love to see that.

 

Since its net pro related, do you handle packet obfuscation ?

Posted

Technically, yes and no. Yes, these opcode mappings were generated automatically. No, because I did some manual validation, as in certain protocol versions, there have been some issues (the generator was being updated, so older lists of older protocols had some opcodes incorrectly skipped/assigned, or doubly assigned some opcodes). I also tried to synchronize packet names with reality, so a few might not exactly match what's in that exact client – the name would come from a later client (see the large explanation below), because the original name is misleading due to changes to logic.

 

For packets that never had a name (some private store packets) had their names assigned manually. 'DummyPacket's that to this day serve a very specific purpose had a name assigned based on how equivalent packets for other features were named.

 

And the biggest letdown you may notice, is the missing SendPrivateStoreBuyBuyList (replaced with SendPrivateStoreSellList).

 

 

NOT THIS AGAIN.

Look. The strings are manually maintained by NC employees. So if someone forgets to update some packet, e.g. 'RequestPartyMatchConfig' for like 3 years after it's structure and logic has been already changed to 'RequestListPartyWaiting', it does not mean that packet still is 'RequestPartyMatchConfig' for these additional 3 years.

 

The same applies to structure strings, EXCEPT it seems that on updates, NC omits certain fields ON PURPOSE. That's why usually the structure presented for widely used packets like ItemList, CI, UI and similar will be outright wrong.

 

E.g. with CI and UI, it is often that you see something like this:

  • You start with some baseline protocol version (some fields may be omitted)
  • A protocol version update arrives, which does not specify CI/UI structure change
  • In reality, you find out new fields have been added, and not necessarily at the end of the packet
  • Another protocol version update arrives, which does specify new fields in CI/UI, but omits those you already found
  • In reality, you find out that the omitted fields are still there
  • Another protocol version update arrives, which specifies even more new fields in CI/UI, but those you found are still nowhere to be seen
  • In reality, you find out that omitted fields are there, and not all new fields are specified AGAIN
  • Another protocol update; both omissions are nowhere to be found, but new fields have arrived
  • This goes on and on with various packets…
So really, NC with its project-based workflow and employee migration between them (some employees simply leave) DOES NOT CARE to maintain those structure strings properly (sometimes, that also applies to packet names).

 

Since there is no way to automatically check whether the structure string is up-to-date (esp. if 'x' is involved), I'd rather not present them. Yes, for a fair amount of "simpler" packets, that would work. But that can easily cause people to believe that those strings are actually correct, and fall right into a trap.

 

 

If someone would like, I could try to jog my memory and check up my validated structs against NC (client) structs to give you at least 10 packets over various protocol versions, where the client struct is just wrong (and continues to be wrong for extended amounts of time).

 

I've got absolutely 0 knowledges when it comes to reverse engineering, was hoping it was possible, too bad it isn't. %5E1.gif
Posted

Wrong client structure ? I would love to see that.

I have opened this thread in the morning to check up on what's new, but I'll have to go soon. Please check this post later today, I will edit it to include cases that I have already stumbled upon.

 

Since its net pro related, do you handle packet obfuscation ?

Yes. That's why you have these special 'constant' opcodes in protocol definitions, e.g.

	<protocol id="54" alias="Infinite Odyssey" category="IO">
		<version date="2015-04-22">24</version>
		<primary>
			<constant>0x12</constant>
			<constant>0xB1</constant>
			<constant>0x11</constant>
			<constant>0xD0</constant>
		</primary>
		<secondary count="269">
			<constant>0x70</constant>
			<constant>0x71</constant>
		</secondary>
		<definitions dir="infinite_odyssey" />
	</protocol>
As these are known to not participate in CM opcode shuffling. Plus, without this obfuscation, NP would be pretty much useless.

 

No matter how packts are encrpyted they will be decrypted before being added to network queue

I honestly have no clue what you are talking about.

 

I've got absolutely 0 knowledges when it comes to reverse engineering, was hoping it was possible, too bad it isn't. %5E1.gif

While doing manual validation, I do take note of what are the client-known structures of certain packets (due to the aforementioned reasons, I only include them as found in the latest client). See the XML comments in this file.

Posted (edited)

What's about the packet structure? You plan to add structure of packets?

I do plan to do that eventually. After all, the reason I made the opcode site was because the incremental loading in NP meant that without actually using NP (or checking out and using ctrl+shift+r) it becomes somewhat hard to follow which opcodes and structures are used for a specific protocol version.

 

For now, you can just browse the NP source for structure XMLs. But beware: most packets in HF folder were validated from non-builder perspective, and the rest were filled in from l2j sources (which means they are most likely wrong).

Most new packets in valiance folder were generated from GDL & later non-incremental loading XML files. THERE WERE ISSUES with opcode assignment, so some definitions are lost or incorrect (I still have the file in legacy format, but I never actually re-validated them).

Most new packets in ertheia folder were generated from korean Ertheia non-incremental loading XML file. Same issues as with Epeisodion (a.k.a Valiance).

 

Right now, I am finishing up with validating C4 packets (though there are still a few left to validate from C2). After that, I'll move to GF, though I will try my best to investigate C5 (due to so many pledge features originally implemented there) to Gracia P2 while dealing with GF.

 

After that, I plan to review HF, legacy GoD, GDL and kr Ertheia files. Only then would I publish the structures in a format similar to how this opcode website works.

Edited by Zeeyo
Posted

I do plan to do that eventually. After all, the reason I made the opcode site was because the incremental loading in NP meant that without actually using NP (or checking out and using ctrl+shift+r) it becomes somewhat hard to follow which opcodes and structures are used for a specific protocol version.

 

For now, you can just browse the NP source for structure XMLs. But beware: most packets in HF folder were validated from non-builder perspective, and the rest were filled in from l2j sources (which means they are most likely wrong).

Most new packets in valiance folder were generated from GDL & later non-incremental loading XML files. THERE WERE ISSUES with opcode assignment, so some definitions are lost or incorrect (I still have the file in legacy format, but I never actually re-validated them).

Most new packets in ertheia folder were generated from korean Ertheia non-incremental loading XML file. Same issues as with Epeisodion (a.k.a Valiance).

 

Right now, I am finishing up with validating C4 packets (though there are still a few left to validate from C2). After that, I'll move to GF, though I will try my best to investigate C5 (due to so many pledge features originally implemented there) to Gracia P2 while dealing with GF.

 

After that, I plan to review HF, legacy GoD, GDL and kr Ertheia files. Only then would I publish the structures in a format similar to how this opcode website works.

 

And how are you validates the packet structure? By L2J forks?

Posted (edited)

I honestly have no clue what you are talking about.

 

What i was talkin about was how L2 manages the packets internally. It listens with one thread which is responsible for writing the data buffer, then decrypting it and adding to "NewtorkQueue" (thats how its called inside game) which parses the packet and calls appropriate handler for it :)

 

Does it work only for clean client with default encryption? And do u sniff it with external sniffer or you are inside process?

Edited by Szakalaka

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • Special Offer until 31 November, only 70euros.
    • We have the best prices for Adena on L2Reborn. discord - adver745645
    • Played the first 20 lvls in the OBT, very promising indeed. Quests seemed to be working fine for the most part although there's no need for the repetitive quests in the start since with x3 rates (x4 with premium which is pretty cheap tbh) adena from mobs outperforms the repetitive quests since you outlevel them in the early stage before you finish the quest, one time quests are good though and that's where is the juice. Idk how the og elixir was since I was a kid but this is definetely going to be much easier than your usual x1-2 no buffs server since GK is free for the first 40 lvls and you get basic 6 basic normal buffs even after low levels, that's not a bad thing for a lot of people though. Will be there on the opening.  
    • This post originally appeared on MmoGah. As the global release of Aion 2 draws near, players are eagerly preparing to dive into this highly anticipated MMORPG. One of the most important decisions you’ll make is choosing the right class, as it will define your experience in both solo and group content. Aion 2 introduces eight distinct classes, each with unique gameplay mechanics, strengths, and roles. Whether you’re a seasoned veteran or a newcomer, understanding these classes is essential to finding the one that suits your preferred playstyle. This guide provides a comprehensive overview of all eight classes, tips for selecting your ideal role, and recommendations for different types of players. Aion 2’s class system offers a variety of options across tanks, damage dealers, healers, and hybrid supports. Here’s a quick breakdown of the roles: - Tank Classes: Templar - Physical DPS Classes: Gladiator, Assassin, Ranger - Magical DPS Classes: Sorcerer - Hybrid Classes: Spiritmaster, Chanter - Healer Class: Cleric Each class has been carefully designed to excel in specific scenarios, whether it’s PvP, PvE, solo leveling, or large-scale faction battles. Pro Tip: As you embark on your journey, remember that having Aion 2 Kinah can greatly enhance your experience, so consider acquiring it to make the most of your adventure.   Class Breakdown Templar – The Indomitable Tank The Templar is the quintessential tank, specializing in defense and crowd control. With high durability and reliable aggro management, this class is invaluable in group content and large-scale battles. Strengths: - Exceptional survivability  - Top-tier aggro control  - Disruption tools for PvP  Playstyle: Templars thrive on the frontlines, soaking up damage and protecting allies. They are perfect for players who enjoy leading the charge and maintaining battlefield control. Gladiator – The Melee Powerhouse The Gladiator strikes a balance between offense and defense, offering strong AoE damage and decent survivability. This class excels in fast-paced melee combat and open-world PvP. Strengths: - High AoE damage  - Lifesteal-style abilities for sustain  - Versatile in both PvE and PvP  Playstyle:  Gladiators are ideal for players who enjoy dynamic melee combat with a mix of durability and damage. Assassin – The Stealthy Burst Specialist Assassins are masters of stealth and mobility. Known for their high single-target burst damage, they dominate in duels and small-scale PvP encounters. Strengths: - Exceptional burst damage  - Stealth mechanics for ambushes  - High mobility for quick disengagement Playstyle: This class is perfect for players who prefer fast-paced, tactical gameplay with an emphasis on sneaky kills. Ranger – The Precision Archer Rangers excel at dealing consistent physical damage from a distance. With excellent crowd control abilities and strong kiting potential, they are a solid choice for both PvE and PvP. Strengths:  - Safe ranged damage  - Strong crowd control tools  - Great for solo play  Playstyle: Rangers suit players who enjoy staying at range, controlling enemies, and executing precise attacks. Sorcerer – The Magical Artillery Sorcerers are pure magic damage dealers with devastating AoE spells and crowd control abilities. They are capable of turning the tide of battle with their massive burst potential. Strengths: - Highest magical burst damage  - Excellent AoE capabilities  - Crowd control via slows and immobilizes  Playstyle: Sorcerers are perfect for players who enjoy dealing immense magical damage while controlling enemies from a distance. Spiritmaster – The Tactical Summoner The Spiritmaster brings strategic depth to combat by combining summons, debuffs, and utility spells. This class is highly versatile and excels in both solo and group settings. Strengths: - Elemental summons with unique abilities  - Strong debuffs for PvP dominance  - Great solo leveling potential  Playstyle: Spiritmasters are best suited for players who enjoy strategic gameplay and multitasking in battle. Cleric – The Essential Healer The Cleric is the backbone of any group, providing powerful healing, cleansing, and defensive buffs. This class is indispensable in dungeons and raids. Strengths: - Reliable direct and AoE healing  - Cleansing abilities to remove debuffs  - Vital for group survival  Playstyle: Clerics are ideal for players who take pride in supporting their team and ensuring everyone stays alive. Chanter – The Hybrid Support The Chanter blends melee combat with healing and party-wide buffs. This versatile class can fill multiple roles in a group, making it a valuable addition to any team. Strengths: - Strong party buffs  - Solid healing capabilities  - Decent melee damage Playstyle: Chanters are perfect for players who want to contribute both offensively and defensively while supporting their team.   Choosing the Right Class What’s Your Playstyle? To help narrow down your choice, consider what you enjoy most in an MMORPG: • If you like tanking and leading the charge, choose Templar. • If you like melee combat with high durability, choose Gladiator.  • If you like stealthy gameplay with burst damage, choose Assassin.  • If you like ranged combat with precision, choose Ranger.   • If you like Massive magical damage, choose Sorcerer. • If you like tactical utility with summons, choose Spiritmaster. • If you like healing and supporting teammates, choose Cleric.  • If you like hybrid support with melee combat, choose Chanter. Beginner-Friendly Classes If you’re new to MMORPGs or unsure where to start, these classes offer straightforward mechanics: 1. Templar – Durable, beginner-friendly tank. 2. Cleric – Essential healer with clear roles in group content. Solo vs. Group Play Some classes excel in solo play, while others shine in groups: - Best Solo Classes: Gladiator, Ranger, Spiritmaster (good sustain and flexibility). - Best Group Classes: Templar (tank), Cleric (healer), Chanter (support). PvP Recommendations For competitive players who enjoy PvP: - 1v1/Small-Scale PvP: Assassin (stealth burst) or Sorcerer (burst + CC).  - Large-Scale PvP: Spiritmaster (debuffs) or Templar (frontline disruption). Team Composition Tips Building a balanced party is crucial in Aion 2. Consider these combinations for optimal synergy: - Tank + DPS + Healer: Templar + Sorcerer + Cleric (classic setup).  - Buff-Oriented Group: Gladiator + Chanter + Cleric (durability + support).    Final Thoughts Aion 2 offers a rich variety of classes tailored to different playstyles. Whether you prefer tanking, dealing damage, or supporting your team, there’s a class that fits your preferences. To summarize: - For beginners: Start with Templar or Cleric. - For high damage: Choose Gladiator, Assassin, or Sorcerer. - For strategic gameplay: Go with Spiritmaster. - For support roles: Opt for Cleric or Chanter. Still undecided? Share your preferred playstyle—solo adventuring, competitive PvP, or cooperative group play—and you’ll find the perfect class to begin your journey in Aion 2!  
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock