Bronson1365 wrote:
shame to see the only dude who picked up the old project is now selling the bot, 200$ for other peoples work
zzz
Thats the thing about nice code, if your good enough you can make money doing it. Its a shame he is selling it (i wasnt aware of this), but its his choice. Honestly, as a programmer it make me happy knowing i created something usefully and good enough to be continued by someone else. I still get PM's about one every few months asking me if i have do any work on this old code. But for the last year or so i havent been on xenimus or even be coding in C++, my work is strictly

and after i get off work i generally just vegg out on TV.
I just recently (like 2 days ago), re-downloaded xenimus and started messing around with some code again. Im a little interesting in learning Python, sofar i put together a start to a bot. Its clientless, which is much much harder in my mind to work with, but its fun to play around with and stuff. So far ive only be able to get it to login to the game, not much else. I havent put more then a few hours into this code yet though. (im also on linux so i figured id give python a shot instead of C++ which i am much more fluent in)
// Base.py
Code:
#!/usr/bin/env python
import thread
from Queue import Queue
import socket
import sys
import time
from inc import *
# 64.34.166.5
host = '64.34.163.8'
port = 5050
account = 12345678 # Replace with account
password = 'password' # Replace with password
packet_queue = Queue()
character = ''
char_id = 0
loggedin = False
####################################
# FUNCTIONS #
####################################
def recv_handler( sock ):
while( 1 ):
try:
d = sock.recvfrom( 1024 )
reply = crypto.decrypt( d[0], len( d[0] ))
addr = d[1]
packet_handler( reply )
except socket.error, msg:
print 'Error code: ' + str( msg[0] ) + ' Message: ' + msg[1]
def send_handler( sock, host, port ):
while 1:
if( not packet_queue.empty() ):
message = packet_queue.get()
print 'Send: '
print ':'.join( '{:02x}'.format(x) for x in message )
sock.sendto( message, ( host, port ))
packet_queue.task_done()
def packet_handler( packet ):
packet = bytearray( packet )
global character, char_id, loggedin
print 'Recv:'
print ':'.join( '{:02x}'.format(x) for x in packet )
# Login
if( packet[0] == 0x0F ):
char_id = [ packet[2], packet[3] ]
pos = 6
while( packet[ pos ] != 0 ):
character += chr( packet[ pos ] )
pos += 1
# Entering the world
elif( packet[0] == 0x1F ):
loggedin = True
# Update packet
elif( packet[0] == 0x03 ):
handle_update( packet )
def queue_packet( packet ):
packet = bytearray( packet )
packet = crypto.encrypt( packet, len( packet ))
packet_queue.put( packet )
def do_login( account, password ):
# Define an empty login packet
login = [0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x00,0x00]
# Place the account number into the packet
login[2] = ( account & 0xFF )
login[3] = ( account >> 8 ) & 0xFF
login[4] = ( account >> 16 ) & 0xFF
login[5] = ( account >> 24 ) & 0xFF
# Place the password into the packet
pos = 10
for x in password:
login[ pos ] = ord( x )
pos += 1
# Add to the queue
queue_packet( login )
def enter_world( charid, password ):
enter = [0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00]
# Place character id into packet
enter[2] = charid[0]
enter[3] = charid[1]
# Place the password into the packet
pos = 10
for x in password:
enter[ pos ] = ord( x )
pos += 1
# Add to queue
queue_packet( enter )
def handle_update( packet ):
#TODO: handle the packet duh
print ''
####################################
# MAIN THREAD #
####################################
# Create the socket
try:
xSock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
except socket.error:
print 'Failed to create socket'
sys.exit()
# Create worker threads
try:
thread.start_new_thread( recv_handler, ( xSock, ) )
#rworker.deamon = True
# rworker.start()
thread.start_new_thread( send_handler, ( xSock, host, port, ) )
#sworker.deamon = True
#sworker.start()
except:
print "Error: unable to start thread"
ping = "\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
#while 1:
time.sleep( 1 )
queue_packet( ping )
time.sleep( 2 )
do_login( account, password )
time.sleep( 2 )
print character
print char_id
time.sleep( 2 )
enter_world( char_id, password )
time.sleep( 15 )
// Crypto.py
Code:
from random import randint
m_key = [
0x0B, 0xB3, 0x49, 0x4C, 0xA7, 0x53, 0x44, 0x09, 0xAA, 0xE4, 0x0A, 0x8D, 0xD9, 0x5D, 0xC5, 0x28,
0xDA, 0x25, 0x4F, 0x25, 0xA0, 0xE2, 0x67, 0x69, 0x61, 0x73, 0x84, 0xEA, 0x97, 0xE2, 0x41, 0xD5,
0xB6, 0x28, 0xC6, 0x7D, 0x53, 0xD5, 0x73, 0x98, 0x12, 0x9F, 0x80, 0xB0, 0x5A, 0xA1, 0x29, 0xE7,
0x5E, 0xD0, 0x2A, 0x7F, 0x09, 0xBF, 0xD6, 0x4B, 0x6B, 0x83, 0x01, 0xAA, 0x7B, 0x67, 0x1B, 0x0D,
0xBC, 0x0E, 0x26, 0x2E, 0xD5, 0x8F, 0x7E, 0xCE, 0x33, 0xF2, 0x1C, 0xD8, 0xAD, 0x03, 0xB4, 0xFC,
0x40, 0x8D, 0x0B, 0xD0, 0x78, 0x01, 0x60, 0x26, 0xBB, 0x38, 0x36, 0x52, 0x6C, 0xBD, 0x1E, 0x6F,
0xD2, 0x92, 0xC4, 0x4B, 0xFA, 0x25, 0x30, 0xDE, 0x16, 0x98, 0xC0, 0xAA, 0x79, 0x56, 0x10, 0x61,
0xA1, 0x39, 0x9E, 0x57, 0x23, 0xCC, 0xD5, 0x19, 0x2A, 0xA7, 0xF4, 0x2A, 0xE3, 0x9C, 0xF5, 0xCF,
0x3D, 0xF0, 0x12, 0x6A, 0xDD, 0x01, 0x49, 0xD0, 0xCE, 0x02, 0x0A, 0x7D, 0x10, 0x2D, 0x47, 0x11,
0x15, 0xD7, 0x54, 0xFA, 0x63, 0x07, 0xB3, 0x58, 0x1E, 0xA6, 0xB0, 0x14, 0x0E, 0xA1, 0x93, 0x28,
0xFE, 0x12, 0x3C, 0x02, 0x94, 0x1E, 0xEE, 0xA7, 0xAF, 0xED, 0x63, 0xDE, 0x8A, 0x1D, 0xD6, 0xC1,
0x68, 0x34, 0xBF, 0xC0, 0x1E, 0x7B, 0x2C, 0x31, 0x86, 0x49, 0xE9, 0xC0, 0xC5, 0x06, 0x8B, 0x9A,
0x3A, 0xE2, 0x85, 0x36, 0x10, 0xAB, 0x8A, 0x47, 0x0D, 0xE6, 0xFC, 0x43, 0x8A, 0x57, 0x36, 0x33,
0x21, 0x9A, 0x95, 0xDB, 0x16, 0x33, 0xA2, 0x75, 0x49, 0xD5, 0x4E, 0xF8, 0x65, 0xCA, 0xCD, 0x9B,
0x5B, 0x95, 0xA8, 0x95, 0x0F, 0xD6, 0x0F, 0x27, 0x51, 0x6F, 0x6C, 0xDA, 0x0E, 0xE5, 0x3D, 0x0D,
0xC7, 0x09, 0x23, 0xAB, 0x43, 0xD7, 0x36, 0x3A, 0x81, 0x9E, 0x9B, 0x1A, 0xF0, 0x62, 0x59, 0x0A];
def decrypt( packet, size ):
packet = bytearray( packet )
key = packet[0] + packet[1]
key &= 0xff
packet[0] ^= 0xAA
startkeyval = m_key[ key ]
startkeyval &= 0x24
startkeyval |= 1
writepos = 2;
while( writepos < size ):
keyval = m_key[ key ]
if( writepos & startkeyval ):
if( (keyval & startkeyval) == 0 ):
packet[ writepos ] = ( packet[ writepos ] - keyval ) & 0xff
else:
packet[ writepos ] = ( packet[ writepos ] ^ keyval ) & 0xff
else:
if( keyval & startkeyval ):
packet[ writepos ] = ( ~packet[ writepos ] ) & 0xff
else:
packet[ writepos ] = ( packet[ writepos ] + keyval ) & 0xff
key += 1
key &= 0xff
writepos += 1
return packet
def encrypt( packet, size ):
packet = bytearray( packet )
packet[1] = randint( 0, 255 )
packet[0] ^= 0xAA
key = packet[0] + packet[1]
key &= 0xff
startkeyval = m_key[ key ]
startkeyval &= 0x24
startkeyval |= 1
writepos = 2
while( writepos < size ):
keyval = m_key[ key ]
if( writepos & startkeyval ):
if( (keyval & startkeyval) == 0 ):
packet[ writepos ] = ( packet[ writepos ] + keyval ) & 0xff
else:
packet[ writepos ] = ( packet[ writepos ] ^ keyval ) & 0xff
else:
if( (keyval & startkeyval) == 0 ):
packet[ writepos ] = ( packet[ writepos ] - keyval ) & 0xff
else:
packet[ writepos ] = ( ~packet[ writepos ] ) & 0xff
key += 1
key &= 0xff
writepos += 1
return packet