• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Spoof otclient version

Caesarrr

New Member
Joined
Oct 27, 2014
Messages
16
Reaction score
0
How could i spoof OTtclient version? I'm playing a otserver and in their latest patch they updated the client, and i cant login anymore with the outdated version.
 
Last edited:
So you want to play an unofficial version to be able to bot?
 
Not a "bot", but a tool, nothing related to botting.

As the new client changed and i cannot manage to make the tool work with it, i need spoof my old client version to be able login into the game again, as it detects i'm running a old version.

I can pay for a tool for spoofing ot client version, private message me!
 
Last edited:
Not a "bot", but a tool, nothing related to botting.

As the new client changed and i cannot manage to make the tool work with it, i need spoof my old client version to be able login into the game again, as it detects i'm running a old version.

I can pay for a tool for spoofing ot client version, private message me!
Got problem with login to account characters list or to game?

For login to characters list
Edit file:
otclient/protocollogin.lua at master · edubart/otclient · GitHub
Code:
msg:addU16(g_game.getProtocolVersion())
if g_game.getFeature(GameClientVersion) then
msg:addU32(g_game.getClientVersion())
Example with fake protocol 1234:
Code:
msg:addU16(1234)
if g_game.getFeature(GameClientVersion) then
msg:addU32(1234)
For example in client you leave it as '8.60', so it will load 8.6 .spr and use 8.6 protocol, but it will send fake protocol version to server (1234).

For login to 'game'
It's same as for login to list, but you need to edit source an recompile client.
Edit file:
otclient/protocolgamesend.cpp at master · edubart/otclient · GitHub
 
Last edited:
Edited my first post. Check code for 'to game' fake protocol version.
Code:
-- @docclass
ProtocolLogin = extends(Protocol, "ProtocolLogin")

LoginServerError = 10
LoginServerUpdate = 17
LoginServerMotd = 20
LoginServerUpdateNeeded = 30
LoginServerCharacterList = 100
LoginServerExtendedCharacterList = 101

function ProtocolLogin:login(host, port, accountName, accountPassword)
  if string.len(host) == 0 or port == nil or port == 0 then
    signalcall(self.onLoginError, self, tr("You must enter a valid server address and port."))
    return
  end

  self.accountName = accountName
  self.accountPassword = accountPassword
  self.connectCallback = self.sendLoginPacket

  self:connect(host, port)
end

function ProtocolLogin:cancelLogin()
  self:disconnect()
end

function ProtocolLogin:sendLoginPacket()
  local msg = OutputMessage.create()
  msg:addU8(ClientOpcodes.ClientEnterAccount)

  msg:addU16(2)
  msg:addU16(772) -- version? yes put 13~~
 
  if g_game.getClientVersion() >= 980 then
    msg:addU32(g_game.getClientVersion())
  end

  msg:addU32(g_things.getDatSignature())
  msg:addU32(g_sprites.getSprSignature())
  msg:addU32(PIC_SIGNATURE)

  if g_game.getClientVersion() >= 980 then
    msg:addU8(0) -- clientType
  end

  local offset = msg:getMessageSize()

  if g_game.getClientVersion() >= 770 then
    -- first RSA byte must be 0
    msg:addU8(0)
    -- xtea key
    self:generateXteaKey()
    local xteaKey = self:getXteaKey()
    msg:addU32(xteaKey[1])
    msg:addU32(xteaKey[2])
    msg:addU32(xteaKey[3])
    msg:addU32(xteaKey[4])
  end

  if g_game.getFeature(GameAccountNames) then
    msg:addString(self.accountName)
  else
    msg:addU32(tonumber(self.accountName))
  end

  msg:addString(self.accountPassword)

  if self.getLoginExtendedData then
    local data = self:getLoginExtendedData()
    msg:addString(data)
  end

  local paddingBytes = g_crypt.rsaGetSize() - (msg:getMessageSize() - offset)
  assert(paddingBytes >= 0)
  msg:addPaddingBytes(paddingBytes, 0)
  if g_game.getClientVersion() >= 770 then
    msg:encryptRsa()
  end

  if g_game.getFeature(GameProtocolChecksum) then
    self:enableChecksum()
  end

  self:send(msg)
  if g_game.getClientVersion() >= 770 then
    self:enableXteaEncryption()
  end
  self:recv()
end

function ProtocolLogin:onConnect()
  self.gotConnection = true
  self:connectCallback()
  self.connectCallback = nil
end

function ProtocolLogin:onRecv(msg)
  while not msg:eof() do
    local opcode = msg:getU8()
    if opcode == LoginServerError then
      self:parseError(msg)
    elseif opcode == LoginServerMotd then
      self:parseMotd(msg)
    elseif opcode == LoginServerUpdateNeeded then
      signalcall(EnterGame.onUpdateNeeded, self)
    elseif opcode == LoginServerCharacterList then
      self:parseCharacterList(msg)
    elseif opcode == LoginServerExtendedCharacterList then
      self:parseExtendedCharacterList(msg)
    elseif opcode == LoginServerUpdate then
      local signature = msg:getString()
      signalcall(self.onUpdateNeeded, self, signature)
    else
      self:parseOpcode(opcode, msg)
    end
  end
  self:disconnect()
end

function ProtocolLogin:parseError(msg)
  local errorMessage = msg:getString()
  signalcall(self.onLoginError, self, errorMessage)
end

function ProtocolLogin:parseMotd(msg)
  local motd = msg:getString()
  signalcall(self.onMotd, self, motd)
end

