當前位置:首頁 » 網頁前端 » javaweb項目混淆
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

javaweb項目混淆

發布時間: 2022-09-28 01:01:02

⑴ javaweb項目做混淆的詳細步驟

混淆的工具很多,最常用的為retroguard.
Java 代碼編譯後生成的 .class 中包含有源代碼中的所有信息(不包括注釋),尤其是在其中保存有調試信息的時候。所以一個按照正常方式編譯的 Java .class 文件可以非常輕易地被反編譯。反編譯工具有很多種,其中非常強大的一種是 jad。
為了避免出現這種情況,保護開發者的勞動,又有一種叫做 Java 混淆器的工具被開發出來。Java 混淆器的作用是對編譯好的代碼進行混淆,使得其無法被反編譯或者反編譯後的代碼混亂難懂。Java 混淆器也有很多種,其中比較強大的一種是 RetroGuard(只說比較強大是因為我對其功效還是有些懷疑的)。

這里我介紹一下 RetroGuard 的使用方法。
將下載的 .tar.gz 或者 .zip 文件解壓。有用的只有 retroguard.jar 一個文件,其它的是源代碼和文檔。
RetroGuard 是針對 jar 文件做混淆的。使用之前需要先配置一下。可以手工編輯配置文件,更好的方法是使用 RetroGuard 提供的 GUI 工具來生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然後在 GUI 的 Wizard 中設置各個參數。上面的 -classpath 中應該列出要混淆的 jar 所依賴的所有的包。
RGgui 的詳細使用方法可以看 RetroGuard 的文檔 docs.html。
配置文件生成後,就可以運行 RetroGuard 進行混淆了。使用方法如下:
java -classpath xxx.jar;yyy.zip;... RetroGuard vvv-unofb.jar vvv.jar vvv.rgs vvv.log
其中 vvv-unofb.jar 是未混淆的 jar 文件,vvv.jar 是混淆後生成的 jar 文件,vvv.rgs 是配置文件,vvv.log 是日誌文件。預設的配置文件名稱為 script.rgs,預設的日誌文件名稱為 retroguard.log。

在生成配置文件時需要注意的是:
1、所有 public 的類名、方法名、變數名應該全部保留。因為所有設置為 public 的內容代表了整個包對外表現的介面。若某個內容不想為外界訪問,就不應該設置為 public 的。
2、若包中某個類使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某個方法載入了一個類,若這個類在包外,不需要特別處理;若這個類在包內,則需要保留這個類的類名,否則混淆後會找不到這個類。
3、在包中的所有調試信息(源文件名、行號、變數/參數信息等等)應全部刪除。

⑵ java web項目報錯,不知道怎麼解決,不影響正常使用

為 pageNumView屬性添加一個public修飾符的setter方法。

⑶ JavaWeb項目使用Proguard混淆問題

混淆的概念你就沒清楚,打個比方,就是把變數重命名(這只是其中一種),讓別人反編譯後也很難看得懂代碼,原來怎麼用,混淆後還是怎麼用。

⑷ javaweb項目如何混淆打包

File->Export->General/Archive file,在選擇你要打包的項目

⑸ javaweb項目如何只能在特定的機器上部署啟動

這個需要用到一些jni技術才行的。
建議採用jna調用本地庫來獲取MAC地址,然後比對。
核心代碼最好混淆一下,或者啟動的web服務必須定時訪問你指定的licence伺服器進行驗證。

⑹ JAVAWEB項目怎麼實現驗證碼

importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Random;
importjavax.imageio.ImageIO;

