由於ESP Device 容易從uart中拉出原始碼, 如果用標準的程序是很容易做到逆向的. 難道就無法跳脫出只能當prototype的命運嗎?
PS: 據傳圓剛的智慧插座就是使用ESP裝置去做成商品的, 所以要商品化是一定有辦法達成
筆者嘗試過幾種作法:
類型一
類型二 修改FW對於main.py的存取方式
#if MICROPY_MODULE_FROZEN
pyexec_frozen_module("_boot.py");
pyexec_file("boot.py");
if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL) {
pyexec_file("main.py");
}
#endif
[秘訣]
(1) 可由上面的程式碼中看到, main.py的讀取方式是從user space 中讀取, 如果要藏起來的話就是要改成使用下面的方式, 意思是micropython 在讀取main.py 這個程式時會從F/W的內建模組目錄中直接讀取, 而非從使用者空間讀取, 這樣就可以達到保護跟隱藏程式碼的目的
pyexec_frozen_module("main.py")
(2) 檔案要放在**/opt/micropython/ports/esp8266/modules** 這個目錄中, 這樣在編譯好後就會以內建的模組存在於FW中. 除此之外, 自己寫的其他模組也可以塞在裏頭
[範例] 增加一個自定義的模組檔進入原始碼中的內建模組, 重新編譯F/W Image 後驗證是否有加入成功
cp uping.py /opt/micropython/ports/esp8266/modules
2. 重新編譯F/W Image
make clean
make
import uping
4. 驗證成功, 可以被成功匯入