[原创]Burp Suite Pro 2022.11 破解
2022-11-11 19:56:0 Author: bbs.pediy.com(查看原文) 阅读量:28 收藏

活跃值: 活跃值 (142)

能力值:

( LV2,RANK:10 )

在线值:

2

0

谢谢分享

活跃值: 活跃值 (207)

能力值:

( LV4,RANK:50 )

在线值:

3

0

很酷

活跃值: 活跃值 (2243)

能力值:

( LV2,RANK:10 )

在线值:

4

0

需要优化的地方,classname判断是burp/开头的,这个还可以改成总参数loader,loader不是null,以burp.开头,这样会少很多判断,burp包下的类并不都是它自己loader加载的。再就是那个定位特征值,有的类特别大,查找起来费时,而且你是所有burp的类都检查,尽量缩小一下范围。还有就是尽量少去写字节码,做到最小侵入性,不易出错更稳定,你的des和base完全可以放到自己的java方法中,编译好,用一个字节码指令去调用就行。

活跃值: 活跃值 (1585)

能力值:

( LV3,RANK:20 )

在线值:

ny0c 活跃值 2022-11-12 02:24

5

0

看loader看到的时候是jdk的,单独getname也是null,所以我没用loader作为判断,编译好后的class文件有java版本限制,所以我没这么做

最后于 2022-11-12 02:26 被ny0c编辑 ,原因:

活跃值: 活跃值 (1585)

能力值:

( LV3,RANK:20 )

在线值:

ny0c 活跃值 2022-11-12 04:02

6

0

发现换了哈希匹配算法之后...才提升0.1-0.3秒,感觉不是很必要换掉匹配算法,但是提升一点也是提升,还是放出来了,另loader那里的classLoader.getClass().getName()才可以拿到burp开头的,也试了下,确实是得加上classloader判断,匹配次数从1734降低到70,总体启动时间从7-8秒降低到2-3秒.

活跃值: 活跃值 (2243)

能力值:

( LV2,RANK:10 )

在线值:

7

0

不用那么复杂,可以抓住类特别大的特点,通过类的字节数组这个参数大于多少就行过滤,不必再去查询特征,计算hash啥的。

活跃值: 活跃值 (1585)

能力值:

( LV3,RANK:20 )

在线值:

ny0c 活跃值 2022-11-12 07:45

8

0

guduzhe 不用那么复杂,可以抓住类特别大的特点,通过类的字节数组这个参数大于多少就行过滤,不必再去查询特征,计算hash啥的。

这个有考虑过,不过怕老版本不兼容所以就放弃这个方式过滤了.并且现在新版burp要求java11后,相比jdk8时代,代码执行上优化了许多,之前我那个findbyarray在jdk8上就很慢,jdk11后就快了许多

活跃值: 活跃值 (1291)

能力值:

( LV2,RANK:10 )

在线值:

9

0

感谢大佬分享

活跃值: 活跃值 (304)

能力值:

( LV2,RANK:10 )

在线值:

10

0

谢谢楼主分享

活跃值: 活跃值 (1357)

能力值:

( LV12,RANK:220 )

在线值:

scz 活跃值 5 2022-11-12 15:19

11

2

感谢分享

活跃值: 活跃值 (2243)

能力值:

( LV2,RANK:10 )

在线值:

12

0

已引用您的思路,并修改成基于ja-netfilter的插件。
https://github.com/googleweb/loader/releases/tag/1.0.4

雪    币: 3

能力值:

( LV1,RANK:0 )

在线值:

13

0

GUI既然重写了,那给你个新的注册思路. agent启动自动检测注册表并写入license到注册表.就不用GUI了.
license相关注册表需要写入两个key

var burpProduct = 1; // 1==DESKTOP, 2==ENTERPRISE
var burpUser = "xxx";
var licenseId = getRandomString();

var preferences = Preferences.userRoot();
var burp = preferences.node("/burp");

// write generate license to regedit
var licenseKey = String.format("license%s", burpProduct);
var generateLicense = generateLicense(burpUser, licenseId);
burp.put(licenseKey, generateLicense);

// write generate license response to regedit
var generateRequest = generateRequest(licenseId);
var generateResponse = generateResponse(generateRequest);
var licenseResponseKey = Base64.getEncoder().encodeToString(MD4.digest(licenseId.getBytes()));
burp.put(licenseResponseKey, generateResponse);

preferences.flush();

活跃值: 活跃值 (2243)

能力值:

( LV2,RANK:10 )

在线值:

14

0

mb_zjwuturb GUI既然重写了,那给你个新的注册思路. agent启动自动检测注册表并写入license到注册表.就不用GUI了. license相关注册表需要写入两个key var burpProduct ...

gui是自定义的用户名的,写到代码里不方便其他人修改了

活跃值: 活跃值 (544)

能力值:

