疑问Java反射会不会被“混淆矩阵器"给毁掉

JAVA逆向&反混淆-追查Burpsuite的破解原理
0x00 摘要:
近来,一款名为Burpsuite的商业版安全工具惨遭破解,网上出现了一款名为BurpLoader的恶意软件,该软件破坏了Burpsuite的认证流程,给世界和平带来了严重威胁。本系列文章通过对BurpLoader的几个版本的逆向分析,分析Burpsuite的破解原理,分析Burpsuite认证体系存在的安全漏洞。
0x01 JD-GUI的用途与缺陷:
JD-GUI是一款从JAVA字节码中还原JAVA源代码的免费工具,一般情况下使用这款工具做JAVA逆向就足够了,但是由于其原理是从JAVA字节码中按照特定结构来还原对应的JAVA源代码,因此一旦字节码结构被打乱(比如说使用混淆器),那么JD-GUI就会失去它的作用,如图为使用JD-GUI打开Burpsuite时的显示:
显然,JD-GUI没能还原JAVA源代码出来,因为Burpsuite使用了混淆器打乱了字节码结构 所以,JD-GUI适用于&没有使用混淆器&的JAVA字节码,而缺陷是一旦字节码结构被打乱,则无法发挥它的作用
0x02 字节码分析:
Java的字节码并不像普通的二进制代码在计算机中直接执行,它通过JVM引擎在不同的平台和计算机中运行。
JVM是一个基于栈结构的虚拟计算机,使用的是JVM操作码(及其助记符),在这一点上和普通二进制反汇编的过程非常相似。 对Java字节码进行反编译其实非常简单,JDK内置的Javap工具即可完成这项任务。
示例:对Javar.class进行反编
注意javap的-c参数是显示详细代码,否则只显示method,而按照java的老规矩Javar不要加后缀名 同时你也可以使用eclipse的插件Bytecode Visualizer来反编译字节码
注意右面的流程图,大家在上程序设计导论课时都画过吧,现在发现它的用途了吧,一眼就看出是一个if-else结构,前两句定义i变量,然后取i=2压栈常数1,比对i和1以后就都java.lang.system.out了,一个输出wooyun,一个输出lxj616。
0x03 老版本的BurpLoader分析:
【声明】:黑吧安全网()登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱,我们会在最短的时间内进行处理。
上一篇:【】【】Java混淆工具ProGuard的最简明使用方法及Warning: can’t find referenced class xxx的解决方法
ProGuard是一个广受欢迎的混淆工具,很多应用也会使用该工具进行混淆。下面简单总结一下其出现的Warning:
can’t find referenced class xxx这类问题的解决方法。
ProGuard最好是通过命令行运行,但是对于只想用一下工具以完成任务的朋友,也许GUI也就够用了。我们将压缩包解压后,在lib目录下双击proguardgui.jar,就可以启动其GUI。然后一步步按照引导来做就行,这方面网上已经有很多教程。需要指出的是,如果是第一次使用的朋友,往往会在进行“Process”之后出现如下面所示的问题:
Warning: mons.crypto.MasterKey: can't find referenced class javax.crypto.KeyGenerator
解决方法也很简单,网上很多日志也说到了,但是大部分是针对命令行方式的。这里介绍一种最简单的方法:在其他选项都设置好后,在Process这一步之前,可以选择“Save Configuration”,保存成ProGuard的配置文件(无所谓文件后缀)。然后针对上面的问题,我们打开刚才保存的配置文件,可以看到类似这样的内容:
-injars 'D:\Projects\makagiga-source-4.8\dist\images.jar'
-injars 'D:\Projects\makagiga-source-4.8\dist\makagiga.jar'
-outjars 'D:\Projects\makagiga-obsfucated-jar'
-libraryjars 'D:\Program Files\Java\jre7\lib\rt.jar'
要解决刚才这个问题,我们在后面加上:
-dontwarn javax.crypto.**
-keep class javax.crypto.**
按照类似的方法将所有的Warning处理掉,然后再用ProGuard将刚才保存的配置文件打开(重启ProGuard之后,选择“Load Configuration”),如果不出意外,就可以生成混淆以后的JAR包或者class文件了。其实,个人感觉ProGuard这个功能挺弱智的。另外,通过直接在配置文件上修改,也免去了大家学习GUI复杂选项的过程,适合需要在半天内完成任务的朋友借鉴。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'1741人阅读
android(17)
在 &json转成java对象时使用了反射机制
当使用 proguard.cfg混淆时,会导致反射出错
因此需要在proguard.cfg内增加类屏蔽
//这4句是不混淆第三方包中的指定内容,脚本中把这行注释去掉
-dontwarn com.xx.bbb.**
-keep class com.xx.bbb.** { *;}
参数来保持第三方库中的类而不乱,-dontwarn和-keep 结合使用,意思是保持com.xx.bbb.**这个包里面的所有类和所有方法而不混淆,接着还叫ProGuard不要警告找不到com.xx.bbb.**这个包里面的类的相关引用。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:118627次
积分:1449
积分:1449
排名:第18944名
原创:16篇
转载:62篇
(1)(2)(1)(4)(1)(1)(1)(2)(1)(3)(3)(5)(2)(13)(14)(2)(2)(3)(7)(10)创建日期: 14:47:05
原文:/view/31ca66d380ebcdd.html
地址&http://proguard.sourceforge.net/启动proguard&解压下载的proguard4.4beta3,解压后进入lib文件把proguard.jar拷贝到自己新建的文件夹里如图:&
把需要混淆的jar和jar所依赖的包也放到新建的文件夹,都放在一起,如下图。&
写一个配置文件,名称自己定,举个简单配置文件例子,内容如下,其中-injars:是你需要混淆的jar,-outjars:是你混淆后输出的jar,-libraryjars:是你混淆的jar需要所依赖的jar包,后面的不在一一说明,可以参考proguard文档,配置文件可以参考文档来对自己混淆的需求来写配置文件。&
-injars&TheFirstDesktopApplication1.jar
-outjars&TheFirstDesktopApplication1_out.jar
-libraryjars&&java.home&/lib/rt.jar
-libraryjars&appframework-1.0.3.jar
-libraryjars&swing-worker-1.1.jar
-printmapping&proguard.map
-overloadaggressively
-defaultpackage&''
-allowaccessmodification
-dontoptimize&
-keep&public&class&*
public&protected&*;
-keep&public&class&org.**
-keep&public&class&it.**
4.&把配置文件保存到你建的文件夹下,如下图。&
5.点击开始,运行,输入cmd,进入你建的文件夹下,如下图。&
6.&然后输入命令语句:java&-jar&proguard.Jar&@a&然后回车,如下图。&
7.&混淆成功,在产生TheFirstDesktopApplication1_out.jar如下图。&
混淆器后,利用反编译器对没TheFirstDesktopApplication1_out.jar反编译,多了好多a,b,c之类的类文件,对反编译的java文件是很难编译的,即说明混淆成功。&
混淆器原理功能&通常情况下,编译后的字节码仍然包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。例如像ProGuard这样的混淆器就能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步免费的精简代码。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。&
Navigation
李岩的个人博客,记录工作和生活总遇到的问题并付解决方法,也为大家提供方便。
评论最多的文章
访问最多的文章}

我要回帖

更多关于 android 混淆 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信