06/10/27 23:58:59
BCELを使った Java難読化プログラムです.
現在,9行.あと少し.キャストがうぜぇ.groovy なら問題なくできるだろう.
import org.apache.bcel.classfile.*;class O{public static void main(String[]s)
throws Exception{new O(new ClassParser(s[0]).parse());}int n=0;void u(Constant
c){ConstantUtf8 u=(ConstantUtf8)c;if(u.getBytes().charAt(0)!='<')u.setBytes(""+
++n);}O(JavaClass j)throws Exception{ConstantPool p=j.getConstantPool();
Constant[]c=p.getConstantPool();for(int i=0;i<c.length;i++){if(c[i]!=null){int
t=c[i].getTag();if(t>8&&t<12){ConstantCP q=(ConstantCP)c[i];if(j.getClassName()
.equals(q.getClass(p)))u(c[((ConstantNameAndType)c[q.getNameAndTypeIndex()]).
getNameIndex()]);}}}u(c[((ConstantClass)c[j.getClassNameIndex()]).getNameIndex(
)]);j.dump(n+".class");}}
BCELじゃなく,ASMとか,javassist を使ったほうがいいのかな?
java -cp .:bcel.jar O <target classfile>