( LV4,RANK:40 )

在线值:

CRoot 活跃值 2022-12-4 13:15

15

0

请教一下 当前版本的Burp 通过ClassFileTransformer导出的有的类是有问题的,如果想复原这些有什么办法没?我看源码是直接忽略掉那些asm不能解析的异常类来着了。这些异常的类我导出来看了一下他的部分元素还有,jdk 1.6写的,但是后面的根本就看不到了,都是一些乱码,以及大小也不对感觉是加密截断掉了。

==== update =====

似乎是干扰或者废弃的类,我直接return new byte[0] 丝毫不影响程序运行,好奇怪怎么会有这么多这样的奇怪的类,晚些我用btrace再定位一下看看为啥会有这种没有用的类。

最后于 2022-12-4 16:33 被CRoot编辑 ,原因: 增加结果

活跃值: 活跃值 (2243)

能力值:

( LV2,RANK:10 )

在线值:

16

0

CRoot 请教一下 当前版本的Burp 通过ClassFileTransformer导出的有的类是有问题的,如果想复原这些有什么办法没?我看源码是直接忽略掉那些asm不能解析 ...

return byte[0]和return null的效果是一样的吧,都是不修改吧。你也是厉害,直接看16进制数据,不是乱码才怪。

活跃值: 活跃值 (544)

能力值:

( LV4,RANK:40 )

在线值:

CRoot 活跃值 2022-12-5 09:58

17

0

guduzhe return byte[0]和return null的效果是一样的吧,都是不修改吧。你也是厉害,直接看16进制数据,不是乱码才怪。

官方文档说的是 a well-formed class file buffer (the result of the transform), or null if no transform is performed. 我认为byte[0] 在java中是不等于null的,不过我还需论证一番。以及 为何看16进制 是因为这个class文件有问题,无法正常解析。你可以看一下class的文件结构就明白为何我说他是乱码了。

最后于 2022-12-5 09:59 被CRoot编辑 ,原因: 补充

活跃值: 活跃值 (1585)

能力值:

( LV3,RANK:20 )

在线值:

ny0c 活跃值 2022-12-6 13:11

18

0

CRoot guduzhe return byte[0]和return null的效果是一样的吧,都是不修改吧。你也是厉害,直接看16进制数据,不是乱码才怪。 ...

你可以试试cfr,或者Bytecode-Viewer,都是开源的,后者可以看asm

活跃值: 活跃值 (544)

能力值:

( LV4,RANK:40 )

在线值:

CRoot 活跃值 2022-12-6 14:19

19

0

ny0c 你可以试试cfr,或者Bytecode-Viewer,都是开源的,后者可以看asm

非常感谢,那些类我认为应该是废弃的类了,似乎不影响破解以及功能实现

        @Override
        public byte[] transform(ClassLoader classLoader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) {

            if (className.startsWith("burp/") && classLoader.getClass().getName().startsWith("burp.")) {
                ClassReader classReader = new ClassReader(classfileBuffer);         <====在这里你增加try catch可以看到好多不可识别的 直接Catch Exception即可
                if (classReader.getSuperName().equals("java/lang/Object")) {
                    ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_FRAMES);
                    SkipValid skipValid = new SkipValid(classWriter);
                    classReader.accept(skipValid, ClassReader.EXPAND_FRAMES);

                    return classWriter.toByteArray();
                }
            }
            return classfileBuffer;
        }

变成

        @Override
        public byte[] transform(ClassLoader classLoader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) {

            if (className.startsWith("burp/") && classLoader.getClass().getName().startsWith("burp.")) {
            try{
                ClassReader classReader = new ClassReader(classfileBuffer);
                if (classReader.getSuperName().equals("java/lang/Object")) {
                    ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_FRAMES);
                    SkipValid skipValid = new SkipValid(classWriter);
                    classReader.accept(skipValid, ClassReader.EXPAND_FRAMES);

                    return classWriter.toByteArray();
                }
            }
            }catch (Exception e){ e.printStackTrace();}
            return classfileBuffer;
        }

即可看到大量的不可解析类的出现

有时间打算研究学习尝试一下动态调试 跟一跟这些成因,个人猜测应该是历史遗留问题。等周末或者晚上卷卷看了~

最后于 2022-12-6 14:21 被CRoot编辑 ,原因: 补充

活跃值: 活跃值 (95)

能力值:

( LV2,RANK:15 )

在线值:

20

0

谢谢楼上诸位大佬的分享。

活跃值: 活跃值 (39)

能力值:

( LV2,RANK:10 )

在线值:

21

0

多谢分享

活跃值: 活跃值 (24)

能力值:

( LV2,RANK:10 )

在线值:

22

0

v2022.12.5也適用,謝謝分享


文章来源: https://bbs.pediy.com/thread-275112.htm
如有侵权请联系:admin#unsafe.sh