代碼難讀化

Dr. Greywolf討論貢獻喺2023年6月13號 (二) 04:06嘅修訂。

代碼難讀化doi6 maa5 naan4 duk6 faa3obfuscation)係指[1]

將一段原始碼或者機械碼特登整到對電腦嚟講難讀

嘅工作。

概論

睇埋:原始碼可讀

代碼難讀化係軟件工程同相關工作上成日要做嘅一段工序。想像家陣有班軟件工程師,佢哋寫好咗隻新軟件原始碼,而且測試都做好嗮,隻軟件可以出街攞去賣。但喺呢個時候,佢哋又要擔心一樣嘢:啲人有可能會攞佢哋隻軟件嘅原始碼去複製;為咗保障佢哋嘅知識產權,班軟件工程師就會想要有啲方法,防止啲人隨便複雜隻軟件嘅原始碼[2];除此之外,啲原始碼易改,佢哋又要擔心啲正當嘅用家亂咁改啲碼,搞軭隻軟件。

因為呢啲噉嘅緣故,軟件工程師往往會想要做代碼難讀化-攞住隻軟件段原始碼或者(轉化好嘅)機械碼,將段碼執吓佢,令到段碼變到對人類同電腦嚟講難理解。代碼難讀化做好咗之後,佢哋先會畀隻軟件出街。舉個簡單例子,好似下面嘅 C 例子碼噉,就做咗難讀化[3]

int i;main(){for(i=0;i["]<i;++i){--i;}"];
read('-'-'-',i+++"hell\
o,world!\n",'/'/'/'));}read(j,i,p){
write(j/p+p,i---j,i/i);}

而一段比較整齊易讀嘅 C 碼望落比較似係噉嘅:

int i;
  
void write_char(char ch)
{
    printf("%c", ch);
}
  
int main()
{
    for (i = 0; i < 15; i++) {
        write_char("hello, world!\n"[i]);
    }
    return 0;
}

目標

代碼難讀化目的係要達致:

  1. 隱密:令到個程式控制流程難以睇清楚。
  2. 成本:同任何工程學上嘅工作一樣,做嘢嘅人唔淨只要達到目的,用嘅方法仲要有返咁上下低成本,確保件產品可以量產
  3. 複雜度:代碼難讀化往往想令段碼嘅複雜度有咁高得咁高,同時又唔損害隻軟件嘅表現;表現包括「個程式做到佢嘅功能要嘥幾多時間」。
  4. 頑健:一套做難讀化嘅方法,有必要能夠抵抗啲自動化嘅拆解技術。可以睇埋密碼學講到嘅密碼分析

睇埋

  • 最佳化(optimize):做最佳化嘅過程,成日都會搞到段碼變得冇咁易睇;數學上最有效率嘅演算法,往往唔多合乎人腦直覺嘅諗嘢方式。
  • 加密(encryption):密碼學成日用嘅一種技巧;簡化講,加密做嘅嘢係噉-攞住一段符號,將段符號做轉化,轉化會變咗好似語無倫次噉嘅樣,而且淨係得傳符號嗰一方同有權睇串符號嗰一方先至知密匙,知密匙先可以解讀到串符號,最後達致「唔畀任何外人得知串符號講乜」噉嘅效果;視像遊戲製作過程,出嗮名成日會同啲遊戲嘅原始碼做加密[4]
  • 惡意程式(malware):整惡意程式嘅人,好興用代碼難讀化嘅技巧嚟令到自己啲惡意程式避得開防毒軟件嘅探測[5]
  • 複製保護
  • Checksum粵拼cek1 sam1
  • 還原工程

  1. What is code obfuscation?. ASEE.
  2. Balakrishnan, A., & Schulze, C. (2005). Code obfuscation literature survey (PDF). CS701 Construction of compilers, 19, 31.
  3. What is Obfuscation?. GeeksForGeeks.
  4. Karthik, J., Amritha, P. P., & Sethumadhavan, M. (2020, July). Video Game DRM: Analysis and Paradigm Solution. In 2020 11th International Conference on Computing, Communication and Networking Technologies (ICCCNT) (pp. 1-4). IEEE.
  5. You, I., & Yim, K. (2010, November). Malware obfuscation techniques: A brief survey. In 2010 International conference on broadband, wireless computing, communication and applications (pp. 297-300). IEEE.