<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          程序員如何寫更安全的代碼?

          共 1324字,需瀏覽 3分鐘

           ·

          2021-03-24 14:00

          點擊上方藍字關注小道安全



          技術背景


          作為程序開發(fā)人員,我們害怕,聽到開發(fā)的代碼,被測試出bug;我們更害怕,聽到我們所開發(fā)出來的產品上線了,被新手安全研究員給反匯編逆向破解,代碼功能直接被人給盜取了。下面根據我自己的一些項目經驗,跟大家分享兩點如何能開發(fā)出相對安全的代碼。以下方案不局限于任何語言代碼開發(fā),是一個相對通用的安全編碼方案。



          字符串的安全方案


          直接使用字符串


          不建議使用理由:直接定義使用字符串,因為字符串是一個常量,所以我們直接能在靜態(tài)反匯編中直接看到字符串的數(shù)據信息。

          下圖可以很清晰的看懂字符串信息”ntdll.dll”,這樣就把代碼的字符串信息直接暴露給大家,這樣大家就可以通過字符串信息做一些對代碼不安全的事情了。


          字符串賦值到數(shù)組使用


          建議使用理由:將字符串寫到數(shù)組里面并進行賦值,使得字符串存放在堆里面,這樣在程序的字符串常量信息就無法直接看到字符串信息,這樣進行靜態(tài)分析(IDA)的時候字符串信息就沒有展示了,這個需要進行動態(tài)分析(ollydbg)才能分析到字符串信息。


          下圖展示的是通過將字符串信息存儲在數(shù)組中的匯編代碼,在實際的匯編代碼中展示的是一串數(shù)據,而不是直接的字符串,這就無法直接看到字符串信息去理解代碼,要想理解這串字符串信息,那么就需要去做動態(tài)調試分析。從而加強代碼的安全性。



          調用系統(tǒng)函數(shù)安全方案



          直接調用系統(tǒng)的函數(shù)


          不建議使用理由:我們在編碼過程中,有很多功能系統(tǒng)都已經有提供的函數(shù)接口,一般情況下我們都是直接調用系統(tǒng)函數(shù)直接進行實現(xiàn)功能。但你知道嗎?你這樣直接調用系統(tǒng)函數(shù)在一些場景下是不安全的,當你的程序在被安全逆向研究的時候,直接可以通過程序的導入表,以及反匯編看到調用的系統(tǒng)函數(shù),這樣我們只要一查下系統(tǒng)函數(shù)的功能,那么就可以知道大概的功能點,還有只要一掛鉤(HOOK技術)上系統(tǒng)的函數(shù),那么你所調用的系統(tǒng)函數(shù)的功能就失效了。

          下圖展示上面函數(shù)通過調用系統(tǒng)函數(shù)實現(xiàn)的匯編代碼。大家可以直接通過展示的系統(tǒng)函數(shù)去分析功能。


          自定義實現(xiàn)函數(shù)再調用函數(shù)

          建議使用理由:我們對于關鍵功能函數(shù)建議還是采用自己去實現(xiàn)函數(shù)功能,再去調用,這樣可以加強程序被直接分析的難度,從而加強程序的安全性。

          下圖是自定義實現(xiàn)函數(shù)調用的匯編代碼,可以從下面匯編代碼看到關鍵函數(shù)是自己實現(xiàn)的,那么要了解該函數(shù)功能就需要進入到函數(shù)內部去做分析。這從而加強了關鍵函數(shù)功能的相對安全



          總結


          最后說明,以上是經過項目實踐總結出來的安全開發(fā)方案。我們在項目開發(fā)中需要寫高內聚,多耦合的代碼,同樣也需要寫一些沒有bug的代碼,更需要寫一些更加相對安全的代碼,更需要寫一些能增加逆向破解者分析程序的難度(注:這里會有專業(yè)人士會說代碼直接加VMP保護,不啥問題都沒有了嗎?不過這這里只進行說明代碼開發(fā)的一點安全思路),這個才是我們程序員的終極目標,希望本文所闡述的思想能夠讓大家有所啟發(fā)。


          End


          更多最新IT資訊,可以關注下面公眾號

          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕日韩电影无码 | 黄色片大女人吃大鸡巴老头子日大逼逼 | 俺也去www00271 | 香蕉视频99 | 丁香婷婷五月天av |