Initial MSVC 2008 projects workspace
This commit is contained in:
86
l2packets/pcode_obfuscator/L2PCodeObfuscator.h
Normal file
86
l2packets/pcode_obfuscator/L2PCodeObfuscator.h
Normal file
@@ -0,0 +1,86 @@
|
||||
#ifndef L2PCODEOBFUSCATOR_H_
|
||||
#define L2PCODEOBFUSCATOR_H_
|
||||
|
||||
#include "../L2_versions.h"
|
||||
|
||||
/** \class L2PCodeObfuscator
|
||||
* Manages opcode obfuscation engine.
|
||||
*/
|
||||
class L2PCodeObfuscator
|
||||
{
|
||||
public:
|
||||
/** Creates default object with version set to T1 */
|
||||
L2PCodeObfuscator();
|
||||
/** Destructor calls clear() */
|
||||
virtual ~L2PCodeObfuscator();
|
||||
|
||||
public:
|
||||
/** Sets protocol version.\n
|
||||
* different protcols have different sizes of opcode obfuscation tables.\n
|
||||
* Default is version T1 (Kamael does not have opcode obfuscation at all!)
|
||||
* \param new_version - specifies version to set. Must be one of: L2_VERSION_T1, L2_VERSION_T15, L2_VERSION_T2, L2_VERSION_T22, L2_VERSION_T23.
|
||||
* \return none
|
||||
*/
|
||||
void setVersionMode( L2_VERSION new_version ) { m_version = new_version; }
|
||||
/** Set version Hellbound. Equvalent to setVersionMode( L2_VERSION_T15 ); */
|
||||
void setVersionMode_T15() { setVersionMode( L2_VERSION_T15 ); }
|
||||
/** Set version Gracia Part 1. Equvalent to setVersionMode( L2_VERSION_T2 ); */
|
||||
void setVersionMode_T2() { setVersionMode( L2_VERSION_T2 ); }
|
||||
/** Set version Gracia Part 2. Equvalent to setVersionMode( L2_VERSION_T22 ); */
|
||||
void setVersionMode_T22() { setVersionMode( L2_VERSION_T22 ); }
|
||||
/** Set version Gracia Final. Equvalent to setVersionMode( L2_VERSION_T23 ); */
|
||||
void setVersionMode_T23() { setVersionMode( L2_VERSION_T23 ); }
|
||||
|
||||
/** Frees object memory
|
||||
* \return none
|
||||
*/
|
||||
void clear();
|
||||
/** Initializes obfuscation tables using seed (obfuscator code)
|
||||
* \param seed - initial PRNG value
|
||||
* \return none
|
||||
*/
|
||||
void init_tables( unsigned int seed );
|
||||
/** Test if obfuscation is enabled. Obfuscator is enabled after init_tables() was called.
|
||||
* \return 1, if enabled; 0 otherwise
|
||||
*/
|
||||
int isEnabled() const { return m_enabled; }
|
||||
|
||||
/** Decodes opcode in packet (deobfuscates)
|
||||
* \param packet_data_raw - packet bytes (all, starting with 2 first bytes - packet len)
|
||||
*/
|
||||
int decodeIDs( unsigned char *packet_data_raw );
|
||||
/** Encodes opcode in packet (obfuscates)
|
||||
* \param packet_data_raw - packet bytes (all, starting with 2 first bytes - packet len)
|
||||
*/
|
||||
int encodeIDs( unsigned char *packet_data_raw );
|
||||
|
||||
bool decodeOpcode( unsigned char &singleOpcode, unsigned short &doubleOpcode );
|
||||
bool encodeOpcode( unsigned char &singleOpcode, unsigned short &doubleOpcode );
|
||||
bool decodeOpcode( unsigned char &singleOpcode, unsigned short &doubleOpcode, unsigned short &tripleOpcode );
|
||||
bool encodeOpcode( unsigned char &singleOpcode, unsigned short &doubleOpcode, unsigned short &tripleOpcode );
|
||||
|
||||
protected:
|
||||
/** Internal function used to mix opcode tables */
|
||||
void pseudo_srand( unsigned int seed );
|
||||
/** Internal function - generates next pseudo random value. Used to mix opcode tables */
|
||||
unsigned int pseudo_rand();
|
||||
|
||||
protected:
|
||||
L2_VERSION m_version; ///< game version.
|
||||
int m_enabled; ///< =1, if enabled (tables were initialized).
|
||||
|
||||
unsigned char *m_DecodeTable1;
|
||||
unsigned char *m_DecodeTable2;
|
||||
unsigned char *m_DecodeTable3;
|
||||
|
||||
unsigned char *m_EncodeTable1;
|
||||
unsigned char *m_EncodeTable2;
|
||||
unsigned char *m_EncodeTable3;
|
||||
|
||||
unsigned int m_seed; ///< current PRNG seed
|
||||
unsigned int m_s1; ///< size of 1-byte opcode obfuscator table (depends on version)
|
||||
unsigned int m_s2; ///< size of 2-byte opcode obfuscator table (depends on version)
|
||||
unsigned int m_s3; ///< size of 2-byte opcode obfuscator table (depends on version)
|
||||
};
|
||||
|
||||
#endif /* L2PCODEOBFUSCATOR_H_ */
|
Reference in New Issue
Block a user