Jump to content

C++ [TUTORIAL] [UBUNTU] Como gerar e configurar uma nova chave RSA


Recommended Posts

 

[TUTORIAL] [UBUNTU] Como gerar e configurar uma nova chave RSA

Este tutorial pode ser útil para você deixar o uso obrigatório do seu client customizado para o seu servidor.


Para seguir este tutorial você precisará ter o OpenSSL instalado.

 

Consultando se o seu sistema já tem OpenSSL

Spoiler

 




openssl version -a

 

 

 

Gerando a chave RSA

Primeiramente, vamos gerar uma nova chave RSA exclusiva
 

Spoiler

 




openssl genrsa -out key.pem 1024

 

 

 

Assim que gerado, será criado um arquivo "key.pem" no diretório em que você está, esta será a sua chave RSA.

 

Execute agora o seguinte comando

Spoiler

 




openssl rsa -in key.pem -outform PEM -pubout -out public.pem

 

 

 

Após executado o comando acima, será criado um arquivo "public.pem" neste mesmo diretório. Esta é a sua RSA pública.
 

Precisamos agora converter a chave RSA publica em hexadecimal para decimal, somente desta forma será aceito no Servidor e no OTClient.

 

Antes de tudo será necessário tratar a RSA pública, portando execute os comandos abaixo:
 

Spoiler

 




openssl asn1parse -in public.pem

 

Após executar o comando acima o terminal deve printar algo como isso:
 

Spoiler

0:d=0 hl=3 l= 159 cons: SEQUENCE
3:d=1 hl=2 l= 13 cons: SEQUENCE
5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
16:d=2 hl=2 l= 0 prim: NULL
18:d=1 hl=3 l= 141 prim: BIT STRING


Em seguida execute o comando abaixo:
 

Spoiler

 




openssl asn1parse -in public.pem -strparse 18

 

 

 

 

Após executar o comando acima o terminal deve printar algo como isso:

 

Spoiler

0:d=0 hl=3 l= 137 cons: SEQUENCE
3:d=1 hl=3 l= 129 prim: INTEGER :A67E67F1BB0330A9BFEAB7306DDE4DE4EED66714519E0A97B096DCAAE35014EE
400BA718DBBFBD1065CAEB6029CAF6A6D5FA8F53C9154FB04BAB993CC051453CF00B71E1DC11DA0962BBFC770D8B855D65C1D953AEBB3CCD1A6BC70C3CB5EAC2B97FC1FAA20C322A732D4CF160DAE16FD028E13D54B52EC815BBF57CDD37184F
135:d=1 hl=2 l= 3 prim: INTEGER :010001

 

 

Agora para realizar a conversão de Hex para Decimal utilize o seguinte site: Hexadecimal to Decimal Converter (rapidtables.com)

 

A sua RSA deve ter obrigatoriamente 309 caracteres.


Configurando a Chave RSA no OTClient

Agora entre no seguinte caminho modules/gamelib/ do OTClient e abra o arquivo const.lua

Procure por OTSERV_RSA, você encontrará algo como isto:
 

Spoiler

 




OTSERV_RSA  = "1091201329673994292788609605089955415282375029027981291234687579" ..
              "3726629149257644633073969600111060390723088861007265581882535850" ..
              "3429057592827629436413108566029093628212635953836686562675849720" ..
              "6207862794310902180176810615217550567108238764764442605581471797" ..
              "07119674283982419152118103759076030616683978566631413"

 

Apague e insira a sua chave RSA pública já em Decimal, quando inserir indico deixar tudo em uma linha, como exemplo abaixo:
 

Spoiler

 




OTSERV_RSA  = "109120132967399429278860960508995541528237502902798129123468757937266291492576446330739696001110603907230888610072655818825358503429057592827629436413108566029093628212635953836686562675849720620786279431090218017681061521755056710823876476444260558147179707119674283982419152118103759076030616683978566631413"

 

 

 

Não é necessário mexer na CIPSOFT_RSA.

Configurando a Chave RSA no Servidor

Substitua o seu novo arquivo gerado key.pem pelo mesmo arquivo localizado na pasta do seu servidor.

 

 

Considerações Finais

