作爲我項目的一部分,我必須插入部分代碼(稱爲校驗和守衛)來保護某些功能。這個過程必須是自動化的,即我需要編寫一個腳本來將這些警衛插入到程序集中。我有我的警衛模板,我不知道如何繼續。自動插入校驗和守衛
如何編寫一個shell腳本來將代碼插入從C源文件生成的程序集文件中?
編輯:
這就是我想實現的文件。 cerias.purdue.edu/assets/pdf/bibtex_archive/2001-49.pdf 作者已經提到他們已經修改了插入守衛的二進制文件,但看起來很難。所以,我想修改彙編代碼。
這裏是一個後衛的模板:
guard:
add ebp, -checksum
mov eax, client_addr
for:
cmp eax, client_end
jg end
mov ebx, dword[eax]
add ebp, ebx
add eax, 4
jmp for
end:
其中client_addr和client_end標記的開始和代碼的結束,分別保護。
我意識到我對這篇論文的理解並不完整,關於各種問題我還不清楚,但我想弄明白。
如何將各種功能(保護)作爲輸入到shell腳本中?
- 我可以給函數的名稱作爲一個字符串。
- 我可以給出函數的起始和結束地址(使用gdb找到)。
但插入校驗碼後,地址會改變,所以我認爲給這個名字會是一個更好的主意。 是這樣嗎?
我是SO的新手,因此仍需要學習很多關於發佈問題的正確方法。 但謝謝你的幫助和指導。
如果用_checksum guard_表示保護函數免受堆棧溢出攻擊,那麼通常稱爲_stack canary_。有一個實現示例(對於C)[這裏](http://security.stackexchange.com/questions/37547/how-to-implement-canaries-to-prevent-buffer-overflows)。 –
你描述了一個任務,你沒有問一個問題。你需要回到給你這個任務的任何人。並挑戰他,正如所說的那樣,這種特點對管理者來說聽起來是合理的。不是這樣。問「你的意思是什麼」是你的工作,而不是我們的工作。 –
你的意思是像gcc插入時使用'-fstack-protector-strong'?這只是寫和讀一個哨兵價值;它不檢查任何東西。你究竟是什麼校驗/ CRC校驗/哈希? –