function ProtocolLogin:parseCharacterList(msg)
  local characters = {}

  if g_game.getClientVersion() > 1010 then
    local worlds = {}

    local worldsCount = msg:getU8()
    for i=1, worldsCount do
      local world = {}
      local worldId = msg:getU8()
      world.worldName = msg:getString()
      world.worldIp = msg:getString()
      world.worldPort = msg:getU16()
      msg:getU8() -- unknow byte?
      worlds[worldId] = world
    end

    local charactersCount = msg:getU8()
    for i=1, charactersCount do
      local character = {}
      local worldId = msg:getU8()
      character.name = msg:getString()
      character.worldName = worlds[worldId].worldName
      character.worldIp = worlds[worldId].worldIp
      character.worldPort = worlds[worldId].worldPort
      characters[i] = character
    end

  else
    local charactersCount = msg:getU8()
    for i=1,charactersCount do
      local character = {}
      character.name = msg:getString()
      character.worldName = msg:getString()
      character.worldIp = iptostring(msg:getU32())
      character.worldPort = msg:getU16()

      if g_game.getClientVersion() >= 980 then
        character.unknown = msg:getU8()
      end

      characters[i] = character
    end
  end

  local account = {}
  account.premDays = msg:getU16()
  signalcall(self.onCharacterList, self, characters, account)
end

function ProtocolLogin:parseExtendedCharacterList(msg)
  local characters = msg:getTable()
  local account = msg:getTable()
  local otui = msg:getString()
  signalcall(self.onCharacterList, self, characters, account, otui)
end

function ProtocolLogin:parseOpcode(opcode, msg)
  signalcall(self.onOpcode, self, opcode, msg)
end

function ProtocolLogin:onError(msg, code)
  local text = translateNetworkError(code, self:isConnecting(), msg)
  signalcall(self.onLoginError, self, text)
end


my protocol login is a little bit different @Geisor.pl can you help me please¡?
 
What exactly do I have to edit there?
Oh, nevermind, I got it.

But could you explain why do we have to change it to 1234? Why 1234?
it's just an example.... omg you can change it to what ever you want lol
 
Edited my first post. Check code for 'to game' fake protocol version.
men im using XOR encryption in my source to use old tibianic client but with these editions i cant log in with otclient
could you help me please? i did the changes but once logged in i cant walk get kicked after a few minits and errors in my console.exe
i want to do something as nastarius a server that uses the old tibianic client + otc
im not having errors logging in with tibianic old client
but when i log in with otclient i get this
[17/8/2017 9:3:23] Bubexel has logged in.
[17/8/2017 9:3:23] [Failure - Protocol::XTEA_decrypt] Not valid unencrypted message size (IP: xxx.46.xxx.249)
[17/8/2017 9:3:23] [Failure - Protocol::XTEA_decrypt] Not valid unencrypted message size (IP: xxx.46.xxx.249)
[17/8/2017 9:3:23] [Failure - Protocol::XTEA_decrypt] Not valid unencrypted message size (IP: xxx.46.xxx.249)
 
Last edited:
I don't want to be rude but maybe you should play with the official released client or do not play at all?
At least, if you need it so much, do research, learn and achieve it for your own.
 
i dont want to be mean but...

you should have more reading comprehension
im trying to use official otclient at my modified server sources
with xor code because im using old tibianic client(it doesnt allow otclient & normal tibia client or ipchangers)

and of course i should research and im doing it.... but isn't bad search for help ;)
indeed the best place to look for it's here
where tibia sources are developed (i need to edit them again)

pd: im not a player... im working on my own server

regardds
 
Last edited:
I do not understand.
What is old tibianic client?
You can't connect to your server by official OTClient so you have to edit it to get a client like "old tibianic client"?
 
look old tibianic client is a normal tibia client + dll and some folder game/map/cam made by designers or who knows who but it was usedor made by or for the server that now is called MEDIVIA
that client have a "special" that new source edit from server sideto allow it works and its blocks ipchangers normal tibia clients and otclient

the clients looks as this indeed this is the client...
rUxXMz1.png


i was trying to edit my source to allow otclient + this client that im using atm

im trying to add xor encryption in my otclient now compiling
hopefully get succes
 
look old tibianic client is a normal tibia client + dll and some folder game/map/cam made by designers or who knows who but it was usedor made by or for the server that now is called MEDIVIA
that client have a "special" that new source edit from server sideto allow it works and its blocks ipchangers normal tibia clients and otclient

the clients looks as this indeed this is the client...
rUxXMz1.png


i was trying to edit my source to allow otclient + this client that im using atm

im trying to add xor encryption in my otclient now compiling
hopefully get succes
You may want to change from exevo gran mas deth to exevo gran mas death
 
Got problem with login to account characters list or to game?

For login to characters list
Edit file:
otclient/protocollogin.lua at master · edubart/otclient · GitHub
Code:
msg:addU16(g_game.getProtocolVersion())
if g_game.getFeature(GameClientVersion) then
msg:addU32(g_game.getClientVersion())
Example with fake protocol 1234:
Code:
msg:addU16(1234)
if g_game.getFeature(GameClientVersion) then
msg:addU32(1234)
For example in client you leave it as '8.60', so it will load 8.6 .spr and use 8.6 protocol, but it will send fake protocol version to server (1234).

For login to 'game'
It's same as for login to list, but you need to edit source an recompile client.
Edit file:
otclient/protocolgamesend.cpp at master · edubart/otclient · GitHub

I can get to the charlist, but I can't enter with a char...
I already edited protocolgamesend.cpp
When I try to log in it says "Only clients with protocol 11 allowed"
 
Back
Top