NFC卡研究筆記

2021-08-15 05:32:34 字數 3621 閱讀 5944

sector扇區

block塊

把卡一直放後面讀裝置會發熱

09(cpu卡)

android.nfc.tech.isodep, android.nfc.tech.nfca

10(cpu的7k加m1的1k)

會讀到android.nfc.tech.isodep, android.nfc.tech.nfca和android.nfc.tech.isodep, android.nfc.tech.nfca, android.nfc.tech.nfca, android.nfc.tech.mifareclassic, android.nfc.tech.ndefformatable,中任意一種。第二種其實包含第一種的兩個情況的。說明第一種的是沒讀取全。這個等於是09的加23的所以nfca是重複的。

23 (s70的4k加cpu的4k)

android.nfc.tech.nfca,android.nfc.tech.mifareclassic,android.nfc.tech.ndefformatable,

s70的23卡會被格式化為ndef。被ndef後就可恢復出廠設定。會被格式化為ndef就不行的

cpu的09卡,暫時對cpu型別的沒研究。

m1的10卡,不會被格式化,恢復出廠雖然現實成功,但資料還在。

卡使用的技術包括

mtechlists = new string , 

new string ,

new string ,

new string ,

new string ,

new string ,

new string ,

new string ,

new string };

cpu卡對應識別的是isodep,m1卡對應的是nfca。從記錄0

採購卡片資訊

中可以看出一種卡包含很多種呀。

nfc三重過濾機制。

(1)ndef_discovered: 只過濾固定格式的ndef資料。例如:純文字、指定協議(http、ftp、smb等)的uri等;

(2)tech_discovered: 當action_ndef_

discovered指定的過濾機制無法匹配tag時,就會使用這種過濾機制進行匹配,這種過濾機制並不是通過tag中的資料格式進行匹配的,而是根據tag支援的資料儲存格式進行匹配,因此這種過濾機制的範圍更廣;

(3) tag_discovered: 如果將nfc過濾機制看成if...else if...else語句的話,那麼這種過濾機制就相當於else部分,當前面兩種過濾機制都匹配失敗後,系統就會利用這種過濾機制來處理,這種過濾機制用來處理未識別的tag(資料格式不對,而且tag支援的格式也不匹配)。

發現23卡可被擦寫格式化為ndef卡,09和10不行提示有保護。應該是s70的那部分問題。也可通過**的寫操作變成ndff卡。23卡轉換為ndff卡後所有扇區驗證都失敗了

有些扇區可能會驗證失敗原因是密碼a或者b錯誤。 m1的s70卡4k位元組, 共40個扇區,前32個扇區中,每個扇區4個資料塊,每個資料塊16個位元組,後8個扇區中,每個扇區16個資料塊,每個資料塊16個位元組;我的那張卡後8個扇區會驗證失敗 m1卡1k位元組。共16個扇區,每個扇區4個資料塊

扇區和資料塊都是0開始算的。第乙個扇區自然指0了。但扇區的塊編號是即使扇區改變也一直遞增的。獲取mfc.sectortoblock(sectorpos)//獲取扇區第乙個塊編號加上讀取塊是第幾個塊就是讀取塊編號。

0扇區的0塊(manufacturer blcok)由廠商使用,儲存了ic卡的生產產商**,前4個位元組(即8個數字)是卡號。第5個位元組是校驗位,後面的是生產商資料。

其他扇區的第0塊沒存東西。第0塊被這個使用,所以這個扇區特殊只有兩個資料塊。

如下圖,扇區的前三個塊為data blocks(資料塊),當然擁有16塊的扇區資料庫有15個,每個扇區的第4塊(sector trailer(扇區尾部)控制塊)包括密碼a(不能讀出,所以程式讀出都是顯示0000的)、密碼b及相應扇區中的所有塊的儲存控制位(位於第6個位元組到第9個位元組)

