ope电竞app_ope体育·电竞_ope 电竞
ope电竞app

福尔摩斯探案集,JAVA逆向&反混杂-清查Burpsuite的破解原理,包头

admin admin ⋅ 2019-04-07 01:17:56

0x0上石下水是什么字0 摘要:


本系列文章经过对BurpLoader的几个版其他逆向剖析,剖析Burpsuite的破解原理,剖析Burpsuite认证系统存在的安全漏洞。

0x01 JD-GUI的用途与缺点:


JD-GUI是一款从JAVA字节码中复原JAVA源代码的免费东西,一般情况下运用这款东西做JAVA逆向就足够了,可是因为其原理是从JAVA字节码中依照特定结构来复原对应的JAVA源代码,因而一旦字节码结构被打乱(比如说运用稠浊器),那么JD-GUI就会失掉它的效果,如图为运用JD-GUI翻开Burpsuite时的显现:

JAVA逆向&反稠浊-清查Burpsuite的破解原理

显着,JD-GUI没能复原JAVA源代码出来,因为Burpsuite运用了稠浊器打乱了字节码结构 所以,JD-GUI适用于‘没有运用稠浊器’的JAVA字节码,而缺点是一旦字节码结构被打乱,则无法发挥它的效果

0x02 字节码剖析:


Java的字节码并不像一般的二进制代码在核算机中直接履行,它经过JVM引擎在不同的渠道和核算机中运转。

JAVA逆向&反稠浊-清查Burpsuite的破解原理

JVM是一个根据栈结构的虚拟核算机,运用的是JVM操作码(及其助记符),在这一点上和一般二进制反汇编的进程非福尔摩斯探案集,JAVA逆向&反稠浊-清查Burpsuite的破解原理,包头常类似。 对Java字节码进行反编译其实十分简略,JDK内置的Javap东西即可完结这项使命。 示例:对Javar.class进行反编

留意javap的-c参数是显现详细代码,否则只显现method,而依照j安身美利坚ava的老规矩Javar不要加后缀名 一起你也能够运用eclipse的插件Bytecode Visualizer来反编译字节码

留意右面的流程图,咱们在上程序设计导论课时都画过吧,现在发现它的用途了吧,一眼就看出是一个if-else结构,前两句界说i变量,然后取i=2压栈常数1,比对i和1今后就都java.lang.system.out了,一个输出wooyun,一个输出lxj616。

0x03 老版其他BurpLoader剖析:


跟着Burpsuite的更新,BurpLoader也在跟着进行更新,咱们从老版其他BurpLoader下手,扼要剖析一下之前老版其他burpsuite破解原理。 本处选用了1.5.01版其他BurpLoader进行剖析 首要试着用JD-GUI载入BurpLoader:

成功复原昆特沙了BurpLoader源代码,只可惜由所以对burpsuite的patch,所以burpsuite的稠浊在burploader里依然可读性极差,不过能够揣度burploader自身没有运用稠浊东西。

public static void main(String[村庄活] args)
{
try
{
int ret = JOptionPane.showOptionDialog(null, "This program can not be used for commercial purposes!", "BurpLoader by larry_lau@163.com", 0, 2, null, new String[] { "I Accept", "I Decline" }, null);
//显现挑选对话框:这程序是出于学习意图写的,作者邮箱larry_lau(at)163.com
if (ret == 0) //挑选我赞同
{
//以下用到的是java反射机制,不明白反射请百度
for (int i = 0; i < clzzData.length; i++)
{
Class clzz = Class.forName(clzzData[i]);
//是burpsuite的静态类(姓名被稠浊过愿望百分百了,也没必要列出了)
Field field = clzz.getDeclaredField(fieldData[i]);
//静态类中的变量也被稠浊过了,也不用列出了
field.setAccessible(true);
//拜访private必须先设置这个,否则会报错
field.set(null, strData[i]);
//把变福尔摩斯探案集,JAVA逆向&反稠浊-清查Burpsuite的破解原理,包头量设置成strData(详细那一长串究竟是什么暂不评论)
}
Preferences prefs = Preferences.userNodeForPackage(StartBurp.class);
//显着preferences是用来存储设置信息的
for (int i = 0; i < keys.length; i++)
{
// key和val能猜出是什福尔摩斯探案集,JAVA逆向&反稠浊-清查Burpsuite的破解原理,包头么吧
String v = pref福尔摩斯探案集,JAVA逆向&反稠浊-清查Burpsuite的破解原理,包头s.get(keys[i], null);
if (!vals[i].equals(v))
{
prefs.put(keys[i], vals[i]);
}
}
StartBurp.main(args);
}
}
catch (Exception e)
{品乐谦
JOptionPane.showMessageDialog(null, "This program can only run with burpsuite_pro_v1.5.01.jar", "BurpLoader by larry_lau@163.com",
0);
}
}
}

