在运行时覆盖已编译库中的方法

时间:2018-12-02 22:46:55

标签: java

我希望在运行时覆盖com.sun.crypto.provider.AESCrypt类中的方法,以帮助对恶意软件进行反向工程,该恶意软件使用了我尝试在{{1 }} 方法。我将如何在运行时覆盖该方法,以便可以设置标准的AES解密方法以使用修改后的功能

3 个答案:

答案 0 :(得分:4)

这是可能的。似乎有两种方法。

  1. ClassTransformer方法:使用Java辅助程序启动Java进程时,转换 T_star = (T - T_trans)/(T_melt - T_trans) strainrate = eqpsRate(km)/epsdot0 edot_log = LOG( strainrate ) yield(km) = (A + B*(strain**xn))*(one - T_star**xm) 1 * (one + C*edot_log) IF( strain .le. zero) THEN dyieldDeqps(km,1) = zero ELSE dyieldDeqps(km,1) = (B*xn*(strain**(xn-one)))* 1 (one - T_star**xm) * (one + C*edot_log) ENDIF IF(strainrate .ge. epsdot0) then dyieldDeqps(km,2) = (A + B*(strain**xn))* 1 (one - T_star**xm) * (C/strainrate) ELSE dyieldDeqps(km,2) = one ENDIF IF (T .gt. T_trans) THEN dyieldDtemp(km) = (-xm)*(one/(T - T_trans))* 1 (T_star**(xm))*(A + B*(strain**xn)) 2 *(one + C*edot_log) 类的字节码。有一个很好的博客,概述了here您需要做的所有事情。
  2. 启动类路径方法:这可能是最简单的方法。 Java具有一种机制,允许您为应用程序修补核心Java类,该机制是引导类路径,在本book中进行了描述。

答案 1 :(得分:3)

您可以在项目中创建具有完全相同的全名的类,将代码从库的类复制到新类中,并更改要更改的代码段。当要求JVM类加载器加载AESCrypt类时,它将首先在项目内部的类中查找它,以便将加载您自定义的AESCrypt版本。

答案 2 :(得分:2)

这堂课是最后的。它不能以标准方式覆盖该类。

 final class AESCrypt extends SymmetricCipher implements AESConstants

根据您想要实施更改的方式,可以使用以下方法进行操作:

  • 创建新类并实现AESConstants并扩展SymmetricCipher 。就像你喜欢的那样
  • 使用 reflection 可以访问私有方法,以将行为更改为您期望的行为(不推荐)