habe folgendes problem unzwar wenn ich meinen server starte + anti hack kommt immer : Error While Loggin in glaube das hat mein Problem beschrieben ^^ unten sind alle einträge ^^. das ändern des headmarks hat auch nichts gebracht.
Benutze Clean Files
Einträge
Anti Hack
Code:
[connection] ; The IP of the server, which is running the cache server server_ip="localhost" ; The port the cache server is using (CacheServer.ini), may not be same as client_port server_port=5400 ; The port the client connects to client_port=15400 ; Maximum connections per IP (0 = infinite connections allowed) max_ip_connections=0 ; Maximum amount of connection attempts of a specific IP per minute (0 = infinite) ip_connections_per_minute=0 ; The leading byte of all packets. Edit it here if you did so in the FlyFF server. Else LEAVE IT at 0x5e. leading_byte=0x5e ; Do not change if you don't know, what you do! max_recv=70000 max_recv_space=10000
Code:
Core "127.0.0.1" Port "5400"
Code:
#ifndef __BUFFER_H__ #define __BUFFER_H__ #pragma once #include "mempooler.h" #include "heapmng.h" #include <dplay.h> #ifdef __CRC #include "crc.h" using namespace std; #define HEADERSIZE5 ( sizeof(DWORD) + 1 ) #if defined( __PACKET_REPLAY_R ) || defined( __PACKET_REPLAY_W ) #define HEADERSIZE13 ( sizeof(char) + sizeof(int) + sizeof(DWORD) + sizeof(DWORD) + sizeof(DWORD) ) #else // __PACKET_REPLAY_R || __PACKET_REPLAY_W #define HEADERSIZE13 ( sizeof(char) + sizeof(DWORD) + sizeof(DWORD) + sizeof(DWORD) ) #endif // __PACKET_REPLAY_R || __PACKET_REPLAY_W #endif // __CRC #define HEADERMARK '^' // Normal message header #define SYSHEADERMARK '%' // System message header #define MAX_BUFFER 8192 #define MAX_WSABUF 128 enum BUFFER_TYPE { BUFFER_TYPE_5BYTE, // ±âÁ¸ 1 + 4¹ÙÀÌÆ® Çì´õ ¹æ½Ä BUFFER_TYPE_2BYTE, // 2¹ÙÀÌÆ® Çì´õ ¹æ½Ä }; /////////////////////////////////////////////////////////////////////// // CBuffer /////////////////////////////////////////////////////////////////////// class CBuffer { public: DPID dpid; u_long cb; BYTE m_lpBuf[MAX_BUFFER]; LPBYTE m_lpBufStart; LPBYTE m_lpBufMax; LPBYTE m_pHead; LPBYTE m_pTail; CBuffer* pNext; CBuffer* pPrevious; DWORD m_dwHeaderSize; public: // Constructions CBuffer( u_long uBufSize ); virtual ~CBuffer(); // Operations int GetSize( void ); LPBYTE GetWritableBuffer( int* pnBufSize ); int GetWritableBufferSize( void ); LPBYTE GetReadableBuffer( int* pnBufSize ); int GetReadableBufferSize( void ); DWORD GetHeaderLength() { return m_dwHeaderSize; } virtual DWORD GetPacketSize( BYTE* ptr ) { return *(UNALIGNED LPDWORD)(ptr + 1); } virtual void SetHeader( DWORD uDataSize ) { *m_pTail = HEADERMARK; m_pTail++; *(UNALIGNED DWORD*)m_pTail = (DWORD)uDataSize; m_pTail += sizeof(DWORD); } public: static CHeapMng* m_pHeapMng; #ifndef __VM_0820 #ifndef __MEM_TRACE static MemPooler<CBuffer>* m_pPool; void* operator new( size_t nSize ) { return CBuffer::m_pPool->Alloc(); } void* operator new( size_t nSize, LPCSTR lpszFileName, int nLine ) { return CBuffer::m_pPool->Alloc(); } void operator delete( void* lpMem ) { CBuffer::m_pPool->Free( (CBuffer*)lpMem ); } void operator delete( void* lpMem, LPCSTR lpszFileName, int nLine ) { CBuffer::m_pPool->Free( (CBuffer*)lpMem ); } #endif // __MEM_TRACE #endif // __VM_0820 }; inline int CBuffer::GetSize( void ) { return (int)( m_lpBufMax - m_lpBufStart ); } inline LPBYTE CBuffer::GetWritableBuffer( int* pnBufSize ) { *pnBufSize = (int)( m_lpBufMax - m_pTail ); return m_pTail; } inline int CBuffer::GetWritableBufferSize( void ) { return (int)( m_lpBufMax - m_pTail ); } inline LPBYTE CBuffer::GetReadableBuffer( int* pnBufSize ) { *pnBufSize = (int)( m_pTail - m_pHead ); return m_pHead; } inline int CBuffer::GetReadableBufferSize( void ) { return (int)( m_pTail - m_pHead ); } /////////////////////////////////////////////////////////////////////// // CBuffer2 /////////////////////////////////////////////////////////////////////// class CBuffer2 : public CBuffer { public: CBuffer2( u_long uBufSize ) : CBuffer( uBufSize ) { m_dwHeaderSize = 2; } virtual DWORD GetPacketSize( BYTE* ptr ) { // DWORD dwSize = *(WORD *)ptr; // dwSize -= 2; // return dwSize; DWORD dwSize = ntohs( *(WORD *)ptr ); dwSize -= 2; return dwSize; } virtual void SetHeader( DWORD uDataSize ) { // *(UNALIGNED WORD*)m_pTail = (WORD)(uDataSize + 2); // m_pTail += sizeof(WORD); *(UNALIGNED WORD*)m_pTail = htons( (WORD)(uDataSize + 2) ); m_pTail += sizeof(WORD); } #ifndef __VM_0820 #ifndef __MEM_TRACE static MemPooler<CBuffer2>* m_pPool2; void* operator new( size_t nSize ) { return CBuffer2::m_pPool2->Alloc(); } void* operator new( size_t nSize, LPCSTR lpszFileName, int nLine ) { return CBuffer2::m_pPool2->Alloc(); } void operator delete( void* lpMem ) { CBuffer2::m_pPool2->Free( (CBuffer2*)lpMem ); } void operator delete( void* lpMem, LPCSTR lpszFileName, int nLine ) { CBuffer2::m_pPool2->Free( (CBuffer2*)lpMem ); } #endif // __MEM_TRACE #endif // __VM_0820 }; /////////////////////////////////////////////////////////////////////// // CBufferQueue /////////////////////////////////////////////////////////////////////// class CBufferQueue { private: CBuffer* m_pHead; CBuffer* m_pTail; u_long m_uCount; public: CMclCritSec m_cs; #ifdef __CRC CRC32* m_pcrc; DWORD m_dwWriteHeaderSize; #endif // __CRC #ifdef __PROTOCOL0910 DWORD* m_pdwProtocolId; #endif // __PROTOCOL0910 public: // Constructions CBufferQueue(); virtual ~CBufferQueue(); // Operations void AddTail( CBuffer* pBuffer ); void RemoveHead( void ); CBuffer* GetHead( void ); CBuffer* GetTail( void ); void Clear( BOOL bDelete ); BOOL IsEmpty( void ); u_long GetCount( void ); void AddData( LPBYTE lpData, u_long uDataSize, BUFFER_TYPE type ); void GetData( LPWSABUF lpBuffers, LPDWORD lpdwBufferCount ); void RemoveData( u_long uDataSize ); #ifdef __CRC #ifdef __PROTOCOL0910 void crc( CRC32* pcrc, LPDWORD pdwProtocolId ) { m_pcrc = pcrc; m_pdwProtocolId = pdwProtocolId; m_dwWriteHeaderSize = HEADERSIZE13; } #else // __PROTOCOL0910 void crc( CRC32* pcrc ) { m_pcrc = pcrc; m_dwWriteHeaderSize = HEADERSIZE13; } #endif // __PROTOCOL0910 #endif // __CRC #ifdef __PACKET_REPLAY_W private: int m_nPacket; #endif // __PACKET_REPLAY_W }; inline CBuffer* CBufferQueue::GetHead( void ) { return m_pHead; } inline CBuffer* CBufferQueue::GetTail( void ) { return m_pTail; } inline u_long CBufferQueue::GetCount( void ) { return m_uCount; } inline BOOL CBufferQueue::IsEmpty( void ) { return( m_uCount == 0 ); } inline void CBufferQueue::AddTail( CBuffer* pBuffer ) { CMclAutoLock Lock( m_cs ); // Add it to the active list if( !m_pHead ) m_pHead = pBuffer; if( m_pTail ) m_pTail->pNext = pBuffer; pBuffer->pPrevious = m_pTail; pBuffer->pNext = NULL; m_pTail = pBuffer; m_uCount++; } inline void CBufferQueue::RemoveHead( void ) { // CMclAutoLock Lock( m_cs ); // Remove it from active list if( !IsEmpty() ) { if( m_pTail == m_pHead ) m_pTail = NULL; if( m_pHead->pNext ) m_pHead->pNext->pPrevious = NULL; m_pHead = m_pHead->pNext; } m_uCount--; } /////////////////////////////////////////////////////////////////////// // CBufferFactory /////////////////////////////////////////////////////////////////////// class CBufferFactory { public: CBuffer* CreateBuffer( BUFFER_TYPE type, u_long uBufSize = MAX_BUFFER ); static CBufferFactory& GetInstance(); private: CBufferFactory(); }; #endif // __BUFFER_H__
Code:
#ifndef __BUFFER_H__ #define __BUFFER_H__ #pragma once //#include "mempool.h" #include "mempooler.h" #include "heapmng.h" #include <dplay.h> #include "crc.h" #define HEADERMARK '^' // Normal message header #define SYSHEADERMARK '%' // System message header #define MAX_BUFFER 8192 #define MAX_WSABUF 128 template <class> class CDPMng; class CBuffer { public: DPID dpid; u_long cb; BYTE m_lpBuf[MAX_BUFFER]; LPBYTE m_lpBufStart; LPBYTE m_lpBufMax; LPBYTE m_pHead; LPBYTE m_pTail; CBuffer* pNext; CBuffer* pPrevious; CRC32* m_pcrc; public: // Constructions CBuffer( u_long uBufSize = MAX_BUFFER ); virtual ~CBuffer(); // Operations int GetSize( void ); LPBYTE GetWritableBuffer( int* pnBufSize ); int GetWritableBufferSize( void ); LPBYTE GetReadableBuffer( int* pnBufSize ); int GetReadableBufferSize( void ); void crc( CRC32* pcrc ) { m_pcrc = pcrc; } void MessageHandler( CDPMng<CBuffer>* pDPMng, DPID dpidFrom ); CBuffer* Fetch( CBuffer** ppRecvBuffer, DWORD dwBytes, CRC32* pcrc ); virtual void AddSysMsg( void* pMsg, u_long uMsgSize ); static u_long GetHdrSize( BOOL bcrc ) { if( bcrc ) return 13; return 5; // sizeof(char) + sizeof(DWORD) } virtual void AddHdr( LPBYTE lpData, u_long uDataSize ); virtual void AddData( LPBYTE lpData, u_long uDataSize, u_long & uRemnant ); public: static \ CHeapMng* m_pHeapMng; static \ BOOL IsHeader( BYTE cHeader ); #ifndef __VM_0820 #ifndef __MEM_TRACE static \ //CMemPool<CBuffer>* m_pPool; MemPooler<CBuffer>* m_pPool; void* operator new( size_t nSize ) { return CBuffer::m_pPool->Alloc(); } void* operator new( size_t nSize, LPCSTR lpszFileName, int nLine ) { return CBuffer::m_pPool->Alloc(); } void operator delete( void* lpMem ) { CBuffer::m_pPool->Free( (CBuffer*)lpMem ); } void operator delete( void* lpMem, LPCSTR lpszFileName, int nLine ) { CBuffer::m_pPool->Free( (CBuffer*)lpMem ); } #endif // __MEM_TRACE #endif // __VM_0820 }; inline int CBuffer::GetSize( void ) { return (int)( m_lpBufMax - m_lpBufStart ); } inline LPBYTE CBuffer::GetWritableBuffer( int* pnBufSize ) { *pnBufSize = (int)( m_lpBufMax - m_pTail ); return m_pTail; } inline int CBuffer::GetWritableBufferSize( void ) { return (int)( m_lpBufMax - m_pTail ); } inline LPBYTE CBuffer::GetReadableBuffer( int* pnBufSize ) { *pnBufSize = (int)( m_pTail - m_pHead ); return m_pHead; } inline int CBuffer::GetReadableBufferSize( void ) { return (int)( m_pTail - m_pHead ); } inline BOOL CBuffer::IsHeader( BYTE cHeader ) { return ( cHeader == HEADERMARK || cHeader == SYSHEADERMARK ); } /*--------------------------------------------------------------------------------*/ class CBuffer2 : public CBuffer { public: CBuffer2( u_long uBufSize = MAX_BUFFER ) : CBuffer( uBufSize ) {} virtual ~CBuffer2() {} void MessageHandler( CDPMng<CBuffer2>* pDPMng, DPID dpidFrom ); CBuffer2* Fetch( CBuffer2** ppRecvBuffer, DWORD dwBytes, CRC32* pcrc ); virtual void AddSysMsg( void* pMsg, u_long uMsgSize ); static u_long GetHdrSize( BOOL bcrc ) { if( bcrc ) return 10; return 2; } virtual void AddHdr( LPBYTE lpData, u_long uDataSize ); public: static \ CHeapMng* m_pHeapMng; #ifndef __VM_0820 #ifndef __MEM_TRACE static \ //CMemPool<CBuffer>* m_pPool; MemPooler<CBuffer2>* m_pPool2; void* operator new( size_t nSize ) { return CBuffer2::m_pPool2->Alloc(); } void* operator new( size_t nSize, LPCSTR lpszFileName, int nLine ) { return CBuffer2::m_pPool2->Alloc(); } void operator delete( void* lpMem ) { CBuffer2::m_pPool2->Free( (CBuffer2*)lpMem ); } void operator delete( void* lpMem, LPCSTR lpszFileName, int nLine ) { CBuffer2::m_pPool2->Free( (CBuffer2*)lpMem ); } #endif // __MEM_TRACE #endif // __VM_0820 }; /*--------------------------------------------------------------------------------*/ class CBuffer3 : public CBuffer { public: CBuffer3( u_long uBufSize = MAX_BUFFER ) : CBuffer( uBufSize ) {} virtual ~CBuffer3() {} void MessageHandler( CDPMng<CBuffer3>* pDPMng, DPID dpidFrom ); CBuffer3* Fetch( CBuffer3** ppRecvBuffer, DWORD dwBytes, CRC32* pcrc ); virtual void AddSysMsg( void* pMsg, u_long uMsgSize ); static u_long GetHdrSize( BOOL bcrc ) { if( bcrc ) return 10; return 2; } virtual void AddHdr( LPBYTE lpData, u_long uDataSize ); public: static \ CHeapMng* m_pHeapMng; #ifndef __VM_0820 #ifndef __MEM_TRACE static \ //CMemPool<CBuffer>* m_pPool; MemPooler<CBuffer3>* m_pPool2; void* operator new( size_t nSize ) { return CBuffer3::m_pPool2->Alloc(); } void* operator new( size_t nSize, LPCSTR lpszFileName, int nLine ) { return CBuffer3::m_pPool2->Alloc(); } void operator delete( void* lpMem ) { CBuffer3::m_pPool2->Free( (CBuffer3*)lpMem ); } void operator delete( void* lpMem, LPCSTR lpszFileName, int nLine ) { CBuffer3::m_pPool2->Free( (CBuffer3*)lpMem ); } #endif // __MEM_TRACE #endif // __VM_0820 }; /*--------------------------------------------------------------------------------*/ template <class T> class CBufferQueue { private: T* m_pHead; T* m_pTail; u_long m_uCount; public: CMclCritSec m_cs; CRC32* m_pcrc; public: // Constructions CBufferQueue(); virtual ~CBufferQueue(); // Operations void AddTail( T* pBuffer ); void RemoveHead( void ); T* GetHead( void ); T* GetTail( void ); void Clear( BOOL bDelete ); BOOL IsEmpty( void ); u_long GetCount( void ); void AddData( LPBYTE lpData, u_long uDataSize ); void GetData( LPWSABUF lpBuffers, LPDWORD lpdwBufferCount ); void RemoveData( u_long uDataSize ); void crc( CRC32* pcrc ) { m_pcrc = pcrc; } }; template <class T> inline T* CBufferQueue<T>::GetHead( void ) { return m_pHead; } template <class T> inline T* CBufferQueue<T>::GetTail( void ) { return m_pTail; } template <class T> inline u_long CBufferQueue<T>::GetCount( void ) { return m_uCount; } template <class T> inline BOOL CBufferQueue<T>::IsEmpty( void ) { return( m_uCount == 0 ); } template <class T> inline void CBufferQueue<T>::AddTail( T* pBuffer ) { CMclAutoLock Lock( m_cs ); // Add it to the active list if( !m_pHead ) m_pHead = pBuffer; if( m_pTail ) m_pTail->pNext = pBuffer; pBuffer->pPrevious = m_pTail; pBuffer->pNext = NULL; m_pTail = pBuffer; m_uCount++; } template <class T> inline void CBufferQueue<T>::RemoveHead( void ) { // CMclAutoLock Lock( m_cs ); // Remove it from active list if( !IsEmpty() ) { if( m_pTail == m_pHead ) m_pTail = NULL; if( m_pHead->pNext ) m_pHead->pNext->pPrevious = NULL; m_pHead = (T*)m_pHead->pNext; } m_uCount--; } template <class T> CBufferQueue<T>::CBufferQueue() { m_uCount = 0; m_pHead = m_pTail = NULL; m_pcrc = NULL; } template <class T> CBufferQueue<T>::~CBufferQueue() { Clear( TRUE ); } template <class T> void CBufferQueue<T>::Clear( BOOL bDelete ) { CMclAutoLock Lock( m_cs ); if( bDelete ) { T* pBuffer = GetHead(), *ptrtmp; while( pBuffer ) { ptrtmp = (T*)pBuffer->pNext; SAFE_DELETE( pBuffer ); pBuffer = ptrtmp; } } m_uCount = 0; m_pHead = m_pTail = NULL; } template <class T> void CBufferQueue<T>::AddData( LPBYTE lpData, u_long uDataSize ) { // CMclAutoLock Lock( m_cs ); u_long uRemnant = uDataSize; T* pBuffer = GetTail(); // LPBYTE ptr; DWORD cb; if( pBuffer ) { cb = pBuffer->GetWritableBufferSize(); if( cb < T::GetHdrSize( (BOOL)m_pcrc ) ) { pBuffer = new T; pBuffer->crc( m_pcrc ); AddTail( pBuffer ); } } else { pBuffer = new T; pBuffer->crc( m_pcrc ); AddTail( pBuffer ); } /* ptr = pBuffer->GetWritableBuffer( &cb ); // header *ptr = HEADERMARK; // ptr++; // *(UNALIGNED DWORD*)ptr = (DWORD)uDataSize; // ptr += sizeof(DWORD); // cb = ( cb-HEADERSIZE < uRemnant? cb-HEADERSIZE: uRemnant ); //// data // ASSERT( ptr + cb <= pBuffer->m_lpBufMax ); // memcpy( (void*)ptr, lpData, cb ); // pBuffer->m_pTail = ptr + cb; // uRemnant -= cb; if( m_pcrc ) { BYTE digest[sizeof(DWORD)]; m_pcrc->Restart(); m_pcrc->Update( (const byte*)( &uDataSize ), sizeof(u_long) ); m_pcrc->Final( digest ); *(UNALIGNED DWORD*)( ptr + sizeof(char) ) = *(UNALIGNED DWORD*)digest; *(UNALIGNED DWORD*)( ptr + sizeof(char) + sizeof(DWORD) ) = (DWORD)uDataSize; m_pcrc->Restart(); m_pcrc->Update( (const byte*)( lpData ), (u_int)uDataSize ); m_pcrc->Final( digest ); *(UNALIGNED DWORD*)( ptr + sizeof(char) +sizeof(DWORD) + sizeof(DWORD) ) = *(UNALIGNED DWORD*)digest; } else { *(UNALIGNED DWORD*)&ptr[1] = (DWORD)uDataSize; } */ pBuffer->AddHdr( lpData, uDataSize ); pBuffer->AddData( lpData, uDataSize, uRemnant ); while( uRemnant > 0 ) { pBuffer = new T; pBuffer->crc( m_pcrc ); pBuffer->AddData( lpData, uDataSize, uRemnant ); AddTail( pBuffer ); } /* // data cb = ( cb-m_dwWriteHeaderSize < uRemnant? cb-m_dwWriteHeaderSize: uRemnant ); ASSERT( &ptr[m_dwWriteHeaderSize] + cb <= pBuffer->m_lpBufMax ); memcpy( (void*)&ptr[m_dwWriteHeaderSize], lpData, cb ); pBuffer->m_pTail = ptr + m_dwWriteHeaderSize + cb; uRemnant -= cb; while( uRemnant > 0 ) { pBuffer = new CBuffer; ptr = pBuffer->GetWritableBuffer( &cb ); cb = ( cb < uRemnant? cb: uRemnant ); ASSERT( ptr + cb <= pBuffer->m_lpBufMax ); memcpy( (void*)ptr, &lpData[uDataSize - uRemnant], cb ); pBuffer->m_pTail = ptr + cb; AddTail( pBuffer ); uRemnant -= cb; } */ } template <class T> void CBufferQueue<T>::RemoveData( u_long uDataSize ) { T* pBuffer; // CMclAutoLock Lock( m_cs ); u_long uRemnant; while( uDataSize > 0 ) { pBuffer = GetHead(); // ASSERT( pBuffer ); if( NULL == pBuffer ) return; uRemnant = pBuffer->GetReadableBufferSize(); if( uRemnant > uDataSize ) { pBuffer->m_pHead += uDataSize; uDataSize = 0; } else { RemoveHead(); // SAFE_DELETE( pBuffer ); safe_delete( pBuffer ); uDataSize -= uRemnant; } } } template <class T> void CBufferQueue<T>::GetData( LPWSABUF lpBuffers, LPDWORD lpdwBufferCount ) { T* pBuffer; int i = 0; // *lpdwBufferCount = 0; // CMclAutoLock Lock( m_cs ); pBuffer = GetHead(); while( pBuffer && i < MAX_WSABUF ) { lpBuffers[i].buf = (char*)pBuffer->GetReadableBuffer( (int*)&lpBuffers[i].len ); i++; pBuffer = (T*)pBuffer->pNext; } *lpdwBufferCount = i; } #endif // __BUFFER_H__
Code:
STRINGTABLE LANGUAGE LANG_KOREAN, 0x1 { 1, "127.0.0.1" 2, "1" 3, "0" 4, "1" 5, "1" 6, "20140101" 7, "5400" // WEnn man das auf 15400 macht gehts auch nicht ^^ 8, "15400" // wenn man das auch 5400 macht gehts auch nicht ^^ 9, "5" 10, "1252" 11, "0" }