publicclassCode{

//圖片的寬度。
privateintwidth=160;
//圖片的高度。
privateintheight=38;
//驗證碼字元個數
privateintcodeCount=4;
//驗證碼干擾線數
privateintlineCount=20;
//驗證碼
privateStringcode=null;
//驗證碼圖片Buffer
privateBufferedImagebuffImg=null;
Randomrandom=newRandom();

privatebooleantype=false;

publicCode(){

}

publicCode(intwidth,intheight){
this.width=width;
this.height=height;
}

publicCode(intwidth,intheight,intcodeCount){
this.width=width;
this.height=height;
this.codeCount=codeCount;
}

publicCode(intwidth,intheight,intcodeCount,intlineCount){
this.width=width;
this.height=height;
this.codeCount=codeCount;
this.lineCount=lineCount;
}

publicvoidinit(booleantype){
this.type=type;
}

//生成圖片
privatevoidcreatImage(booleantype){
intfontWidth=width/codeCount;//字體的寬度
intfontHeight=height-5;//字體的高度
intcodeY=height-8;

//圖像buffer
buffImg=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphicsg=buffImg.getGraphics();
//Graphics2Dg=buffImg.createGraphics();
//設置背景色
g.setColor(getRandColor(200,250));
g.fillRect(0,0,width,height);//設置字體
Fontfont=null;
if(!type)font=newFont("Fixedsys",Font.BOLD,fontHeight);
elsefont=getFont(fontHeight);
g.setFont(font);

//設置干擾線
for(inti=0;i<lineCount/2;i++){
intxs=random.nextInt(width);
intys=random.nextInt(height);
intxe=xs+random.nextInt(width);
intye=ys+random.nextInt(height);
g.setColor(getRandColor(1,255));
if(!type)g.drawLine(xs,ys,xe,ye);
elseshear(g,width,height,getRandColor(1,255));
}

//添加噪點
floatyawpRate=0.01f;//雜訊率
intarea=(int)(yawpRate*width*height);
for(inti=0;i<area;i++){
intx=random.nextInt(width);
inty=random.nextInt(height);

buffImg.setRGB(x,y,random.nextInt(255));
}


Stringstr1=randomStr(codeCount);//得到隨機字元
this.code=str1;
for(inti=0;i<codeCount;i++){
StringstrRand=str1.substring(i,i+1);
g.setColor(getRandColor(1,255));
//g.drawString(a,x,y);
//a為要畫出來的東西,x和y表示要畫的東西最左側字元的基線位於此圖形上下文坐標系的(x,y)位置處

g.drawString(strRand,i*fontWidth+3,codeY);
}


}

//得到隨機字元
privateStringrandomStr(intn){
Stringstr1="";//I和l不要
Stringstr2="";
intlen=str1.length()-1;
doubler;
for(inti=0;i<n;i++){
r=(Math.random())*len;
str2=str2+str1.charAt((int)r);
}
returnstr2;
}

//得到隨機顏色
privateColorgetRandColor(intfc,intbc){//給定范圍獲得隨機顏色
if(fc>255)
fc=255;
if(bc>255)
bc=255;
intr=fc+random.nextInt(bc-fc);
intg=fc+random.nextInt(bc-fc);
intb=fc+random.nextInt(bc-fc);
returnnewColor(r,g,b);
}

/**
*產生隨機字體
*/
privateFontgetFont(intsize){
Randomrandom=newRandom();
Fontfont[]=newFont[5];
font[0]=newFont("Ravie",Font.PLAIN,size);
font[1]=newFont("AntiqueOliveCompact",Font.PLAIN,size);
font[2]=newFont("Fixedsys",Font.PLAIN,size);
font[3]=newFont("WideLatin",Font.PLAIN,size);
font[4]=newFont("GillSansUltraBold",Font.PLAIN,size);
returnfont[random.nextInt(5)];
}

//扭曲方法
privatevoidshear(Graphicsg,intw1,inth1,Colorcolor){
shearX(g,w1,h1,color);
shearY(g,w1,h1,color);
}

privatevoidshearX(Graphicsg,intw1,inth1,Colorcolor){

intperiod=random.nextInt(2);

booleanborderGap=true;
intframes=1;
intphase=random.nextInt(2);

for(inti=0;i<h1;i++){
doubled=(double)(period>>1)
*Math.sin((double)i/(double)period
+(6.2831853071795862D*(double)phase)
/(double)frames);
g.Area(0,i,w1,1,(int)d,0);
if(borderGap){
g.setColor(color);
g.drawLine((int)d,i,0,i);
g.drawLine((int)d+w1,i,w1,i);
}
}

}

privatevoidshearY(Graphicsg,intw1,inth1,Colorcolor){

intperiod=random.nextInt(40)+10;//50;

booleanborderGap=true;
intframes=20;
intphase=7;
for(inti=0;i<w1;i++){
doubled=(double)(period>>1)
*Math.sin((double)i/(double)period
+(6.2831853071795862D*(double)phase)
/(double)frames);
g.Area(i,0,1,h1,0,(int)d);
if(borderGap){
g.setColor(color);
g.drawLine(i,(int)d,i,0);
g.drawLine(i,(int)d+h1,i,h1);
}

}

}publicvoidwrite(OutputStreamsos)throwsIOException{
if(buffImg==null)creatImage(type);
ImageIO.write(buffImg,"png",sos);
//JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(sos);
//encoder.encode(buffImg);
sos.close();
}

publicBufferedImagegetBuffImg(){
if(buffImg==null)creatImage(type);
returnbuffImg;
}

publicStringgetCode(){
returncode.toLowerCase();
}

//使用方法
/*publicvoidgetCode3(HttpServletRequestreq,HttpServletResponseresponse,HttpSessionsession)throwsIOException{
//設置響應的類型格式為圖片格式
response.setContentType("image/jpeg");
//禁止圖像緩存
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);


CreateImageCodevCode=newCreateImageCode(100,30,5,10);
session.setAttribute("code",vCode.getCode());
vCode.write(response.getOutputStream());
response.flushBuffer();
}*/

}

