upx的功能有兩種描述。一種叫做給程序加殼,另一種叫壓縮程序。其實這兩種表述都是正確的,只是從不同的角度對upx的
描述。upx的工作原理其實是這樣的:首先將程序壓縮。所謂的壓縮包括兩方面,一方面在程序的開頭或者其他合適的地方插入一
段代碼,另一方面是將程序的其他地方做壓縮。壓縮也可以叫做加密,因為壓縮后的程序比較難看懂,主要是和原來的代碼有很大
的不同。最大的表現也就是他的主要作用就是程序本身變小了。變小之后的程序在傳輸方面有很大的優勢。其次就是在程序執行時
,實時的對程序解壓縮。解壓縮功能是在第一步時插入的代碼完成的功能。聯起來 就是:upx可以完成代碼的壓縮和實時解壓執行
。且不會影響程序的執行效率。upx和普通的壓縮,解壓不同點就算在於upx是實時解壓縮的。實時解壓的原理可以使用一下圖形表
示:
1==>2==>3==>4==>5==>6
假設1是upx插入的代碼,2,3,4是壓縮后的代碼。5,6是隨便的什么東西。
程序從1開始執行。而1的功能是將2,3,4解壓縮為7,8,9。7,8,9就是2,3,4在壓縮之前的形式。
連起來就是:1==>7==>8==>9==>5==>6
最初代碼的形式就應該是:7==>8==>9==>5==>6
用upx壓縮之后形式為:1==>2==>3==>4==>5==>6
執行時的形式變為:1==>7==>8==>9==>5==>6
類似的技術還有很多。這樣的技術較多的應用於:木馬和病毒躲避殺毒軟件時,發布的程序防止被反編譯或破解時。upx是一
種典型的加殼程序或者壓縮程序。因此已經有非常成熟的去殼程序或者解壓縮程序。同時,很多的殺毒軟件 也可以識別出加有upx
殼的病毒和木馬。而一些軟件生產場上為了防止被破解所加的殼也同時被輕易的破解。在這樣 的情況下很多人想出了產生自己的
加殼程序的想法。應此很多人都通過改編一些成熟的加殼程序來產生自己的加殼程序。其實改編upx也是很簡單的。因為upx的源代
碼是公開的,所以可以下載它的源代碼來瞧瞧。upx可以壓縮很多種類型 的可執行文件。因此如果自己只是想要壓縮exe程序,則
只需要閱讀與壓縮exe文件相關的內容。這些代碼是很少的。
改寫upx一般需要注意一下幾點:
1、保證修改后的加殼程序不會產生upx產生的特征碼。有很多軟件可以通過這些特征碼識別出程序是經過upx加殼的。
2、保證加殼之后,程序仍然可以順利執行。
3、在一定程度上保證效率不會下降太多。
轉載自:http://blog.csdn.net/zacklin/article/details/7419001