導航:首頁 > 源碼編譯 > 反編譯程序員厲害嗎

反編譯程序員厲害嗎

發布時間:2022-06-10 11:47:41

A. 如何防止程序員編譯

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代碼

B. 程序員和黑客哪個更厲害

程序員更厲害 。
因為黑客只會搞破壞,程序員會修復 。
所以程序員也會搞破壞,但他更會修復 。而黑客他修復不了 。

C. 最好的程序編程員不一定是最好的黑客 當最好的黑客一定是最好的程序員 是真的嗎

不對,程序員不是黑客,黑客需要計算機基礎卻不是程序員,共同的是計算機基礎,不同的是研究方向,程序員成為黑客要學習網路安全,黑客成為程序員也需要真正的項目工作經驗,別以為看點編程書籍寫的代碼就能上線了。。。畢竟安全性只是系統性能的一個方面而不是全部,憑著懂安全就想當最好的程序員開什麼玩笑。。。

D. 程序員成為自由職業者靠譜么

成為自由職業者曾是年少時的小資情懷,有種幾米漫畫中主人公的感覺。六年職場生涯屢次嘗試,無奈膽識未到,貪戀於大公司的高薪,都淺嘗輒止。半年前身心俱疲,邀一好友共同創業,偶見此貼,突然覺得自己現在就是個自由職業者。所以談談自己的看法。
其實所謂「自由職業者」,看似重點在「自由」(大多數人也都是奔著這個去的),其實隱含著的是「賺錢」——小說里「累了旅行,閑了幹活」的日子也是需要錢來支撐的。所以靠不靠譜,就看你怎麼賺錢了。這里列舉幾個國內常見的程序員個人賺錢的渠道:
1.
傳統的線下接項目
應該有不少程序員都有類似的「接私活」經歷吧,朋友或是朋友的朋友的公司可能想做一些宣傳網站、後台管理系統等等,費用從幾百到幾萬元不等。
這種活大多由非IT公司發出,技術含量不高,但溝通成本極高,老闆不懂互聯網不懂用戶,業務朝令夕改,今天說好明天就變,有的做了一個月跟你說項目不做了,有的拿了你的代碼反編譯給別人去做——什麼稀奇古怪的事都有,前期合同不頂用,中期業務反復無常,後期收款拖欠厲害。
打算由這種方式來維持「自由職業」的程序員,必須有兩個特質:要麼運氣特別好;要麼業務能力特別強(不是技術,在項目涉及的業務領域上走在客戶前面,知道客戶真正想要什麼,想客戶之想不到,也包括溝通能力)。當然,還有一點是必須的,就是朋友多,有活干。

E. 反編譯VB程序

反編譯這種東西其實是不存在的,所謂的反編譯其實就是反匯編。
就連.net寫出來的程序反編譯也不可能直接得到代碼。
如果用一個軟體就能把程序反編譯,所有程序員都該事業了,還費勁腦汁編什麼,直接反編譯別人的不就好了。
如果你想學習反匯編這方面知識,首先要有一個清醒的頭腦,很顯然你的頭腦現在還不夠清醒,屬於小菜鳥級別的,幻想著把別人寫好的程序反編譯出來然後改改就成自己的了。
醒過來!!啪!啪!!

F. 聽一個同事說程序員真的那麼厲害可以破解網站後台嗎

1、未經授權破解網站後台篡改數據是違法行為;
2、有些劣質的網站後台安全措施的確很爛,會有漏洞容易被破解;
3、但不是所有的程序員都能破解網站後台,也不是所有的網站後台能被破解。

G. 大家都知道高級程序員很吃香,那麼高級程序員和黑客到底誰更厲害

非從業人員對於程序員和黑客的外在形象就存在著不一樣的認知,因為電視電影和網路上的段子,普通的程序員一般都是有才能卻一點不風趣的男性,常年一件格子襯衣,幾根稀疏的頭發,雖然賺的錢不少,卻不會花錢裝扮自己;而黑客的形象就完全是另一種,他們很神秘,可能我們身邊隨便一個人在暗地裡都可以是黑客,黑客還喜歡穿黑衣服,帶黑色的帽子,不喜歡以真面目示人。