⑺ web項目和Java項目的區別

Web項目是網頁的編碼,像jsp,servlet,struts這類的。

但是java項目的話,是AWT,SWING這類的編碼。

最主要的區別是Web項目中的JAVA文件是tomcat來觸發的,但是java項目里的是Main()來開始的。還有一點是Web項目需要伺服器。

⑻ java web

會ssh就想月薪過萬?

1. 你需要精通面向對象分析與設計(OOA/OOD)、涉及模式(GOF,J2EEDP)以及綜合模式。你應該了解UML,尤其是class、object、interaction以及statediagrams。

2. 你需要學習Java語言的基礎知識以及它的核心類庫(collections、serialization、streams、networking、 multithreading、reflection、event、handling、NIO、localization以及其他)。

3. 你應該了解JVM、classloaders、classreflect以及垃圾回收的基本工作機制等。你應該有能力反編譯一個類文件並且明白一些基本的匯編指令。

4. 如果你將要寫客戶端程序,你需要學習Web的小應用程序(applet),必需掌握GUI設計的思想和方法,以及桌面程序的SWING、AWT、SWT。你還應該對UI部件的JavaBEAN組件模式有所了解。JavaBEANS也被應用在JSP中以把業務邏輯從表現層中分離出來。

5. 你需要學習Java資料庫技術,並且會使用至少一種persistence/ORM構架,例如Hibernate、JDO、CocoBase、TopLink、InsideLiberator(國產JDO紅工廠軟體)或者iBatis。

6. 你還應該了解對象關系的阻抗失配的含義以及它是如何影響業務對象與關系型資料庫的交互,和它的運行結果。還需要掌握不同的資料庫產品運用,比如Oracle、MySQL、SQL server。

7. 你需要學習Servlets、JSP,以及JSTL(StandardTagLibraries)和可以選擇的第三方TagLibraries。

8. 你需要熟悉主流的網頁框架,例如JSF、Struts、Tapestry、Cocoon、WebWork,以及他們下面的涉及模式,如MVC/MODEL2。

9. 你需要學習如何使用及管理Web伺服器,例如tomcat、resin、Jrun,並且知道如何在其基礎上擴展和維護Web程序。

10. 你需要學習分布式對象以及遠程API,例如RMI和RMI/IIOP。

