def connect():
    ip = nip.get()
    global tcp, f_config, inj
    tcp = TCPGecko(ip)
    x = tcp.readmem(name_ptr, 20)
    x = str_end(x, 0)
    print(x)
    tcp.pokemem(0x1076f7a8, 0x000000FF)

    temp_vars = []
    ShowStats()

    change_text("^2Connected to NexoCube Mod Injector")

    inj.config(state=NORMAL)

    f_config.seek(0, 0)
    f_config.write(ip)
    f_config.close()
예제 #2
0
    print(
        "\nEnter you Wii U IP Address: (Or keep it blank to use your saved one.)"
    )
else:
    print("\nEnter you Wii U IP Address:")

ip = raw_input(">> ") or sav_ip

tcp = TCPGecko(ip)

save = open("./SAV_IP", "w")
save.write(ip)
save.close()

diff = 0x0
if hexlify(tcp.readmem(0x12CDADA0, 4)) == "000003f2":  #Loadiine and Geckiine
    diff = 0x0
elif hexlify(tcp.readmem(0x12CDCDA0,
                         4)) == '000003f2':  #Elf TCPGecko w/o codehandler
    diff = 0x2000
elif hexlify(tcp.readmem(
        0x12CE2DA0, 4)) == '000003f2':  #Something, it's there but I'm not sure
    diff = 0x8000
elif hexlify(tcp.readmem(0x12CE3DA0, 4)) == '000003f2':  #Codehandler
    diff = 0x9000
    print("codehandler")

tcp.pokemem(0x12BA71C8, 0x00000004)
tcp.pokemem(0x12BC4EF0, 0x00000004)
tcp.pokemem(0x12BD8EF0, 0x00000004)
tcp.pokemem(0x12CD2AC0, 0x0000697A)
예제 #3
0
import sys, os
import struct
sys.path.append(os.path.abspath('../pygecko'))
from tcpgecko import TCPGecko

wiiu_addr = '192.168.0.133'
print '> Connecting to Wii U...'
g = TCPGecko(wiiu_addr)
print '> Connected to Wii U'

addr_base = 0x1C3B2460
num_equip = 100
num_bytes = num_equip*24 # each equip uses 6 words

bytes_raw = g.readmem(addr_base, num_bytes)
num_equip_read = len(bytes_raw)/24
for equip_i in xrange(num_equip_read):
  offset = equip_i*24
  addr_curr = addr_base + offset
  bytes_curr_equip = bytes_raw[offset:(offset+24)]
  wv = struct.unpack('>IIIIII', bytes_curr_equip)
  equip_empty = (wv[0] == 0 and wv[1] == 0 and wv[2] == 0)
  if equip_empty:
    print '%08X (%03d): EMPTY' % (addr_curr, equip_i+1)
  else:
    print '%08X (%03d): %08X %08X %08X %08X %08X %08X' % \
          (addr_curr, equip_i+1, wv[0], wv[1], wv[2], wv[3], wv[4], wv[5])

g.s.close()
print '> Disconnected from Wii U'
예제 #4
0
with open('../codes/xcx_item_id_v1.0.1e.txt', 'r') as f:
    (item_db, item_db_lines, item_types) = parse_item_db(f.read())

print '> Connecting to Wii U...'
g = TCPGecko(wiiu_addr)
print '> Connected to Wii U'

num_items_max = (addr_last_slot - addr_first_slot) / slot_num_bytes
num_items_found = 0
for slot_i in xrange(num_items_max):
    # Read and parse item from memory
    offset = slot_i * slot_num_bytes
    addr_curr = addr_first_slot + offset
    print '0x%08X (Slot %03d):' % (addr_curr, slot_i + 1),
    word_curr = struct.unpack('>I', g.readmem(addr_curr, 4))[0]
    type_val, id_val, amount = parse_item_word(word_curr)
    if type_val == 0:
        print 'EMPTY'
        continue
    elif type_val != item_type_val:
        print 'UNEXPECTED ITEM TYPE (%02X)' % type_val
        continue
    num_items_found += 1

    # Look up item in DB
    item_word_val = form_item_word(type_val, id_val, 0)
    item = None
    if item_word_val in item_db:
        item = item_db[item_word_val]
