請問假如有解釋器的語言是否就無法完全加密?
只有像C語言直接編譯2進制才能避免被解密回明碼?
就算你用C編譯的程式,也能被反組譯回來,大不了用debug看asm,真要是遇到高手,在他們面前,沒有無法反組譯的程式
但,你如果是把比較重要的商業邏輯寫成WebAPI或SOAP或socket或....放在遠端(網頁)呼叫,使用者只會看到傳出跟傳回值,看不到你的程式的任何演算過程....
這是目前比較普遍的作法,如果你真的在意你的程式,不想被人反組譯看穿你的演算法或加密過程,就把程式跟商業邏輯分開寫..
簡單解釋,你如果有在玩線上遊戲的話,你可以用力去反組譯裝在你電腦上的遊戲程式,試著去修改你的血、法力、敏捷...十之八九你會改不出什麼花樣,因為在你的電腦的程式,只負責把伺服器上的資料抓回來顯示,再把你用鍵盤滑鼠或觸控的所有動作,回傳至伺服器,一切邏輯運算、攻擊、防禦、對手的狀況,全都是在伺服器上計算,你在自己的電腦上基本是無法反推原始碼,無法修改記憶體裡的數值,無法讓手一秒點5下,用程式下達一秒點100下...
除非,遊戲設計者用了太差的模式設計,讓這些運算的事都在玩家的電腦上做,那外掛或魔改就永遠斷不了
樓主問的是解釋器,一般解釋器在設計階段中最基本的解釋器就是整個IDE環境,至於組譯與反組譯,那已經是設計完成之後才要做的動作
老實說,樓主把兩件事扯再一起了,設計階段你不用IDE解釋你的程式碼,難道有人會直接寫加密之後的程式碼嘛,我想除非天才,我認識的人還沒看過有這種能力的人
那原始碼跟二進制執行碼就真不該混為一談,編譯器跟直譯器器搞混,結果就是樓主的發文
但話說就算把直譯語言編譯成執行檔,也還是有辦法反組譯,只是非明碼...(對asm外行的人而言就是暗碼,瞎碼)
我也只能 哈哈哈
使用直譯器的語言,要列出來還真是多不勝數,以現在最常見的就是python、批次檔、powershell,如果真要算,OFFICE的VBA、Linux的bash/sh、網頁的javascript...........統統都要算上直譯語言一筆
現在那麼提倡開放,但也不意外的會有很多人會在意自己的企業機密,或是不想讓加密過程外洩,那...就直接把不重要的放前端,重要的放後端吧
PHP、SQL、ASP.NET(無預先編譯成DLL)
都算是直譯成員
至於python該不該算,應該會有人有意見,因為在第一次執行時會編譯成pyc檔,之後再執行就不會多龜幾秒,pyc可以當做二進制的執行檔,但......py還在,除非打包加殼成無法修改的exe,直譯和編譯,早已模糊
基本上除了組合語言之外的高階語言都有其直譯器或解釋器這個腳色
至於編譯器也是各個高階語言一定會有的,越受歡迎的語言,解釋器越多種,也有不同的功能協助加速設計,至於編譯器,到了最後的發行階段也是會有很多不同功能來包裝的編譯器,你用預設的最多就是加一層殼而已,能夠開殼的反組譯器很多,越受歡迎的越多方法可以處理,樓主大概真的搞不清楚解釋跟組譯的作用吧
樓主看任何網站,只要按下CTRL + U或F12,就能把設計者的東西看光光,就算有加密,也只是騙小孩用的把戲,只需要安裝反加密(混肴冗餘碼移除)工具(VSCODE裡有),就能把加密過的javascript給美化成人看的懂的原始碼(只是少了註解而已),SO?
瀏覽器就可以看成是javascript的直譯器咩 .. 因為不需經過事先編譯
有解釋器的語言是否就無法完全加密?
是
一般會用混淆(obfuscate)取代加密
C語言直接編譯2進制才能避免被解密回名碼?
否
2進制仍可以反編譯回原始碼(範例)
不過其實不用想太多
因為
就算加密的2進制還是有人看得懂
完全不加密的明碼也有人看不懂