2025-10-15 04:32:59 +08:00
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
# include <stdint.h>
# include <stddef.h>
# pragma once
2025-11-09 00:49:34 +08:00
class ObfsBase
{
2025-10-15 04:32:59 +08:00
public :
2025-11-09 00:49:34 +08:00
bool m_bGenCArray ;
ObfsBase ( bool genCArray = true ) : m_bGenCArray ( genCArray ) { }
virtual ~ ObfsBase ( ) { }
// <20> Գƻ<D4B3> <C6BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڼ<EFBFBD> <DABC> ܺͽ<DCBA> <CDBD> <EFBFBD>
virtual void ObfuscateBuffer ( uint8_t * buf , size_t len , uint32_t seed ) { }
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˳<EFBFBD> <CBB3> <EFBFBD> ෴
virtual void DeobfuscateBuffer ( uint8_t * buf , size_t len , uint32_t seed ) { }
virtual bool WriteFile ( const char * filename , uint8_t * data , size_t length , const char * arrayName )
{
return m_bGenCArray ? WriteBinaryAsCArray ( filename , data , length , arrayName ) : WriteBinaryFile ( filename , data , length ) ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> C <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʽ д<CABD> <D0B4> <EFBFBD> ļ<EFBFBD>
virtual bool WriteBinaryAsCArray ( const char * filename , uint8_t * data , size_t length , const char * arrayName )
{
FILE * file = fopen ( filename , " w " ) ;
if ( ! file ) return false ;
fprintf ( file , " unsigned char %s[] = { \n " , arrayName ) ;
for ( size_t i = 0 ; i < length ; + + i ) {
if ( i % 24 = = 0 ) fprintf ( file , " " ) ;
fprintf ( file , " 0x%02X " , data [ i ] ) ;
if ( i ! = length - 1 ) fprintf ( file , " , " ) ;
if ( ( i + 1 ) % 24 = = 0 | | i = = length - 1 ) fprintf ( file , " \n " ) ;
else fprintf ( file , " " ) ;
}
fprintf ( file , " }; \n " ) ;
fprintf ( file , " unsigned int %s_len = %zu; \n " , arrayName , length ) ;
fclose ( file ) ;
return true ;
}
// ʹ <> <CAB9> "wb" <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> ģʽ
virtual bool WriteBinaryFile ( const char * filename , const uint8_t * data , size_t length )
{
FILE * file = fopen ( filename , " wb " ) ;
if ( ! file ) return false ;
size_t written = fwrite ( data , 1 , length , file ) ;
fclose ( file ) ;
return written = = length ;
}
2025-10-15 04:32:59 +08:00
} ;
2025-11-09 00:49:34 +08:00
class Obfs : public ObfsBase
{
2025-10-15 04:32:59 +08:00
private :
2025-11-09 00:49:34 +08:00
// <20> <> <EFBFBD> <EFBFBD> 8λ<38> <CEBB> <EFBFBD> <EFBFBD>
static inline uint8_t rol8 ( uint8_t val , int shift )
{
return ( val < < shift ) | ( val > > ( 8 - shift ) ) ;
}
// <20> <> <EFBFBD> <EFBFBD> 8λ<38> <CEBB> <EFBFBD> <EFBFBD>
static inline uint8_t ror8 ( uint8_t val , int shift )
{
return ( val > > shift ) | ( val < < ( 8 - shift ) ) ;
}
2025-10-15 04:32:59 +08:00
public :
2025-11-09 00:49:34 +08:00
Obfs ( bool genCArray = true ) : ObfsBase ( genCArray ) { }
// <20> Գƻ<D4B3> <C6BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڼ<EFBFBD> <DABC> ܺͽ<DCBA> <CDBD> <EFBFBD>
virtual void ObfuscateBuffer ( uint8_t * buf , size_t len , uint32_t seed )
{
uint32_t state = seed ;
for ( size_t i = 0 ; i < len ; + + i ) {
uint8_t mask = ( uint8_t ) ( ( state > > 16 ) & 0xFF ) ;
buf [ i ] = rol8 ( buf [ i ] ^ mask , 3 ) ; // <20> <> <EFBFBD> <EFBFBD> +<2B> <> ת<EFBFBD> <D7AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
state = state * 2654435761u + buf [ i ] ; // LCG + <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ŷ<EFBFBD>
}
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˳<EFBFBD> <CBB3> <EFBFBD> ෴
virtual void DeobfuscateBuffer ( uint8_t * buf , size_t len , uint32_t seed )
{
uint32_t state = seed ;
for ( size_t i = 0 ; i < len ; + + i ) {
uint8_t mask = ( uint8_t ) ( ( state > > 16 ) & 0xFF ) ;
uint8_t orig = buf [ i ] ;
buf [ i ] = ror8 ( buf [ i ] , 3 ) ^ mask ;
state = state * 2654435761u + orig ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> û<EFBFBD> <C3BB> <EFBFBD> ǰ<EFBFBD> <C7B0> ԭ<EFBFBD> ֽڸ<D6BD> <DAB8> <EFBFBD> state
}
}
2025-10-15 04:32:59 +08:00
} ;