2017-2018-1 20155309 20155220 实验二 固件程序设计
2017-11-05 20:36
363 查看
任务一
0. 注意不经老师允许不准烧写自己修改的代码1. 两人(个别三人)一组
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM)
3. 提交破解程序中产生LIC的截图
4. 提交破解成功的截图
步骤分析:
1.找到“exp2\软件资料\MDK4.74”路径下的mdk474.exe文件,点击并安装。注意此过程中“安装目标路径”是自己创建的一个名为“Keil 4”的文件夹;2.安装Ulink驱动;
3.在桌面上创建的快捷方式“Keil uVision4”上右键,选择“以管理员身份运行”
上述步骤在实验指导书中写的十分详尽,我们只需要一步一步的去运行即可。
这就是我们以管理员身份运行的结果。
接下来就是看如何破解。
那么我们只需要再次按照实验指导书上的指导即可。
4.点击File->License Management…,在弹出的窗口中复制CID;
5.打开“exp2\软件资料\keil-MDK注册机\keil mdk474注册机”路径下的“KEIL MDK4.74crack.exe”,运行Keil-MDK注册机,将刚才复制的CID粘贴到“CID”中,“TARGET”选择“ARM”,然后点击Generate,生成LIC;
6.将LIC复制并将其粘贴到刚才License Management窗口中的“New License ID Code(LID)”一栏中;
即可破解
任务二
0. 注意不经老师允许不准烧写自己修改的代码1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
3. 实验报告中分析代码
步骤分析:
1.安装SC000库:在任务一完成的基础上,打开“exp2\软件资料\MDK-ARM-SC000库支持”路径下的MDK-ARM_AddOn_SC000_Support.exe文件,安装路径我们选择刚才创建的Keil 4文件夹;2.在 keil MDKkeil 工程选择 SC000库:用管理员身份打开uVision4,选择然后点击
Project->New uVision Project;
3.新建一个文件夹作为新工程的保存路径;
4.在芯片库 选择框Generic SC000 Device Database ;
5.点开 ARM 结构目录,选择 SC000;
6.“exp2\LED闪烁”目录下的Z32.uvproj工程文件,然后编译;
7.用USB公对公线连接电脑和试验箱;
打开“exp2\软件资料\Z32下载调试工具”目录下的NZDloadTool.exe;
8.按住Reboot按钮的同时两次开关试验箱左上角部分的电源开关;
9.左侧显示“1设备已连接”后,下载LED项目编辑后生成的Z32HUA.bin文件,目录是“exp2\LED闪烁\bin”;
10.下载成功后关闭-打开电源开关,即可看到LED灯L2闪烁的实验现象。
代码分析:
1.首先是系统初始化:SystemInit ();
2.设置 GPIO0 状态为上拉输出;
GPIO_PuPdSel(0,0); // 设置 GPIO0 为上拉 GPIO_InOutSet(0,0); // //设置 GPIO0为输出
3。为代码的关键,也就是先进入while循环,然后程序写出led灯的闪烁时间。
while(1) { delay(100); GPIO_SetVal(0,0); // 输出低电平,点亮 LEDLED delay(100); GPIO_SetVal(0,1); // 输出高电平,熄灭 LEDLED }
此外再附加配置芯片的截图:
任务三
0. 注意不经老师允许不准烧写自己修改的代码1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.0”完成UART发送与中断接收实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
3. 实验报告中分析代码
步骤分析:
1.与任务二类似,不同的是要打开“exp2\UART发送与中断接收”目录下的Z32HUA.uvproj工程文件并编译;将生成的.bin文件下载到实验箱;2.除了要用USB公对公线连接电脑和实验箱,还需要用9针串口线将电脑与Z32部分连接;
3.打开“exp2\软件资料\串口调试助手”目录下的“sscom42.exe”即串口助手,完成相关设定后关闭再打开实验箱Z32部分的电源开关;
代码分析
实验三的代码比较多。1.先从 PC 端串口调试助手发送数据至 Z32 ,Z32 再经串口 发送给 PC 机;
void UART_IrqService(void) { //*****your code*****/ UARTCR &= ~TRS_EN; { do { shuju[uart_rx_num] = UARTDR; if(shuju[uart_rx_num]=='\r'||shuju[uart_rx_num]=='\n') { shuju_lens = uart_rx_num; uart_rx_num=0; uart_rx_end=1; } else uart_rx_num++; } while(FIFO_NE & UARTISR); } UARTCR |= TRS_EN; }
2.void UART_Init(void) 是串口初始化函数,,实现配 置串口时钟、使能中断;
void UART_Init(void) { IOM->CRA |= (1<<0); //使能Uart接口 SCU->MCGR2 |= (1<<3); //使能Uart总线时钟 /******配置Uart时钟(建议使用外部晶振)******/ SCU->SCFGOR |= (1<<6);//使用外部晶振 SCU->UARTCLKCR |= (1<<7);//使用外部时钟 // SCU->UARTCLKCR &= ~(1<<7);//使用默认OSC时钟 UART_BrpSet(0); //设置波特率为默认115200 UARTISR = 0xFF; //状态寄存器全部清除 UARTCR |= FLUSH; //清除接收fifo UARTCR = 0; //偶校验 /******配置中断使能******/ UARTIER |= FIFO_NE; // UARTIER |= FIFO_HF; // UARTIER |= FIFO_FU; // UARTIER |= FIFO_OV; // UARTIER |= TXEND; // UARTIER |= TRE; ModuleIrqRegister(Uart_Exception, UART_IrqService); //挂载终端号 }
此外还有专门发送函数的部分,以及发送字符串的部分。
任务四
0. 网上搜集国密算法标准SM1,SM2,SM3,SM41. 网上找一下相应的代码和标准测试代码,在Ubuntu中分别用gcc和gcc-arm编译
2. 四个算法的用途?
3. 《密码学》课程中分别有哪些对应的算法?
4. 提交2,3两个问题的答案
5. 提交在Ubuntu中运行国密算法测试程序的截图
步骤分析:
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。
密码学中对应的算法有ECC.MD5以及DES。
代码运行截图如下:
任务五
0. 注意不经老师允许不准烧写自己修改的代码1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.16”完成SM1加密实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
3. 实验报告中分析代码
步骤分析:
1.与任务三类似,不同的是要打开“exp2\SM1”目录下的Z32HUA.uvproj工程文件并编译;将生成的.bin文件下载到实验箱;2.同样需要用9针串口线将电脑与Z32部分连接;
3.打开“exp2\软件资料\串口调试助手”目录下的“sscom42.exe”即串口助手,完成相关设定后关闭再打开实验箱Z32部分的电源开关;
4.按照电子屏的提示插入IC卡;
5.插入正确的卡后显示相应信息,然后按A校验密码;
6.显示校验成功后,先按1选择加密
7.按A确认加密,在串口助手上可以观察到明文、密钥,加密完成后还会看到密文;
8.按A将密文存入IC卡;串口助手上显示已经写入IC卡
9.按2 选择解密;
10.按A读取IC卡中的密文信息和密钥信息;串口助手上显示读取的密文信息;
11.读取成功后,先按1选择用正确密钥加密;串口助手上显示使用的正确密钥;
12.按A确认解密,串口助手上显示解密后的信息,与正确的明文相同;
13.按A返回,再经过相同的过程,选择用错误密钥解密;
14.最终在串口助手上可以观察到经过错误密钥解密的错误明文。
下图为插入SD卡正常:
还有破解成功的截图:
代码分析:
主函数代码的执行过程为:系统初始化,中断设置使能所有;
2.判断按键,返回 boot 条件,确认是否进行程序下载;
3.初始化 IC 卡插入检测端口 GPIO6 ;
第一段程序主要是判断是否校验成功:
lcd_pos(2,0);//定位第三行
if(SLE4428_PassWord(0xFF,0xFF)==1)
lcd_string("校验成功!");
else
{lcd_string("校验失败!"); return 0;}
lcd_pos(3,0);//定位第四行 switch(SLE4428_ReadByte(0x03fd)) //查看剩余密码验证机会 { case 0xff: lcd_string("剩余机会 8次");break; case 0x7f: lcd_string("剩余机会 7次");break; case 0x3f: lcd_string("剩余机会 6次");break; case 0x1f: lcd_string("剩余机会 5次");break; case 0x0f: lcd_string("剩余机会 4次");break; case 0x07: lcd_string("剩余机会 3次");break; case 0x03: lcd_string("剩余机会 2次");break; case 0x01: lcd_string("剩余机会 1次");break; case 0x00: lcd_string("剩余机会 0次");break; default: break; } while(KEY_ReadValue()!='A'); //等待A键按下
第二段程序就是顺成第一段程序:
显示加解密:
lcd_wcmd(0x01);//清屏
lcd_pos(0,0);//定位第一行
lcd_string("加密解密实验");
lcd_pos(1,0);//定位第二行
lcd_string("1.加密");
lcd_pos(2,0);//定位第三行
lcd_string("2.解密");
do { C=KEY_ReadValue(); } while(C!='1'&&C!='2'); //等待1或2键按下 lcd_wcmd(0x01);//清屏 if(C=='1') goto jiami; else if(C=='2') goto jiemi; else ;
此外还有代码的加解密部分。
任务六
实验结束后,把实验室原来的网线插回,否则以后做实验的同学无法开机只有用实验室机器的小组做
提交你们小组使用的计算机的编号照片
提交插好网线的照片
提交盖好后盖的照片
遇到的问题
无感悟与体会
这次的实验内容看似特别难,但是我们只有平心静气的按照知道书的步骤一步一步的往下走,那么我们是不会出任何差错的。而且这次的实验与密码学的联系特别大,也就是说,在实验的过程中,我们还可以复习密码学的知识,可以说得上是一举两得。相关文章推荐
- 2017-2018-1 20155311 20155305实验二 固件程序设计
- 2017-2018-1 20155222 201552228 实验二 固件程序设计
- 2017-2018-1 20155209 20155230 实验二 固件程序设计
- 2017-2018-1 20155209 20155230 实验二 固件程序设计
- 2017-2018-1 20155218 20155205 实验二 固件程序设计
- 2017-2018-1 20155321 20155330 实验二 固件程序设计
- 2017-2018-1 20155306 20155315《信息安全系统设计基础》实验二 固件程序设计
- 2017-2018-1 20155320 20155326 实验二 固件程序设计
- 2017-2018-1 20155220 20155309 20155317 实验一 开发环境的熟悉
- 2017-2018-1 20155227 20155318 实验二 固件程序设计
- 2017-2018-1 20155203 20155204 实验二 固件程序设计
- 2017-2018-1 20155321 20155330 实验二 固件程序设计
- 2017-2018-1 20155331 20155336 实验二 固件程序设计
- 2017-2018-1 20155333 20155328 实验二 固件程序设计
- 2017-2018-1 20155217 20155236实验二 固件程序设计
- 2017-2018-1 20155307 20155338 20155335 实验二 固件程序设计
- 2017-2018-1 20155225 20155229 实验二 固件程序设计
- 2017-2018-1 20155220 20155309 20155317 实验一 开发环境的熟悉