为什么现在反编译那么难
由于Java字节码的抽象级别较高,因此它们较容易被反编译。下面介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。
1.隔离Java程序
最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java程序。
2.对Class文件进行加密
为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。
在实现时,开发人员往往通过自定义ClassLoader类来完成加密类的装载(注意由于安全性的原因,Applet不能够支持自定义的ClassLoader)。自定义的ClassLoader首先找到加密的类,而后进行解密,最后将解密后的类装载到JVM当中。在这种保护方式中,自定义的ClassLoader是非常关键的类。由于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的类也很容易被解密。
3.转换成本地代码
将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则调用相关JNI方法。
4.代码混淆
代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护Java程序的重要技术。
② android反编译怎么修改游戏道具
需要的工具
jdk:必须的
baksmali:classes.dex反编译为smali格式(文本文件,可修改)
smali:smali格式编译打包为classes.dex
但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助
dex2jar:classes.dex转为jar包
jdgui:jar反编译并阅读
以上工具可以在 http://liye111111.ys168.com/ 下载
好了,顺序就是把apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。注意安装时要先删除原来手机里的版本,因为签名不同了,我第一次再这里卡了好久。
以“捕鱼达人海底捞”为例
下载这个游戏的apk,fishing_joy_1.apk,和工具放在一起
用zip解开fishing_joy_1.apk
classes.dex到baksmali的同一目录
用baksmali处理为smali
java -jar baksmali-1.2.6.jar -x classes.dex
得到out目录,里面是smali文件
用dex2jar处理classes.dex为jar包
dex2jar-0.0.7.10-SNAPSHOT\dex2jar.bat classes.dex
得到classes.dex.dex2jar.jar
这时我们的工作目录下面是这样
用jdgui打开classes.dex.dex2jar.jar
好了,可以看代码,但还不能直接修改,需要对比着来修改smali文件
比如我们通过对比找到控制鱼被打到几率的代码在FishLayer.smali
Java代码
③ autoit v3 编写的软件反编译,难度颇大,希望大大帮忙
虽然我以前是这么回答的,但实话说,不借助autoit自带的反编译工具,也是有办法反编译的。
但网络知道平台上估计没这种高人,或者说,有这种能力的高人一般没时间泡在网络知道上。
所以,在这里提问是枉然的。建议去AutoIt中文论坛或官方论坛碰碰运气吧,毕竟更专业一些。
不过话又说回来,就算去那里也未必有人肯花时间帮你反编译的(真的很费时间和精力)。一来防止引发版权问题,二来人家主要是来技术交流的,不是纯粹为分数而帮人干活的。所以,这个问题要得到解决,真的不容易。只能祝你好运了 ;-)
④ 任何程序都可以反编译吗为什么有一些程序不可以反编译
javap是用作反编译的,但是javap只能给出你要反编译的class的结构,比如有什么方法,有什么static或者非static的变量什么,但不可能产生源代码编译后的文件不是原代码文件,所以不能直接拿来编译。希望楼主采纳
⑤ windows系统的源代码,为什么没人反编译出来
原因:
一是代码经过编译后,反编译是比较困难的。
二是代码量超级大;
三是能够反编译的力量没这么强大;
四是不是任何程序都能够完整“还原”。
微软现在也已经对部分代码实行了公开,有他的公开网站,不过在上面我至今没查到过我所需要的东西。
⑥ 用手机反编译修改状态栏怎么那么难啊!我都折腾几天了都不行,有高人吗指点指点吧
你想变回中文板吗
⑦ 为什么我反编译一个exe文件原封不动转为.exe就报错了。
世界上的大多数事物都是存在不可逆特性的,比如说生鸡蛋煮成熟鸡蛋很容易,但把熟鸡蛋再还原为生鸡蛋就几乎不可能了,也许将来的科技能够实现,但至少现在还没听说过。
程序的编译和反编译也是一样,一个电脑程序从供人类阅读的高级语言编译为供CPU解读的机器语言,这是一个质变的过程,比方说某个运算结果可以用多种算法实现,那么你想往上回溯时,究竟选择那种算法呢?你可能会说,让反编译软件随便选一种吧,那么问题来了,再继续往上回溯的时候,很有可能就跟原程序完全不同了。所以,尽管“条条大路通罗马”,但要想从罗马回到原来的出发点就不是容易的事了。因此,到目前为止,尚未有反编译软件能够把一个exe文件完整无误地反编译为源程序的(当然也许极简单的程序可以,比如hello world),而程序本来就是严谨的东西,差一个字也可能会产生十万八千里的误差。所以,反编译的结果只能用作参考,不能把它当作实际代码。
⑧ .net,java都能被反编译 那么易语言为什么不能反编译
因为 .NET 也好 JAVA 也罢,为了跨平台,并没有直接将源代码编译成机器码(因为在不同硬件设备上的指令集是不同的),而是翻译成了一个中间语言。
.NET 翻译过的中间语言叫 IL,然后通过 JIT 来“解释”执行。而 Java 的中间语言叫 Bytecode,通过 JVM 来“解释”执行。
既然 JIT、JVM 是可以“看懂”中间语言,并在不同平台上“解释”成对应的机器语言来执行,那么中间语言就一定是可逆成高级语言的了。
而易语言这种东西是直接编译成机器码的了。不是不能反编译,而是只能反编译成汇编这种低级语言了。
⑨ APK 反编译失败 是为啥
1、反编译=回编译后分别是
smali目录 回编译为 classes.dex 文件
res目录 回编译为 resources.arsc 文件
2、回编译顺序
在回编译时,会先检查“源”即resources
当你汉化文件,修改出错了(缺少一个符号也不行),
那么回编译会自动跳过编译res文件夹,直接回编译smali 。
所以,如果没有对smali(classes.dex)汉化,那么建议大家删掉这个文件夹,
这要会大大加快回编译速度。
3、出错问题1
在汉化时,往往会不小心删掉一些符号,如 "<" ">"符号等等。
<string name="app_name">File Manager</string>
<string name="app_name">文件管理器/string>
<string name="app_name"文件管理器</string>
这些小小的错误都会导致回编时译检查出错。
所以汉化时,注意对校,然后再回编译。
建议使用一些高级的文本编辑器,支持语法高亮视图的。
4、出错问题2
最近发现有些APK文件 反编译后,就算不汉化直接回编译,都会出错。
有可能的原因1,反编译后XML文件语法中@符号 前面多了"\" (\@ ),
用文本编辑工具 直接替换【\@】为【@】,应该可以解决。
建议使用最新版本的反编译工具。
5、建议大家使用新版本的APKTool工具,
当然如果新的有问题也可以试试旧的一、系统文件汉化再次强调
1、汉化Settings.apk(系统设置)、MMS.apk(信息)、Phone.apk(电话)、
等等系统文件,一定要先 安装构架,具体看另个文件
<关于APKTool工具反编译Settings.apk问题>。
2、系统文件汉化完后不需要签名,直接替换汉化后的文件,就可以了。
主要是,系统文件放在系统目录,无需再次读取签名获得权限,已经是高级了。
二、打包说明
1、通常汉化完回编译后,会自动生成所有APK内的文件,或者自动生成*.APK文件。
但是建议大家不要直接使用该文件,进了使用替换法,替换掉你汉化后的文件,
如:resources.arsc,如果修改过的图片,等等…
2、很多人对于APK文件 解压缩或压缩 都用“WinRAR”或“好压”,这里不推荐。
希望大家安装7-Zip这个压缩工具,对于zip格式的支持是最好的。而且很方便,
不需要重新关联apk 直接右键打开就行了。替换直接拖拉进去,就OK了一、回编译出错问题
(1.提示 strings.xml 最后一行错误,检查是否</string>符号错误;
在汉化时,往往会不小心删掉一些符号,如 "<" ">"符号等等。
<string name="app_name">File Manager</string>
<string name="app_name">文件管理器/string>
<string name="app_name"文件管理器</string>
(2.提示 strings.xml 最顶部含中文代码首行错误,编码格式不对,转换成 UTF-8;
(3.提示 public.xml 出错,检查改动过的 arrays.xml 是否代码有错误的地方;
二、一切能正常但无法回编译
还有一种情况,apktool最新版本能正常反编译一个apk文件,在未做任何修改的情况下,无法回编译。
这是就要注意了,可以尝试一下用低版本的apktool进行【反编译】,然后在用高版本的apktoo工具【回编译】。
这里向大家推荐用 【APKDB】 这个工具,很方便,反编译时可以选择apktool的版本。
⑩ 我们可以很容易把源代码编译成机器代码,为什么就很难把机器代码反编译成源代码
因为机器代码太冗长腔梁败伍颤,而且每一台电脑的机器代码都不尽相渣塌同。
ps 这台电脑上A的机器代码是101010101000,但在别的电脑上就不一定是这个了~