• Content count

  • Joined

  • Last visited

Everything posted by Sanchez

  1. Hi everyone, In this thread I will show you how to use the compiled python files in the client. First of all we need to download Python 2.2 or 2.7 Python 2.2 download Python 2.7 download Let's start the tutorial: 1. Rename to or to anything you want, it doesn't matter. 2. Change these stuffs in Search for this: filename = name + '.py' Replace with this: filename = name + '.pyc' Search for this: newmodule = _process_result(compile(pack_file(filename,'r').read(),filename,'exec'),name) Replace with this: newmodule = _process_result(marshal.loads(pack_file(filename,'rb').read()[8:]),name) Search for this: RunMainScript("") Replace with this: RunMainScript("prototype.pyc") 3. Create a new file called 4. Copy this to import pack import imp import marshal data = pack.Get('main.pyc') if data == None: raise IOError, 'Error happened...' if data[:4] != imp.get_magic(): raise ImportError, 'Error happened...' exec marshal.loads(data[8:]) 5. Let's continue with the compiling. Download this file and put to the Python 2.2 or 2.7 folder. Create a new folder called files and put all .py files from the root and the to the folder. Drop the downloaded to the python.exe and wait few seconds, now it will compile the files. After the compiling finished copy back the .pyc files to the root and delete the old .py files. 6. Copy the to the root. (Example picture) 7. Pack the root.eix/epk If you have any question or suggestion please just reply to this topic. Kind Regards, Sanchez
  2. June 17 2014 - I rewrote the whole the source. FAQ: How can I open the project, which version of Visual Studio do I need? I used Visual Studio 2013, but I'm sure you can open in 2012 too. What is CRC? You can learn more about Cyclic redundancy check here. How can I make a list for the patcher? You can use the lister tool, it's in the source. HOW TO MAKE IT WORKS: 1. Change the ServerURL variable in Globals.cs to your url 2. Build the project 3. Create a list with the lister tool (Example of the list) 4. Upload the files and the patchlist to your server (Example of the folder structure) Downloads: MEGA.CO.NZ If you have any question or suggestion please just reply to this topic. Kind Regards, Sanchez
  3. Good afternoon guys, As far as I know there is no available up to date client at the moment, so it's finally time to release one. Can I modify the root? It have .py files? Yes, you can modify it without any problems. Is it contains the updates from the last few weeks? Yes, everything till today. Can I unpack the patches or they are archived with type 4? Every patch has been repacked with type 0-1-2 without any modifications. What archiver should I use? It depends on you, but you can use the r3869/r2806 by Tim, which is available on this board. Is the client have any modifications? No, I just had to modify some lines in the root to get it work with the binary. Is there any way to use again the "pong"? Yes! The client contains 2 binary and the secondary one support it. (Please note: Without the modification of the (40250)game file the secondary binary will not work) metin2client_without_pong.exe metin2client_with_pong.exe Is the binary use Python 2.7? Sure, it's using 2.7. Is the the client have any known bug? I tested many time the client and I didn't found anything. Please let me know if you found an issue. I don't trust you. Can you prepare a VirusTotal? I can't. The size of the client is way too big for VT, but you can find the results of the binaries on pastebin. Download: PASTEBIN
  4. Hi everyone, Maybe just in my country, but it looks so many people started using this annoying PM flooder which cause a buffer overflow in the target client. It can be fixed easily on server-side, so let's do it: Add these functions as public to char.h: void ClearPMCounter(void) { m_iPMCounter = 0; } void IncreasePMCounter(void) { m_iPMCounter++; } void SetLastPMPulse(void); int GetPMCounter(void) const { return m_iPMCounter; } int GetLastPMPulse(void) const { return m_iLastPMPulse; } Add these to char.h too, but as protected: int m_iLastPMPulse; int m_iPMCounter; Add this function to char.cpp: void CHARACTER::SetLastPMPulse(void) { m_iLastPMPulse = thecore_pulse() + 25; } Still in char.cpp search for the Initialize and add these to the function: m_iLastPMPulse = 0; m_iPMCounter = 0; Now navigate to the Whisper function in input_main.cpp and add this after the iExtraLen variable checking at the top: if (ch->GetLastPMPulse() < thecore_pulse()) ch->ClearPMCounter(); if (ch->GetPMCounter() > 3 && ch->GetLastPMPulse() > thecore_pulse()) { ch->GetDesc()->SetPhase(PHASE_CLOSE); return -1; } Search for this still in the Whisper function: if (pkChr == ch) return (iExtraLen); Add these after that: ch->IncreasePMCounter(); ch->SetLastPMPulse();
  5. Hi everyone, In this tutorial i'm going to show you how to unpack the type 4 protected files from the official client. File requirements: [RELEASE] Current Metin2.DE/EN Client This binary by DaRealFreak (First of all drop the type 4 protected files from the official client to the downloaded client.) Let's start the tutorial with the serverinfo. Unpack the root of the downloaded client and modify the with these informations: IP address: World port: 12105 Auth port: 11150 Now save the and open the, then search for example this function: def __OnClickSelectServerButton(self): Add this to the begin of the function: extractor ={} execfile("", extractor) Now add the to the root and pack it. Let's continue and drop the downloaded metin2client_extractor.exe to the client folder and start it. Register a new account here, login and create a new character. Now press the exit key on your keyboard to go back to the channel select, because we are already received the keys for the type 4 protected files. And...that's all. Select again a server to show up the python extractor window and we can extract every type 4 protected file.
  6. I'm sorry, but we are still working on it to resolve this issue. Please be to patient, we are trying to do the best.
  7. The title says everything, what's your last movie? Today morning I watched the Blue Is the Warmest Color movie and I really enjoyed it.
  8. VIP

    We are working on it to resolve this issue, but I can't give you an ETA.
  9. Then there's no reason to create a backdoor.
  10. No sorry. You can do it easily, just follow the steps.
  11. It depends on the type of the backdoor, but the easiest and probably the best will be the following: 1. Create or modify a packet which sends text (char array) 2. Write a small tool which can be injected into the process to set the content and send the backdoor packet. 2. Execute the content of the packet by using the system(content goes here) function.
  12. I can clearly read every comment, just use Korean - Windows 949 encoding. Google translate:
  13. Firstly I recommend you to do a graceful db shutdown or just call the CClientManager::Quit() function to see what's going on with the cache when shutting down the server.
  14. We are working on it to resolve this issue, please be patient.
  15. I'm totally agree with this petition. I ate so many things in my life, such as shark, squid, clam, grasshopper and many more animals, but I would never ever eat a dog. I know that I'm from the Europe and I will never understand their culture, but... PS: I also own a dog and she is part of my life, not my lunch.
  16. Next time please open your topic to the Questions and Answers section.
  17. Hi everyone, As the title says you can get the premium version of CyberGhost for free, for a limited time. To get your key just go here: and enter your Email address. Unlimited Traffic Unlimited Bandwidth 305+ servers P2P support and many more....
  18. Try it with a temporary E-mail address.
  19. 3 months CyberGhost Premium for free:
  20. Hi everyone, It's finally time to open a topic for the small tutorials, it's better than flooding the board with one sentence topics. 1. Binary name check: Sure, it's possible to do it on client-side, but if we can do it on server-side, theres no reason to do it on client-side. 1. Search for this function in game/input.cpp: void CInputProcessor::Version(LPCHARACTER ch, const char* c_pData) 2. Replace the entire function with this: if (!ch) { return; } TPacketCGClientVersion * p = (TPacketCGClientVersion *) c_pData; // If the file name is not metin2client.exe and the GM level is not equal with GM_IMPLEMENTOR kick the player if (strcmp(p->filename, "metin2client.exe") && ch->GetGMLevel() != GM_IMPLEMENTOR) { // immediately close the connection with the player sys_err("%s[%d] has been disconnected: %s", ch->GetName(), ch->GetPlayerID(), p->filename); ch->GetDesc()->SetPhase(PHASE_CLOSE); return; } sys_log(0, "VERSION: %s %s %s", ch->GetName(), p->timestamp, p->filename); ch->GetDesc()->SetClientVersion(p->timestamp); 2. Block the drop hacks: This issue is surely known by everybody, the server gets overloaded when dropping too many items in short time. 1. Open game/char_item.cpp and search for this: if (pkItemToDrop->AddToGround(GetMapIndex(), pxPos)) 2. Add this under that: // Clear the variable, it looks the player does not dropped any item in the past second. if (thecore_pulse() > LastDropTime + 25) CountDrops = 0; // It looks the player dropped min. 4 items in the past 1 second if (thecore_pulse() < LastDropTime + 25 && CountDrops >= 4) { // Set it to 0 CountDrops = 0; sys_err("%s[%d] has been disconnected because of drophack using", GetName(), GetPlayerID()); // Disconnect the player GetDesc()->SetPhase(PHASE_CLOSE); return false; } 3. Search for this still in game/char_item.cpp: LogManager::instance().ItemLog(this, pkItemToDrop, "DROP", szHint); 4. Add this under that: LastDropTime = thecore_pulse(); CountDrops++; 5. Open game/char.h and add these: int LastDropTime; int CountDrops; 6. Open game/char.cpp and search for this: void CHARACTER::Initialize() 7. Add these to the function: CountDrops = 0; LastDropTime = 0;
  21. Yes.
  22. CHARACTER::GetQuestFlag("questname.something") You're looking for this?
  23. Do something on your own and then you shouldn't care about copyright problems.
  24. Please don't steal the work of other people, do a map on your own.