Jump to content

ShuzZzle

Member
  • Posts

    24
  • Joined

  • Last visited

  • Days Won

    1
  • Feedback

    0%

Posts posted by ShuzZzle

  1. These "evil"-process checks are prone to false positives (or different definitions of "evil") and too easily bypassed. Also I consider killing other processes bad practice (even if they're "evil"). Not even XTrap / HackShield do this.

    To the file checks: Why delete these files?

    If you don't want your client to load e.g. loginInfo.py, then remove the relevant code from your shipping client (or use the new xml-based loginInfo). Or hard-code the pack list if you don't want people to mess with it. Same goes for Miles and its extension modules.

    Most of these checks are vulnerable to race conditions anyway (e.g. I can use the time between the check for *.mix files and Miles actually trying to load all of them)

    PS: You should really add a call to time.sleep() to your loop. Currently you're spending a huge amount of CPU time on these checks which will surely cause problems for users with low-end hardware.

     

    You absolutely right. I only released this because somebody requested it this way. I was just doing what I supposed to do :D

  2. Iam currently stuck with a Singleton Class problem (err:https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif).

     

    In my header file i bequeathed the singleton class to my CMyClass Class

    class CMyClass: public singleton<CMyClass>

    Do I have to something else apart from bequeathing? Because Everytime i try to execute the function I get the error above. Without the Singleton Function it is working.

    So there is no logic mistake. 

     

    Can Somebody explain me what i have to do in order to use the ymir Singleton template Class?

     

    Kind Regards

    • Metin2 Dev 1
  3. #FIRST YEAH

     

    Hi Guys,
     
    Just a Simple "python Security script". Just include the file in your root for example and import in prototype.py.
    Its really not a big deal. Somebody asked for it. And you have to have Python 2.7
     
    Code:

    import subprocess
    import app
    import threading
    import os
    import time
    
    Evil_ProcessList = ["notepad++.exe"]
    Evil_FileNameList = [".sdsd",".asd",".asds"]
    
    class SuperUnsecureAndNotEnoughProtectionOfferingScript(object):
    	def __init__(self):
    		self.LoadSuperUnsecureSystem()
    
    		
    	def __del__(self):
    		pass
    		
    	def LoadSuperUnsecureSystem(self):
    		while 1:
    			self.CheckForEvilFiles()
    			self.CheckForEvilProcesses()
    		
    	def KillProcess(self, processname):
    		try:
    			os.system("taskkill /f /im %s" % processname)
    		except:
    			app.Exit()
    	
    	
    	def DeleteFile(self, filename):
    		try:
    			os.remove(filename)
    		except IOError:
    			app.Exit()
    	
    	
    	def CheckForEvilFiles(self):
    		for file in os.listdir(os.getcwd()):
    			for filename in Evil_FileNameList:
    				if file.endswith(filename):
    					self.DeleteFile(file)
    	
    	
    	
    	def CheckForEvilProcesses(self):
    		for evil in Evil_ProcessList:
    			if evil in subprocess.Popen("tasklist", stdout=subprocess.PIPE, shell=False).communicate()[0]:
    				self.KillProcess(evil)
    				
    			
    				
    if __name__ == '__main__':
    	threading.Thread(target=SuperUnsecureAndNotEnoughProtectionOfferingScript, args=()).start()
    		
    • Love 4
  4. Hey Guys,

     

     

    Since this is my first post i want to release a little module i wrote 5 minutes ago.
     
    First of all this is for everybody who hates sockets(like me) and don't want to use item_proto for Shinings/Effects whatever.
     
    The Code is quiet "crappy" but it is working flawlessly. 
     
    So lets get started.

     

    You wanna create something like this where you declare your maps to store the vnum and effectfilepath

    #include <map>
    
    #ifndef ShiningSettings_H
    #define ShiningSettings_H 1
    
    extern std::map<int, char*> shiningdata;
    extern std::map<int, char*>::iterator shiningit;
    
    #endif
    

    Then you wanna create your function for your python module

     
    #include "StdAfx.h"
    #include "ShiningSettings.h"
    
    PyObject* addEffect(PyObject* poSelf, PyObject* poArgs) {
    
    int vnum;
    char* effectpath;
    
    if(!PyTuple_GetInteger(poArgs, 0, &vnum)) {
    
    return Py_BuildException();
    
    }
    if(!PyTuple_GetString(poArgs, 1, &effectpath)) {
    
    return Py_BuildException();
    
    }
    if(!shiningdata.count(vnum)){
    shiningdata[vnum] = effectpath;
    }
    
    return Py_BuildNone();
    }
    
    
    
    
    
    void initShining()
    {
    static PyMethodDef s_methods[] =
    {
    { "Add", addEffect, METH_VARARGS },
    { NULL, NULL },
    };
    
    Py_InitModule("Shining", s_methods);
    }
    
     
    Make also sure you start your function in UserInterface.cpp
    bool RunMainScript(CPythonLauncher& pyLauncher, const char* lpCmdLine){
    //Otherfunctions
    initShining();
    }

    AND in stdafx.h

    add this

    void initShining();

    After that open up your InstanceBase.cpp

    and define your early declared maps also include boost algorithm

    Just copy this at the start of the file

    #include "boost/algorithm/string.hpp"
    
    std::map<int, char*> shiningdata;
    std::map<int, char*>::iterator shiningit;

    Then search for if (12010 <= vnum && vnum <= 12049)

    and copy the following code after the if-clause

    			if(!shiningdata.empty()){
    				for (shiningit=shiningdata.begin(); shiningit!=shiningdata.end(); shiningit++)
    					if (shiningit->first == vnum) {
    						std::string substr(shiningit->second);
    						std::vector<string> chars;
    						boost::split(chars, substr, boost::is_any_of("#"));
    						for(std::vector<string>::size_type i = 0; i != chars.size(); i++) {
    							__AttachEffectToArmours(chars[i]);
    						}
    					}
    			}
    		}
    

    This will split after a # for multiple shining attached to one amour.

    Then you need to declare and define a function in InstanceBaseEffect.cpp and InstanceBase.h

     

    InstanceBaseEffect.cpp

    DWORD CInstanceBase::__AttachEffectToArmours(string effectfilename) {
    	const char * effectpath = effectfilename.c_str();
    	CEffectManager::Instance().RegisterEffect(effectpath, false, false);
    	return m_GraphicThingInstance.AttachEffectByName(0, "Bip01", effectpath);
    }

    Again if you wish you can modify it. I already hardcoded the bonename and the boneindex.

     

     

    In InstanceBase.h

    Search for this:

    	protected:
    		DWORD	__AttachEffect(UINT eEftType);
    		DWORD	__AttachEffectToArmours(string effectfilename);
    		void	__DetachEffect(DWORD dwEID);

    Replace with this:

    	protected:
    		DWORD	__AttachEffect(UINT eEftType);
    		DWORD	__AttachEffectToArmours(string effectfilename);
    		DWORD	__AttachEffect(char filename[128]);
    		void	__DetachEffect(DWORD dwEID);

    Oh Yeah watch out that your filename is no longer than 128 characters.

     

     

    Last but not least:

     

    Create a Python Script in your root Folder (call it whatever you like)

    import Shining
    
    ##Modded Version
    # Implemented Delim for C++
    # delimiter : #
    
    EffectTable = {
    
    	11290 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse"],
    	11291 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse"],
    	11292 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse"],
    	11293 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse"],
    	11294 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse"],
    	11295 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse"],
    	11296 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse"],
    	11297 : ["d:/ymir work/pc/common/effect/armor/grun_shining.mse#d:/ymir work/pc/common/effect/armor/armor-4-2-1.mse"],
    	11298 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse#d:/ymir work/pc/common/effect/armor/armor-4-2-1.mse"],
    	11299 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse#d:/ymir work/pc/common/effect/armor/armor-4-2-1.mse"],
    	11259 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse#d:/ymir work/pc/common/effect/armor/armor-4-2-1.mse"],
    	11269 : ["d:/ymir work/pc/common/effect/armor/armor-4-2-2.mse#d:/ymir work/pc/common/effect/armor/armor-4-2-1.mse"]
    }
    
    
    def LoadEffectTable():
    	for effect in EffectTable:
    		for i in range(len(EffectTable[effect])):
    			vnum = effect
    			effectpath = EffectTable[effect][i]
    		Shining.Add(vnum, effectpath)
    

    As you can see 2 Shinings are seperated with an "#".

     

    Last but no least import your file in your game 

     

    and add the following line under the  python constructor

    effecttable.LoadEffectTable()

    I Hope i didn't forgot anything

    • Metin2 Dev 1
    • Love 18
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.