Pronto! Melhoria concluída com sucesso!

Após isso só será possível efetuar login em seu servidor com um client que tem a sua RSA pública configurada.


Créditos:

@Cjaker

Sun

Marcos Pacheco
@Breno Alves

@EddyHavoc
@Cat
 

Edited by EddyHavoc (see edit history)
Link to post
Share on other sites
  • Moderator

Obrigado pela contribuição @EddyHavoc, são poucos conteudo se tratando de RSA na internet.

function onLove()
if getPlayerTrueLove(girlfriend) then
doPlayerBeHappy(cid, true)
doRemoveVirginity(cid, true)
else
doSendCancel(cid,"you do not know how good it feels to be loved")
end end

;)

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


  • Similar Content

    • By Celulose
      Olá Reparei Que muitos Está Procurando essa alteração , em todo fórum só acha a versão 0.3.6. .
      e vim trazer 0.4 E OTX. 
       
      OTX 2.1
      procure por: Player.cpp
      if((!_weapon->hasExhaustion() || !hasCondition(CONDITION_EXHAUST)) && _weapon->useWeapon(this, weapon, attackedCreature)) Altere por:
      if(!_weapon->hasExhaustion() && _weapon->useWeapon(this, weapon, attackedCreature))  Usar runa enquanto corre.
      Em player.cpp, remova essa linha
      setNextAction(OTSYS_TIME() + getStepDuration(dir)); -
      TFS 0.4
      Procure por: Player.cpp
      if((!_weapon->hasExhaustion() || !hasCondition(CONDITION_EXHAUST, EXHAUST_COMBAT)) && _weapon->useWeapon(this, item, attackedCreature)) Altere por :
      if(!_weapon->hasExhaustion() && _weapon->useWeapon(this, item, attackedCreature))  Usar runa enquanto corre.
      Em player.cpp, remova essa linha
      setNextAction(OTSYS_TIME() + getStepDuration(dir));  
      Créditos
      Usar Runa Enquanto corre   - Xellath
      alterar para 0.4/otx 2.1 Eu !!
       
      As 2 Versão foi testado !!!
       
    • By Erimyth
      Um código simples para fazer o global server save, e logo após reiniciar o servidor.
       
      Adicione no Config.Lua
       
      shutdownAtGlobalSave = true globalSaveEnabled = true No Game.cpp adicione uma nova função
      bool Game::isRunning(const char* name) { PROCESSENTRY32 proc32; HANDLE hSnapshot; hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); proc32.dwSize = sizeof(PROCESSENTRY32); bool isRunning = false; if(Process32First(hSnapshot, &proc32)) { while(Process32Next(hSnapshot, &proc32)) { std::string filename_str = std::string(proc32.szExeFile); if(filename_str == name) { isRunning = true; break; } } } CloseHandle(hSnapshot); return isRunning; } Adicione em game.h
      bool isRunning(const char* name); Em Game.cpp procure por
      void Game::setGameState(GameState_t newState) E adicione logo a baixo.
       
      Scheduler::getInstance().stop(); Dispatcher::getInstance().stop(); E abaixo disso adicione
      const char* name = "AutoRun.exe"; if(!isRunning(name)) WinExec(name, SW_SHOWNORMAL); Em otsystem.h adicione um novo include
       
      #include <windows.h> Agora vamos anexar isso
      #include <tlhelp32.h> Esta feito agora basta compilar um programa chamado autorun.exe com o código a baixo. 
      Após a compilação coloque o exe na pasta do servidor e inicie.
      #include <windows.h> #include <tlhelp32.h> #include <iostream> const int _time = 10; char* name = "Nazwa serwera.exe"; bool isRunning() { PROCESSENTRY32 proc32; HANDLE hSnapshot; hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); proc32.dwSize = sizeof(PROCESSENTRY32); std::cout << "Check the server is running." << std::endl; bool isRunning = false; if(Process32First(hSnapshot, &proc32)) { while(Process32Next(hSnapshot, &proc32)) { std::string filename_str = std::string(proc32.szExeFile); if(filename_str == name) { isRunning = true; break; } } } CloseHandle(hSnapshot); return isRunning; } bool checkServer() { while(true) { Sleep(_time * 1000); if(!isRunning()) { std::cout << "Run the server." << std::endl; WinExec(name, SW_SHOWNORMAL); return true; } } return false; } int main() { if(checkServer()) return 0; return 1; } Cade minhas badges? @Matk
      Creditos: Underewar,Osk
    • By poko360
      Nao sei se estou postando na area correta mas.... vamo la
       
      Um player esta visitando quase todos os server e derrubando por um sistema de party (ele se dá auto-party) com o bot fazendo enviar pacotes inválidos que acabam crashando a sua distro:
      depois que fiz isso, meu server voltou ao normal (ja esta 7 dias online, desde seu ultimo nuke)
       
      procurei e achei em outro forum, e vi um cidadão de deus que encontrou a solução. (Creditos: Gesior.pl)
       
      ele diz que o codigo é pra TFS 0.4 r3777
      vamos ao que interessa:
       
      Em game.cpp (nas sources) , procure por:

      adicione isso daqui A CIMA dessa linha
       
    • By Codex NG
      Not tested but I wrote them anyway... this is a means of adding the missing stat information in TFS 1.3 & OTX 3 for 10.98 & up.
       
      This is the previous code protocolgame.cpp in TFS 1.3
      void ProtocolGame::AddPlayerStats(NetworkMessage& msg) { msg.addByte(0xA0); msg.add<uint16_t>(std::min<int32_t>(player->getHealth(), std::numeric_limits<uint16_t>::max())); msg.add<uint16_t>(std::min<int32_t>(player->getMaxHealth(), std::numeric_limits<uint16_t>::max())); msg.add<uint32_t>(player->getFreeCapacity()); msg.add<uint32_t>(player->getCapacity()); msg.add<uint64_t>(player->getExperience()); msg.add<uint16_t>(player->getLevel()); msg.addByte(player->getLevelPercent()); msg.add<uint16_t>(100); // base xp gain rate msg.add<uint16_t>(0); // xp voucher msg.add<uint16_t>(0); // low level bonus msg.add<uint16_t>(0); // xp boost msg.add<uint16_t>(100); // stamina multiplier (100 = x1.0) msg.add<uint16_t>(std::min<int32_t>(player->getMana(), std::numeric_limits<uint16_t>::max())); msg.add<uint16_t>(std::min<int32_t>(player->getMaxMana(), std::numeric_limits<uint16_t>::max())); msg.addByte(std::min<uint32_t>(player->getMagicLevel(), std::numeric_limits<uint8_t>::max())); msg.addByte(std::min<uint32_t>(player->getBaseMagicLevel(), std::numeric_limits<uint8_t>::max())); msg.addByte(player->getMagicLevelPercent()); msg.addByte(player->getSoul()); msg.add<uint16_t>(player->getStaminaMinutes()); msg.add<uint16_t>(player->getBaseSpeed() / 2); Condition* condition = player->getCondition(CONDITION_REGENERATION); msg.add<uint16_t>(condition ? condition->getTicks() / 1000 : 0x00); msg.add<uint16_t>(player->getOfflineTrainingTime() / 60 / 1000); msg.add<uint16_t>(0); // xp boost time (seconds) msg.addByte(0); // enables exp boost in the store } The focus of what we want to change here is this
      msg.add<uint16_t>(100); // base xp gain rate msg.add<uint16_t>(0); // xp voucher msg.add<uint16_t>(0); // low level bonus msg.add<uint16_t>(0); // xp boost msg.add<uint16_t>(100); // stamina multiplier (100 = x1.0) and this
      msg.add<uint16_t>(0); // xp boost time (seconds) msg.addByte(0); // enables exp boost in the store  
       
      To do this we'll use storage values that are referenced via methods of the player class.
      Our new code will look something like this.
      // base xp gain rate msg.add<uint16_t>(player->getBaseXpGain()); // xp voucher msg.add<uint16_t>(player->getVoucherXpBoost()); // low level bonus msg.add<uint16_t>(player->getGrindingXpBoost()); // xp boost msg.add<uint16_t>(player->getStoreXpBoost()); // stamina multiplier (100 = x1.0) msg.add<uint16_t>(player->getStaminaXpBoost()); and this
      // xp boost time (seconds) msg.add<uint16_t>(player->getExpBoostStamina()); // enables exp boost in the store msg.addByte(1);  
      In player.h
      Under
      #include "mounts.h" place this
      #include "configmanager.h"  
       
      Under
      class Guild; place this
      extern ConfigManager g_config;  
       
      Under
      bool hasLearnedInstantSpell(const std::string& spellName) const; place this
      uint16_t getBaseXpGain() const { uint32_t key = g_config.getNumber(ConfigManager::BASEXPGAIN_STORAGE); int32_t value; getStorageValue(key, value); return (value < 0 ? 100 : (uint16_t)value); } uint16_t getVoucherXpBoost() const { uint32_t key = g_config.getNumber(ConfigManager::VOUCHERXPBOOST_STORAGE); int32_t value; getStorageValue(key, value); return (value < 0 ? 100 : (uint16_t)value); } uint16_t getGrindingXpBoost() const { uint32_t key = g_config.getNumber(ConfigManager::GRINDINGXPBOOST_STORAGE); int32_t value; getStorageValue(key, value); return (value < 0 ? 100 : (uint16_t)value); } uint16_t getStoreXpBoost() const { uint32_t key = g_config.getNumber(ConfigManager::STOREXPBOOST_STORAGE); int32_t value; getStorageValue(key, value); return (value < 0 ? 100 : (uint16_t)value); } uint16_t getStaminaXpBoost() const { uint32_t key = g_config.getNumber(ConfigManager::STATMINAXPBOOST_STORAGE); int32_t value; getStorageValue(key, value); return (value < 0 ? 100 : (uint16_t)value); } uint16_t getExpBoostStamina() { uint32_t key = g_config.getNumber(ConfigManager::EXPBOOSTSTAMINA_STORAGE); int32_t value; getStorageValue(key, value); return (value < 0 ? 100 : (uint16_t)value); }  
       
      Next we'll go into configmanger.cpp and find
      integer[MAX_PACKETS_PER_SECOND] = getGlobalNumber(L, "maxPacketsPerSecond", 25); and place this under it
      integer[BASEXPGAIN_STORAGE] = getGlobalNumber(L, "baseXpGain", 18000); integer[VOUCHERXPBOOST_STORAGE] = getGlobalNumber(L, "voucherXpBoost", 18001); integer[GRINDINGXPBOOST_STORAGE] = getGlobalNumber(L, "grindingXpBoost", 18002); integer[STOREXPBOOST_STORAGE] = getGlobalNumber(L, "storeXpBoost", 18003); integer[STATMINAXPBOOST_STORAGE] = getGlobalNumber(L, "staminaXpBoost", 18004); integer[EXPBOOSTSTAMINA_STORAGE] = getGlobalNumber(L, "expBoostStamina", 18005);  
      Then open up configmanager.h and find
      MAX_PACKETS_PER_SECOND, and place these under it
      BASEXPGAIN_STORAGE, VOUCHERXPBOOST_STORAGE, GRINDINGXPBOOST_STORAGE, STOREXPBOOST_STORAGE, STATMINAXPBOOST_STORAGE, EXPBOOSTSTAMINA_STORAGE,  
      Then add this to your config.lua
      -- storages for player stats baseXpGain = 18000 voucherXpBoost = 18001 grindingXpBoost = 18002 storeXpBoost = 18003 staminaXpBoost = 18004 expBoostStamina = 18005  
      Since it is just storage values then its just a matter of setting the correct storages to set the bonuses. if no value is set then it is set to a default of 100.
      Here is a screen shot to show you that this works

       
      This code is incomplete I will update it when I have time. :)
    • By Erimyth
      Em luascript.cpp 
       
      Em luascript.cpp 
      getPlayerSecureMode (CID) Vamos criar esse comando
      Código C++:

      getPlayerFightMode (CID) Vamos criar esse comando
      Código C++:
      Simples e fácil vou deixar um exemplo para os leigos.
      Exemplo em lua:
      qual quer duvida poste aqui ,script é bem simples.
×
×
  • Create New...

Important Information

Confirmação de Termo