예제 #5
0
class MyWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.ui = gui.Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton_3.clicked.connect(self.connection)
        self.ui.pushButton_2.clicked.connect(self.disconnection)
        self.ui.pushButton_6.clicked.connect(self.getStats)
        self.ui.pushButton_5.clicked.connect(self.applyStats)

    def getStats(self):
        try:
            # Level
            self.ui.spinBox.setValue(self.gecko.readkern(0x12CDC1A8) + 1)
            # XP
            self.ui.spinBox_2.setValue(self.gecko.readkern(0x12CDC1A4))
            # Rank
            rank = self.gecko.readkern(0x12CDC1AC)
            if rank == 0:
                self.ui.comboBox.setCurrentIndex(0)
            elif rank == 1:
                self.ui.comboBox.setCurrentIndex(1)
            elif rank == 2:
                self.ui.comboBox.setCurrentIndex(2)
            elif rank == 3:
                self.ui.comboBox.setCurrentIndex(3)
            elif rank == 4:
                self.ui.comboBox.setCurrentIndex(4)
            elif rank == 5:
                self.ui.comboBox.setCurrentIndex(5)
            elif rank == 6:
                self.ui.comboBox.setCurrentIndex(6)
            elif rank == 7:
                self.ui.comboBox.setCurrentIndex(7)
            elif rank == 8:
                self.ui.comboBox.setCurrentIndex(8)
            elif rank == 9:
                self.ui.comboBox.setCurrentIndex(9)
            elif rank == 10:
                self.ui.comboBox.setCurrentIndex(10)
            # Rank Points
            self.ui.spinBox_3.setValue(self.gecko.readkern(0x12CDC1B0))
            # Gold
            self.ui.spinBox_4.setValue(self.gecko.readkern(0x12CDC1A0))
            # Sea Snails
            self.ui.spinBox_5.setValue(self.gecko.readkern(0x12CDC1B4))
            # Gender
            gender = self.gecko.readkern(0x12CD1D90)
            if gender == 0:
                self.ui.comboBox_2.setCurrentIndex(0)
            elif gender == 1:
                self.ui.comboBox_2.setCurrentIndex(1)
            elif gender == 2:
                self.ui.comboBox_2.setCurrentIndex(2)
            # Eyes
            eyes = self.gecko.readkern(0x12CD1D98)
            if eyes == 0:
                self.ui.comboBox_3.setCurrentIndex(0)
            elif eyes == 1:
                self.ui.comboBox_3.setCurrentIndex(1)
            elif eyes == 2:
                self.ui.comboBox_3.setCurrentIndex(2)
            elif eyes == 3:
                self.ui.comboBox_3.setCurrentIndex(3)
            elif eyes == 4:
                self.ui.comboBox_3.setCurrentIndex(4)
            elif eyes == 5:
                self.ui.comboBox_3.setCurrentIndex(5)
            elif eyes == 6:
                self.ui.comboBox_3.setCurrentIndex(6)
            # Skin
            skin = self.gecko.readkern(0x12CD1D94)
            if skin == 0:
                self.ui.comboBox_4.setCurrentIndex(0)
            elif skin == 1:
                self.ui.comboBox_4.setCurrentIndex(1)
            elif skin == 2:
                self.ui.comboBox_4.setCurrentIndex(2)
            elif skin == 3:
                self.ui.comboBox_4.setCurrentIndex(3)
            elif skin == 4:
                self.ui.comboBox_4.setCurrentIndex(4)
            elif skin == 5:
                self.ui.comboBox_4.setCurrentIndex(5)
            elif skin == 6:
                self.ui.comboBox_4.setCurrentIndex(6)
            self.ui.comboBox.setEnabled(True)
            self.ui.comboBox_2.setEnabled(True)
            self.ui.comboBox_3.setEnabled(True)
            self.ui.comboBox_4.setEnabled(True)
            self.ui.spinBox.setEnabled(True)
            self.ui.spinBox_2.setEnabled(True)
            self.ui.spinBox_3.setEnabled(True)
            self.ui.spinBox_4.setEnabled(True)
            self.ui.spinBox_5.setEnabled(True)
            self.ui.pushButton_5.setEnabled(True)
            QMessageBox.information(self, 'SplatStats',
                                    "The statistics have been updated!")
        except:
            QMessageBox.critical(self, 'SplatStats',
                                 "Reading console data failed!")

    def disconnection(self):
        try:
            self.gecko.s.close()
            self.ui.lineEdit.setEnabled(True)
            self.ui.pushButton_3.setEnabled(True)
            self.ui.pushButton_2.setEnabled(False)
            self.ui.pushButton_5.setEnabled(False)
            self.ui.pushButton_6.setEnabled(False)
            self.ui.comboBox.setEnabled(False)
            self.ui.comboBox_2.setEnabled(False)
            self.ui.comboBox_3.setEnabled(False)
            self.ui.comboBox_4.setEnabled(False)
            self.ui.spinBox.setEnabled(False)
            self.ui.spinBox_2.setEnabled(False)
            self.ui.spinBox_3.setEnabled(False)
            self.ui.spinBox_4.setEnabled(False)
            self.ui.spinBox_5.setEnabled(False)
            QMessageBox.information(
                self, 'SplatStats',
                "Disconnection of the console was successful!")
        except:
            QMessageBox.critical(
                self, 'SplatStats',
                "An error occurred when disconnecting the console!")

    def connection(self):
        try:
            ip = self.ui.lineEdit.text()
            self.gecko = TCPGecko(ip)
        except:
            QMessageBox.critical(self, 'SplatStats',
                                 "The connection to the console failed!")
            return

        firmVer = self.gecko.getversion()
        if firmVer == 550:
            loc = 0x10013C10
        elif firmVer < 550 and firmVer >= 532:
            loc = 0x100136D0
        elif firmVer < 532 and firmVer >= 500:
            loc = 0x10013010
        elif firmVer == 410:
            loc = 0x1000ECB0
        else:
            QMessageBox.critical(
                self, 'SplatStats',
                "The version of your wiiu is not compatible with the software. Please update it!"
            )
            return

        titleID = int(hexlify(self.gecko.readmem(loc, 8)), 16)
        if titleID == TID_EUR or titleID == TID_USA or titleID == TID_JAP:
            self.ui.lineEdit.setEnabled(False)
            self.ui.pushButton_3.setEnabled(False)
            self.ui.pushButton_2.setEnabled(True)
            self.ui.pushButton_6.setEnabled(True)
            QMessageBox.information(
                self, 'SplatStats',
                "The connection to " + ip + " was successful!")
        else:
            self.gecko.s.close()
            QMessageBox.critical(
                self, 'SplatStats',
                "The connection to the console was successful, but was cut because Splatoon was not launched!"
            )

    def applyStats(self):
        try:
            # Level
            self.gecko.pokemem(0x12CDC1A8, self.ui.spinBox.value() - 1)
            # XP
            self.gecko.pokemem(0x12CDC1A4, self.ui.spinBox_2.value())
            # Rank
            self.gecko.pokemem(0x12CDC1AC, self.ui.comboBox.currentIndex())
            # Rank Points
            self.gecko.pokemem(0x12CDC1B0, self.ui.spinBox_3.value())
            # Money
            self.gecko.pokemem(0x12CDC1A0, self.ui.spinBox_4.value())
            # Sea Snails
            self.gecko.pokemem(0x12CDC1B4, self.ui.spinBox_5.value())
            # Gender
            self.gecko.pokemem(0x12CD1D90, self.ui.comboBox_2.currentIndex())
            # Eyes
            self.gecko.pokemem(0x12CD1D98, self.ui.comboBox_3.currentIndex())
            # Skin
            self.gecko.pokemem(0x12CD1D94, self.ui.comboBox_4.currentIndex())
            QMessageBox.information(
                self, 'SplatStats',
                "The statistics have been changed successfully!")
        except:
            QMessageBox.critical(
                self, 'SplatStats',
                "An error occurred when changing the values!")
with open('../codes/item_id_v1.0.1e.txt', 'r') as f:
  (item_db, item_db_lines, item_types) = parse_item_db(f.read())

print '> Connecting to Wii U...'
g = TCPGecko(wiiu_addr)
print '> Connected to Wii U'

num_items_max = (addr_last_slot - addr_first_slot) / slot_num_bytes
num_items_found = 0
for slot_i in xrange(num_items_max):
  # Read and parse item from memory
  offset = slot_i * slot_num_bytes
  addr_curr = addr_first_slot + offset
  print '0x%08X (Slot %03d):' % (addr_curr, slot_i + 1),
  word_curr = struct.unpack('>I', g.readmem(addr_curr, 4))[0]
  type_val, id_val, amount = parse_item_word(word_curr)
  if type_val == 0:
    print 'EMPTY'
    continue
  elif type_val != item_type_val:
    print 'UNEXPECTED ITEM TYPE (%02X)' % type_val
    continue
  num_items_found += 1

  # Look up item in DB
  item_word_val = form_item_word(type_val, id_val, 0)
  item = None
  if item_word_val in item_db:
    item = item_db[item_word_val]