C/C++ 通過CRC32實現反破解


我們可以通過使用CRC32算法計算出程序的CRC字節,並將其寫入到PE文件的空缺位置,這樣當程序再次運行時,來檢測這個標志,是否與計算出來的標志一致,來決定是否運行程序,一旦程序被打補丁,其crc32值就會發生變化,一旦發生變化,程序就廢了,繞過的方式則是,1.動態打補丁,2.找到crc32算法位置將跳轉nop掉,3.直接手動計算出crc32並覆蓋到原始程序的crc算法位置。

對文件的CRC32檢測

PE頭,前面有非常多的無效空間,可以供我們使用,crc32地址應該反寫。

另一種通過使用 MapFileAndCheckSum 實現的反破解,先來修改一下C++編譯器配置,使其能夠支持

C/C++ -> 常規 -> 調試信息格式 --> 程序數據庫

連接器 -> 常規 -> 啟用增量鏈接 -> 否

連接器-> 高級 ->設置校驗和 ->是

主程序檢測程序如下。

對磁盤的CRC32檢測

對磁盤完整性檢測只能防止文件被修改,但無法防止內存補丁,下面的代碼將可以檢測內存變化,如果內存被打補丁,則會退出執行。

原理是,定位到.text節首地址,然后計算該節的CRC32值,並存入全局變量,然后開一個線程進行循環檢測,一旦發生變化,則立即讓程序報廢。部分代碼片段。

上方代碼是保護了整個程序,在實際應用中,有時我們只需要保護其中一個片段代碼就好,這樣可以提高效率,所有我們對上面代碼稍作修改即可實現針對特定片段的內存校驗.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM