2012-03-14 100 views
1

在Mac OS上,我看到我的應用程序中的所有內容都可以讀取(mxml和作爲文件)。 事實上,通過應用程序的右鍵菜單,您可以看到所有應用程序內容以及所有文件。 因此,一家公司分銷這樣的空氣應用是非常危險的。 是否存在保護這些文件的解決方案。保護空氣應用程序內容

感謝

+0

如果您已編譯爲SWF文件,則無法查看源文件(MXML和AS),而無法反編譯SWF。 – 2012-03-14 14:30:14

回答

1

雖然有反編譯器的負載可以讀取所有的代碼。有一個人提出了加密解決方案,可能值得一試。 (這是桌面AIR應用程序)

看一看這個帖子:http://forums.adobe.com/message/3510525#3510525

引用文本(在頁面的情況下被擦除)

我用會讓你的方法encrpyt大部分的源代碼使用 是每臺計算機都獨有的密鑰。我的 軟件的初始下載是一個簡單的空氣應用程序,不包含實際的程序。 它更像是一個外殼,首先重新獲取客戶端的地址列表,並且用戶輸入的激活碼是在購買的時間 處創建的。這被髮送到服務器並被記錄。激活碼 被保存到文件客戶端。在服務器上,使用mac地址和 激活密鑰來創建加密密鑰。然後使用該密鑰對大部分 程序代碼進行加密,然後將其分成 部分併發送回客戶端。客戶端將這些部分放在一起 並保存加密文件。在運行時,shell會查找地址列表和激活密鑰,然後使用與服務器 相同的方法獲取加密密鑰並解密程序文件。運行簡單的 檢查以確保它已加載。對於encyption,我發現了一個aes方法, 在php和javascript中工作。

接下來,我使用此代碼加載程序

var loader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds); 
loader.cacheResponse=false; 
loader.placeLoadStringContentInApplicationSandbox=true; 
loader.loadString(page); 

這種方法使得它很難 複製到另一臺計算機,雖然,因爲我寫的,我知道有一些 weeknesses在安全,但讓我更難我obv。代碼爲 。它至少大部分免受盜版。但是,我發現有這個問題 。首先,我使用networkInfo獲取mac地址列表 ,但在測試Windows XP計算機上失敗。 當無線關閉時,它不返回MAC。我不能 在VISTA或7中重新創建它。不知道它是否會發生。在mac電腦上測試不是 。解決這個問題(至少對於Windows而言)。我 寫了一個簡單的bat文件,獲取MAC列表,然後將其轉換爲 包含的exe文件。這確實會強制您創建本地 安裝程序。調用EXE這個

var nativeProcessStartupInfo = new air.NativeProcessStartupInfo(); 
var file = air.File.applicationDirectory.resolvePath("findmac.exe"); 
nativeProcessStartupInfo.executable = file; 
process = new air.NativeProcess(); 
process.start(nativeProcessStartupInfo); 
process.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
process.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, onErrorData); 
process.addEventListener(air.NativeProcessExitEvent.EXIT, onExit); 
process.addEventListener(air.IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); 
process.addEventListener(air.IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); 

使用的Array.push把名單一起在onOutputData事件和 繼續上的OnExit事件中使用findmac。exe將返回 每次(我知道)相同的信息當心認爲使用本地安裝將破壞標準的應用程序更新過程,所以你將不得不自己編寫自己的 。我的更新按照與上述相同的方式處理 。這是.bat文件的內容來獲取MAC列表

@Echo off 
SETLOCAL SET MAC = SET Media = Connected 
FOR /F "Tokens=1-2 Delims=:" %%a in ('ipconfig /all^| FIND "Physical Address"') do @echo %%b ENDLOCAL 

使用這種方法使得它通過簡單的方法 你之前在嘗試實施。在運行時如果沒有激活碼從 服務器而不是完整版本試用我版本。

1

無法保護100%的代碼。畢竟,如果計算機可以運行它,它可以被反編譯,而不管語言如何。但是,你可以讓它變得更加困難。

一種方法是加密swf,如另一個答案中所述。但所有「攻擊者」需要做的就是找到密鑰,然後他們可以解密所有的swfs。

另一種方法是使用混淆器。混淆器不依賴於加密,也不防止反編譯,它們只是使得難以理解被反編譯的內容。

例如,如果您有一個名爲saveInvoice()的方法,混淆器會將它重命名爲aa1()或類似的東西,所以它會使它猜測該函數的作用。它基本上變成了spaguetti代碼。

您可以使用反編譯器來查看可以從SWF文件(很多)中獲得的內容,然後使用混淆器來查看它們是否符合您的要求。

其中一個例子是http://www.kindi.com/,我不贊同順便說一句,它只是顯示在谷歌很快。