相對的,普通程序員也不會關注黑客關注的很多點,比如CAPTCHA這種可能就直接引入個第三方的來防禦了,並不會自己去實現一遍。還有加密演算法這種,也幾乎只有黑客才會去研究。普通程序員可能研究的就是壓縮演算法。黑客的攻擊手段多種多樣,有的甚至不會寫代碼,比如《我是誰–沒有絕對安全的系統》里就有一位,根本不寫代碼,通過翻垃圾桶,開鎖偷看資料這類操作搜集很多有用的信息,從而發起攻擊。一般稱這種為手段『社工攻擊』。

H. java反編譯

如今JAVA語言在全世界范圍正如火如荼般的流行,它廣范地應用在INTERNET的資料庫、多媒體、CGI、及動態網頁的製作方面。1999年在美國對JAVA程序員的需求量首次超過C++!

作者因最近分析一些JAVA程序,對JAVA的反編譯進行了一番了解,下面將我所了解的情況作以下介紹,希望對JAVA愛好者有所幫助。

JAVA是採用一種稱做「位元組編碼」的程序結構,分為小程序(嵌入到HTML文件中)和應用程序(直接在命令狀態下執行)兩種類型。無論哪種結構,一旦用JAVAC 命令編譯後,均變成後綴為CLASS的同名可執行文件。這種文件是不可閱讀的代碼。

經查閱了SUN公司的JDK(JDK1.1.3)文檔資料後,我找到了一個據稱是可反編譯JAVA的JAVAP文件(EXE),這個文件位於\JDK\BIN\ 下面,經按說明使用後,感到失望,原來這個「反編譯」僅可反編譯出JAVA程序的數據區(定義)、若干方法和類的引用等。

這里我用了一個簡單例子來說明問題。

JAVA的源程序hello_java.java如下:

import java.applet.*;
import java.awt.*;
public class hello_java extends Applet
{
public void paint(Graphics g)
{
g.drawString("Hello Java!\n",20,20);
}
}

經用反編譯命令:javap -c -package -public -private hello_java hello.java

得到的反編譯結果(hello.java)如下:(有關javap命令的選擇參數請見其使用說明,這里-c表示選擇了反編譯)

Compiled from hello_java.java
public synchronized class hello_java extends java.applet.Applet
/* ACC_SUPER bit set */
{
public void paint(java.awt.Graphics);
public hello_java();
Method void paint(java.awt.Graphics)
0 aload_1
1 ldc #1
3 bipush 20
5 bipush 20
7 invokevirtual #6
10 return
Method hello_java()
0 aload_0
1 invokespecial #5 ()V>
4 return
}

I. 求反編譯能力強的.net程序員,想修改一個程序,但是沒有源代碼,反編譯可以修改嗎

下載個.net reflector軟體,只要沒有經過處理的.net程序集,都可以直接查看程序集內源碼

但是要修改的話就蛋疼了,估計可以把源碼拷貝出來,然後再自己重建工程編譯,或者找牛人寫個犀利工具一步到位

J. 程序員很厲害嗎

程序員只是在編程方面很厲害,其他的方面並不比別人強,甚至還會比別人差。

閱讀全文

與反編譯程序員厲害嗎相關的資料

熱點內容
捷豹小型空氣壓縮機 瀏覽:555
綠盾文檔加密系統哪裡有賣 瀏覽:637
我的世界怎麼開掛在伺服器裡面 瀏覽:789
西門子自鎖正反轉編程圖 瀏覽:749
出國英語pdf 瀏覽:920
演算法線性匹配 瀏覽:674
山東省dns伺服器雲主機 瀏覽:554
安卓5g軟體怎麼隱藏 瀏覽:839
編譯內核空間不足開不了機 瀏覽:887
漢紀pdf 瀏覽:474
在哪裡下載國家醫保app 瀏覽:657
沒有與文件擴展關聯的編譯工具 瀏覽:426
我的世界反編譯mcp下載 瀏覽:21
安卓手柄下載什麼軟體 瀏覽:70
pushrelabel演算法 瀏覽:850
硬碟資料部分文件夾空白 瀏覽:617
cssloader的編譯方式 瀏覽:941
java面板大小 瀏覽:506
怎麼用命令方塊打出字體 瀏覽:502
台灣加密貨幣研究小組 瀏覽:299