设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 581|回复: 0
收起左侧

C51/STC 单片机 实现计算自身STC-ISP提供的 代码长度,校验和是否正确? 防止程序被篡改

[复制链接]
发表于 2022-7-23 21:20:37 | 显示全部楼层 |阅读模式
1.png
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #include "absacc.h"

  4. #define u8 unsigned char
  5. #define u16 unsigned int
  6. #define u32 unsigned long
  7. //修改程序需要修改以下3个常量
  8. #define ROM_SIZE        0x008B                        //STC-ISP 代码长度
  9. #define CHECKSUM        0x004800                //STC-ISP 校验和
  10. #define CHECK_BYTE        0x9B                        //调整1字节 使校验和计算正确

  11. sbit led = P3 ^ 2;                //校验通过 (低电平点亮) 否则熄灭
  12. u32 checksum() {                //取校验和 返回:0x000000~0xFFFFFF
  13.         u32 sum = 0;
  14.         u16 pc;
  15.         for (pc = 0; pc < ROM_SIZE; pc++) {
  16.                 sum += CBYTE[pc];
  17.         }
  18.         return sum & 0xFFFFFF;
  19. }


  20. void main() {                //只要改动任意一处就无法通过校验
  21.         u32 sum = checksum();
  22.         u8 check_byte = CHECK_BYTE;
  23.         if (sum == CHECKSUM) {
  24.                 led = 0;
  25.         } else {
  26.                 led = 1;
  27.         }

  28.         while (1);
  29. }
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-20 04:58 , Processed in 0.550032 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表