找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2318|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

關(guān)于SD卡讀寫加密的研究

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:79094 發(fā)表于 2024-7-6 08:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
50黑幣
空閑之余研究 手頭有兩張SD卡插上電腦能識(shí)別到 提示格式化  但格式化失敗
用DiskGenius 打開顯示扇區(qū)錯(cuò)誤  經(jīng)研究應(yīng)該是 某些設(shè)備上的加密卡
根據(jù)下面資料 編寫的代碼   不能清除  請(qǐng)有經(jīng)驗(yàn)的前輩 給與指導(dǎo) 萬(wàn)分感謝

資料1
卡擦除
使用CMD16設(shè)置Block長(zhǎng)度為1;
發(fā)送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
發(fā)送命令數(shù)據(jù):0x08,0xFF,0xFF;
使用CMD16恢復(fù)原Block長(zhǎng)度。

資料2
加密并上鎖
給SD卡加密并上鎖后,SD卡在沒有解鎖的情況下將不能被讀寫4:根據(jù)圖2要上鎖的命令為Bit2=1,設(shè)置密碼的命令為Bit0-1,其它的位設(shè)置為O,即命令碼為Ox05。在SD卡接受CMD42命令字前需要降低SPI的通信速度,這樣才能更好的接受加密指令,SD卡在讀寫數(shù)據(jù)時(shí)塊長(zhǎng)度(block)為512Byte,但在寫入密碼前應(yīng)通過CMD16命令字設(shè)置block長(zhǎng)度為密碼長(zhǎng)度(PWD LEN)加上兩個(gè)Byte即PWD LEN+2,在加密操作完成后恢復(fù)數(shù)據(jù)塊長(zhǎng)度512Byte。以設(shè)置密碼為“123456”為例,加密并加鎖的關(guān)鍵代碼如下:
SPI_SetSpeed (Low)://設(shè)置SPI為低速通信模式
SD_SendCmd(CMD16, Ox08, Oxff);//設(shè)置blcok為8
SD_SendCmd (CMD42, Oxffffff, Ox95):11寫入命令
SD;SPI_WriteByte (Oxfe)://數(shù)據(jù)命令盾牌
SD SPI_ WriteByte(Ox05)://設(shè)置密碼,并給卡加鎖
SD_SPI_WriteByte (Ox06);//密碼長(zhǎng)度
SD_SPI_WriteByte (Ox31);//寫入密碼123456
SD_SPI_ Wri'teByte (Ox32);
SD_SPI:WriteByte (Ox33);
SD_SPI-WriteByte( Ox34);
SD SPI_ WriteByte(Ox35);
SD SPI- WriteByte(Ox36);
SD SPI_WriteByte(Oxff)://寫兩字節(jié)的CRC校驗(yàn)
SD SPI WriteByte(Oxff)
SD SendCmd (CMD16, Ox200, Oxff)://恢復(fù)block
SPI_SetSpeed (High);//恢復(fù)SPI為高速通信模式



這里是根據(jù)參考資料編寫的代碼
unsigned char SD_cmd42()
{  
unsigned char time,temp;
unsigned char cmd16[] = {0x50,0x00,0x00,0x00,0x01,0x01};
unsigned char cmd42[] = {0x6a,0x00,0x00,0x00,0x00,0x95};
SD_CS=0;
time=0;

do
{
   
  temp=SD_Write_Cmd(cmd16);//寫入CMD16
  temp=SD_Write_Cmd(cmd42);//寫入CMD42
  SD_spi_write(0xfe); //起始令牌
  SD_spi_write(0x08); //解除鎖命令碼
  SD_spi_write(0xff); //crc
  SD_spi_write(0xff); //crc
  time++;
  delay(5000); //延時(shí)便于觀察循環(huán)次數(shù)
  LED_4 = ~LED_4;//
  if(time==200) //循環(huán)200次
  {
    LED_R = 0;  //錯(cuò)誤點(diǎn)亮紅led 和第四個(gè)led
    LED_4 = 0;
      return 1;  //結(jié)束程序并返回1 寫入失敗
  }
}while(temp!=0x00);//響應(yīng)r1  這里不確定是不是0x00  知道的請(qǐng)告知下
LED_4 = 0;//正常點(diǎn)亮第四個(gè)led


SD_CS=1;
SD_spi_write(0xff); //按照SD卡的操作時(shí)序在這里補(bǔ)8個(gè)時(shí)鐘
return 0;//返回0,
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:43600 發(fā)表于 2024-7-7 02:46 | 只看該作者
一般都是針對(duì)檔案來加密,對(duì)於sd的底層操作來做加密,恐怕是專屬某些廠商的非國(guó)際標(biāo)準(zhǔn)操作,除了花錢請(qǐng)那些廠商來處理,否則恐怕無人可解。
回復(fù)

使用道具 舉報(bào)

板凳
ID:79094 發(fā)表于 2024-7-7 21:47 | 只看該作者
hclin 發(fā)表于 2024-7-7 02:46
一般都是針對(duì)檔案來加密,對(duì)於sd的底層操作來做加密,恐怕是專屬某些廠商的非國(guó)際標(biāo)準(zhǔn)操作,除了花錢請(qǐng)那些 ...

感謝回復(fù)  這個(gè)是SD卡自帶的一項(xiàng)功能簡(jiǎn)單來說就是 打開sd卡時(shí)要輸入密碼    用cdm42 增加密碼 或是清除密碼   
回復(fù)

使用道具 舉報(bào)

地板
ID:844772 發(fā)表于 2024-7-8 10:08 | 只看該作者
如果研究這個(gè)加密原理,意義不大啊,這個(gè)加密沒有數(shù)學(xué)加持,難度不大;如果為了格式化可以用行命令處理或干脆使用三方軟件,它改寫了目錄扇區(qū),沒法高級(jí)格式化了。
回復(fù)

使用道具 舉報(bào)

5#
ID:79094 發(fā)表于 2024-7-8 13:08 | 只看該作者
glinfei 發(fā)表于 2024-7-8 10:08
如果研究這個(gè)加密原理,意義不大啊,這個(gè)加密沒有數(shù)學(xué)加持,難度不大;如果為了格式化可以用行命令處理或干 ...

感謝回復(fù)  確實(shí)是只想格式化成正常的sd卡
命令行試過不行
有什么軟件推薦下可以嗎
回復(fù)

使用道具 舉報(bào)

6#
ID:69038 發(fā)表于 2024-7-8 15:03 | 只看該作者
直接用DiskGenius 重建分區(qū)一下就OK了。
那怕加密18層都可以,除非是SD卡掛了。。
回復(fù)

使用道具 舉報(bào)

7#
ID:79094 發(fā)表于 2024-7-9 08:52 | 只看該作者
zhuls 發(fā)表于 2024-7-8 15:03
直接用DiskGenius 重建分區(qū)一下就OK了。
那怕加密18層都可以,除非是SD卡掛了。。

試過了 提示扇區(qū)錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表