當前位置:首頁 » 編程軟體 » 反編程的人

反編程的人

發布時間: 2022-04-20 18:47:20

❶ 幫幫我,我爸反對我學編程,我該怎麼辦

你說的結業考試是什麼考試呢?
首先,學好編程,對於以後在IT行業就業,會有很大的幫助(IT行業可是連續多年高薪首位哦)。考完試以後不上學,只學編程,這是不太妥當的。想要深造,靠自己一個人的鑽研這個可能性很小,一般都是要上大學,裡面特別是上名牌的大學學編程,這樣以後就業就業會有好的出路。不然的話,大公司一般是不會要那種靠自學成才的人的。
所以學好學校的課程是非常重要的,以後參加中考和高考都是免不了的。

❷ 為什麼那麼多人反對中文編程

你好,我國計算機領域弱是因為我們起步晚,計算機與1945年誕生,那時候中國還在內戰,後來,文化大革命的十年加劇了中國的落後,還有一點需要強調,計算機技術的發展受到很多標準的制約,比如微軟的操作系統,即使他一時落後,很多人也不會馬上扔掉他,因為很多軟體是基於微軟的操作系統的,沒有了他的系統,這些軟體也無法使用,而遷移整個平台的費用也不少。很多計算機領域的技術標准都由外國人制定,我們處於被動,所以總是被人牽著鼻子走。至於中文編程,cpu的一些核心技術和相關標准全是國外發明製造的),中文編程即使不是其他語言的漢化,他的執行效率也不可能高於英文編程語言,關鍵字用英文還是中文沒有本質區別,中文的優點沒有在編程中體現。至於為什麼很多人反對中文編程,大概是因為前幾年的「漢芯」,「麒麟」事件使人們對搞這方面研究不信任。我的看法是中文編程有他的適用范圍,但靠他來振興國家IT實力,不太現實。
編程最重要的是演算法,還要讀懂操作平台中的一些文件,而這些文件是用英文寫的
所以即使有了漢語編程編程也是很難的

❸ 如何進行反編程

我們按照三種不同的分類,從多個角度闡述反編譯的基本過程。

如果按照反編譯技術實施的順序劃分,則可以分為7個階段,它們是:句法分析、語義分析、中間代碼生成、控制流圖生成、控制流分析、代碼生成。

如果按照實踐中的具體操作劃分,一般也可以分為7個不同的步驟,分別是:文件裝載,指令解碼,語義映射,相關圖構造,過程分析,類型分析和結果輸出等。

以逆向分析為目的,反編譯的各個階段並不是一個嚴格的一遍順序,而是存在著一些並行的模塊,並且也需要通過循環執行分析過程來針對某些特殊問題(例如非N分支代碼產生的間接跳轉指令)進行分析和恢復。

反編譯的處理過程,如果按功能區分,可以分為:前端、中端和後端三個部分。其實這種劃分方式是將上述兩種過程的階段進行合並,也就是將幾個反編譯器階段組合在一起。這樣劃分的好處是:通過設計不同的前端、中端和後端以實現針對多種源和目標的反編譯器。

❹ 反編程是什麼

一個軟體,寫代碼,匯編(就是做成程序),然後加殼(就像給程序穿間衣服,不讓別人容易拿到源碼,這樣可以保護你自己的利益,而且可以壓縮空間)
反編譯就是把程序還原回源代碼。

❺ 逆向編程是什麼

反編譯,就是將編譯好的程序變為源代碼

但是基本是不可能的,除非編程匯編代碼,然後經過高手翻譯(太復雜。。。)

除非是個特別簡單的程序,根據原理現寫一個就可以。。。

❻ 對於一個已經編程好的程序,是否可以對他進行反編程

當然可以, 上網搜,可以搜到大把反編譯器, 這樣可以把別人做好的應用程序反編譯成程序代碼,從而進行分析。

java為例,java代碼寫好後,編譯並打包成 .jar 可運行文件(相當於.exe)。這時可以上網找到比如「小穎反編譯器」之類的工具進行反編,這樣又可以把.jar反編成一堆原始的java代碼。

由於有這個問題,所以程序員們為了防止自己的工作成果被人抄襲後來就產生了混洧器, 利用混洧器可以將jar文件中的資源進行混洧,這樣雖然可以將.jar還原成源代碼,但現在的源代碼被隨機地打亂了,很難看懂,基本不具備可讀性。

當然有矛就有盾, 再歷害的混淆器也有歷害的反編器來破解它。

就像病毒和殺毒軟體一樣相生相剋

❼ 如何防止程序員反編譯

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就得跟著這個項目到處走啊!

❽ 為什麼很多人反對中文在編程中的使用

首先我要聲明:排斥使用中文編程和愛國不能混為一談,堅決抵制不使用中文編程等同於不愛國的道德綁架。不使用中文編程的主觀因素和客觀現實存在有很多,個人使用習慣、開發效率、開發所使用的ide工具不支持等因素,都會讓程序員更偏向使用英語編程。
先來說說歷史原因,編程起源於外國,編程語言,計算機,甚至上層的開發工具,基本上都是外國人使用英語來開發的,這些最大的問題就在於,外國人並不會給中文來做適配,就算適配了,也無法使用中文來編程測試,因此遇到了bug也無法修復。這大概是中文編程目前最大的制約。很多碼農說現在的主流編程語言都是Unicode編碼都支持中文,這很正確,舉例java,但是我想他們根本呢沒有用過中文來寫代碼,完全沒有考慮過ide工具是否支持,編程語言並不是編程的全部,雖然脫離ide工具我們也能夠編譯代碼,但是脫離了ide工具我們的開發效率會降低很多倍,於是乎現在企業開發基本不可能脫離ide工具,沒有的可能都要專門自己開發一套。
再來說說很多碼農對於中文編程的真實內心獨白:用中文寫代碼會很垃圾,很廉價?懂英文比較厲害?中文寫的代碼不行?要便於給外國人看?認為中文編程很多餘?習慣了英文編程了不想改變?雖然有些直抒心意,但是也在一定程度上直觀反映了排斥使用中文編程的碼農心態。
我認為制約國內程序員使用中文編程的最大因素是完善框架的缺失,諸如易語言之類的其實都不過是偽中文編程,很多底層的東西也還是用到的英文,而底層的英文又限制了上層框架的編寫,語法框架無法的限制導致了上層編寫程序的時候並不適配中文,這樣的編程不僅不能提高效率,反而增加了理解難度。
所以我認為中文編程最大的難點是怎麼去編寫一套適合中文的編程框架,而不僅僅是把英文翻譯成中文,這樣的中文編程其實真的沒有多大意義。

熱點內容
我的世界上線送神裝伺服器 發布:2025-07-02 13:48:24 瀏覽:314
多ip雲伺服器怎麼設置 發布:2025-07-02 13:46:29 瀏覽:66
鳥哥的linux私房菜基礎篇第三版 發布:2025-07-02 13:44:46 瀏覽:107
我姐姐手機上的密碼多少的短視頻 發布:2025-07-02 13:09:10 瀏覽:799
軒逸安全配置全系一樣嗎都有哪些 發布:2025-07-02 13:07:30 瀏覽:522
合肥少兒編程哪家好 發布:2025-07-02 13:05:12 瀏覽:880
安卓快手極速版怎麼簽到 發布:2025-07-02 12:58:21 瀏覽:692
我與編程作文 發布:2025-07-02 12:57:33 瀏覽:230
安卓機在哪裡調振動大小 發布:2025-07-02 12:53:31 瀏覽:850
linux系統如何查看伺服器ip地址 發布:2025-07-02 12:51:57 瀏覽:245