From f98507c96886e9cc84809e4beed5fc066ea1177e Mon Sep 17 00:00:00 2001 From: JustSomePwner Date: Sat, 1 Sep 2018 19:29:36 +0200 Subject: gangsta shit --- internal_rewrite/Source.cpp | 24 +++++++---------- internal_rewrite/begin_lock.cpp | 4 --- internal_rewrite/frame_stage_notify.cpp | 14 +++++++++- internal_rewrite/interface.cpp | 17 ++++++------ internal_rewrite/internal_rewrite.vcxproj | 2 ++ internal_rewrite/modules.hpp | 6 ++--- internal_rewrite/play_sound.cpp | 3 ++- internal_rewrite/settings.hpp | 4 +-- internal_rewrite/simple_settings.hpp | 45 ++++++++++++++++++------------- 9 files changed, 66 insertions(+), 53 deletions(-) diff --git a/internal_rewrite/Source.cpp b/internal_rewrite/Source.cpp index 4e826bb..2894211 100644 --- a/internal_rewrite/Source.cpp +++ b/internal_rewrite/Source.cpp @@ -12,16 +12,20 @@ HMODULE g_dll; header_t g_header; void main_thread( HINSTANCE uh ) { -#ifdef IFACE_DLLMAIN - util::memset( ( uint8_t* )uh, 0x90, 0x1000 ); + +#ifdef HEADER_MODULE + memcpy( &g_header, uh, sizeof( g_header ) ); + for ( size_t i = 1; i < sizeof( header_t ); ++i ) + *(uint8_t*)( uintptr_t( &g_header ) + i ) ^= g_header.xor_key; + #endif + g_csgo.initialize( ); - while ( !g_csgo.m_panic ) { - std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) ); - } +#ifdef HEADER_MODULE + util::memset( (uint8_t*)uh, 0x90, 0x1000 ); +#endif - g_csgo.uninitialize( ); ExitThread( 0 ); } @@ -51,16 +55,8 @@ int __stdcall DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) { //yayo //SetUnhandledExceptionFilter( exception_handler ); -#ifdef HEADER_MODULE - memcpy( &g_header, inst, sizeof( g_header ) ); - for( size_t i = 1; i < sizeof( header_t ); ++i ) { - *( uint8_t* )( uintptr_t( &g_header ) + i ) ^= g_header.xor_key; - } -#endif - DisableThreadLibraryCalls( inst ); - thread = CreateThread( nullptr, 0, ( LPTHREAD_START_ROUTINE )( main_thread ), inst, 0, nullptr ); diff --git a/internal_rewrite/begin_lock.cpp b/internal_rewrite/begin_lock.cpp index 49079cd..bbc00c8 100644 --- a/internal_rewrite/begin_lock.cpp +++ b/internal_rewrite/begin_lock.cpp @@ -12,11 +12,7 @@ void __fastcall hooks::begin_lock( void* ecx, void* edx ) { // THIS IS PROLLY NO // search "CL_CallPostDataUpdates: missing ent %d" in engine.dll. // where framestagenotify gets called -#ifdef HEADER_MODULE - static auto ret_addr = g_header.patterns.begin_lock_retaddr; -#else static auto ret_addr = pattern::first_code_match< void* >( g_csgo.m_engine.dll( ), "A1 ? ? ? ? B9 ? ? ? ? 6A 00 FF 50 18 8B 15 ? ? ? ?" ); -#endif if( _ReturnAddress( ) == (void*)ret_addr ) { g_ctx.m_stage = FRAME_NET_UPDATE_POSTDATAUPDATE_START; diff --git a/internal_rewrite/frame_stage_notify.cpp b/internal_rewrite/frame_stage_notify.cpp index 959a8e8..91cd7aa 100644 --- a/internal_rewrite/frame_stage_notify.cpp +++ b/internal_rewrite/frame_stage_notify.cpp @@ -21,7 +21,19 @@ const char* crash_str = R"(" void __fastcall hooks::frame_stage_notify( void* ecx_, void* edx_, ClientFrameStage_t stage ) { static auto frame_stage_notify_o = g_csgo.m_chl->get_old_function< decltype( &hooks::frame_stage_notify ) >( 36 ); - if ( g_csgo.m_panic ) return frame_stage_notify_o( ecx_, edx_, stage ); + + if ( g_csgo.m_panic ) + { + // unload from game thread + static bool unloaded = false; + if ( !unloaded) + { + g_csgo.uninitialize( ); + unloaded = true; + } + + return frame_stage_notify_o( ecx_, edx_, stage ); + } g_ctx.m_stage = stage; g_cheat.m_visuals.world_modulate( ); diff --git a/internal_rewrite/interface.cpp b/internal_rewrite/interface.cpp index 1d1be5b..904a4a9 100644 --- a/internal_rewrite/interface.cpp +++ b/internal_rewrite/interface.cpp @@ -17,6 +17,7 @@ interfaces::c_interface_manager g_factory; factory::c_csgo g_csgo; bool factory::create_interfaces( c_csgo* instance, header_t* header ) { + #ifndef HEADER_MODULE header->client_panorama = ( uintptr_t )GetModuleHandleA( "client_panorama.dll" ); header->vguimatsurface = ( uintptr_t )GetModuleHandleA( "vguimatsurface.dll" ); @@ -48,7 +49,7 @@ bool factory::create_interfaces( c_csgo* instance, header_t* header ) { instance->create( &instance->m_engine_vgui, xors( "VEngineVGui" ) ); instance->create( &instance->m_input_sys, xors( "InputSystemVersion" ) ); - auto d3d_device = pattern::first_code_match( GetModuleHandleA( xors( "shaderapidx9.dll" ) ), + auto d3d_device = pattern::first_code_match( (HMODULE)header->shaderapidx9, xors( "A1 ?? ?? ?? ?? 50 8B 08 FF 51 0C" ) ) + 0x1; #ifdef HEADER_MODULE @@ -197,18 +198,20 @@ con_fn unload_fn{ fnv( "unload" ), };*/ void factory::c_csgo::initialize( ) { - m_panic = true; + m_panic = false; + g_con->create( ); auto now = std::chrono::high_resolution_clock::now( ); g_con->print( xors( "hello\n" ) ); - //hi - factory::create_interfaces( &g_csgo, &g_header ); + g_fonts.initialize( ); - g_netvars.init( ); + g_netvars.init( ); + g_settings.load( ); + g_con->register_fn( &clear_fn ); g_con->register_fn( &enable_logs_fn ); g_con->register_fn( &fnv_fn ); @@ -218,7 +221,7 @@ void factory::c_csgo::initialize( ) { g_con->register_fn( &unload_fn ); hooks::commit( &g_csgo ); - + g_cheat.m_chams.m_materials.initialize_materials( ); util::calculate_spread_runtime( ); @@ -230,8 +233,6 @@ void factory::c_csgo::initialize( ) { g_con->log( xors( "cheat initialized\n" ) ); g_con->log( xors( "time taken: %f\n" ), delta.count( ) ); - - m_panic = false; } void factory::c_csgo::uninitialize( ) { diff --git a/internal_rewrite/internal_rewrite.vcxproj b/internal_rewrite/internal_rewrite.vcxproj index f597bea..5834dca 100644 --- a/internal_rewrite/internal_rewrite.vcxproj +++ b/internal_rewrite/internal_rewrite.vcxproj @@ -327,10 +327,12 @@ false false stdcpplatest + None true true + false diff --git a/internal_rewrite/modules.hpp b/internal_rewrite/modules.hpp index 1f0aaa7..6e78bf3 100644 --- a/internal_rewrite/modules.hpp +++ b/internal_rewrite/modules.hpp @@ -7,19 +7,17 @@ struct patterns_t uint32_t move_helper; // 8B 0D ? ? ? ? 8B 46 08 68 uint32_t calc_abs_velocity; // 55 8B EC 83 E4 F8 83 EC 1C 53 56 57 8B F9 F7 87 uint32_t animstate_update; // 55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 F3 0F 11 54 24 - uint32_t simulate_retaddr; // 8B CE 6A FF 8B 06 uint32_t draw_small_entities_retaddr; // FF 90 ? ? ? ? FF 15 ? ? ? ? 84 C0 74 28 - uint32_t begin_lock_retaddr; // A1 ? ? ? ? B9 ? ? ? ? 6A 00 FF 50 18 8B 15 ? ? ? ? - uint32_t is_breakable; // 55 8B EC 51 56 8B F1 85 F6 74 68 83 BE + uint32_t is_breakable_ptr; // 55 8B EC 51 56 8B F1 85 F6 74 68 83 BE uint32_t set_abs_angles; // 55 8B EC 83 E4 F8 83 EC 64 53 56 57 8B F1 E8 uint32_t set_abs_origin; // 55 8B EC 83 E4 F8 51 53 56 57 8B F1 uint32_t glow_manager; // 0F 11 05 00 00 00 00 83 C8 01 uint32_t smoke_count; // 55 8B EC 83 EC 08 8B 15 ? ? ? ? 0F 57 C0 uint32_t in_prediction_retaddr; // 84 C0 75 08 57 8B CE E8 ? ? ? ? 8B 06 - uint32_t is_ready; // 55 8B EC 83 E4 F8 83 EC 08 56 8B 35 00 00 00 00 57 83 BE uint32_t net_update_retaddr; // 5F 5E 5D C2 04 00 83 3D ? ? ? ? ? }; + struct header_t { uint8_t xor_key{ }; diff --git a/internal_rewrite/play_sound.cpp b/internal_rewrite/play_sound.cpp index 1a8fc9f..3042b02 100644 --- a/internal_rewrite/play_sound.cpp +++ b/internal_rewrite/play_sound.cpp @@ -4,7 +4,8 @@ void __fastcall hooks::play_sound( void* ecx_, void*, const char* file ) { static auto play_sound_o = g_csgo.m_surface->get_old_function< decltype( &play_sound ) >( 82 ); #ifdef HEADER_MODULE - static auto is_ready = g_header.patterns.is_ready; + // static auto is_ready = g_header.patterns.is_ready; + static auto is_ready = pattern::first_code_match( g_csgo.m_chl.dll( ), xors( "55 8B EC 83 E4 F8 83 EC 08 56 8B 35 00 00 00 00 57 83 BE" ), 0 ); #else static auto is_ready = pattern::first_code_match( g_csgo.m_chl.dll( ), xors( "55 8B EC 83 E4 F8 83 EC 08 56 8B 35 00 00 00 00 57 83 BE" ), 0 ); #endif diff --git a/internal_rewrite/settings.hpp b/internal_rewrite/settings.hpp index 75641c5..cb3307f 100644 --- a/internal_rewrite/settings.hpp +++ b/internal_rewrite/settings.hpp @@ -66,7 +66,7 @@ namespace data memset( this->misc.skins.skins( ).data( ), -1, sizeof( this->misc.skins.skins( ) ) ); } - void load( ) { + __declspec( noinline ) void load( ) { switch( menu.cur_setting ) { case 0: holder_.load( "", xors( "./csgo/cfg/money_legit.cfg" ) ); @@ -89,7 +89,7 @@ namespace data misc.skins.current_skin = -1; } - void save( ) { + __declspec( noinline ) void save( ) { switch( menu.cur_setting ) { case 0: holder_.save( "", xors( "./csgo/cfg/money_legit.cfg" ) ); diff --git a/internal_rewrite/simple_settings.hpp b/internal_rewrite/simple_settings.hpp index 71fd627..31701cd 100644 --- a/internal_rewrite/simple_settings.hpp +++ b/internal_rewrite/simple_settings.hpp @@ -31,21 +31,28 @@ public: setting_nodes_.push_back( node_ptr ); } - void load( const char* path, const char* file ) override { - char full_path[ 64 ]; - strcpy_s( full_path, path ); - strcat_s( full_path, "_" ); - strcat_s( full_path, name_ ); - for ( auto x : setting_nodes_ ) + __declspec( noinline ) void load( const char* path, const char* file ) override + { + static char full_path[1024]; + memset( full_path, 0, 1024 ); + + strcpy_s( full_path, path ); + strcat_s( full_path, "_" ); + strcat_s( full_path, name_.c_str( ) ); + + for ( auto x : setting_nodes_ ) x->load( full_path, file ); } - void save( const char* path, const char* file ) const override { - char full_path[ 64 ]; - strcpy_s( full_path, path ); - strcat_s( full_path, "_" ); - strcat_s( full_path, name_ ); - for ( auto x : setting_nodes_ ) + __declspec( noinline ) void save( const char* path, const char* file ) const override + { + static char full_path[1024]; + memset( full_path, 0, 1024 ); + + strcpy_s( full_path, path ); + strcat_s( full_path, "_" ); + strcat_s( full_path, name_.c_str( ) ); + for ( auto x : setting_nodes_ ) x->save( full_path, file ); } @@ -58,7 +65,7 @@ public: } private: - const char* name_; + std::string name_; bool has_nodes_; std::vector setting_nodes_; }; @@ -83,11 +90,11 @@ public: holder_ptr->register_( this ); }; - void load( const char* path, const char* file ) override { + __declspec( noinline ) void load( const char* path, const char* file ) override { GetPrivateProfileStringA( path, std::to_string( m_name ).c_str( ), "", m_value, L, file ); } - void save( const char* path, const char* file ) const override { + __declspec( noinline ) void save( const char* path, const char* file ) const override { WritePrivateProfileStringA( path, std::to_string( m_name ).c_str( ), m_value, file ); } @@ -103,13 +110,13 @@ private: template < typename T > class con_var : public ISetting { public: - __forceinline con_var( SettingHolder* holder_ptr, hash_t name ) : + __declspec( noinline ) con_var( SettingHolder* holder_ptr, hash_t name ) : name_( name ), is_float_( std::is_floating_point_v< T > ), is_integral_( std::is_integral_v< T > ) { holder_ptr->register_( this ); } - __forceinline con_var( SettingHolder* holder_ptr, hash_t name , const T& rhs ) : + __declspec( noinline ) con_var( SettingHolder* holder_ptr, hash_t name , const T& rhs ) : value_( rhs ), name_( name ), is_float_( std::is_floating_point_v< T > ), @@ -117,9 +124,9 @@ public: holder_ptr->register_( this ); } - void load( const char* path, const char* file ) override { simple_load( path, std::to_string( name_ ).c_str( ), &value_, sizeof( value_ ), file ); } + __declspec( noinline ) void load( const char* path, const char* file ) override { simple_load( path, std::to_string( name_ ).c_str( ), &value_, sizeof( value_ ), file ); } - void save( const char* path, const char* file ) const override { simple_save( path, std::to_string( name_ ).c_str( ), &value_, sizeof( value_ ), file ); } + __declspec( noinline ) void save( const char* path, const char* file ) const override { simple_save( path, std::to_string( name_ ).c_str( ), &value_, sizeof( value_ ), file ); } __forceinline operator T&( ) { return value_; } __forceinline T* operator &( ) { return &value_; } -- cgit v1.2.3