JAVA逆向ampamp反混淆追查Burpsuite的破解原
0x00摘要:
本系列文章通过对BurpLoader的几个版本的逆向分析,分析Burpsuite的破解原理,分析Burpsuite认证体系存在的安全漏洞。
0x01JDGUI的用途与缺陷:
JDGUI是一款从JAVA字节码中还原JAVA源代码的免费工具,一般情况下使用这款工具做JAVA逆向就足够了,但是由于其原理是从JAVA字节码中按照特定结构来还原对应的JAVA源代码,因此一旦字节码结构被打乱(比如说使用混淆器),那么JDGUI就会失去它的作用,如图为使用JDGUI打开Burpsuite时的显示:
显然,JDGUI没能还原JAVA源代码出来,因为Burpsuite使用了混淆器打乱了字节码结构所以,JDGUI适用于‘没有使用混淆器’的JAVA字节码,而缺陷是一旦字节码结构被打乱,则无法发挥它的作用
0x02字节码分析:
Java的字节码并不像普通的二进制代码在计算机中直接执行,它通过JVM引擎在不同的平台和计算机中运行。
JVM是一个基于栈结构的虚拟计算机,使用的是JVM操作码(及其助记符),在这一点上和普通二进制反汇编的过程非常相似。对Java字节码进行反编译其实非常简单,JDK内置的Javap工具即可完成这项任务。示例:对Javar。class进行反编
注意javap的c参数是显示详细代码,否则只显示method,而按照java的老规矩Javar不要加后缀名同时你也可以使用eclipse的插件BytecodeVisualizer来反编译字节码
注意右面的流程图,大家在上程序设计导论课时都画过吧,现在发现它的用途了吧,一眼就看出是一个ifelse结构,前两句定义i变量,然后取i2压栈常数1,比对i和1以后就都java。lang。system。out了,一个输出wooyun,一个输出lxj616。
0x03老版本的BurpLoader分析:
随着Burpsuite的更新,BurpLoader也在跟着进行更新,我们从老版本的BurpLoader入手,简要分析一下之前老版本的burpsuite破解原理。本处选用了1。5。01版本的BurpLoader进行分析首先试着用JDGUI载入BurpLoader:
成功还原了BurpLoader源代码,只可惜由于是对burpsuite的patch,所以burpsuite的混淆在burploader里仍然可读性极差,不过可以推断burploader本身没有使用混淆工具。publicstaticvoidmain(String〔〕args)
{
try
{
intretJOptionPane。showOptionDialog(null,Thisprogramcannotbeusedforcommercialpurposes!,BurpLoaderbylarrylau163。com,0,2,null,newString〔〕{IAccept,IDecline},null);
显示选择对话框:这程序是出于学习目的写的,作者邮箱larrylau(at)163。com
if(ret0)选择我同意
{
以下用到的是java反射机制,不懂反射请百度
for(inti0;ilt;clzzData。length;i)
{
ClassclzzClass。forName(clzzData〔i〕);
是burpsuite的静态类(名字被混淆过了,也没必要列出了)
Fieldfieldclzz。getDeclaredField(fieldData〔i〕);
静态类中的变量也被混淆过了,也不必列出了
field。setAccessible(true);
访问private必须先设置这个,不然会报错
field。set(null,strData〔i〕);
把变量设置成strData(具体那一长串到底是什么暂不讨论)
}
PreferencesprefsPreferences。userNodeForPackage(StartBurp。class);
明显preferences是用来存储设置信息的
for(inti0;ilt;keys。length;i)
{
key和val能猜出是什么吧
Stringvprefs。get(keys〔i〕,null);
if(!vals〔i〕。equals(v))
{
prefs。put(keys〔i〕,vals〔i〕);
}
}
StartBurp。main(args);
}
}
catch(Exceptione)
{
JOptionPane。showMessageDialog(null,Thisprogramcanonlyrunwithburpsuiteprov1。5。01。jar,BurpLoaderbylarrylau163。com,
0);
}
}
}
因此,BurpLoader的原理就是伪造有效的Key来通过检测,Key的输入是通过preference来注入的,而我猜测它为了固定Key的计算方法,通过反射把一些环境变量固定成常量了
0x04新版本的BurpLoader分析:
以下用1。6beta版的BurpLoader进行分析:首先用JDGUI尝试打开BurpLoader:
看来这个版本的BurpLoader对字节码使用了混淆,这条路走不通了于是直接读字节码吧!
大家可以看到这里的字符串都是混淆过的,每一个都jsr到151去解密
这段解密代码特点非常明显,一个switch走5条路,给221传不同的解密key,这不就是ZelixKlassMaster的算法吗?简单的异或而已,轻松写出解密机:publicclassVerify{
privatestaticStringdecrypt(Stringstr){
charkey〔〕newchar〔〕{73,25,85,1,29};
chararr〔〕str。toCharArray();
for(inti0;ilt;arr。length;i){
arr〔i〕key〔i5〕;
}
returnnewString(arr);
}
publicstaticvoidmain(Stringargs〔〕){
System。out。println(decrypt(xsdgu4t3xegjhs。7m7;hplamp;St7tn5v:j}dx));
}
}
里面的5个密钥就是上图bipush的传参,别忘了iconst1的那个1解密出来是:larry。lau。javax。swing。plaf。nimbus。NimbusLook:4其实这里解密出字符串没有什么用处,因为我们已经拿到老版本的源代码了,不过在别的软件逆向分析中可能会非常有用
0x05总结amp;POC
以下为我修改后的BurpLoader,其中的恶意代码我已经去除,并将修改前的原值输出,大家可以在添加burpsuitejar包后编译运行这段代码packagestratburp;
importburp。StartBurp;
importjava。lang。reflect。Field;
importjava。util。prefs。Preferences;
importjavax。swing。JOptionPane;
publicclassstartburp
{
privatestaticfinalString〔〕clzzData{burp。ecc,burp。voc,burp。jfc,
burp。gtc,burp。zi,burp。q4c,burp。pid,burp。y0b};
privatestaticfinalString〔〕fieldData{b,b,c,c,c,b,c,c};
privatestaticfinalStringerrortipThisprogramcanonlyrunwithburpsuiteprov1。5。01。jar;
privatestaticfinalString〔〕keys{license1,uG4NTkffOhFNon7RT1nbw};
publicstaticvoidmain(String〔〕args)
{
try
{
for(inti0;ilt;clzzData。length;i)
{
ClassclzzClass。forName(clzzData〔i〕);
Fieldfieldclzz。getDeclaredField(fieldData〔i〕);
field。setAccessible(true);
field。set(null,strData〔i〕);
System。out。println(field。get(null));
}
PreferencesprefsPreferences。userNodeForPackage(StartBurp。class);
for(inti0;ilt;keys。length;i)
{
Stringvprefs。get(keys〔i〕,null);
System。out。println(prefs。get(keys〔i〕,null));
}
StartBurp。main(args);
}
catch(Exceptione)
{
JOptionPane。showMessageDialog(null,Thisprogramcanonlyrunwithburpsuiteprov1。5。01。jar,Notice,0);
}
}
}
其效果如截图所示
其中前8行输出为之前BurpLoader恶意修改的目标原值(对我的计算机而言),同一台设备运行多少遍都是不变的,后面的key由于我之前运行过BurpLoader因此是恶意修改后的值(但是由于前8行没有修改因此不能通过Burpsuite验证),可见BurpLoader其实是使用了同一个密钥来注册所有不同计算机的,只不过修改并固定了某些参与密钥计算的环境变量而已,这大概就是Burpsuite破解的主要思路了,至于最初能用的license是怎么计算出来的,我们以后再研究
本文作者:Drops,转载自:http:www。mottoin。comdetail3651。html
2021年下半年你会买哪款手机?2021年下半年你会买哪款手机?推荐五款最佳车型,绝对值得选择。李克基时间真的是一把屠刀,快到年底了回顾2021年的手机市场,除了普遍涨价,竞争也很激烈,各大厂商也……
删订阅?政治阴谋?想多了,谷歌只想挽回广告商Morketin文Rolan作为谷歌旗下最大的视频网站,Youtube从去年的八月份开始,就持续发生大量youtuber(视屏上传者)的订阅者被系统自动取关,视频点赞显示被缩减等情况。之……
神州数码2021年营收破千亿元推进数云融合战略本报记者谢若琳3月31日,在神州数码2021年年度线下业绩交流会上,神州数码集团董事长兼总裁郭为对《证券日报》记者表示,云是数字经济的技术范式。2021年,神州数码……
新纽科技去年总收入2亿元人工智能及大数据分析解决方案收入高速本报记者王丽新3月31日晚,新纽科技公布2021年全年业绩。过去一年,新纽科技实现总收入2。06亿元,同比增长16。9,其中以人工智能及大数据分析技术提供支持的创新型解决……
Csocket非阻塞模式一、前言初期学习socket的时候,为了方便理解,使用默认的阻塞模式比较多。而实际做项目时,我们必须考虑程序的并发性,非阻塞模式在其中担任着很重要的角色,是必会的点之一。……
两只科创板新股同日上市!赛微微电股价开盘破发,年内最贵新股纳一天两只科创板新股上市。4月22日,资本邦了解到,赛微微电今日正式登陆科创板上市,首发价格为74。55元股。值得关注的是,公司股价开盘破发,公司以52。33元股开盘,股价……
绿色低碳科技创新赋能碳达峰碳中和作者:罗良文、马艳芹(中南财经政法大学经济学院);梁圣蓉(武汉商学院经济学院)如期实现碳达峰、碳中和目标是立足中国经济社会高质量发展的必然抉择。双碳目标的实现既需要重大技……
微信打击数字藏品交易,大批公众号被封禁29日,微信客户端中多家与数字藏品相关的公众号突然被封禁,涉及的平台超十个,均为中小型数字藏品平台,腾讯幻核等头部平台未受影响。大部分平台皆被提示为由用户投诉并经平台审核,存在……
你开发的app可能正饱受风险作者:brucevanfdm链接:https:www。jianshu。comp7f2202c180121、前言近期facebook的隐私泄露事件再度唤起了公众……
拿什么去爱你,我的华为作为一个爱国青年,2017年把用了8年的外星人笔记本更换成了轻薄的华为matebookX(7999元),香槟金色,屏占比高,轻薄,使用感非常棒,2020年(质保期刚过),……
贵州外卖骑手可享智慧换电服务来源:中工网工人日报原标题:30秒内扫码更换电瓶车电池(引题)贵州外卖骑手可享智慧换电服务(主题)中工网讯(工人日报中工网记者李丰)3月18日,记者在中国铁塔……
在媒体平台上发稿怎么才能达到好效果?一、网站是不是有通道、包百度收录包百度新闻源假如公布的网站有通道,那最少你选择的发表文章方式公布的是靠谱的网站频道,而并不是专业以便内容更新设定的滚动新闻,或是单纯性是让……