Java调用JD-GUI反编译class文件

9 篇文章 0 订阅
5 篇文章 0 订阅

Java调用JD-GUI反编译class文件

首先下载JD-GUI.jar文件
然后导入至eclipse工程
在这里插入图片描述
接下来就是直接粘代码了

package kt;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
import org.jd.core.v1.api.loader.Loader;
import org.jd.core.v1.api.loader.LoaderException;
import org.jd.core.v1.api.printer.Printer;

public class ts
{
	static class Load implements Loader
	{

		@Override
		public boolean canLoad(String paramString) {
			// TODO Auto-generated method stub
			File file=new File(paramString);
			if(file.exists()&&file.isFile())
				return true;
			return false;
		}

		@Override
		public byte[] load(String paramString) throws LoaderException {
			// TODO Auto-generated method stub
			try
			{
				FileInputStream FI=new FileInputStream(paramString);
				ByteArrayOutputStream bt=new ByteArrayOutputStream();
				int len=0;
				byte b[]=new byte[1024];
				while((len=FI.read(b))!=-1)
				{
					bt.write(b,0,len);
				}
				FI.close();
				byte []ot=bt.toByteArray();
				bt.close();
				b=null;
				return ot;
			}catch(IOException e) {}
			return null;
		}
		
	}
	static class pr implements Printer
	{
		String allinf;
		boolean outtofile;
		FileOutputStream FO;
		public pr()
		{
			outtofile=false;
			allinf="";
		}
		public pr(File file)
		{
			outtofile=true;
			try {
				FO=new FileOutputStream(file);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			allinf="";
		}

		@Override
		public void start(int paramInt1, int paramInt2, int paramInt3) {}

		@Override
		public void end() {
			if(outtofile)
			{
				try {
					FO.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		@Override
		public void printText(String paramString) {
			if(outtofile)
			{
				try {
					FO.write(paramString.getBytes());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			allinf+=paramString;
			if(paramString.equals(";")||paramString.equals("{")||paramString.equals("}")) {
				allinf+="\n";
				if(outtofile)
				{
					try {
						FO.write("\n".getBytes());
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}

		@Override
		public void printNumericConstant(String paramString) {
			allinf+=paramString;
			if(outtofile)
			{
				try {
					FO.write(paramString.getBytes());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		@Override
		public void printStringConstant(String paramString1, String paramString2) {
			allinf+=paramString1;
			if(outtofile)
			{
				try {
					FO.write(paramString1.getBytes());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		@Override
		public void printKeyword(String paramString) {
			// TODO Auto-generated method stub
			allinf+=paramString;
			if(outtofile)
			{
				try {
					FO.write(paramString.getBytes());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		@Override
		public void printDeclaration(int paramInt, String paramString1, String paramString2, String paramString3) {
			// TODO Auto-generated method stub、
			//输出函数名称
			allinf+=paramString2;
			if(outtofile)
			{
				try {
					FO.write(paramString2.getBytes());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		@Override
		public void printReference(int paramInt, String paramString1, String paramString2, String paramString3,
				String paramString4) {
			if(allinf.charAt(allinf.length()-1)=='\n')
			{
				allinf+="\t";
				if(outtofile)
				{
					try {
						FO.write("\t".getBytes());
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			allinf+=paramString2;
			if(outtofile)
			{
				try {
					FO.write(paramString2.getBytes());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		@Override
		public void indent() {}

		@Override
		public void unindent() {}

		@Override
		public void startLine(int paramInt) {}

		@Override
		public void endLine() {}

		@Override
		public void extraLine(int paramInt) {}

		@Override
		public void startMarker(int paramInt) {}

		@Override
		public void endMarker(int paramInt) {}
		
	}
	public static void main(String args[])
	{
		ClassFileToJavaSourceDecompiler cl=new ClassFileToJavaSourceDecompiler();
		
		try {
			pr p=new pr(new File("E:\\desktop\\111.java"));
			cl.decompile(new Load(),p, "E:\\desktop\\MyMain.class");
			System.out.print(p.allinf);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值