Jump to content

Anarchy

Members
  • Posts

    566
  • Credits

  • Joined

  • Last visited

  • Days Won

    21
  • Feedback

    0%

Everything posted by Anarchy

  1. Well the C in COEP stands for Community, of which there is none, so are you surprised?
  2. navicat means mysql mysql means l2j l2j means SHA1 SHA1 hashes are a lot more secure than md5 so you are looking at collision attacks or rainbow tables... Either way, you probably aren't going to get that password lol.
  3. Man this topic has made my day... What is with this Slovenian idiot using yet another classic server's name to make some cash... And sigma, seriously? Last I heard from Scrap was that you bought the vendetta files and were planning on remaking l2r with that, not scratch. But how do any of you idiots expect these dumbass remakes to survive? None of you have any of the original staff on board and I highly doubt these l2r.us idiots actually asked storm, something I will confirm the next time I see him on msn... Maybe it is time for L2Revenge to return but not under any of you idiotic teenagers with dollar signs in your eyes. Don't ruin yet another classic server's name with your pathetic attempts to make a few bucks... I just hope players see through this blatant stupidity and you launch with the 20 players that you deserve.
  4. It should be noted that it's an l2j guide, evident by #5 The l2off auth server(s) always check if an account is paid for (pay_stat) and not banned (block_flag(2)) when you send the RequestAuthLogin packet, not RequestServerLogin. Also, with l2off the first session key is always the account ID of the authorizing account and the second session key is an incremented value for each successful login attempt, it starts as 0 and increments every time a player logs in successfully.
  5. People with basic knowledge of the inner workings of l2off seem to be a dying breed these days... There was a time when what I'm posting was common knowledge... ohwell... <?php // Configuration variables $CONFIG['dbaddr'] = 'localhost'; $CONFIG['dbuser'] = 'sa'; $CONFIG['dbpass'] = 'pass'; $CONFIG['worlddb'] = 'lin2world'; $CONFIG['aio_prefix'] = '[AIO]'; $CONFIG['aio_class'] = 98; $CONFIG['cached_ip'] = '127.0.0.1'; $CONFIG['cached_port'] = '2012'; $CONFIG['admin_name'] = 'aio_maker'; // function used for CacheD strings function tounicode($string) { $rs = ""; for($i = 0; $i < strlen($string); $i++) $rs .= $string[$i].chr(0); return($rs.chr(0).chr(0)); } // function to send CacheD data function CacheDSend($data) { $fp=fsockopen($CONFIG['cached_ip'], $CONFIG['cached_port'], $errno, $errstr, 1); if (!$fp) { echo "Error connecting to CacheD socket."; } else { fwrite($fp, pack("s", (strlen($data)+2)).$data); fclose($fp); } } if (!isset($_POST['char_name'])) { echo "<html> <head> <title>AIO Maker ~ Anarchy</title> </head> <body><center> <form action=\"aio.php\" method=POST> <table border=1> <tr> <td align=right>Char Name -> </td> <td><input type=text name=char_name></td> </tr> <tr> <td COLSPAN=2 align=center><input type=submit value=\"Make AIO\"></td> </tr> </table> </form> </center></body> </html>"; } else { $char_name = str_replace(array("'", ",", ";", "--"), "", $_POST['char_name']); // anti-injection $sql = mssql_connect($CONFIG['dbaddr'], $CONFIG['dbuser'], $CONFIG['dbpass']); mssql_select_db($CONFIG['worlddb'], $sql); $result = mssql_query("SELECT TOP 1 * FROM user_data with (nolock) WHERE char_name = '$char_name'", $sql); if (mssql_num_rows($result) != 0) { $row = mssql_fetch_assoc($result); $char_id = $row['char_id']; // kick character from game CacheDSend(pack("cV", 5, $char_id).tounicode($CONFIG['admin_name'])); // Change character name CacheDSend(pack("cV", 4, $char_id).tounicode($CONFIG['aio_prefix'].$row['char_name']).tounicode($CONFIG['admin_name'])); // Set level CacheDSend(pack("cVVVVVVV", 15, $char_id, 0, 2099325834, 0, 0, 0, 0).tounicode($CONFIG['admin_name'])); // Change character class CacheDSend(pack("cVVVVVVV", 16, $char_id, $row['gender'], $row['race'], $CONFIG['aio_class'], $row['face_index'], $row['hair_shape_index'], $row['hair_color_index']).tounicode($CONFIG['admin_name'])); // Reset skills $result = mssql_query("SELECT * FROM user_skill with (nolock) WHERE char_id = $char_id", $sql); while ($skill_row = mssql_fetch_assoc($result)) { CacheDSend(pack("cVV", 7, $char_id, $skill_row['skill_id']).tounicode($CONFIG['admin_name'])); } // Set skills CacheDSend(pack("cVVV", 6, $char_id, 1085, 3).tounicode($CONFIG['admin_name'])); // Acumen CacheDSend(pack("cVVV", 6, $char_id, 1304, 3).tounicode($CONFIG['admin_name'])); // Advanced Block CacheDSend(pack("cVVV", 6, $char_id, 1087, 3).tounicode($CONFIG['admin_name'])); // Agility CacheDSend(pack("cVVV", 6, $char_id, 1354, 1).tounicode($CONFIG['admin_name'])); // Arcana Protection CacheDSend(pack("cVVV", 6, $char_id, 1062, 2).tounicode($CONFIG['admin_name'])); // Berserker Spirit CacheDSend(pack("cVVV", 6, $char_id, 1005, 3).tounicode($CONFIG['admin_name'])); // Blessings of Pa'agrio CacheDSend(pack("cVVV", 6, $char_id, 1243, 6).tounicode($CONFIG['admin_name'])); // Bless Shield CacheDSend(pack("cVVV", 6, $char_id, 1045, 6).tounicode($CONFIG['admin_name'])); // Bless the Body CacheDSend(pack("cVVV", 6, $char_id, 1048, 6).tounicode($CONFIG['admin_name'])); // Bless the Soul CacheDSend(pack("cVVV", 6, $char_id, 1311, 6).tounicode($CONFIG['admin_name'])); // Body of Avatar CacheDSend(pack("cVVV", 6, $char_id, 168, 3).tounicode($CONFIG['admin_name'])); // Boost Attack Speed CacheDSend(pack("cVVV", 6, $char_id, 213, 8).tounicode($CONFIG['admin_name'])); // Boost Mana CacheDSend(pack("cVVV", 6, $char_id, 1007, 3).tounicode($CONFIG['admin_name'])); // Chant of Battle CacheDSend(pack("cVVV", 6, $char_id, 1309, 3).tounicode($CONFIG['admin_name'])); // Chant of Eagle CacheDSend(pack("cVVV", 6, $char_id, 1552, 3).tounicode($CONFIG['admin_name'])); // Chant of Evasion CacheDSend(pack("cVVV", 6, $char_id, 1006, 3).tounicode($CONFIG['admin_name'])); // Chant of Fire CacheDSend(pack("cVVV", 6, $char_id, 1229, 15).tounicode($CONFIG['admin_name'])); // Chant of Life CacheDSend(pack("cVVV", 6, $char_id, 1308, 3).tounicode($CONFIG['admin_name'])); // Chant of Predator CacheDSend(pack("cVVV", 6, $char_id, 1253, 3).tounicode($CONFIG['admin_name'])); // Chant of Rage CacheDSend(pack("cVVV", 6, $char_id, 1284, 3).tounicode($CONFIG['admin_name'])); // Chant of Revenge CacheDSend(pack("cVVV", 6, $char_id, 1009, 3).tounicode($CONFIG['admin_name'])); // Chant of Shielding CacheDSend(pack("cVVV", 6, $char_id, 1310, 4).tounicode($CONFIG['admin_name'])); // Chant of Vampire CacheDSend(pack("cVVV", 6, $char_id, 1363, 1).tounicode($CONFIG['admin_name'])); // Chant of Victory CacheDSend(pack("cVVV", 6, $char_id, 1362, 1).tounicode($CONFIG['admin_name'])); // Chant of Spirit CacheDSend(pack("cVVV", 6, $char_id, 1397, 3).tounicode($CONFIG['admin_name'])); // Clarity CacheDSend(pack("cVVV", 6, $char_id, 1292, 6).tounicode($CONFIG['admin_name'])); // Clear Mind CacheDSend(pack("cVVV", 6, $char_id, 1078, 6).tounicode($CONFIG['admin_name'])); // Concentration CacheDSend(pack("cVVV", 6, $char_id, 307, 1).tounicode($CONFIG['admin_name'])); // Dance of Aqua Guard CacheDSend(pack("cVVV", 6, $char_id, 276, 1).tounicode($CONFIG['admin_name'])); // Dance of Concentration CacheDSend(pack("cVVV", 6, $char_id, 309, 1).tounicode($CONFIG['admin_name'])); // Dance of Earth Guard CacheDSend(pack("cVVV", 6, $char_id, 274, 1).tounicode($CONFIG['admin_name'])); // Dance of Fire CacheDSend(pack("cVVV", 6, $char_id, 275, 1).tounicode($CONFIG['admin_name'])); // Dance of Fury CacheDSend(pack("cVVV", 6, $char_id, 272, 1).tounicode($CONFIG['admin_name'])); // Dance of Inspiration CacheDSend(pack("cVVV", 6, $char_id, 277, 1).tounicode($CONFIG['admin_name'])); // Dance of Light CacheDSend(pack("cVVV", 6, $char_id, 273, 1).tounicode($CONFIG['admin_name'])); // Dance of Mystic CacheDSend(pack("cVVV", 6, $char_id, 311, 1).tounicode($CONFIG['admin_name'])); // Dance of Protection CacheDSend(pack("cVVV", 6, $char_id, 366, 1).tounicode($CONFIG['admin_name'])); // Dance of Shadow CacheDSend(pack("cVVV", 6, $char_id, 365, 1).tounicode($CONFIG['admin_name'])); // Dance of Siren CacheDSend(pack("cVVV", 6, $char_id, 310, 1).tounicode($CONFIG['admin_name'])); // Dance of Vampire CacheDSend(pack("cVVV", 6, $char_id, 271, 1).tounicode($CONFIG['admin_name'])); // Dance of Warrior CacheDSend(pack("cVVV", 6, $char_id, 1242, 3).tounicode($CONFIG['admin_name'])); // Death Whisper CacheDSend(pack("cVVV", 6, $char_id, 1257, 3).tounicode($CONFIG['admin_name'])); // Decrease Weight CacheDSend(pack("cVVV", 6, $char_id, 1353, 3).tounicode($CONFIG['admin_name'])); // Divine Protection CacheDSend(pack("cVVV", 6, $char_id, 1391, 3).tounicode($CONFIG['admin_name'])); // Earth Chant CacheDSend(pack("cVVV", 6, $char_id, 1352, 1).tounicode($CONFIG['admin_name'])); // Elemental Protection CacheDSend(pack("cVVV", 6, $char_id, 229, 7).tounicode($CONFIG['admin_name'])); // Fast Mana Recovery CacheDSend(pack("cVVV", 6, $char_id, 228, 3).tounicode($CONFIG['admin_name'])); // Fast Spell Casting CacheDSend(pack("cVVV", 6, $char_id, 239, 5).tounicode($CONFIG['admin_name'])); // Expertise S CacheDSend(pack("cVVV", 6, $char_id, 1077, 3).tounicode($CONFIG['admin_name'])); // Focus CacheDSend(pack("cVVV", 6, $char_id, 1218, 33).tounicode($CONFIG['admin_name'])); // Greater Battle Heal CacheDSend(pack("cVVV", 6, $char_id, 1059, 3).tounicode($CONFIG['admin_name'])); // Greater Empower CacheDSend(pack("cVVV", 6, $char_id, 1219, 33).tounicode($CONFIG['admin_name'])); // Greater Group Heal CacheDSend(pack("cVVV", 6, $char_id, 1217, 33).tounicode($CONFIG['admin_name'])); // Greater Heal CacheDSend(pack("cVVV", 6, $char_id, 1388, 3).tounicode($CONFIG['admin_name'])); // Greater Might CacheDSend(pack("cVVV", 6, $char_id, 1389, 3).tounicode($CONFIG['admin_name'])); // Greater Shield CacheDSend(pack("cVVV", 6, $char_id, 1240, 3).tounicode($CONFIG['admin_name'])); // Guidance CacheDSend(pack("cVVV", 6, $char_id, 1086, 2).tounicode($CONFIG['admin_name'])); // Haste CacheDSend(pack("cVVV", 6, $char_id, 1374, 1).tounicode($CONFIG['admin_name'])); // Heroic Valor CacheDSend(pack("cVVV", 6, $char_id, 285, 27).tounicode($CONFIG['admin_name'])); // Higher Mana Gain CacheDSend(pack("cVVV", 6, $char_id, 1043, 1).tounicode($CONFIG['admin_name'])); // Holy Weapon CacheDSend(pack("cVVV", 6, $char_id, 1032, 3).tounicode($CONFIG['admin_name'])); // Invigor CacheDSend(pack("cVVV", 6, $char_id, 1073, 2).tounicode($CONFIG['admin_name'])); // Kiss of Eva CacheDSend(pack("cVVV", 6, $char_id, 1036, 2).tounicode($CONFIG['admin_name'])); // Magic Barrier CacheDSend(pack("cVVV", 6, $char_id, 1035, 4).tounicode($CONFIG['admin_name'])); // Mental Shield CacheDSend(pack("cVVV", 6, $char_id, 1068, 3).tounicode($CONFIG['admin_name'])); // Might CacheDSend(pack("cVVV", 6, $char_id, 1003, 3).tounicode($CONFIG['admin_name'])); // Pa'agrian Gift CacheDSend(pack("cVVV", 6, $char_id, 1282, 2).tounicode($CONFIG['admin_name'])); // Pa'agrian Haste CacheDSend(pack("cVVV", 6, $char_id, 21, 3).tounicode($CONFIG['admin_name'])); // Poison Recovery CacheDSend(pack("cVVV", 6, $char_id, 1356, 1).tounicode($CONFIG['admin_name'])); // Prophecy of Fire CacheDSend(pack("cVVV", 6, $char_id, 1355, 1).tounicode($CONFIG['admin_name'])); // Prophecy of Water CacheDSend(pack("cVVV", 6, $char_id, 1357, 33).tounicode($CONFIG['admin_name'])); // Prophecy of Wind CacheDSend(pack("cVVV", 6, $char_id, 1044, 3).tounicode($CONFIG['admin_name'])); // Regeneration CacheDSend(pack("cVVV", 6, $char_id, 1182, 3).tounicode($CONFIG['admin_name'])); // Resist Aqua CacheDSend(pack("cVVV", 6, $char_id, 1191, 3).tounicode($CONFIG['admin_name'])); // Resist Fire CacheDSend(pack("cVVV", 6, $char_id, 1033, 3).tounicode($CONFIG['admin_name'])); // Resist Poison CacheDSend(pack("cVVV", 6, $char_id, 1189, 3).tounicode($CONFIG['admin_name'])); // Resist Wind CacheDSend(pack("cVVV", 6, $char_id, 1259, 4).tounicode($CONFIG['admin_name'])); // Resist Shock CacheDSend(pack("cVVV", 6, $char_id, 1306, 6).tounicode($CONFIG['admin_name'])); // Ritual of Life CacheDSend(pack("cVVV", 6, $char_id, 234, 23).tounicode($CONFIG['admin_name'])); // Robe Mastery CacheDSend(pack("cVVV", 6, $char_id, 1040, 3).tounicode($CONFIG['admin_name'])); // Shield CacheDSend(pack("cVVV", 6, $char_id, 364, 1).tounicode($CONFIG['admin_name'])); // Song of Champion CacheDSend(pack("cVVV", 6, $char_id, 264, 1).tounicode($CONFIG['admin_name'])); // Song of Earth CacheDSend(pack("cVVV", 6, $char_id, 306, 1).tounicode($CONFIG['admin_name'])); // Song of Flame Guard CacheDSend(pack("cVVV", 6, $char_id, 269, 1).tounicode($CONFIG['admin_name'])); // Song of Hunter CacheDSend(pack("cVVV", 6, $char_id, 270, 1).tounicode($CONFIG['admin_name'])); // Song of Invocation CacheDSend(pack("cVVV", 6, $char_id, 265, 1).tounicode($CONFIG['admin_name'])); // Song of Life CacheDSend(pack("cVVV", 6, $char_id, 363, 1).tounicode($CONFIG['admin_name'])); // Song of Meditation CacheDSend(pack("cVVV", 6, $char_id, 349, 1).tounicode($CONFIG['admin_name'])); // Song of Renewal CacheDSend(pack("cVVV", 6, $char_id, 308, 1).tounicode($CONFIG['admin_name'])); // Song of Storm Guard CacheDSend(pack("cVVV", 6, $char_id, 305, 1).tounicode($CONFIG['admin_name'])); // Song of Vengeance CacheDSend(pack("cVVV", 6, $char_id, 304, 1).tounicode($CONFIG['admin_name'])); // Song of Vitality CacheDSend(pack("cVVV", 6, $char_id, 267, 1).tounicode($CONFIG['admin_name'])); // Song of Warding CacheDSend(pack("cVVV", 6, $char_id, 266, 1).tounicode($CONFIG['admin_name'])); // Song of Water CacheDSend(pack("cVVV", 6, $char_id, 268, 1).tounicode($CONFIG['admin_name'])); // Song of Wind CacheDSend(pack("cVVV", 6, $char_id, 1390, 3).tounicode($CONFIG['admin_name'])); // War Chant CacheDSend(pack("cVVV", 6, $char_id, 1303, 2).tounicode($CONFIG['admin_name'])); // Wild Magic CacheDSend(pack("cVVV", 6, $char_id, 1204, 2).tounicode($CONFIG['admin_name'])); // Wind Walk CacheDSend(pack("cVVV", 6, $char_id, 1268, 4).tounicode($CONFIG['admin_name'])); // Vampiric Rage CacheDSend(pack("cVVV", 6, $char_id, 1323, 1).tounicode($CONFIG['admin_name'])); // Blessing Nobless } else { echo "Character '$char_name' does not exist."; } } ?> BTW its POC code only, so I haven't tested it, but it should work... Known issues - CacheDSend function should keep connection open instead of making a new one every time - will spam the CacheD console. If your server doesn't have auto-learn skills enabled then you need to send a SetSkillAll packet after resetting the skills otherwise basic skills like weight-limit will not be set on the AIO.
  6. I'm not entirely sure if this will be useful to anyone on here, so it's more for reference for myself and a few other developers, but I couldn't find any information for superpoint.bin format in english so... superpoint.bin is used for preset waypoint movement via AI for some npcs, for those who don't know. The format of the file is as follows DWORD nSuperPointCount; { DWORD nNameLength; // Name length without terminating null WCHAR wcName; // Name without terminating null DWORD null; // ALWAYS 0 DWORD nNodeCount; // Total number of nodes { DWORD nNodeID; // Index of the node DWORD X; // X of the node - int not float DWORD Y; // Y of the node - int not float DWORD Z; // Z of the node - int not float DWORD nDelay; // Delay of the node } DWORD nConnectionType; // 0 for can't move, 2 for can move { IF nConnectionType == 2 { DWORD nNode1ID; DWORD X; DWORD Y; DWORD Z; DWORD nNode2ID; DWORD X; DWORD Y; DWORD Z; } } } Total number of connections per superpoint is ((nodes^2)-nodes). The connection data is how the server knows how an npc can move between each node, for example if you create a connection type #2 between node 1 and 2, the server knows that the npc can move from node 1, to node 2, but you must also create a connection between node 2 and 1 otherwise the npc won't be able to move back to node 1 from node 2. You can create connections between any node, such as node 1 and node 5, so that the npc can move directly from node 1 to node 5.
  7. Not to mention the fact that anyone related to the original L2Extreme would never ever EVER use a domain such as "la2extreme" because they all had enough intelligence to realise that Lineage is one word, not Line Age.
  8. /sigh 1. Topic is over a year old 2. It's transaction log reallocation and none of your 4 suggestions.
  9. If you are in doubt about your upload speed then you should not be running a server. Stop polluting the world with home-hosted pieces of crap. @repxl This is the l2off section, not l2j.
  10. I fully expect this will be like the original postpacific c# project, a 100% port of l2j to c# and then nothing else because of lack of willing developers... The one thing l2j does have going for it, every high-schooler knows java, which admittedly is the reason for a lot of l2j's problems, but that's besides the point, they have a large developer base. C# doesn't, not in L2.
  11. omg someone call the grammar police... "if you attack an opponent and kill him without getting hitted by him" But you know you could of just typed that out in a post instead of making an image... It would not only have saved you some time but it would make it a lot easier for people to read it...
  12. start -> run -> regedit -> HKEY_LOCAL_MACHINE\SOFTWARE\PROJECT_L2\L2CACHED -> delete all connStr key entries Also, stop making topics with the same questions over and over. That question was in both your previous topics.
  13. Are you blind? Or does your English not go as far as self-explanatory errors? It tells you exactly what the problem is and on what line... what more do you want?
  14. cached - you didn't set the correct default database for your file dsn l2server - same as above authd - same as above l2npc - your geodata hasn't loaded
  15. Show us one of this nubs posts where he is asking for help? He is asking for someone to do everything for him so he can then make money from it, he has NEVER asked for help, otherwise he might of received some.
  16. It's more that real l2off developers don't want to help people like him who are plainly trying to make a plug-and-play server just to make some quick cash. He hasn't asked for any help or shown any interest in learning anything, he wants to pay someone to do everything for him and then reap the benefits of it for himself. Not an attractive arrangement for any developer.
  17. Isn't this a post better aimed at the server's forum?
  18. Kasha's anti-debugging technique's suck tbh. They mainly consist of attempting to output debug strings and if it succeeds then that means a debugger is running, EXTREMELY easy to get around by hooking OutputDebugString. But I give up, you can carry on believing that Kasha is the god of anti-bots that's your choice, there's obviously no convincing you, it doesn't bother me any it just gains him some more sheep customers.
  19. .... Of course you can't run it with a debugger... You can easily simulate breakpoints by writing a module to hook the address you want information from and print it to file... Not that you even need to with most protections and from what I've seen so far that includes Kasha's
  20. Enigma might not be simple but that doesn't change the fact I can still view Kasha's code without any problem. I'll show you an example. The code highlighted (and a few lines above it) in that screenshot is the code responsible for setting the IP address that the client connects to by hooking Engine.dll's connect function, in plain code no encryption. I admit Kasha does some good tricks to hide what he's doing like searching for specific bytes in the engine to find the address rather than directly referencing it, but I can still see it. @killik I'm not showing off "my great knowledge" I don't need to prove what I know to anyone. This start out simply as me pointing out that tilemachos may not of been the author considering the apparent lack of knowledge of the protection system, he is the one who turned this into a flameoff.
  21. As much as I would like to show you walker on dex, I'm not gonna even try and register on their stupid shit, but I can attach ollydbg to the process and view the memory fine, as I already knew I could.
  22. Read what I said, I didn't say anything about unpacking it, attach a debugger to the running l2 process and BOOM you got all the code in-memory with no encryption. I'll look into dex but I doubt I'll bother wasting my time on it just to prove someone like you wrong, I do have better things to do with my time you know.
  23. So the fact he uses AES makes it a masterpiece? Seriously? AES is only a secure encryption to an outsider, not someone who has access to the public key which will be inside kasha's protection module and even IF he uses a polymorphic key you can still find the original public key when it is first sent to the client by hooking his AES initialization function... I can see you are obviously new to reverse engineering otherwise you would know that unpacking the dll isn't necessary as the code in run-time is available unencrypted in the memory, unless with extremely complex encryption systems that use virtualization or self-debugging and exception code-replacement methods - which as far as i can tell enigma has neither.
  24. I say again WHAT?! lol I'm going to ignore the fact that you are completely oblivious to L2Sublimity's actual protection methods because that pales in comparison to the fact that you think Kasha's protection is a masterpiece... Let's start off with the first part, how does adding extra encryption on the login packets only make it a masterpiece? It's not like you even need to know the actual algorithm that hes using considering you could copy/paste his enc/dec functions and replicate it yourself. And you even said it yourself, the ingame packets are the same, completely untouched, do you know how -beep-ing retarded that is?! That means all you have to do is login past server-selection and then pause or completely remove Kasha's protection module and then manually inject l2walker.dll into the client. This is the exact same shit as bake-ice, protecting only the auth which leaves absolutely no room for verification that the protection module is even running once the player has reached the world. PATHETIC. Did you even know that L2Walker and L2.Net can be defeated by changing 3 packet opcodes and then correcting them in the client by changing the addresses on the packet handler table rather than immidiately post-decryption? If L2Sublimity's opcode scrambling function acted on the handler table instead then your current dll still wouldn't allow walker to work as it wouldn't be able to determine which packet is which and would just /fail all over itself. These protections are crap, pieces of shit made by kids who have no idea what they are doing. All of this stupid -beep-ing dll systems that are all bypassable with even the smallest amount of reverse engineering knowledge. When someone makes a ring-0 driver protection system with self-defense THEN you may call it a masterpiece.
  25. C++ is a programming language used to make extenders. You don't have to use C++ you can use any language that can create DLLs and has the ability to interact with unmanaged code. OpenPP aka COEP (Community Open-source Extender Project) was an open-source extender project created by Fr3dBR and others and is used as a base for most people's extenders who don't have the knowledge or confidence to start their own from scratch. It also includes explored class structures for the L2Server's classes, which aren't complete but are a lot better than you will find publicly.
×
×
  • 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