GPIO 发表于 2022-7-23 21:20:37

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


#include "reg51.h"
#include "intrins.h"
#include "absacc.h"

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

sbit led = P3 ^ 2;                //校验通过 (低电平点亮) 否则熄灭
u32 checksum() {                //取校验和 返回:0x000000~0xFFFFFF
        u32 sum = 0;
        u16 pc;
        for (pc = 0; pc < ROM_SIZE; pc++) {
                sum += CBYTE;
        }
        return sum & 0xFFFFFF;
}


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

        while (1);
}
页: [1]
查看完整版本: C51/STC 单片机 实现计算自身STC-ISP提供的 代码长度,校验和是否正确? 防止程序被篡改