2011-08-23 5 views
5

में लाइब्रेरी को obfuscate करने के लिए yGuard का उपयोग करना मैं वर्तमान में अपने कार्यालय में अन्य ऐप्स में उपयोग करने के लिए अपनी खुद की जावा लाइब्रेरी विकसित कर रहा हूं, और मैं पुस्तकालय को स्वयं को खराब करने के तरीकों की खोज कर रहा हूं।ग्रहण

मैं एक्लिप्स इंडिगो के साथ काम कर रहा हूं, और yGuard v2.3.0.1 का उपयोग कर रहा हूं।

सबसे पहले, मेरी जावा कोड:

package com.test.ObfuscateTest; 

public class MainClass { 

    private String secretClassVariable; 

    public static void main(String[] args) { 

    } 

    protected void SecretMethod(String secretParameter) { 

     secretClassVariable = secretParameter; 
    } 
} 

निम्नलिखित चींटी स्क्रिप्ट के साथ yGuard का उपयोग करना, मुझे एक खाली जार फ़ाइल जाल:

<?xml version="1.0" encoding="UTF-8"?> 

<project name="project" default="yguard" basedir="."> 

    <target name="init"> 
     <property name="project_name" value="ObfuscateTest"/> 
     <property name="srcDir" value="."/> 
     <property name="classDir" value="classes"/> 
     <property name="jar" value="${project_name}.jar"/> 
     <property name="obfjar" value="${project_name}_obf.jar"/> 
     <property name="renamelog" value="${project_name}_renamelog.xml"/> 
     <property name="shrinklog" value="${project_name}_shrinklog.xml"/> 
     <property name="mainclass" value="com.test.ObfuscateTest"/> 
     <mkdir dir="${classDir}" /> 
    </target> 


    <target depends="jar" name="yguard"> 
     <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="/Users/foo/Desktop/yguard-2.3.0.1/lib/yguard.jar"/> 
     <!-- the following can be adjusted to your needs --> 
     <yguard> 

      <inoutpair in="${jar}" out="${obfjar}"/> 

      <!-- don't let the obfuscator remove the "Deprecated" --> 
      <!-- attributes from the .class file entries --> 
      <attribute name="Deprecated"/> 

      <shrink logfile="${shrinklog}"> 
       <keep> 
        <class classes="none" methods="protected" fields="none"> 
          <patternset> 
           <include name="com.test.ObfuscateTest.*"/> 
          </patternset> 
          </class> 
       </keep> 
      </shrink> 

      <rename mainclass="${mainclass}" logfile="${renamelog}"> 
       <keep> 
        <class classes="none" methods="protected" fields="none"> 
          <patternset> 
           <include name="com.test.ObfuscateTest.*"/> 
          </patternset> 
          </class> 
       </keep> 
      </rename> 

     </yguard> 

    </target> 

    <!-- compile --> 
    <target name="compile" depends="init"> 
     <javac srcdir="${srcDir}" includes="com/test/ObfuscateTest/*.java" destdir="${classDir}"> 
     </javac> 
    </target> 

    <!-- create .jar --> 
    <target name="jar" depends="compile"> 
     <jar jarfile="${jar}" basedir="${classDir}" includes="com/test/ObfuscateTest/*"/> 
    </target> 

    <!-- run project --> 
    <target name="run" depends="yguard"> 
     <java classname="${mainclass}" fork="true"> 
      <classpath> 
       <pathelement location="${obfjar}"/> 
      </classpath> 
     </java> 
    </target> 

    <!-- removes all that has been built --> 
    <target name="clean" depends="init"> 
     <delete dir="${classDir}" includeEmptyDirs="true" /> 
    </target> 
</project> 

मैं कृपया के रूप में कुछ सलाह के लिए पूछ सकते हैं कि मैं क्या मैं गलत कर रहा हूँ?

बहुत पहले से धन्यवाद!

+0

आप अपने कार्यालय के भीतर उपयोग किए जाने वाले कोड को क्यों परेशान कर रहे हैं? –

+0

पुस्तकालय संभावित रूप से तीसरे पक्ष के डेवलपर्स को जारी किया जाएगा, इस प्रकार, obfuscation की आवश्यकता है। – Earthling

+0

ठीक है, मुझे प्रोगार्ड प्राप्त हुआ है कि मैं अपने कोड को काफी अच्छी तरह से खराब कर दूं, इसलिए यह एक नीचे है, लेकिन मुझे यह जानना अच्छा लगेगा कि yGuard को काम करने का कोई तरीका है या नहीं। – Earthling

उत्तर

3

संकीर्ण तत्व का अलग-अलग उपयोग किया जाना है। यह प्रवेश बिंदु निर्दिष्ट करता है जिससे सेगार्ड निर्भर वर्गों की तलाश शुरू करता है। उन सभी वर्गों को पहुंचाया जा सकता है जिन्हें हटाया नहीं जा सकता है। आम तौर पर आप इस तरह की मुख्य विधि प्रदान करते हैं:

<shrink logfile="${shrinklog}"> 
    <keep> 
    <method name="void main(java.lang.String[])" class="${mainclass}" /> 
    </keep> 
</shrink> 
+0

अंतिम परिणाम अभी भी वही है - एक छोटी 350byte जार फ़ाइल जिसमें कोई कक्षा नहीं है। (बस मेटा-आईएनएफ) फ़ोल्डर। त्रुटि आउटपुट है: से मुख्य-श्रेणी मेनिफेस्ट विशेषता लोड करने में विफल: \ उपयोगकर्ता \ foo \ Java \ ObsfucateTest \ src \ ObfuscateTest.jar आपकी सहायता की बहुत सराहना की जाती है। – David

+0

यह एक्सएमएल में पूरी तरह से सिकुड़ लाइनों के बिना भी होता है। – David

+0

मैंने अभी यह कोशिश की, और मुझे लगता है कि मेरा जवाब सही है। आपकी मूल सिकुड़ विन्यास के साथ मेनक्लास हटा दिया गया है और जेएआर फ़ाइल खाली है। मेरे सिकुड़ने के विन्यास के साथ वर्ग बनाए रखा है। कृपया देखें कि ObfuscateTest.jar खाली है या नहीं, क्योंकि यह yguard के लिए इनपुट है। शायद आपको अपनी निर्देशिका लेआउट में कोई समस्या है। –