找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3390|回复: 0
收起左侧

程序自校验设计思路

[复制链接]
ID:71922 发表于 2015-1-11 00:30 | 显示全部楼层 |阅读模式
这个设计思路是小凡经过“千辛万苦、苦口婆心”的解释,我才明白的 ,觉得真的很不错!我总结了一下,写下来

首先在程序里面预置一个放 MD5 的数组变量 初始化为 16A
编译好后,把那个程序 逻辑上分为三份 :
第一份为 那 16A 前面的数据
第二份为 那 16A
第三份为 16A 后面   的数据
MD5 计算 第一份 和 第三份的 md5 使其相加 再进行一次 md5 加密 得到 一个新的L md5
将这个新的L md5 写入到第二份中 ~~ 也就是填充那 16A ,供程序自判断
在程序执行前 我们先将 md5 (第一份 md5 + 第二份 md5 = 新的L md5  C32 修改 那 16A  为真正的L md5
程序执行流程:
1,  根据 16A md5 )计算第一份的偏移地址
  16 Amd5 )为第二份偏移地址( 16 个字节)   // 这份数据最后由我们外部修改为真正的Lmd5
3,  根据 16Amd5 )计算第三份的便宜地址
4,  读取 第一份数据 计算其 Amd5
5,  读取第三分数据 计算其 Cmd5
6,  将第一份 Amd5 与 第三份 Cmd5 相加 后再次进行 MD5 加密 得到新的 Lmd5
7,  读取第二份数据
8,  将 Lmd5 与 第二份数据进行比较 相等则程序完整未被修改 不相等则认为程序被修改过
这样分的好处就是,我们从外部只修改第二份数据 md5 因为我们并没有计算这份数据的 MD5 所以,它怎么修改 都不会影响到 第一、三份的加密后的 Lmd5   当然,因为我们事先并不知道Lmd5 是多少,所以预置的在第二份数据中的 md5 可以随便写,只是为了方便用 C32 定位和程序自身定位,然后我们将计算 得到的 Lmd5 C32 写入覆盖到第二份数据中(也就是那十六个A)   这样,就能和程序自己计算的Lmd5 与第二份数据相等。程序任意字节被修改, Lmd5 就发生会变化,那么它们就不会相等。达到修改任意一字节都能检测出来!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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