Suporte no desenvolvimento de jogos


    Incriptador Ant Desiscriptado

    Devilzcore
    Devilzcore
    Ocasional
    Ocasional

    Mensagens : 207
    Créditos : 83

    Incriptador Ant Desiscriptado Empty Incriptador Ant Desiscriptado

    Mensagem por Devilzcore em Qua Nov 17, 2010 6:01 pm

    Descrição

    Metodos feitos para proteger jogos contra engines desencriptadoras como o RGSSAD Extractor

    Scripts

    KGC_InterfaceForWin32API
    Este Script Permite RMXP/VX a Adquirir a WIN32API Interface, é requisitado pelo Encrypt Method
    Código:
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
    #_/  ◆        Win32API Interface - KGC_InterfaceForWin32API        ◆ XP/VX ◆
    #_/  ◇                  Last Update: 2007/11/26                              ◇
    #_/  ◆              Translation by Mr. Anonymous                            ◆
    #_/  ◆ KGC Site:                                                            ◆
    #_/  ◆ http://f44.aaa.livedoor.jp/~ytomy/                                    ◆
    #_/  ◆ Translator's Blog:                                                    ◆
    #_/  ◆ http://mraprojects.wordpress.com                                      ◆
    #_/-----------------------------------------------------------------------------
    #_/  Este Script Permite RMXP/VX a Adquirir a WIN32API Interface
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_

    class Win32API
      STRING_BUF_SIZE = 255
      #--------------------------------------------------------------------------
      # ● Read INI File
      #    section : Section name
      #    key    : Key
      #    default : default value when a key doesn't exist
      #    inifile : Passing of read INI file
      #--------------------------------------------------------------------------
      def self.GetPrivateProfileString(section, key, default, inifile)
        get_ini = Win32API.new(
          'kernel32.dll', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
        buf = "\0" * (STRING_BUF_SIZE + 1)
        get_ini.call(section, key, default, buf, STRING_BUF_SIZE, inifile)
        return buf.delete!("\0")
      end
      #--------------------------------------------------------------------------
      # ● Aquire Window
      #    window_class : Window class name
      #    window_title : Title of window
      #--------------------------------------------------------------------------
      def self.FindWindow(window_class, window_title)
        find_window = Win32API.new('user32.dll', 'FindWindowA', %w(p p), 'l')
        return find_window.call(window_class, window_title)
      end
      #--------------------------------------------------------------------------
      # ● Aquire Active Window
      #--------------------------------------------------------------------------
      def self.GetActiveWindow
        active_window = Win32API.new('user32.dll', 'GetActiveWindow', %w(v), 'l')
        return active_window.call
      end
      #--------------------------------------------------------------------------
      # ● Aquire Game Window
      #--------------------------------------------------------------------------
      def self.GetHwnd
        name = GetPrivateProfileString("Game", "Title", "", "./Game.ini")
        return FindWindow("RGSS Player", name)
      end
    end

    File Encrypt
    Precisa explicar? =P
    Código:
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    #_/  ◆              File Encrytion 2 - KGC_FileEncryption2          ◆ XP/VX ◆
    #_/  ◇                      Last Update: 2006/11/27                          ◇
    #_/  ◆                  Translation by Mr. Anonymous                        ◆
    #_/  ◆ KGC Site:                                                            ◆
    #_/  ◆ http://f44.aaa.livedoor.jp/~ytomy/                                    ◆
    #_/  ◆ Translator's Blog:                                                    ◆
    #_/  ◆ http://mraprojects.wordpress.com                                      ◆
    #_/----------------------------------------------------------------------------
    #_/  Installation: Insert above Main, below KGC_InterfaceForWin32API.
    #_/  Requires TCrypt.dll
    #_/============================================================================
    #_/  This script encrypts your game data to an unhackable state.
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    =begin
    ━━━━━━━━━━━━━━━━━━━ Methods ━━━━━━━━━━━━━━━━━━━━
    ┠─── Module - TCrypt ───────────────────────────
    ┃ version()
    ┃  - no arguments -
    ┃ Returns the version of "TCrypt.dll" by Integer.

    ┃ encrypt(infile, outfile, key, mode[, bufsize])
    ┃  infile  : Input file.
    ┃           
    ┃  outfile : Output file.
    ┃           
    ┃  key    : Encryption key.
    ┃           
    ┃  mode    : Encryption mode.
    ┃            << 0..MKERS  1..MKES >>
    ┃           
    ┃  bufsize : Buffer size. (Default: 4096Byte)
    ┃           

    ┃ Encrypts 'infile', and outputs it to 'outfile'.

    ┃ decrypt(infile, outfile, key, mode[, bufsize])
    ┃  infile  : Input file.
    ┃           
    ┃  outfile : Output file.
    ┃           
    ┃  key    : Encryption key.
    ┃           
    ┃  mode    : Encryption mode.
    ┃            << 0..MKERS  1..MKES >>
    ┃           
    ┃  bufsize : Buffer size. (Default: 4096Byte)
    ┃           
    ┃ Decrypts 'infile', and outputs it to 'outfile'.

    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    =end

    $imported = {} if $imported == nil
    $imported["FileEncryption2"] = true

    module TCrypt
      # Code page
      CP_UTF8 = 65001  # UTF-8

      # Encryption mode
      MODE_MKERS = 0  # MKERS
      MODE_MKES  = 1  # MKES

      module_function
      #--------------------------------------------------------------------------
      # ○ 『TCrypt.dll』 aquired and converted
      #    (Example: 1.23 → 123)
      #--------------------------------------------------------------------------
      def version
        begin
          api = Win32API.new('TCrypt.dll', 'DllGetVersion', %w(v), 'l')
          ret = api.call
        rescue
          ret = -1
        end
        return ret
      end
      #--------------------------------------------------------------------------
      # ○ Encrytion
      #  infile: Input file name
      #  outfile: Output file name
      #  key: Encryption key
      #  mode: Encryption form
      #  bufsize: Size of buffer(16~1048576)
      #--------------------------------------------------------------------------
      def encrypt(infile, outfile, key, mode, bufsize = 4096)
        begin
          api = Win32API.new('TCrypt.dll', 'EncryptA', %w(l p p p l l l), 'l')
          ret = api.call(0, infile, outfile, key, mode, bufsize, CP_UTF8)
        rescue
          ret = -1
        end
        return ret
      end
      #--------------------------------------------------------------------------
      # ○ Decoding
      #  infile: Input file name
      #  outfile: Output file name
      #  key: Encryption key
      #  mode: Encryption form
      #  bufsize: Size of buffer(16~1048576)
      #--------------------------------------------------------------------------
      def decrypt(infile, outfile, key, mode, bufsize = 4096)
        begin
          api = Win32API.new('TCrypt.dll', 'DecryptA', %w(l p p p l l l), 'l')
          ret = api.call(0, infile, outfile, key, mode, bufsize, CP_UTF8)
        rescue
          ret = -1
        end
        return ret
      end
    end

    KGC_Compress Save File
    Permite que arquivos saves ficam "encriptados" para evitar haking

    Código:
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    #_/  ◆              Compress Save File - KGC_CompressSaveFile          ◆ VX ◆
    #_/  ◇                      Last Update: 2008/02/14                          ◇
    #_/  ◆                    Translation by Mr. Anonymous                      ◆
    #_/  ◆ KGC Site:                                                            ◆
    #_/  ◆ http://f44.aaa.livedoor.jp/~ytomy/                                    ◆
    #_/  ◆ Translator's Blog:                                                    ◆
    #_/  ◆ http://mraprojects.wordpress.com                                      ◆
    #_/----------------------------------------------------------------------------
    #_/  Installation: Insert above Main, below KGC_InterfaceForWin32API and below
    #_/  KGC_FileEncryption2. Requires TCrypt.dll
    #_/============================================================================
    #_/  This script compresses save files to an unhackable state.
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    #=============================================================================#
    #                            ★ Customization ★                              #
    #=============================================================================#

    =begin
    ********************************************************************************
    Note: Do not change the encryption key after you create a save file.
    The save file created before this change will be rendered unreadable.
    ********************************************************************************
    =end

    module KGC
    module CompressSaveFile
      # ◆ Enable Encryption
      #  KGC_FileEncryption2, KGC_InterfaceForWin32API, AND TCrypt.dll are required
      #  for this to work.
      ENABLE_CRYPT = true
      # ◆ Encryption Key
      #  A random character string is recommended.
      #  Follow the general rules of creating password for the best effect.
      #  It's OK if this string is so long it protrudes off the screen.
      CRYPT_KEY = "insertencryptionkeyhereplease"
    end
    end

    #------------------------------------------------------------------------------#

    $imported = {} if $imported == nil
    $imported["CompressSaveFile"] = true

    module KGC::CompressSaveFile
      # Buffer Size
      BUFSIZE = 256
      # Temporary prefix for file name.
      TEMP_PREFIX = "KGC"

      module_function
      #--------------------------------------------------------------------------
      # ○ Create Temp File
      #    作成した一時ファイルのパスを返す
      #--------------------------------------------------------------------------
      def create_temp_file
        return Win32API.get_temp_filename(Win32API.get_temp_path)
      end
      #--------------------------------------------------------------------------
      # ○ ファイルのコピー
      #    src  : コピー元
      #    dest : コピー先
      #    keep_time_stamp : タイムスタンプ保持
      #--------------------------------------------------------------------------
      def copy_file(src, dest, keep_time_stamp = true)
        infile = File.open(src, "rb")
        time = infile.mtime
        buf = infile.read
        infile.close

        File.open(dest, "wb") { |f| f.write(buf) }

        File.utime(time, time, dest) if keep_time_stamp
      end
      #--------------------------------------------------------------------------
      # ○ ファイルのエンコード
      #    filename : ファイル名
      #--------------------------------------------------------------------------
      def encode_file(filename)
        compress_file(filename)
        encrypt_file(filename)
      end
      #--------------------------------------------------------------------------
      # ○ ファイルの圧縮
      #    filename : ファイル名
      #--------------------------------------------------------------------------
      def compress_file(filename)
        buf = nil
        File.open(filename, "rb") { |f| buf = f.read }
        Zlib::GzipWriter.open(filename) { |gz| gz.write(buf) }
      end
      #--------------------------------------------------------------------------
      # ○ ファイルの暗号化
      #    filename : ファイル名
      #--------------------------------------------------------------------------
      def encrypt_file(filename)
        return 0 unless ENABLE_CRYPT      # 暗号化無効
        return 0 unless defined?(TCrypt)  # 暗号化未導入

        return TCrypt.encrypt(filename, filename, CRYPT_KEY, TCrypt::MODE_MKERS)
      end
      #--------------------------------------------------------------------------
      # ○ ファイルのデコード
      #    filename : ファイル名
      #--------------------------------------------------------------------------
      def decode_file(filename)
        decrypt_file(filename)
        decompress_file(filename)
      end
      #--------------------------------------------------------------------------
      # ○ ファイルの展開
      #    filename : ファイル名
      #--------------------------------------------------------------------------
      def decompress_file(filename)
        buf = nil
        File.open(filename, "rb") { |f|
          begin
            # 展開
            gz = Zlib::GzipReader.new(f)
            buf = gz.read
          rescue
            # 展開に失敗したら生データを使用
            f.rewind
            buf = f.read
          ensure
            gz.finish if gz != nil
          end
        }
        File.open(filename, "wb") { |f| f.write(buf) }
      end
      #--------------------------------------------------------------------------
      # ○ ファイルの復号
      #    filename : ファイル名
      #--------------------------------------------------------------------------
      def decrypt_file(filename)
        return 0 unless defined?(TCrypt)  # 暗号化未導入

        return TCrypt.decrypt(filename, filename, CRYPT_KEY, TCrypt::MODE_MKERS)
      end
    end

    #==================================End Class===================================#

    #==============================================================================
    # ■ Win32API
    #==============================================================================

    class Win32API
      #--------------------------------------------------------------------------
      # ○ 一時ファイルのパスを取得
      #--------------------------------------------------------------------------
      def self.get_temp_path
        size = KGC::CompressSaveFile::BUFSIZE
        buf = "\0" * size

        api = Win32API.new('kernel32', 'GetTempPathA', %w(l p), 'l')
        api.call(size, buf)
        return buf.delete!("\0")
      end
      #--------------------------------------------------------------------------
      # ○ 一時ファイル名の取得
      #    path : 一時ファイルを作成するパス
      #--------------------------------------------------------------------------
      def self.get_temp_filename(path)
        size = KGC::CompressSaveFile::BUFSIZE
        buf = "\0" * size
        prefix = KGC::CompressSaveFile::TEMP_PREFIX

        api = Win32API.new('kernel32', 'GetTempFileNameA', %w(p p l p), 'l')
        api.call(path, prefix, 0, buf)
        return buf.delete!("\0")
      end
    end

    #==================================End Class===================================#

    #==============================================================================
    # ■ Window_SaveFile
    #==============================================================================

    class Window_SaveFile < Window_Base
      #--------------------------------------------------------------------------
      # ● ゲームデータの一部をロード
      #    スイッチや変数はデフォルトでは未使用 (地名表示などの拡張用) 。
      #--------------------------------------------------------------------------
      alias load_gamedata_KGC_CompressSaveFile load_gamedata
      def load_gamedata
        original_filename = @filename
        original_file_exist = FileTest.exist?(original_filename)
        if original_file_exist
          # オリジナルのタイムスタンプを取得
          time = nil
          File.open(original_filename) { |f| time = f.mtime }
          # 一時ファイルを作成
          @filename = KGC::CompressSaveFile.create_temp_file
          KGC::CompressSaveFile.copy_file(original_filename, @filename)
          KGC::CompressSaveFile.decode_file(@filename)
          # 一時ファイルのタイムスタンプをオリジナルと同一にする
          File.utime(time, time, @filename)
        end

        load_gamedata_KGC_CompressSaveFile

        if original_file_exist
          # 一時ファイルを削除
          File.delete(@filename)
          # ロードに失敗したらタイムスタンプを初期化
          @time_stamp = Time.at(0) unless @file_exist
          Graphics.frame_reset
        end
        @filename = original_filename
      end
    end

    #==================================End Class===================================#

    #==============================================================================
    # ■ Scene_File
    #==============================================================================

    class Scene_File < Scene_Base
      #--------------------------------------------------------------------------
      # ● セーブの実行
      #--------------------------------------------------------------------------
      alias do_save_KGC_CompressSaveFile do_save
      def do_save
        do_save_KGC_CompressSaveFile

        filename = @savefile_windows[@index].filename
        KGC::CompressSaveFile.encode_file(filename)
      end
      #--------------------------------------------------------------------------
      # ● ロードの実行
      #--------------------------------------------------------------------------
      alias do_load_KGC_CompressSaveFile do_load
      def do_load
        filename = @savefile_windows[@index].filename
        tempfilename = KGC::CompressSaveFile.create_temp_file

        # オリジナルファイルを退避
        KGC::CompressSaveFile.copy_file(filename, tempfilename)
        KGC::CompressSaveFile.decode_file(filename)

        do_load_KGC_CompressSaveFile

        # オリジナルファイルを復元
        KGC::CompressSaveFile.copy_file(tempfilename, filename)
        File.delete(tempfilename)
        Graphics.frame_reset
      end
    end

    #==================================End Class===================================#

    Maiores Instruções

    1º) Copie os 3 Scripts na Ordem

    2º) É Necessário a "TCrypt.dll" para funcionar que pode ser encontrado no Anexo

    3º) No Script KGC compress Save File Procure por esta linha:
    Código:
    CRYPT_KEY = "insertencryptionkeyhereplease"

    Mude o que está entre parenteses para alguma coisa a gosto, Lembrandoque isto será como uma "Senha" que irá proteger o jogo portantocapriche porque se alguem descobrir acabou o desencrypt =/(sugiroseguir regras de segurança de criação de senhas e usar a "senha"Randomizada)

    4º) no mesmo script citado acima procure isto:

    Código:
     ENABLE_CRYPT = true

    Esta linha permite que o metodo funcione, se Colocar False ele nãoencripta o jogo(é recomendavel por False durante o periodo dedesenvolvimento do jogo para evitar problemas)

    5º) NUNCA mude a CRYPT_KEY depois de criado um arquivo de save, pois irá crashear o save.


    Notas e Observações

    EsteMétodo Funciona tanto em RMXP quanto RMVX, Porém como todos os métodosdo mundo Não irá proteger 100% o seu projeto, mas irá dificultarmuitissimo a vida dos desencriptadores, aconselhavel e muito Usar.

    Creditos

    Criador > Mr. Anonymous
    disponibilizador > aldosilva.


    Última edição por aldosilva. em Qui Nov 18, 2010 1:20 pm, editado 1 vez(es)
    Devilzcore
    Devilzcore
    Ocasional
    Ocasional

    Mensagens : 207
    Créditos : 83

    Incriptador Ant Desiscriptado Empty Re: Incriptador Ant Desiscriptado

    Mensagem por Devilzcore em Qua Nov 17, 2010 6:02 pm

    tem geito melhor de se proteger mais ninguem fala intao postei esse para quebra o galho de us aew Wink


    Última edição por aldosilva. em Qua Nov 17, 2010 11:37 pm, editado 1 vez(es)
    HugoFreitas
    HugoFreitas
    Administrador
    Administrador

    Medalhas : Incriptador Ant Desiscriptado Medal_55
    Mensagens : 634
    Créditos : 175

    Incriptador Ant Desiscriptado Empty Re: Incriptador Ant Desiscriptado

    Mensagem por HugoFreitas em Qua Nov 17, 2010 6:05 pm

    Muito bom Aldo, vai proteger o pessoal contra os outros que roubam sistemas.

    +1 cred.


    _________________
    Incriptador Ant Desiscriptado Brsnip10
    Incriptador Ant Desiscriptado DqtrI
    Devilzcore
    Devilzcore
    Ocasional
    Ocasional

    Mensagens : 207
    Créditos : 83

    Incriptador Ant Desiscriptado Empty Re: Incriptador Ant Desiscriptado

    Mensagem por Devilzcore em Qua Nov 17, 2010 6:08 pm

    vlw pelo credi..


    Última edição por aldosilva. em Qua Nov 17, 2010 11:37 pm, editado 1 vez(es)
    Theu Souto
    Theu Souto
    Iniciante
    Iniciante

    Mensagens : 68
    Créditos : 13

    Incriptador Ant Desiscriptado Empty Re: Incriptador Ant Desiscriptado

    Mensagem por Theu Souto em Qua Nov 17, 2010 8:50 pm

    Eu nao consegui mecher com isso ://
    eu segui tudo direitinho mais da erro, depois posto o erro que deu

    @aldo, voce é mod e dando DB :O
    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : Incriptador Ant Desiscriptado 94JxvIncriptador Ant Desiscriptado ZgLkiRU
    Mensagens : 5042
    Créditos : 1121

    Incriptador Ant Desiscriptado Empty Re: Incriptador Ant Desiscriptado

    Mensagem por Valentine em Qua Nov 17, 2010 11:07 pm

    um dos maiores problemas do rmxp, é que todos esses métodos pode ser facilmente diblados, modificando o RGSSAD Extractor


    _________________
    Incriptador Ant Desiscriptado AIymW
    DeaN
    DeaN
    Colaborador
    Colaborador

    Mensagens : 1245
    Créditos : 48

    Incriptador Ant Desiscriptado Empty Re: Incriptador Ant Desiscriptado

    Mensagem por DeaN em Qui Nov 18, 2010 8:58 am

    Po muito maneiro.


    _________________
    Dean, Programador Geral :)

    Contato: Skype:matucarvalho e Facebook
    The Enze - Vulzt

    Shield Block
    Anti-Cheat para jogos de FPS, agora vou adaptar para jogos de RPG principalmente para o RMXP.
    www.shieldblock.net
    fb.com/shieldblockoficial

    Incriptador Ant Desiscriptado MiB0H

    Conteúdo patrocinado

    Incriptador Ant Desiscriptado Empty Re: Incriptador Ant Desiscriptado

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Ter Jan 28, 2020 5:41 pm