Jump to content

[Exploit + fix]Lets hack: Stack subclass skills ( Race condition exploit ).


Recommended Posts

Posted

It fell under my notice some weeks ago, credits to the one that told me in msn. Instead of just telling you how to do the exploit, ill go into a bit more details for those interested into understanding the mechanisms behind the exploits of that kind ( called race condition exploits ). Now since i got informed that the serious servers ( l2inc bla bla ) have it fixed (in private), i assume it wont do that much harm to share it. Plus , ill post guidelines for fixing it.

 

Where does it work ?

 

Kinda everywhere atm. Both L2JServer and L2JFree and all their forks ( and all the chroncles ).

 

What do you need ?

 

1)A bit slow server, pick one that has lots of ppl online and is during its peak hour. Probably at early night for EU.

2)Auto-learn of skills enabled.

3)A way to get level-up when you are able to change subclass.

 

How to do the exploit ?

 

1)Get in the subclass you want to get the illegal skills from.

2)Get a mob that has enough exp reward to increase your level, to the desired level where  you auto-learn the desired skills.

3)Kill the mob and on the same time, as fast as you can click on change subclass to your main.

4)If all went right, your main class will have the newly learned skills of the subclass.

 

How does it work ?

 

This is an exploit that belongs to a more wide category of exploits called race conditions. A race condition happens when two threads ( for simplicity , think of just 2 CPU cores ) try to access the same resources ( skills , items bla bla ) at the same time. This produces strange results at the outcome of one or both of the threads handing the resources. Take for example the following:

 

public class task1 implements Runnable
{
public void run()
{
vulnerableClass.check = false;
}
}

public class task2 implements Runnable
{
public void run()
{
if(vulnerableClass.check)
System.out.println(vulnerableClass.ckeck);
}
}

public class MainClass{

ScheduleGeneral(new task2());
ScheduleGeneral(new task1());
}

 

Now what will the System.out.println print out ? True or false ? Its code says, if check is true, print check. So you expect it to print true. It wont. And heres the why. Think of the two CPU cores we talked before , they run task1 and task2. Task2 enters the if check, finds the variable being true and procceeds. But before it can complete the system output in the console, the other task, task1 changes the variable to false. This is called a race condition. Something similar (not that much) happens when you do the subclass exploit.

 

1)You send the Action packet which kills the mob. CPU processes that packet and starts calculating SkillLearn objects etc. Before it can finish and add you those SkillLearn objects ( ill say it very simple ) the other packet, (RequestBypassToServer) changes your subclass to the new one. After the subclass gets changed, the new skills get added. Not that much acurate, but you kinda get the idea on how it works.

 

PS: Based on that, since l2jfree keeps a PacketQueue for each gameClient, it wont allow you to execute both packets at the same time. No problem, get a person in party, and make him kill the mob at the same time you press change subclass. That way the packets execute in parallel avoiding the sequencial execution restriction l2jfree implements. Thats an assumpion, i didnt test yet in l2jfree, but i assume it will work.

 

Tested in :

L2Nitro ( interlude crap ).

L2Idol (L2JServer freya ).

 

You may need multiple tries if the server is fast enough. But you will get it finally. Took me about 5-6 tries to stack them in l2idol.

 

 

Posted

Bump. Since i already found some people using their new weapon in their servers and none even cared to reply, i found it rude that i come here and actually get into the pain to explain you what a race condition is and get no feedback and testing. So at least what you can do is give some feedback:

 

I would like someone to confirm for l2jfree if possible ... Do it with two different players in party. One kills the mob the other switches subclass, to avoid their packetqueue protection :)

Posted

So if i made it work i will take the new skills not all to the other sub?

And they stuck?

but how i gonna take the lvl and change sub ?

btw hide it for 1000 posts

Posted

So ,while changing subclasses we get skills from 60lvl(ex) sub

 

You need a good synchronisation ,plus a mob to level up once(or prolly in goddard,anyway)

 

Though i think it's already shared it here,it may be useful

Posted

Okay okay , perfect for giving explanation for the mechanism.I also doubt if some servers give you this possibility but you can "Drag" a mob in town so you can do it succesfully.

 

 

 

Hide it for 500 or more.This share is amazing.+1

Posted

If you read the exploit mechanism explanation you will figure out that paralize wont work.

 

PS2: I found a program that searches your source code for race conditions. But its expensive and cant find it cracked atm. When we find that, i believe we will get more exploits from the source code of the l2js.

Posted

There is already an illegal skill check mechanism implemented in l2j nowadays and btw you could as well stop this substacking with a isInCombat() restriction at the villagemaster instance.

Posted

There is already an illegal skill check mechanism implemented in l2j nowadays and btw you could as well stop this substacking with a isInCombat() restriction at the villagemaster instance.

 

true :D

 

 

ehhh l2j failed (A)

Posted

There is already an illegal skill check mechanism implemented in l2j nowadays and btw you could as well stop this substacking with a isInCombat() restriction at the villagemaster instance.

 

