java anti-compile

方案一

1,首先要添加一个参数为Exception类型的函数,例如这样。

public static void Fake(Exception e)
{
e.toString();
}

一定要有e.toString();,因为要防止你的混淆器把无用的代码过滤。

2,然后在每个类中调用这个函数,放在try...catch(Exception e)..中的catch里面,例如:

try
{
...
}
catch (Exception e)
{
Fake(e);
}

请注意 ,一定要放在catch才有用,其他地方无用。


方案二

如果以上方法还不够专业,我们再来一个。

1,同样的,我们定义一个类,这个类叫做AntiCrack.。名字好像有点大。。。代码如下:

public class AntiCrack
{

private AntiCrack()
{
}

public static Throwable Fake(Throwable throwable, Throwable throwable1)
{
try
{
throwable.getClass().getMethod("initCause", new Class[] {
java.lang.Throwable.class
}).invoke(throwable, new Object[] {
throwable1
});
}
catch(Exception exception) { }
return throwable;
}
}

2,同样的,我们在catch里面调用该函数。例如如下。

try
{

//your code here

}
catch(IOException ioexception)
{
IllegalArgumentException illegalargumentexception = new IllegalArgumentException(ioexception.toString());
AntiCrack.fake(illegalargumentexception, ioexception);
throw illegalargumentexception;
}

或者也可以这样

public class AntiException extends Exception
{

public AntiException()
{
}

public AntiException(String s)
{
super(s);
}

public AntiException(String s, Throwable throwable)
{
super(s);
AntiCrack.fake(this, throwable);
}
}

然后在你的程序里面

try
{

}

catch(IoException e)

{

throw new AntiException(ioexception.toString(), ioexception);

}

当采用以上方式后,任何类只要调用了该函数,生成的class反编译后出错,得不到结果。

Decafe、FrontEnd和YingJAD,反编译时都有exception,然后无法进行下去。大家可以测试。

推荐用第二种方案。

你可能感兴趣的:(java)