Java反编译的研究

记一次 逆向 autoJs 的过程 一、准备: 一个用autoJs写的Apk; AndroidKiller工具; adb工具; JAVASDK; androidstudio; adb java 环境变量配置好; androidKiller的apkTools换成最新的; 二、开始逆向: 1.使用androidKiller反编译autoJs.apk ```java 得到工程目录 assets->project :autoJs的配置目录 project.json配置App和J... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> java诞生于1995年,是一门较年轻的语言。它以平台无关性,安全性,面向对象,分布式,键壮性等特点赢得了众多程序员的青睐。特别是它简洁的面向对象的语言风格,更让许多人对它爱不释手。但人们在使用java的过程中,会发现它有几个致命的弱点:运行速度慢,用户使用不便,源代码保护机制不够安全。特别是在保护源代码方面,java是基于解释一种叫java字节码的中间代码来运行其程序的,而且jvm比计算机的微处理器要简单的多,文档也很齐全,结果造成其目标程序很容易被反编译,而且所得代码和其原始代码十分相似,甚至可以一模一样,可读性相当好。这就给java的代码保护带来了不利。但要实现java程序的保护,也不是不可能的,经研究和总结,至少有三种实现方式:1.混淆器;2.网络加载重要类;3加密重要类。 1 混淆器 目前,开发人员使用的比较多的保护代码的方法是用混淆器。混淆器是采用一些方法将类,变量,方法,包的名字改为无意义的字符串;使用非法的字符代替符号;贴加一些代码使反编译软件崩溃;贴加一些无关的指令或永远执行不到的指令等使反编译无法成功或所得的代码可读性很差。这样就实现了反反编译的目的。我们来做个演示。原始代码如下: import java.io.*; import java.security.*; public class sKey_kb{ public static void main(String args[]) throws Exception{ FileInputStream f=new FileInputStream("key1.dat"); ObjectInputStream b=new ObjectInputStream(f); Key k=(Key)b.readObject(); byte[] kb=k.getEncoded(); FileOutputStream f2=new FileOutputStream("keykb1.dat"); f2.write(kb); for(int i=0;i>,这里就不祥述了)。 加密完成后,就是通过解密来获取原始类的java字节码。可以通过一个DecryptStart程序运行经过加密的应用。 具体方法如下: public class DecryptStart extends ClassLoader { private SecretKey key; private Cipher cipher; public DecryptStart( SecretKey key ) throws GeneralSecurityException,IOException { this.key = key; String algorithm = "DES"; SecureRandom sr = new SecureRandom(); System.err.println( "[DecryptStart: creating cipher]" ); cipher = Cipher.getInstance( algorithm ); cipher.init( Cipher.DECRYPT_MODE, key, sr ); } // main过程:我们要在这里读入密匙,创建DecryptStart的 static public void main( String args[] ) throws Exception { String keyFilename = args[0]; String appName = args[1]; String realArgs[] = new String[args.length-2]; System.arraycopy( args, 2, realArgs, 0, args.length-2 ); System.err.println( "[DecryptStart: reading key]" ); byte rawKey[] = Util.readFile( keyFilename ); DESKeySpec dks = new DESKeySpec( rawKey ); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES" ); SecretKey key = keyFactory.generateSecret( dks ); DecryptStart dr = new DecryptStart( key ); System.err.println( "[DecryptStart: loading " appName "]" ); Class clasz = dr.loadClass( appName ); String proto[] = new String[1]; Class mainArgs[] = { (new String[1]).getClass() }; Method main = clasz.getMethod( "main", mainArgs ); Object argsArray[] = { realArgs }; System.err.println( "[DecryptStart: running " appName ".main()]" ); main.invoke( null, argsArray ); } 虽然应用本身经过了加密,但启动程序DecryptStart没有加密。攻击者可以反编译启动程序并修改它,把解密后的类文件保存到磁盘。降低这种风险的办法之一是对启动程序进行高质量的模糊处理。或者,启动程序也可以采用直接编译成机器语言的代码,使得启动程序具有传统执行文件格式的安全性.比如使用java的jini技术,来实现解密部分,就可以作到。当然,这是需要付出一定的代价的,就是丧失了java的最大特点--平台无关性。不过,jni技术可以用c语言在多种平台实现,我们可以在不同的平台编写不同的启动程序。 4 综合实例: 对于一些需要网络支持的软件来说,可以建立一个Web站点,在站点上存放该软件的关键类,并且建立用户管理机制,用户直接登陆网站进行确认,是许可用户,则发放解密key文件,让其下载关键类,在本地解密运行。这样作的优点是建立的Web站点可以有效的管理密钥以及用户资料。从而起到加强保护软件源代码的作用,并方便软件升级。用C/S结构是不错的选择。  
jsc反编译工具编写探索之路 对于经常做游戏安全逆向的读者来说,可能会经常遇到Cocos2dx编写的游戏。这个国产开源的游戏开发引擎支持多种编程语言进行游戏开发:发括主流的C/C++/JavaScript/Lua,之前,与大家讨论的Lua软件安全系列的文章,讨论的是采用Cocos2dx+Lua开发的游戏。而今天要聊的是基于JavaScript开发的游戏Cocos2dx+js。 在新版本Cocos2dx+js的组合下,开发的游... 阅读详情

相关推荐

掌握Java反编译:软件使用与技巧

本文还有配套的精品资源,点击获取 简介:Java反编译软件是开发和逆向工程不可或缺的工具,它将字节码文件转换为可理解的源代码形式,便于学习、调试和安全分析。本文深入探讨了Java字节码、反编译工具如jad、jd-gui、Procyon、FernFlower和JDeobfuscator等,并提供了使用这些工具的指导。同时,强调了尊重版权和合法使用的重要性,并介绍了相关使用说明...

weixin_42181686的博客 985

微信小程序wxappUnpacker反编译报错vm.js ReferenceError: __mainPageFrameReady__ is not defined的问题解决方法

微信小程序wxappUnpacker反编译报错vm.js ReferenceError: __mainPageFrameReady__ is not defined的问题解决 打开page-frame.html到对底部 去掉 __mainPageFrameReady__()就可以  标点符号啥的都不要动  只删掉这个就可以 在执行 node wuWxss.js xcx\新生成的目录  生...

GEO,SEO,AI优化,AI搜索优化,生成式引擎优化 7905

JD-GUI及其他Java反编译工具的探索与实践

本文还有配套的精品资源,点击获取 简介:Java反编译工具允许开发者将编译后的.class文件转换回可读的源代码形式,有助于理解程序工作原理,特别是当没有源代码时。常用的Java反编译工具有JD-GUI、JAD和Procyon等。JD-GUI是一个提供图形用户界面的工具,尤其适用于Windows系统,它通过读取、解析、重构和显示源代码的步骤,帮助开发者理解二进制Java程序...

weixin_42471823的博客 1718

JS反编译

Javascript Beautifier 具备反编译压缩的JS功能、点击 Beautify JavaScript or HTML (ctrl-enter) 在线版本: http://jsbeautifier.org/   巨卓网开发论坛 http://www.juapk.com/forum.php?gid=1...

轻描淡写 2万+

掌握Android应用反编译技术

本文还有配套的精品资源,点击获取 简介:在Android开发过程中,了解APK内部结构和源代码逻辑是至关重要的。本文介绍了Android反编译工具的使用,包括 dex2jar 、 android-apktool 和 jd-gui 等,这些工具可以用于解包APK文件、将 .dex 文件转换为 .jar 文件...

weixin_34511754的博客 1228

Eclipse 反编译插件:中文版,轻松查看 Java 字节码

本文还有配套的精品资源,点击获取 简介:Eclipse的反编译插件是专门为中国开发者设计的,能够帮助开发者查看和理解已编译的.class文件源代码。该插件安装简单,直接放置在Eclipse的指定目录即可自动加载。插件包含了反编译器,可以将字节码转换为Java源代码,方便开发者分析和学习第三方库或进行逆向工程。 1. Eclipse反编译插件简介 反编译插件是...

weixin_32925455的博客 851

Merkle认证树:从一颗种子到千片叶子的局部可信验证

在分布式系统和区块链场景中,数据完整性校验常面临一个核心矛盾:验证方无法或不愿持有全量数据,却又需要确认某个数据分块真实可信。传统哈希列表只能提供整体性校验,无法定位局部错误,更无法在轻节点上高效验证单笔交易。Merkle认证树通过将数据分块映射为叶子节点,两两哈希逐层聚合,最终收敛为一个根哈希。验证时只需提供根哈希、目标数据块和一条由兄弟哈希组成的证明路径,即可在 O(logN) 的复杂度内完成局部存在性证明。这一结构被广泛应用于区块链轻节点(SPV)、文件同步、日志透明、证书透明等场景,让“局部可信”从

congji3817的博客 457

探索JD-GUI:Java反编译工具的使用与实践

本文还有配套的精品资源,点击获取 简介:JD-GUI是一款实用的Java反编译工具,允许开发者查看和理解编译后的Java字节码。它具有便捷的安装和操作方式,无需复杂配置即可使用。通过简单的拖放或菜单操作,开发者可以快速还原.class文件为可读代码,查看类结构和逻辑。JD-GUI在逆向工程、学习参考、代码调试、代码分析以及教学和研究方面有广泛的应用。作为Java开发者的辅助...

weixin_33205138的博客 2245

内容安全与合规治理:从工程化实践到风险防控

在数字化业务快速迭代的背景下,内容安全已成为平台稳定运营的核心前提。面对日益严格的合规要求,企业需要从基础的概念认知出发,理解内容安全并非单一的技术模块,而是一套覆盖风险识别、策略配置、内容审核、敏感信息过滤及审计追溯的工程化体系。通过将合规规则转化为可执行的系统能力,能够有效降低违规内容带来的业务风险,同时提升内容生态质量与用户信任度。从社区UGC、电商评论到金融交易信息,内容安全技术已广泛应用于多种真实业务场景。结合对行业高频搜索词的分析,围绕“内容安全”“合规治理”“工程化实践”等关键方向,系统梳理建

weixin_33994429的博客 405

A股历史数据免费下载终极指南:4000+个股数据一键打包获取

本文提供了获取A股历史数据的完整免费方案,重点介绍了Tushare Pro、AkShare等开源金融数据API的使用方法。通过详细的Python脚本示例,指导读者如何自动化批量抓取、清洗、存储4000多只个股的历史行情数据,并分享数据质量校验与性能优化技巧,助力量化研究与市场分析。

ooo22的博客 2254

BIOS更新后PIN不可用怎么办?从原理到实操的完整修复指南

在计算机维护中,BIOS更新是常见的固件升级操作,但其引发的登录异常却常让用户措手不及。Windows Hello PIN并非传统密码,它通过TPM芯片与设备启动环境(PCR状态)强绑定,一旦主板固件或安全启动配置改变,TPM便会拒绝释放密钥,导致“由于此设备上的更改,你的PIN不再可用”。理解这一原理后,恢复路径清晰可控:优先尝试密码登录,或通过WinRE替换utilman.exe创建临时管理员,必要时还需处理BitLocker恢复密钥。本文面向系统维护与数据安全场景,系统梳理PIN失效的恢复流程与避坑方

weixin_31364787的博客 386

JAVA反编译技术研究心得

使用JAD作为核心的DJ Java Decompiler是我见过的最好的Java反编译器了,可以通过直接替换其目录下的jad.exe来升级其反编译引擎经过混淆的class文件,只要不混淆流程,其它都是很容易搞定的,目前可以混淆流程的JAVA Obfuscator只有KCLASSMASTER这个工具,但是这个工具收费很高对于更新jar中的class文件,有一种很简便的方法,直接使用winra

我爱密码学 230

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

保护你的JAVA / .net 程序,终极避免被反编译方法研究

反编译真的让JAVA / .net 制作者讨厌的东西。你花大量的精力做了一个很好的软件,却有人盗用,盗用都算了人家还用来商业... 就像某文说的.你的软件买 XXXXXXXX大元.人家公司买200元..... 怎么做到呢?就是通过反编译。我们可以看到就算保护很强的reflector4/6 也未能幸免如果你不将你的Application进行保护,它将很容易被反编译

大师的资源 1万+

Ceres&OpenCV 单目相机标定(论文复现)

Ceres&OpenCV 单目相机标定(论文复现)

dayuhaitang1的博客 371

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现

本文提出了一种基于YOLOv8深度学习的涂胶缺陷检测系统,针对断胶、溢胶、缺胶、气泡及胶条宽度异常等常见缺陷类型,实现了从数据采集到模型部署的完整解决方案。系统采用工业相机采集涂胶图像,通过多形态数据增强策略解决样本稀缺问题,利用YOLOv8框架实现高效检测。相比传统人工目检和规则式机器视觉方法,该系统在检测精度(mAP达97.5%)和实时性(单图检测耗时0.038秒)方面表现优异,可满足智能制造场景下的涂胶质量检测需求。

huanghm88的专栏 277

Java反编译工具之javap介绍

Java反编译是指将已经编译成字节码的Java程序文件(.class文件)转换回源代码(.java文件)的过程。javap是一个Java反编译工具,用于查看Java类的字节码指令。它可以显示类的成员变量、方法、构造函数、注解和常量池等信息。使用javap命令的基本语法如下:其中,options是可选参数,用于指定一些选项,classes是要查看的Java类的名称。-c:显示类的字节码指令。-s:显示类的签名信息。-l:显示行号和本地变量表。

qq_39939541的博客 1120

Go基础:Go语言详细介绍,环境搭建,及第一个程序详解

Go语言是Google开发的开源编程语言,具有高效、简洁、并发性强等特点。文章从Go语言的诞生背景、核心特性及应用领域展开介绍,并详细说明了Windows、Linux和macOS下的环境搭建步骤,包括安装、环境变量配置及测试方法。最后通过“Hello, World!”程序解析Go语言基本语法,并演示了编译发布和跨平台编译功能。全文涵盖了Go语言从入门到实践的完整流程,适合初学者快速上手。

数据知道的博客 6800

XJad_Java代码反编译工具

XJad_Java代码反编译工具

Madison123的博客 211

【项目实战】主流车载操作系统,QNX实时操作系统入门介绍

QNX是一种实时操作系统,自1980年代初期由Quantum Software Systems成立以来,已被广泛应用于各种行业和领域。QNX具有实时响应、高可靠性和分布式等特点,为各种设备提供了强大的底层操作系统平台。随着科技的不断发展和进步,QNX系统的应用范围和潜力也在不断扩大。本文将全面介绍QNX系统,包括其引言、背景、系统特性、应用领域和生态系统等方面。QNX作为一种实时操作系统,具有高效的实时性能、高可靠性、分布式、可剪裁性和可扩展性等特点。它在各个领域都有广泛的应用,并拥有一个庞大的生态系统。

奶爸的编程之路,也就一周冷个三天 3071

基于STM32+RFID设计的宿舍检修管理系统

设计一个上位机,用来管理查看维修检修信息,当维修寝室的设备或者检修完成时,通过STM32上的RC522刷一下这个寝室的IC卡,识别这是哪个寝室,识别成功后在软件上弹出一个对话框,填写本次维修或者检修的事件,填写完毕点击提交即可。...

2557

java反编译小工具

java反编译小工具,很强悍!

liu_shui8的专栏 158

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【亲测免费】 利用fernflower反编译jar包:Java开发人员的得力助手

利用fernflower反编译jar包:Java开发人员的得力助手 【下载地址】利用fernflower反编译jar包 这是一个专注于利用fernflower工具进行jar包反编译的开源项目,旨在帮助Java开发者快速解析和查看jar包中的代码内容。项目提供了详细的步骤指南和必要的工具文件,用户只需按照说明操作,即可轻松...

gitblog_06790的博客 973

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java 反编译工具

Java反编译工具

ITeye黑板报 223

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Sun对Java语言安全性与功能做出重大改进
下一篇: JavaOne:一系列模型驱动开发等工具的发布
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值