no, because you do not kill the mob, someone from your party does

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • Advanced Lineage II Event Engine – Flexible, Scalable, and Developer-Friendly Introducing a powerful and fully customizable event engine designed to enhance gameplay, increase player engagement, and simplify event management. Whether you're running a high-rate PvP server or a low-rate retail-like experience, this engine provides the flexibility you need to create and automate dynamic in-game events.   ✅ Compatible with aCis 401 – Fully coded for aCis project (revision 401) and ready for seamless integration. 📜 Delivered as a .diff Patch – Simply apply it and start using it right away!   📸 Check out the screenshots & features: Imgur Album (more soon). Key Features ✔ Fully Configurable – Every aspect of each event can be customized, including timers, rules, rewards, and restrictions. ✔ Seamless Integration – Works with existing server configurations and supports custom scripts or modifications. ✔ Automated Event Rotation – Events can be scheduled or started via a voting phase where players choose the next event. ✔ Multi-Mode Participation – Players can join via commands (.register | .leave | .events) or NPC interactions. ✔ Real-Time Tracking – An on-screen HUD displays kills, scores, and time remaining. ✔ Enhanced PvP Mechanics – Auto-respawn, score-based rewards, and First Blood announcements. ✔ Spectator Mode – Allows non-participants to watch events live. ✔ Detailed Event Logs – Administrators can track player performance, winners, and event results for analysis. Reward System Player-Based Rewards: Configurable options for winning, losing, ranking in the top X, or achieving First Blood. Kill-Based Rewards: Earn rewards per kill or based on streaks. Team-Based Rewards: Incentivize team victories with shared prizes. Included Event Modes Team Fights (TDM): Classic team-based PvP with configurable duration, respawn rules, and score limits. Solo Fights (Deathmatch): Free-for-all PvP—highest kill count wins. Last Survivor (LMS): No respawns—last player standing wins. Lucky Chests: Random chests with rewards, traps, or debuffs. Treasure Hunt: Players race to find a hidden treasure. Monster Massacre (PvE Race): Teams compete to slay the most monsters. Territory Clash: Players battle to control a zone and earn points over time. Ultra Rapid Fire (URF Mode): Boosted stats, reduced skill cooldowns, and enhanced combat speed. Assassin Hunt: A random player is marked as the target—others must eliminate them. Monster Mayhem (Boss Raid): A powerful boss spawns; players must cooperate (or fight each other) to take it down. Power-Up Clash: Players collect battlefield buffs for a combat advantage. Why Choose This Event Engine? ✅ Fast Implementation – Set up new events in minutes with an intuitive configuration system. ✅ Performance Optimized – Lightweight and designed for high player counts without impacting server stability. ✅ Extensive Customization – Easily modify or extend functionality to suit your server’s needs. ✅ Developer Support – Well-documented API and configuration options for easy integration. Transform your server’s event experience with a feature-rich, developer-friendly solution. 🚀 Ready to integrate? Contact us for licensing details! Get Your Copy Today! Upgrade your Lineage II server with this powerful event engine and bring next-level gameplay to your players. With fully customizable settings, automated event management, and seamless integration, this system is a must-have for any serious server administrator.   💰 Pricing: Full License: 100e (One-time payment) Support & Updates: included on full licence   📩 How to Purchase: PM me directly for inquiries and purchases. Discord: @Luminous
    • we sell website templates, make websites to order. Great selection at very good prices. My contacts   discord - adver745645   telegram - @mmopromo
    • Hello everyone, people often ask me how to help me. Here I will describe the general principle of how to create a simple window for ui (unity l2)   Here I am looking at an already created ActionWindows window   1. Assets\Resources\Data\UI\_Elements\Game 2.    Let's call it ActionWindows 3. Let's go to the newly created window 4.as you can see it is empty. But we already have a ready-made window template so that we don’t have to assemble it again every time. We will connect a ready-made design for a new window 5. open the window code 6. 7. Add new code  <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns="UnityEngine.UIElements" editor-extension-mode="False"> <ui:Template name="DefaultWindowsAction" src="project://database/Assets/Resources/Data/UI/_Elements/Template/DefaultWindowsAction.uxml?fileID=9197481963319205126&amp;guid=2fdd4636702f00a4e98644cfa7468b14&amp;type=3#DefaultWindowsAction" /> <ui:Instance name="defaultWindowsAction" template="DefaultWindowsAction" style="width: 317px; height: 575px; position: absolute;"> <AttributeOverrides element-name="windows-name-label" text="Actions" /> <ui:VisualElement name="Background" class="background_over" style="flex-grow: 1; min-width: auto; min-height: auto; justify-content: flex-start; align-items: flex-start; position: absolute; background-image: resource(&apos;Data/UI/Window/Frame_DF_Large_Bg_Darker_Center_Alpha&apos;); height: 91%; top: 38px; width: 95%; left: 8px; display: flex; visibility: visible; overflow: visible; opacity: 1;" /> <ui:GroupBox name="BoxHeader" class="drag-area" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; padding-top: 0; padding-bottom: 0; padding-left: 0; position: absolute; top: 15px; align-self: stretch; height: 4%; width: 88%;" /> </ui:Instance> </ui:UXML>   8.We take a template  project://database/Assets/Resources/Data/UI/_Elements/Template/DefaultWindowsAction.uxml 9. This piece of code can be taken from other windows so as not to write every time 10. Save 11.Drag the GroupBox node   12. Changing its position settings   I can change all the settings from the editor. But if you knew, then a very similar technology to CSS is better   if you open the window code you can notice everything is the same as in css you can create settings in the window code or use a file with all the styles   Assets\Resources\Data\UI\_Elements\L2StyleSheet.uss In the next issue we will write code to connect it to the game logic. Unless of course you delete the article.  
    • Hey, can you please renew download link?
  • Topics

×
×
  • Create New...