反编译代码格式处理

5 篇文章 0 订阅

背景

想看看公司里一个工具的代码实现,手里只有一个jar包,只能通过jd-gui反编译代码。但是呢,源码是有了,但是看的很难受。
在这里插入图片描述

解决方案

/**
 * 替换 {@code searchDir}中所有remark信息,以及空行   用于解决源码反编译处理费代码
 * @param searchDir
 */
public static void removeRemarkLine(String searchDir){
    File directory = new File(searchDir);
    if (directory.isDirectory()) {
        File[] files = directory.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    removeRemarkLine(file.getAbsolutePath());
                } else if (file.getName().endsWith(".java")) {
                    removeCommentsAndEmptyLines(file.getAbsolutePath());
                }
            }
        }
    }
}

public static void removeCommentsAndEmptyLines(String filePath) {
    try {
        List<String> modifiedLines = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
        String line;
        StringBuilder sb = new StringBuilder();
        boolean commentStart = false;

        while ((line = reader.readLine()) != null) {
            sb.setLength(0);
            // 每一行逐个字符匹配, 碰到  /* 标记注释开头    碰到  */ 丢弃范围内的东西
            for (int i=0; i<line.length(); i++){
                if (line.charAt(i) == '/' && i != line.length() - 1 && line.charAt(i+1) == '*'){
                    commentStart = true;
                    i++;
                    continue;
                }
                if (commentStart && line.charAt(i) == '/' && i != 0 && line.charAt(i-1) == '*'){
                    commentStart = false;
                    continue;
                }
                if (!commentStart){
                    sb.append(line.charAt(i));
                }
            }
            line = sb.toString();
            if (line.trim().isEmpty()){
                continue;
            }
//                modifiedLines.add(line.trim());
            modifiedLines.add(line);
        }
        reader.close();

        BufferedWriter writer = new BufferedWriter(new FileWriter(filePath));
        for (String modifiedLine : modifiedLines) {
            writer.write(modifiedLine);
            writer.newLine();
        }
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

试了一下,基本没啥问题。能看了,但是呢,和idea格式化后的感觉还是有点差异。

程序跑之后

在这里插入图片描述

idea格式化

在这里插入图片描述

总结

只能看,但还是想看idea格式化后的。但是,实现起来好像有点复杂,看后续能不能实现

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、无需设置 由于它是一个便携式工具,它不需要您将其安装在目标计算机上,因为只需拆包其存档并启动可执行文件即可完全访问其功能。 您还可以从可移动存储介质(如USB闪存驱动器或外部HDD)运行它。此外,它不会修改系统中的注册表项,也不会在您的PC上生成其他文件或文件夹,但未经您的明确许可。 2、综合界面 dnSpy配备了一个时尚,全面的用户界面,包含广泛的有用功能,它们整齐地组织在主窗口的标准菜单中。 更重要的是,它具有标准配置窗口,您可以在其中调整各种组件的设置,如其反编译器,调试器或十六进制编辑器,但也可以修改显示或其他参数。 3、.NET反汇编程序 如果您需要一个高效的工具,可以通过为您提供各种有用的工具来帮助您反编译.NET程序集,您可以转到dnSpy。它配有一个反编译器,一个调试器,一个十六进制编辑器和一个程序集编辑器,让你以有效的方式处理程序集。 主窗口附带了一个Assembly Explorer窗格,您可以在其中访问所需程序集的树视图。您可以通过从计算机指定适当的文件或使用“从GAC打开”选项打开程序集,该选项为您提供全局程序集缓存中可用的条目列表。 4、.NET程序集的可靠反向工程工具 所有考虑的事情,dnSpy是一个方便的应用程序,使您能够以有效的方式逆向工程.NET程序集,为您提供广泛的有用工具,包括反编译器,程序集编辑器和调试器。它不需要安装,具有全面,平滑的用户界面,并为您提供了一个标准配置窗口,您可以在其中调整各种组件的设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值