Esempio n. 1
0
 def on_pb_ReadAllBlocks(self):
     self.Log('Read All Blocks:')
     k = calcCardKeyBs(self.reader)
     if not k:
         self.Log('Calc KeyBs err!', 1)
         return
     r = self.reader.FoundCard()
     if not r or not func.IsSwOk(r[1]):
         self.Log('FoundCard err!', 1)
         return
     for i in range(64):
         sec = i // 4
         r = self.reader.LoadKey(4, sec, k[sec])
         if not r or not func.IsSwOk(r[1]):
             self.Log('LoadKey %d %d %s err!' % (4, sec, k[sec]), 1)
             return
         r = self.reader.AuthKey(4, sec)
         if not r or not func.IsSwOk(r[1]):
             self.Log('AuthKey %d %d err!' % (4, sec), 1)
             return
         r = self.reader.ReadBlock(i)
         if not r or not func.IsSwOk(r[1]):
             self.Log('ReadBlock %d err!' % i, 1)
             return
         self.Log('%02d --- %s' % (i, r[2]), 1)
Esempio n. 2
0
def calcCardKeyBs(reader):
    deskey = 'd463fee0c70007d598d4777badde94b0'
    loop = 0
    sec1keya = ''
    while True:
        r = reader.FoundCard()
        if not r or not func.IsSwOk(r[1]):
            return False
        csn = r[2][6:]
        baCsn = bytes.fromhex(csn)
        if loop == 0:
            sec1keya = 'FF' * 6
        elif loop == 1:
            sec1keya = '00' * 6
        else:
            sec1keya = csn + csn[0:4]
        reader.LoadKey(1, 1, sec1keya)
        r = reader.AuthKey(1, 1)
        if not func.IsSwOk(r[1]):
            loop += 1
            if loop > 2:
                return False
            continue
        r = reader.ReadBlock(4)
        if not func.IsSwOk(r[1]):
            return False
        block4 = bytes.fromhex(r[2])
        break
    KeyBs = list(range(16))
    if loop == 0:
        for i in range(16):
            KeyBs[i] = b'\xFF' * 6
    else:
        cardtype = block4[13]
        factor = bytearray(8)
        for i in range(4):
            factor[i] = baCsn[i]
        for i in range(3):
            factor[4 + i] = block4[6 + i]
        if 0x90 == cardtype or 0x91 == cardtype or 0x92 == cardtype:
            for i in range(0, 3):
                factor[7] = i
                KeyBs[i] = des_ecb(bytes(factor), deskey)
            for i in range(3, 16):
                KeyBs[i] = KeyBs[2]
        else:
            for i in range(16):
                if i == 2:
                    factor[7] = 0x10
                elif i >= 3 and i <= 5:
                    factor[7] = 0x03
                elif i >= 7 and i <= 15:
                    factor[7] = i + 10
                else:
                    factor[7] = i
                KeyBs[i] = des_ecb(bytes(factor), deskey)
    return tuple(map(lambda x: x[0:6], KeyBs))
Esempio n. 3
0
 def on_pb_SelectCard(self):
     csn = self.ui.le_Csn.text()
     self.Log('SelectCard ' + csn)
     r = self.reader.SelectCard(csn)
     if r and func.IsSwOk(r[1]):
         self.ui.le_Sak.setText(r[2])
     self.Log(r, 1)
Esempio n. 4
0
 def on_pb_CpuPps(self):
     sendpps = self.ui.le_CpuPpsSend.text()
     self.Log('CpuPPS ' + sendpps)
     r = self.reader.CpuPPS(sendpps)
     if r and func.IsSwOk(r[1]):
         self.ui.le_CpuPpsRecv.setText(r[2])
     self.Log(r, 1)
