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

QQ登錄

只需一步,快速開(kāi)始

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

程序自校驗(yàn)設(shè)計(jì)思路

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71922 發(fā)表于 2015-1-11 00:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這個(gè)設(shè)計(jì)思路是小凡經(jīng)過(guò)“千辛萬(wàn)苦、苦口婆心”的解釋,我才明白的 ,覺(jué)得真的很不錯(cuò)!我總結(jié)了一下,寫(xiě)下來(lái)

首先在程序里面預(yù)置一個(gè)放 MD5 的數(shù)組變量 初始化為 16 個(gè) A
編譯好后,把那個(gè)程序 邏輯上分為三份 :
第一份為 那 16 個(gè) A 前面的數(shù)據(jù)
第二份為 那 16 個(gè) A
第三份為 16 個(gè) A 后面   的數(shù)據(jù)
MD5 計(jì)算 第一份 和 第三份的 md5 使其相加 再進(jìn)行一次 md5 加密 得到 一個(gè)新的L md5
將這個(gè)新的L md5 寫(xiě)入到第二份中 ~~ 也就是填充那 16 個(gè) A ,供程序自判斷
在程序執(zhí)行前 我們先將 md5 (第一份 md5 + 第二份 md5 = 新的L md5  C32 修改 那 16 個(gè) A  為真正的L md5
程序執(zhí)行流程:
1,  根據(jù) 16 個(gè) A md5 )計(jì)算第一份的偏移地址
  16 個(gè) Amd5 )為第二份偏移地址( 16 個(gè)字節(jié))   // 這份數(shù)據(jù)最后由我們外部修改為真正的Lmd5
3,  根據(jù) 16 個(gè) Amd5 )計(jì)算第三份的便宜地址
4,  讀取 第一份數(shù)據(jù) 計(jì)算其 Amd5
5,  讀取第三分?jǐn)?shù)據(jù) 計(jì)算其 Cmd5
6,  將第一份 Amd5 與 第三份 Cmd5 相加 后再次進(jìn)行 MD5 加密 得到新的 Lmd5
7,  讀取第二份數(shù)據(jù)
8,  將 Lmd5 與 第二份數(shù)據(jù)進(jìn)行比較 相等則程序完整未被修改 不相等則認(rèn)為程序被修改過(guò)
這樣分的好處就是,我們從外部只修改第二份數(shù)據(jù) md5 因?yàn)槲覀儾](méi)有計(jì)算這份數(shù)據(jù)的 MD5 所以,它怎么修改 都不會(huì)影響到 第一、三份的加密后的 Lmd5   當(dāng)然,因?yàn)槲覀兪孪炔⒉恢繪md5 是多少,所以預(yù)置的在第二份數(shù)據(jù)中的 md5 可以隨便寫(xiě),只是為了方便用 C32 定位和程序自身定位,然后我們將計(jì)算 得到的 Lmd5 C32 寫(xiě)入覆蓋到第二份數(shù)據(jù)中(也就是那十六個(gè)A)   這樣,就能和程序自己計(jì)算的Lmd5 與第二份數(shù)據(jù)相等。程序任意字節(jié)被修改, Lmd5 就發(fā)生會(huì)變化,那么它們就不會(huì)相等。達(dá)到修改任意一字節(jié)都能檢測(cè)出來(lái)!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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