2016-11-24 4 views
1

私はウィルのblog postで説明した動作を再作成しようとしているが、次の例外を取得しています経由でインストルメントWillのブログ - 3つの別々の瓶、1つはエージェント、1つはインターセプター、もう1つはMainクラスです。例外を経由して、それを実行しようとする試みにByteBuddy

私はまたsecurityfixer-例のマニフェストにmainClassスタンザを追加することで実行可能jarファイルとしてそれを実行しようとしたが、それは完全に機器をバイパスしているように見える:

$ java -jar example/target/securityfixer-example-1.0-SNAPSHOT.jar -javaagent:agent/target/securityfixer-agent-1.0-SNAPSHOT.jar=bootstrap/target/securityfixer-bootstrap-1.0-SNAPSHOT.jar 
Security manager is set! 
ATTACK SUCCEEDED: Security manager was reset! 

私はここに行方不明何ができますか?前もって感謝します。

答えて

1

次のセットアップが動作しているようだ。後者が前者に依存する

byte-buddy-1.0.0.jarはgenarated securityfixer-agent-1.0-SNAPSHOT.jarとともにjava-agents-experiments\securityfixer\agent\target内でなければなりません。これはsecurityfixer-agent/pom.xmlで、コピーを実行する以下のプラグインを含むことによって達成される:

  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.8</version> 
       <executions> 
        <execution> 
         <id>copy-dependencies</id> 
         <phase>prepare-package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}</outputDirectory> 
          <includeScope>runtime</includeScope> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

ならびに上記スタンザによって生成されるアーティファクトに<Boot-Class-Path>で以下参照:

 <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <archive> 
        <manifestEntries> 
         <Can-Redefine-Classes>true</Can-Redefine-Classes> 
         <Can-Retransform-Classes>true</Can-Retransform-Classes> 
         <Agent-Class>com.excelsiorsoft.securityfixer.agent.SecurityFixerAgent</Agent-Class> 
         <Premain-Class>com.excelsiorsoft.securityfixer.agent.SecurityFixerAgent</Premain-Class> 
         <Boot-Class-Path>byte-buddy-1.0.0.jar</Boot-Class-Path> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 

ようにするため不要な依存関係(securityfixer-bootstrapなど)は、上記のプラグインとbyte-buddy-1.0.0.jarとともにコピーされていません。範囲をprovidedに変更する必要がありました。 maven-dependency-pluginは、そのスコープの依存関係をコピー先のフォルダにスキップしているようです。

我々はsecurityfixer-example/pom.xml<mainClass>スタンザを追加する必要が実行可能なjarファイルとしてそれを実行できるようにするには、次の

 <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>securityfixer.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 

$ java -javaagent:agent/target/securityfixer-agent-1.0-SNAPSHOT.jar=bootstrap/target/securityfixer-bootstrap-1.0-SNAPSHOT.jar -jar example/target/securit yfixer-example-1.0-SNAPSHOT.jar 


Security manager is set!  
ATTACK FAILED: SecurityManager cannot be reset! 

気軽にコメントしてください。より洗練されたソリューションがあります。ありがとう!

+0

これを見ている人にとってはちょっとしたことですが、Byte Buddyバージョン1.4.1以前を必ず使用してください。 1.4.2から、それはもはや動作しません...まだ追跡するのを試みています! –

+0

verで取得しているエラーは何ですか? 1.4.2? –

関連する問題