Esempio n. 5
0
 def on_pb_ClearCard(self):
     reply = QMessageBox.information(self, 'Caution', 'Sure to clear card?',
                                     QMessageBox.Yes | QMessageBox.No)
     if QMessageBox.No == reply:
         return
     self.Log('Clear Card:')
     blockdata = 'FFFFFFFFFFFFFF078069FFFFFFFFFFFF'
     k = calcCardKeyBs(self.reader)
     if not k:
         self.Log('Calc KeyBs err!', 1)
         return
     r = self.reader.FoundCard()
     if not r or not func.IsSwOk(r[1]):
         self.Log('FoundCard err!', 1)
         return
     for i in range(3, 64, 4):
         sec = i // 4
         r = self.reader.LoadKey(4, sec, k[sec])
         if not r or not func.IsSwOk(r[1]):
             self.Log('LoadKey %d %d %s err!' % (4, sec, k[sec]), 1)
             return
         while True:
             r = self.reader.AuthKey(4, sec)
             if not r or not func.IsSwOk(r[1]):
                 self.Log('AuthKey %d %d err!' % (4, sec), 1)
                 reply = QMessageBox.information(
                     self, 'Caution', 'Yes to continue, No to Exit!',
                     QMessageBox.Yes | QMessageBox.No)
                 if QMessageBox.No == reply:
                     return
                 else:
                     self.reader.FoundCard()
                     continue
             r = self.reader.WriteBlock(i, blockdata)
             if not r or not func.IsSwOk(r[1]):
                 self.Log('WriteBlock %d %s err!' % (i, blockdata), 1)
                 reply = QMessageBox.information(
                     self, 'Caution', 'Yes to continue, No to Exit!',
                     QMessageBox.Yes | QMessageBox.No)
                 if QMessageBox.No == reply:
                     return
                 else:
                     self.reader.FoundCard()
                     continue
             break
         self.Log('Wr%02d --- %s' % (i, blockdata), 1)
Esempio n. 6
0
 def on_pb_ReadBlock(self):
     blocknostr = self.ui.cob_BlockNo.currentText()
     blockno = int(blocknostr, 10)
     self.Log('ReadBlock ' + blocknostr)
     r = self.reader.ReadBlock(blockno)
     if r and func.IsSwOk(r[1]):
         self.ui.le_ReadBlock.setText(r[2])
     self.Log(r, 1)
Esempio n. 7
0
 def on_pb_FoundCard(self):
     self.Log('SelectCard')
     r = self.reader.FoundCard()
     if r and func.IsSwOk(r[1]):
         self.ui.le_Atqa.setText(r[2][0:4])
         self.ui.le_Sak.setText(r[2][4:6])
         self.ui.le_Csn.setText(r[2][6:])
     self.Log(r, 1)
Esempio n. 8
0
 def on_pb_ReadValue(self):
     blocknostr = self.ui.cob_BlockNo.currentText()
     blockno = int(blocknostr, 10)
     self.Log('ReadVal ' + blocknostr)
     r = self.reader.ReadVal(blockno)
     if r and func.IsSwOk(r[1]):
         v = int(r[2], 16)
         self.ui.le_ReadValue.setText('%d (0x%s)' % (v, r[2]))
     self.Log(r, 1)
Esempio n. 9
0
 def on_pb_ReadLkt4210Info(self):
     self.Log('DevReadLKT4210Info')
     r = self.reader.DevReadLKT4210Info()
     if r and func.IsSwOk(r[1]):
         self.ui.le_ReadLkt4210Info.setText(r[2])
     self.Log(r, 1)
Esempio n. 10
0
 def on_pb_ReadSid(self):
     self.Log('DevReadSID')
     r = self.reader.DevReadSID()
     if r and func.IsSwOk(r[1]):
         self.ui.le_ReadSid.setText(r[2])
     self.Log(r, 1)
Esempio n. 11
0
 def on_pb_CpuReset(self):
     self.Log('CpuReset')
     r = self.reader.CpuReset()
     if r and func.IsSwOk(r[1]):
         self.ui.le_CpuReset.setText(r[2])
     self.Log(r, 1)
Esempio n. 12
0
 def on_pb_Anticol(self):
     self.Log('Anticol')
     r = self.reader.Anticoll()
     if r and func.IsSwOk(r[1]):
         self.ui.le_Csn.setText(r[2])
     self.Log(r, 1)
Esempio n. 13
0
 def on_pb_RequestAll(self):
     self.Log('RequestAll')
     r = self.reader.Request(1)
     if r and func.IsSwOk(r[1]):
         self.ui.le_Atqa.setText(r[2])
     self.Log(r, 1)
Esempio n. 14
0
def isApduRspOK(r):
    if r and func.IsSwOk(r[1]):
        return True
    else:
        return False