iT邦幫忙

0

請問假如有解釋器的語言是否就無法完全加密? 只有像C語言直接編譯2進制才能避免被解密回名碼?

  • 分享至 

  • xImage

請問假如有解釋器的語言是否就無法完全加密?
只有像C語言直接編譯2進制才能避免被解密回明碼?

看更多先前的討論...收起先前的討論...
樓主好似誤解了解釋器的功用
不要解釋器,那就是直接使用組合語言,基本上組合語言都是直接呼叫機器參數直接運算處哩,只要高階語言沒有看過沒有解釋器的語言,最基本的解釋器就是整個IDE環境,解釋器幫你把你的程式碼解釋給機器看,請注意,不是給人看的是給機器看的,所以我上面說,樓主是不是誤解了解釋器的作用了
發大,其實我不知道他說的「解釋器」是啥鬼東西就是了。
我覺得因該要先請他說明一下何謂「解釋器」才行了。
ccutmis iT邦高手 2 級 ‧ 2021-01-27 16:19:33 檢舉
也許他說的是直譯器  interpreter
因為他有提到C編譯成二進制....所以我就理解成
解釋器 = 直譯器 =interpreter (英漢字典裡就叫解釋器,不知是不是大陸用語或新馬那裡的用語)
編譯是 Compiled 啊,編譯完成的程式碼就不需要直譯器就能夠對機器進行作用
一般的高階語言設計,這一段的章節大概老師只會用最多五分鐘講過,然後也不考
很多人其實也不太懂直譯編譯的作用
javascript也無需編譯就全世界通用了啊....

但真的涉及到公司機密或加密的東西,就分成前後端來做,別對編譯想太多,編譯器....只是多一道畫滿了妖魔鬼怪的牆,把小盆友嚇跑用的
javascript 可以跑是因為瀏覽器吧,我的 SCO UNIX 上面的 NETSCAPE 可是跑不動 javascript,只要開有 javascript的網站就一整個空白,甚至只吃 HTML 1.0 什麼 5.0的標籤就一堆跑板或是亂碼
瀏覽器使用的webkit/gecko/chromium/或是ie的trident,就能算是一個很多功能集合於一身的直譯器,HTML/javascript/css.......都無需在設計階段事先編譯成機械碼,而是由瀏覽器依照自身設備來直譯成IL在適當的設備上顯示及作用....
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
japhenchen
iT邦超人 1 級 ‧ 2021-01-27 15:24:50
最佳解答

就算你用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的直譯器咩 .. 因為不需經過事先編譯

2
海綿寶寶
iT邦大神 1 級 ‧ 2021-01-27 16:36:35

有解釋器的語言是否就無法完全加密?


一般會用混淆(obfuscate)取代加密

C語言直接編譯2進制才能避免被解密回名碼?


2進制仍可以反編譯回原始碼(範例)

不過其實不用想太多
因為
就算加密的2進制還是有人看得懂
完全不加密的明碼也有人看不懂
/images/emoticon/emoticon33.gif

0
打雜工
iT邦研究生 1 級 ‧ 2021-01-28 17:44:01

什麼程式碼這麼值錢嗎?涉及絕對機密?

我要發表回答

立即登入回答