左邊是低位元組,則6、7、8、9位元組為ff、07、80、69,這是預設的控制字,其中69是保留位元組值並沒有任何作用。1位元組兩個16進製制,對應8位2進製。

每個扇區4塊,都有三個控制區名稱如下。c10,,c20,c30後面的0代表對塊0的控制,前面的1,2,3代表控制區編號

塊3控制塊的控制位意思如圖5.1,下圖中例子說明不知道為什麼不是001的而是100。後直接算一遍應該是001

例子(1)根據下表5.1和5.3:

當c1x c2x c3x = 100時,即每個塊的控制區編號都是100

(2)結合圖5.2。所有c1開頭的都是1,c2,c3開頭的為0。_b表示取反。可得下面結果

位元組611110000

位元組7:11111111

位元組8:00000000

位元組9備用位元組,隨便填充如00000000

(3)然後對應的16進製為0xf0,0xff,0x00,0x00

(4)因此此時的控制位為:

(byte)0xf0, (byte)0xff, (byte) 0x00,(byte)0x00

(5)所以根據你想要自定義對資料塊和控制塊資料是否可讀可寫。了解需求後根據圖7.1和圖7.3則定義好所有的c10,c20,c30,c11,c21等等等的二進位制值。然後根據圖7.2就得到對應二進位制值了。然後轉換為16進製制就得到控制塊的控制位的16進製制值了。反之,通過控制塊的控制位的16進製制值得到對應二進位制值,然後根據圖5.2獲取每個cxx的值,根據7.1和7.3圖得到對應的許可權

圖7.1

圖7.2

塊0,1,2資料塊的控制位意思

圖7.3

當知道密碼情況下資料塊可修改,控制塊可修改,0扇區0塊(儲存id的地方)無法修改。格式化和恢復出廠也不會影響。卡買來密碼是預設密碼。手機可以模擬id。所以只用id判斷是不夠的。需要在扇區中儲存id對應的加密後資料。與後台進行比較。

我們平時使用時,需要把a和b密碼改為我們自己的。還有我們買的卡第二控制區是ff078069(最後兩位元組無所謂)即密碼a是無法被讀取出來只能修改(不可讀取情況下讀出來的都是0),而密碼b是可被讀取和修改的,最好改為7f078869(最後兩位元組無所謂)。a和b都不能被讀取而修改時都需要密碼b。平時用authenticatesectorwithkeya解密密碼a就好。雖然如果b需要加個authenticatesectorwithkeyb就可以。

所以在1扇區的1塊中存入。用id加密後的密文(每次加密結果都在變的)。到時與裝置通過id轉化的密文比較相同則id對應的科室簽到成功。科室和id的關係需要存入後台。密文比較交給後台處理也可以

NFC模擬校園卡開門禁

首先說明一點,校園卡是帶支付的加密卡,肯定無法複製支付部分,這也是違法的。但是,我們學校門禁只識別學生的id,所以,只需要複製卡里的id,在寫到空白卡里即可。物料準備 使用步驟 開啟 clone uid 功能 貼要複製的卡 點選 calculate block 0 and clone uid 貼白卡...

NFC官方文件學習筆記(一) NFC前台排程

上android開發官網看下下nfc相關知識,發現在網上相關的介紹也非常多,我也濫竽充數地寫乙個學習記錄,就是官方api demo中的copy版本。nfc前台排程 讀取ndef資料 乙個nfc標籤處理與標籤的排程系統,分析發現的nfc標籤,適當 地對資料進行分類,並啟動乙個應用程式。在分類的資料中,...

NFC的讀寫卡模式 前台排程系統

在這節內容中,我們為大家介紹一下nfc的讀寫卡模式的開發。讀寫卡模式是通過手機對nfc標籤卡資訊經行讀寫操作,但是,在使用前,我們應該去檢查一下設定和新增一些許可權。在這裡我建議大家將nfc的一些基礎操作放入到乙個nfcbaseactivity中,這樣,我們在使用時就不需要每次都經行重複的操作。1 ...