Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Brak kontroli nad liczbami w RAM.

Ostatnio zmodyfikowano 2015-11-14 15:40
Autor Wiadomość
Gibas11
Temat założony przez niniejszego użytkownika
Brak kontroli nad liczbami w RAM.
» 2015-11-14 14:59:39
Hej, pracowałem ostatnio nad prostym szyfrowaniem liczb by w pamięci znajdowały się w formie zakodowanej (plan był taki by uniemożliwić działanie CheatEngine na moim programie), więc napisałem do tego prostą klasę, problem pojawia się w tych 2 funkcjach:
C/C++
void operator =( sf::Uint32 num )
{
    key++;
    if( key == 27 )
         key = 7 - random() % 5;
   
    ( * var ) = num + triangleNumber( key );
}

sf::Uint32 operator ()()
{
    return( * var ) - triangleNumber( key );
}

Niestety kompilator upraszcza to do takiej formy:
C/C++
void operator =( sf::Uint32 num )
{
    key++;
    if( key == 27 )
         key = 7 - random() % 5;
   
    ( * var ) = num;
}

sf::Uint32 operator ()()
{
    return( * var );
}

Da się temu jakoś zaradzić? Pozdro.
EDIT: Zaznaczam, że nie wiem jak dokładnie postępował kompilator, ale liczby w pamięci nie są zaszyfrowane i drogą dedukcji (+ kilku testów), doszedłem do wniosku, że w kodzie dzieje się to co opisałem.
P-140112
pekfos
» 2015-11-14 15:22:52
Dodaj volatile do definicji var.
P-140118
Gibas11
Temat założony przez niniejszego użytkownika
» 2015-11-14 15:32:20
W pamięci wartości są niby dobre (wyświetlałem samo (*var)), niestety cheat engine dalej potrafi się do nich dogrzebać i z powodzeniem modyfikować. :/ Jak mógłbym to uniemożliwić? Zarzucę całym kodem, może pomoże:

C/C++
#include <SFML/System.hpp>

#include <iostream>

using namespace std;

namespace safeNumbers
{
    sf::Uint32 triangleNumber( sf::Uint8 key )
    {
        return key *( key + 1 ) / 2;
    }
   
    class Uint32s
    {
    private:
        volatile sf::Uint32 * var;
        sf::Uint8 key;
    public:
        Uint32s()
        {
            var = new sf::Uint32;
            key =( random() % 13 ) + 7;
        };
       
        void operator =( sf::Uint32 num )
        {
            key++;
            if( key == 27 )
                 key = 7 - random() % 5;
           
            ( * var ) = num + triangleNumber( key );
        }
       
        sf::Uint32 operator ()()
        {
            return( * var ) - triangleNumber( key );
        }
       
        sf::Uint32 raw()
        {
            return( * var );
        }
    };
}

int main()
{
    char c;
   
    safeNumbers::Uint32s liczba;
   
    for( sf::Uint32 i = 12;; i++ )
    {
        liczba = i;
        cin >> c;
        cout << liczba() << " -> " << liczba.raw() << endl;
    }
   
    return 0;
}

EDIT: Ups, źle przeczytałem i dodałem
volatite
 do deklaracji zamiast do definicji, poprawiony i sprawny kod:
C/C++
#include <SFML/System.hpp>
#include <iostream>

using namespace std;

namespace safeNumbers
{
    sf::Uint32 triangleNumber( sf::Uint8 key )
    {
        return key *( key + 1 ) / 2;
    }
   
    class Uint32s
    {
    private:
        volatile sf::Uint32 * var;
        sf::Uint8 key;
    public:
        Uint32s()
        {
            var = new volatile sf::Uint32;
            key =( random() % 13 ) + 7;
        };
       
        void operator =( sf::Uint32 num )
        {
            key++;
            if( key == 27 )
                 key = 7 - random() % 5;
           
            ( * var ) = num + triangleNumber( key );
        }
       
        sf::Uint32 operator ()()
        {
            return( * var ) - triangleNumber( key );
        }
       
        sf::Uint32 raw()
        {
            return( * var );
        }
    };
}

int main()
{
    char c;
   
    safeNumbers::Uint32s liczba;
   
    for( sf::Uint32 i = 12;; i++ )
    {
        liczba = i;
        cin >> c;
        cout << liczba() << " -> " << liczba.raw() << endl;
    }
   
    return 0;
}
P-140119
pekfos
» 2015-11-14 15:40:25
niestety cheat engine dalej potrafi się do nich dogrzebać i z powodzeniem modyfikować. :/ Jak mógłbym to uniemożliwić?
Nie da się. Możesz tylko utrudniać.
P-140120
« 1 »
  Strona 1 z 1