11. 你需要掌握各種流行中間件技術標准和與Java結合實現,比如Tuxedo、CROBA,當然也包括JavaEE本身。

12. 你需要學習最少一種的XMLAPI,例如JAXP(JavaAPIforXMLProcessing)、JDOM(JavaforXMLDocumentObjectModel)、DOM4J或JAXR(JavaAPIforXMLRegistries)。

13. 你應該學習如何利用Java的API和工具來構建WebService。例如JAX-RPC(JavaAPIforXML/RPC)、 SAAJ(SOAPwithAttachmentsAPIforJava)、JAXB(JavaArchitectureforXMLBinding)、 JAXM(JavaAPIforXMLMessaging)、JAXR(JavaAPIforXMLRegistries)或者 JWSDP(JavaWebServicesDeveloperPack)。

14. 你需要學習一門輕量級應用程序框架,例如Spring、PicoContainer、Avalon,以及它們的IoC/DI風格(setter,constructor,interfaceinjection)。

15. 你需要熟悉不同的J2EE技術,例如JNDI()、 JMS(JavaMessageService)、JTA/JTS(JavaTransactionAPI /JavaTransactionService)、JMX(JavaManagementeXtensions),以及JavaMail。

16. 你需要學習企業級JavaBeans(EJB)以及它們的不同組件模式:Stateless/StatefulSessionBeans、 EntityBeans(包含Bean-ManagedPersistence[BMP]或者Container- ManagedPersistence[CMP]和它的EJB-QL),或者Message-DrivenBeans(MDB)。

17. 你需要學習如何管理與配置一個J2EE應用程序伺服器,如WebLogic、JBoss等,並且利用它的附加服務,例如簇類,連接池以及分布式處理支援。你還需要了解如何在它上面封裝和配置應用程序並且能夠監控、調整它的性能。

18. 你需要熟悉面向方面的程序設計以及面向屬性的程序設計(這兩個都被很容易混淆的縮寫為AOP),以及他們的主流Java規格和執行。例如AspectJ和AspectWerkz。

19. 你需要熟悉對不同有用的API和frame work等來為你服務。例如Log4J(logging/tracing)、Quartz(scheling)、 JGroups(networkgroupcommunication)、JCache(distributedcaching)、 Lucene(full-textsearch)、JakartaCommons等等。

20. 你應該熟練掌握一種JavaIDE例如sunOne、netBeans、IntelliJIDEA或者Eclipse。(有些人更喜歡VI或EMACS來編寫文件。隨便你用什麼了)

21. Java(精確的說是有些配置)是冗長的,它需要很多的人工代碼(例如EJB),所以你需要熟悉代碼生成工具,例如XDoclet。

22. 你需要熟悉一種單元測試體系(JNunit),並且學習不同的生成、部署工具(Ant,Maven)。

23. 你需要熟悉一些在Java開發中經常用到的軟體工程過程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。

24. 你還需要緊跟Java發展的步伐,比如現在可以深入的學習Webwork2.0。

25. 你必需要對實際項目的開發流程有所了解,至少要有兩個有實際應用價值的項目,而不是練習項目!因為現在企業看重的是你有沒有實際的開發經驗,真正開發經驗的體現就是你做的項目,也就是有實際應用的項目!

有這25點,百萬都沒問題

⑼ 求教Java web項目代碼混淆,網上教程用proguard各種報錯,有沒有大神教我怎麼配置

java是編程語言里比較難學的一門,如果有心從事編程方向的工作,最好到專業機構學習並有更多的項目實踐,更貼近市場,這樣更有利於將來的發展。

⑽ java中web項目與java項目的區別是什麼

Web項目是網頁的編碼,像jsp,servlet,struts這類的。

但是java項目的話,是AWT,SWING這類的編碼。

最主要的區別是Web項目中的JAVA文件是tomcat來觸發的,但是java項目里的是Main()來開始的。還有一點是Web項目需要伺服器。