『壹』 反編譯違法嗎
法律分析:不違法。反編譯不違法。反編譯是指計算機軟體反向工程也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。
法律依據:《計算機軟體保護條例》 第三條 本條例下列用語的含義:
(一)計算機程序,是指為了得到某種結果而可以由計算機等具有信息處理能力的裝置執行的代碼化指令序列,或者可以被自動轉換成代碼化指令序列的符號化指令序列或者符號化語句序列。同一計算機程序的源程序和目標程序為同一作品。
(二)文檔,是指用來描述程序的內容、組成、設計、功能規格、開發情況、測試結果及使用方法的文字資料和圖表等,如程序設計說明書、流程圖、用戶手冊等。
(三)軟體開發者,是指實際組織開發、直接進行開發,並對開發完成的軟體承擔責任的法人或者其他組織;或者依靠自己具有的條件獨立完成軟體開發,並對軟體承擔責任的自然人。
(四)軟體著作權人,是指依照本條例的規定,對軟體享有著作權的自然人、法人或者其他組織。
『貳』 重寫全部源代碼實現同樣功能界面的軟體算侵權嗎
這本身是不侵權的,QQ當時就是抄襲ICQ的功能的。
但是,如果該程序裡面用到了一些思想或邏輯,已經被申請了專利,則會構成侵權
『叄』 如何防止程序員反編譯
java從誕生以來,其基因就是開放精神,也正因此,其可以得到廣泛愛好者的支持和奉獻,最終很快發展壯大,以至於有今天之風光!但隨著java的應用領域越來越廣,特別是一些功能要發布到終端用戶手中(如android開發的app),有時候,公司為了商業技術的保密考慮,不希望這裡面的一些核心代碼能夠被人破解(破解之後,甚至可以被簡單改改就發布出去,說嚴重點,就可能會擾亂公司的正常軟體的市場行為),這時候就要求這些java代碼不能夠被反編譯。
這里要先說一下反編譯的現象。因為java一直秉持著開放共享的理念,所以大家也都知道,我們一般共享一個自己寫的jar包時,同時會共享一個對應的source包。但這些依然與反編譯沒有什麼關系,但java的共享理念,不只是建議我們這樣做,而且它自己也在底層上「強迫」我們這么做!在java寫的.java文件後,使用javac編譯成class文件,在編譯的過程,不像C/C++或C#那樣編譯時進行加密或混淆,它是直接對其進行符號化、標記化的編譯處理,於是,也產生了一個逆向工程的問題:可以根據class文件反向解析成原來的java文件!這就是反編譯的由來。
但很多時候,有些公司出於如上述的原因考慮時,真的不希望自己寫的代碼被別人反編譯,尤其是那些收費的app或桌面軟體(甚至還有一些j2ee的wen項目)!這時候,防止反編譯就成了必然!但前面也說過了,因為開放理念的原因,class是可以被反編譯的,那現在有這樣的需求之後,有哪些方式可以做到防止反編譯呢?經過研究java源代碼並進行了一些技術實現(結果發現,以前都有人想到過,所以在對應章節的時候,我會貼出一些寫得比較細的文章,而我就簡單闡述一下,也算偷個懶吧),我總共整理出以下這幾種方式:
代碼混淆
這種方式的做法正如其名,是把代碼打亂,並摻入一些隨機或特殊的字元,讓代碼的可讀性大大降低,「曲線救國」似的達到所謂的加密。其實,其本質就是打亂代碼的順序、將各類符號(如類名、方法名、屬性名)進行隨機或亂命名,使其無意義,讓人讀代碼時很累,進而讓人乍一看,以為這些代碼是加過密的!
由其實現方式上可知,其實現原理只是擾亂正常的代碼可讀性,並不是真正的加密,如果一個人的耐心很好,依然可以理出整個程序在做什麼,更何況,一個應用中,其核心代碼才是人們想去了解的,所以大大縮小了代碼閱讀的范圍!
當然,這種方式的存在,而且還比較流行,其原因在於,基本能防範一些技術人員進行反編譯(比如說我,讓我破解一個混淆的代碼,我寧願自己重寫一個了)!而且其實現較為簡單,對項目的代碼又無開發上的侵入性。目前業界也有較多這類工具,有商用的,也有免費的,目前比較流行的免費的是:proguard(我現象臨時用的就是這個)。
上面說了,這種方式其實並不是真正加密代碼,其實代碼還是能夠被人反編譯(有人可能說,使用proguard中的optimize選項,可以從位元組流層面更改代碼,甚至可以讓JD這些反編譯軟體可以無法得到內容。說得有點道理,但有兩個問題:1、使用optimize對JDK及環境要求較高,容易造成混淆後的代碼無法正常運行;2、這種方式其實還是混淆,JD反編譯有點問題,可以有更強悍的工具,矛盾哲學在哪兒都是存在的^_^)。那如何能做到我的class代碼無法被人反編譯呢?那就需要我們下面的「加密class」!
加密class
在說加密class之前,我們要先了解一些java的基本概念,如:ClassLoader。做java的人已經或者以後會知道,java程序的運行,是類中的邏輯在JVM中運行,而類又是怎麼載入到JVM中的呢(JVM內幕之類的,不在本文中闡述,所以點到為止)?答案是:ClassLoader。JVM在啟動時是如何初始化整個環境的,有哪些ClassLoader及作用是什麼,大家可以自己問度娘,也不在本文中討論。
讓我們從最常見的代碼開始,揭開一下ClassLoader的一點點面紗!看下面的代碼:
Java代碼
publicclassDemo{
publicstaticvoidmain(String[]args){
System.out.println(「helloworld!」);
}
}
上面這段代碼,大家都認識。但我要問的是:如果我們使用javac對其進行編譯,然後使用java使其運行(為什麼不在Eclipse中使用Runas功能呢?因為Eclipse幫我們封閉,從而簡化了太多東西,使我們忽略了太多的底層細節,只有從原始的操作上,我們才能看到本質),那麼,它是怎麼載入到JVM中的?答案是:通過AppClassLoader載入的(相關知識點可以參考:http://hxraid.iteye.com/blog/747625)!如果不相信的話,可以輸出一下System.out.println(Thread.currentThrea().getContextLoader());看看。
那又有一個新的問題產生了:ClassLoader又是怎樣載入class的呢?其實,AppClassLoader繼承自java.lang.ClassLoader類,所以,基本操作都在這個類裡面,讓我們直接看下面這段核心代碼吧:
看到這里,已經沒有必要再往下面看了(再往下就是native方法了,這是一個重大伏筆哦),我們要做的手腳就在這里!
手腳怎麼做呢?很簡單,上面的代碼邏輯告訴我們,ClassLoader只是拿到class文件中的內容byte[],然後交給JVM初始化!於是我們的邏輯就簡單了:只要在交給JVM時是正確的class文件就行了,在這之前是什麼樣子無所謂!所以,我們的加密的整個邏輯就是:
在編譯代碼時(如使用ant或maven),使用插件將代碼進行加密(加密方式自己選),將class文件裡面的內容讀取成byte[],然後進行加密後再寫回到class文件(這時候class文件裡面的內容不是標準的class,無法被反編譯了)
在啟動項目代碼時,指定使用我們自定義的ClassLoader就行了,而自定義的部分,主要就是在這里做解密工作!
如此,搞定!以上的做法比較完整的闡述,可以仔細閱讀一下這篇文章:https://www.ddtsoft.com/#developerworks/cn/java/l-secureclass/文章中的介紹。
通過這個方法貌似可以解決代碼反編譯的問題了!錯!這里有一個巨大的坑!因為我們自定義的ClassLoader是不能加密的,要不然JVM不認識,就全歇菜了!如果我來反編譯,呵呵,我只要反編譯一下這個自定義的ClassLoader,然後把裡面解密後的內容寫到指定的文件中保存下來,再把這個加了邏輯的自定義ClassLoader放回去運行,你猜結果會怎樣?沒錯,你會想死!因為你好不容易想出來的加密演算法,結果人家根本不需要破解,直接就繞過去了!
現在,讓我們總結一下這個方法的優缺點:實現方式簡單有效,同時對代碼幾乎沒有侵入性,不影響正常開發與發布。缺點也很明顯,就是很容易被人破解!
當然啦,關於缺點問題,你也可以這么干:先對所有代碼進行混淆、再進行加密,保證:1、不容易找到我們自定義的那個ClassLoader;2、就算找到了,破解了,代碼可讀性還是很差,讓你看得吐血!(有一篇文章,我覺得寫得不錯,大家可以看一看:http://www.scjgcj.com/#blog/851544)
嗯,我覺得這個方法很好,我自己也差點被這個想法感動了,但是,作為一個嚴謹的程序員,我真的不願意留下一個隱患在這里!所以,我繼續思索!
高級加密class
前面我們說過有個伏筆來著,還記得吧?沒錯,就是那個native!native定義的方法是什麼方法?就是我們傳說中的JNI調用!前面介紹過的有一篇文章中提到過,其實jvm的真實身份並不是java,而是c++寫的jvm.dll(windows版本下),java與dll文件的調用就是通過JNI實現的!於是,我們就可以這樣想:JNI可以調用第三方語言的類庫,那麼,我們可不可以把解密與裝載使用第三方語言寫(如C++,因為它們生成的庫是不好反編譯的),這樣它可以把解密出來的class內容直接調jvm.dll的載入介面進行初始化成class,再返回給我們的ClassLoader?這樣,我們自定義的ClassLoader只要使用JNI調用這個第三方語言寫的組件,整個解密過程,都在黑盒中進行,別人就無從破解了!
嗯,這個方法真的很不錯的!但也有兩個小問題:1.使用第三方語言寫,得會第三方語言,我說的會,是指很溜!2.對於不同的操作系統,甚至同一操作系統不同的版本,都可能要有差異化的代碼生成對應環境下的組件(如window下是exe,linux是so等)!如果你不在乎這兩個問題,我覺得,這個方式真的挺不錯的。但對於我來說,我的信條是,越復雜的方式越容易出錯!我個人比較崇尚簡潔的美,所以,這個方法我不會輕易使用!
對了,如果大家覺得這個方法還算可行的話,可以推薦一個我無意中看到的東西給大家看看(我都沒有用過的):jinstall,
更改JVM
看到這個標題,我想你可能會震驚。是的,你沒看錯,做為一個程序員,是應該要具有懷疑一切、敢想敢做的信念。如果你有意留心的話,你會發現JVM版本在業界其實也有好幾個版本的,如:Sun公司的、IBM的、Apache的、Google的……
所以,不要阻礙自己的想像力,現在沒有這個能力,並不代表不可能。所以,我想到,如果我把jvm改了,在裡面對載入的類進行解密,那不就可以了嗎?我在設計構思過程中,突然發現:人老了就是容易糊塗!前面使用第三方語言實現解密的兩個問題,正好也是更改JVM要面對的兩個問題,而且還有一個更大的問題:這個JVM就得跟著這個項目到處走啊!
『肆』 請問我將一個軟體用不同的計算機語言重寫,算侵權嗎
算的,如果那個軟體已經發表注冊了,你這樣的做法是侵權的,根據《計算機軟體保護條例》第二十三條第五項的規定:未經軟體著作權人許可,修改、翻譯其軟體的,除《中華人民共和國著作權法》或者本條例另有規定外,應當根據情況,承擔停止侵害、消除影響、賠禮道歉、賠償損失等民事責任。
當然,如果你這樣做是符合著作權法規定的例外情況,例如:為個人學習研究而用的,不涉及第三人。。。就除外不算侵權
另外還有,《計算機軟體保護條例》第二十九條規定: 軟體開發者開發的軟體,由於可供選用的表達方式有限而與已經存在的軟體相似的,不構成對已經存在的軟體的著作權的侵犯。
但是依你上面的說法看,應該不屬於此條范圍內,所以你這種說法應該是屬於侵權的。。。
『伍』 反編譯是什麼意思
高級語言源程序經過
編譯
變成可執行文件,反編譯就是逆過程。
但是通常不能把可執行文件變成高級語言源代碼,只能轉換成匯編程序。
好比android系統的apk程序文件包,可以用apktool之類的的工具進行反編譯,可以得到class代碼文件和source資源文件。
一般反編譯只適用於高級語言,低級語言,好比匯編等語言,比較難。
『陸』 反編譯是違法的嗎
反編譯是違法的,反編譯是指計算機軟體反向工程( Revers e engineering )也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。反編譯作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
根據《共和國著作權法》規定有下列侵權行為的,應當根據情況,承擔停止侵害、消除影響、賠禮道歉、賠償損失等民事責任:
(一)未經軟體著作權人許可,發表或者登記其軟體的;
(二)將他人軟體作為自己的軟體發表或者登記的;
(三)未經合作者許可,將與他人合作開發的軟體作為自己單獨完成的軟體發表或者登記的;
(四)在他人軟體上署名或者更改他人軟體上的署名的;
(五)未經軟體著作權人許可,修改、翻譯其軟體的;
(六)其他侵犯軟體著作權的行為。
『柒』 從同學那裡拷貝一份應用軟體安裝到自己的電腦上屬於侵犯著作權嗎
一般情況下,以下幾種情況不構成侵犯著作權。
一、安裝的不是破解軟體,用的是原版軟體,未進行修改和反編譯。
二、進行了修改或反編譯,但是只是用於學習和研究,未用於商業目的。
『捌』 破解軟體是犯法的嗎
破解軟體是違法行為
第二十三條除《中華人民共和國著作權法》或者本條例另有規定外,有下列侵權行為的,應當根據情況,承擔停止侵害、消除影響、賠禮道歉、賠償損失等民事責任:(一)未經軟體著作權人許可,發表或者登記其軟體的;
(二)將他人軟體作為自己的軟體發表或者登記的;
(三)未經合作者許可,將與他人合作開發的軟體作為自己單獨完成的軟體發表或者登記的;
(四)在他人軟體上署名或者更改他人軟體上的署名的;
(五)未經軟體著作權人許可,修改、翻譯其軟體的;
(六)其他侵犯軟體著作權的行為。
(8)反編譯軟體並全部重寫侵權嗎擴展閱讀:
破解軟體案例:
當前,通過購票軟體、OTA(在線旅行社)網站預定火車票,已成為很多消費者的習慣。然而,網頁上以默認勾選的方式,將租車、酒店優惠、快速退改簽服務、交通意外險等五花八門的附加項目與火車票、飛機票進行捆綁銷售,
是普遍存在的現象。春運期間搶票環節爭分奪秒,消費者如果沒有留意這些隱蔽搭售產品而主動取消的話,訂單金額將比票面價格多出20~40元不等,在不經意間多花錢。
從法律的角度看,無論購票軟體的套路有多深,其實質都是經營者以隱蔽方式,搭售消費者不願意或不需要購買的商品或服務,這種行為侵害了消費者的合法權益。
首先,「花式」搭售違反了合同法中的平等自願、誠實信用原則。購票軟體的搭售方式一般是在網頁的隱蔽位置默認勾選,除非消費者主動點擊取消,否則達成購買。這一做法有故意誤導消費者之嫌,違背消費者作為締約方享有締約自由的意願,
利用消費者急於付款買票的心理搭售產品,有違平等自願、誠實信用原則。
其次,「花式」搭售違反了《消費者權益保護法》的諸多規定,侵犯了消費者合法權益。《消費者權益保護法》規定,消費者享有知悉其購買、使用的商品或者接受的服務的真實情況的權利。但默認搭售行為,
使得消費者對所購產品或服務的真實情況並不知情,沒意識到自己在購票的同時還購買了附加服務項目,其知情權被侵犯。
再次,侵犯了消費者的自主選擇權。《消費者權益保護法》規定,消費者享有自主選擇商品或者服務的權利。這意味著消費者有權選擇買或者不買、向誰購買某種產品或服務,並且通過貨比三家選出最適合自己的一種。
而OTA網站默認勾選了附加套餐並置於頁面隱蔽位置,使消費者很難注意到,更無從比較、選擇附加套餐的具體內容,一旦付款完成,只能被動接受所搭售的產品,消費者的自主選擇權事實上被剝奪。
最後,侵犯了消費者的公平交易權。《消費者權益保護法》規定,消費者享有公平交易的權利。OTA網站的默認搭售行為,違背消費者的真實意願,強制消費者購買商家指定的產品或服務,侵犯其公平交易權。
此外,購票軟體搭售保險的行為也涉嫌違法。目前OTA網站搭售的保險主要有兩種:交通意外險和延遲出票險。對於前者,《消費者權益保護法》規定使用格式條款的經營者應當履行說明義務。然而在默認勾選搭售保險的情況下,
商家顯然未盡到對該保險的理賠內容、保險責任等進行說明的義務。對於後者,商家涉嫌變相收費、破壞購票秩序,違背了公平交易的原則。一是火車票是由政府定價、具有公共利益屬性的產品,作為一種有限資源,火車票的分配應當具有普惠性,
並非出價高者得票。如果消費者花30元購買極速出票服務,真的能夠更早搶到車票,意味著他多花錢可以「插隊」,
侵犯了其他消費者購票的合法權益,無形中還推高了票價。二是2006年國家就發布了《關於依法查處代售代辦鐵路客票非法加價和倒賣鐵路客票違法犯罪活動的通知》,其中明確規定鐵路客票銷售服務費5元封頂,禁止加價或變相收費。
面對「花式」搭售,需要社會共治。一方面,監管部門應當積極作為,加大執法監督力度,依法整治,明確要求OTA網站誠實守信,明碼標價,禁止默認搭售,規范OTA網站的售票行為。另一方面,各OTA網站也應當認識到,欺瞞、誤導消費者只能逞一時之快,
尊重消費者的合法權益,營造和諧良好的交易氛圍,才是企業的長久之道。同時,消費者也需要提高法律和維權意識,謹慎識別各類「花式」搭售。
參考資料來源:光明網-購票軟體「花式」搭售侵犯消費者權益