因而,BurpLoader的原理便是假造有用的Key来经过检测,Key的输入是经过preference来注入的,而我猜想它为了固定Key的计李同路病退算办法,经过反射把一些环境变量固定成常量了

0x04 新版其他BurpLoader欧阳马小云剖析:


以下云南早婚村用1.6beta版的BurpLoader进行剖析: 首要用JD-GUI测验翻开BurpLoader:

看来这个版其他BurpLoader对字节码运用了稠浊,这条路走不通了 所以直接读字节码吧!

咱们能够看到这儿的字符串都是稠浊过的,每一个都jsr到151去解密

这段解密代码特色十分显着,一个s福尔摩斯探案集,JAVA逆向&反稠浊-清查Burpsuite的破解原理,包头witch走5条路,给221传不同的解密key,这不便是Zelix KlassMaster的算法吗? 简略的异或罢了,轻松写出解密机:

public class Verify {
private static String decrypt(String str) {
char key[] = new char[] {73,25,85,1,29};
char arr[] = str.toC福尔摩斯探案集,JAVA逆向&反稠浊-清查Burpsuite的破解原理,包头harArray();马未都妻子贾雄伟相片
for (int i = 0; i < arr.length; i++) {
arr[i] ^= key[i % 5];
}
return new String(arr);
}
public statiflyteac vo洗铜水id main (String args[]) {
System.out.println(decrypt("%x'sdgu4t3#x#`egj"hs.7初中男生射入女生图%m|/7;hp+l&/S t7tn5v:j'}_dx%"));
}
}

里边的5个密钥便是上图bipush的传参,别忘了iconst_1的那个1 解密出来是:larry.lau.javax.swing.plaf.nimbus.NimbusLook:4 其实这儿解密出字符串没有什么用途,因为咱们现已拿到老版其他源代码了,不过在其他软件逆向剖析中可能会十分有用

0x05 总结&POC


以下为我修正后的BurpLoader,其间的歹意代码我现已去除,并将修正前的原值输出,咱们能够在增加burpsuite jar包后编译运转这段代码

package stratburp;
import burp.StartBurp;
import java.la第七翼动ng.reflect.Field;
import java.util.prefs.Preferences;
import javax.swing.JOptionPane;
public class startburp
{女神相片
private static final String[] clzzData = { "burp.ecc", "burp.voc", "burp.jfc",
"burp.gtc", "burp.zi", "burp.q4c", "burp.pid", "burp.y0b" };
private static final String[] fieldData = { "b", "b", "c", "c", "c", "b", "c", "c" };
private static final String errortip = "This program can only run with burpsuite_pro_v1.5.01.jar";
private static final String[] keys = { "license1", "uG4NTkffOhFN/on7RT1nbw==" };
public static void main(String[] args)
{
try
{
for (int i = 0; i < clzzData.length; i++)
{
Cla方尧平ss clzz = Class.forName(clzzData[i]);
Field field = clzz.getDeclaredField(fieldData[i]);
field.setAccessible(true);
//field.set(null, strData[张一笙i]);
System.out.println(field.get(null));
}
Preferences prefs = Preferences.userNodeForPackage(StartBurp.class);
for (int i = 0; i < keys.length; i++)
{
String v = prefs.get(keys[i], null);
System.out.println(prefs.get(keys[i], null));
}
Sta裂解符文rtBurp.main(args);
}
catch (Exceptionbongddak e)
{
JOptionPane.showMessageDialog(null, "This program can only run with burpsuite_pro_v1.5.01.jar", "Notice",0);
}
}
}

其效果如截图所示

其间前8行输出为之前BurpLoader歹意修正的方针原值(对我的核算机而言),同一台设备运转多少遍都是不变的,后边的key因为我之前运转过BurpLoader因而是歹意修正后的值(可是因为前8行没有修正因而不能经过Burpsuite验证),可见BurpLoader其实是运用了同一个密钥来注册一切不同核算机的,只不过修正并固定了某些参加密钥核算的环境变量罢了,这大约便是Burpsuite破解的首要思路福尔摩斯探案集,JAVA逆向&反稠浊-清查Burpsuite的破解原理,包头了,至于开始能用的license是怎样核算出来的,咱们今后再研讨

本文作者:Drops,转载自:http://www.mottoin.com/detail/3651.html

相关新闻

admin

admin

TA太懒了...暂时没有任何简介

精彩新闻