如何反编译,防止反编译,常见问题总结

java如何防止反编译 于是,我们就可以这样想:JNI可以调用第三方语言的类库,那么,我们可不可以把解密与装载使用第三方语言写(如C++,因为它们生成的库是不好反编译的),这样它可以把解密出来的class内容直接调jvm.dll的加载接口进行初始化成class,再返回给我们的ClassLoader?嗯,这个方法真的很不错的!由其实现方式上可知,其实现原理只是扰乱正常的代码可读性,并不是真正的加密,如果一个人的耐心很好,依然可以理出整个程序在做什么,更何况,一个应用中,其核心代码才是人们想去了解的,所以大大缩小了代码阅读的范围。 阅读详情

本文对如何反编译,防止反编译,和常遇到的问题做了个总结,并略有修改。

资源来自:http://blog.youkuaiyun.com/sunboy_2050/article/details/6727581

http://blog.youkuaiyun.com/sunboy_2050/article/details/6727640

http://blog.youkuaiyun.com/wustrive_2008/article/details/7169810

如何防止反编译

作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

[html]  view plain copy print ?
  1. -optimizationpasses 5  
  2. -dontusemixedcaseclassnames  
  3. -dontskipnonpubliclibraryclasses  
  4. -dontpreverify  
  5. -verbose  
  6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  7.   
  8. -keep public class * extends android.app.Activity  
  9. -keep public class * extends android.app.Application  
  10. -keep public class * extends android.app.Service  
  11. -keep public class * extends android.content.BroadcastReceiver  
  12. -keep public class * extends android.content.ContentProvider  
  13. -keep public class * extends android.app.backup.BackupAgentHelper  
  14. -keep public class * extends android.preference.Preference  
  15. -keep public class com.android.vending.licensing.ILicensingService  
  16.   
  17. -keepclasseswithmembernames class * {  
  18.     native <methods>;  
  19. }  
  20.   
  21. -keepclasseswithmembernames class * {  
  22.     public <init>(android.content.Context, android.util.AttributeSet);  
  23. }  
  24.   
  25. -keepclasseswithmembernames class * {  
  26.     public <init>(android.content.Context, android.util.AttributeSet, int);  
  27. }  
  28.   
  29. -keepclassmembers enum * {  
  30.     public static **[] values();  
  31.     public static ** valueOf(java.lang.String);  
  32. }  
  33.   
  34. -keep class * implements android.os.Parcelable {  
  35.   public static final android.os.Parcelable$Creator *;  
  36. }  

从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)

让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的project.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

完整的project.properties文件应该如下:

[html]  view plain copy print ?
  1. # This file is automatically generated by Android Tools.  
  2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!  
  3. #  
  4. # This file must be checked in Version Control Systems.  
  5. #  
  6. # To customize properties used by the Ant build system use,  
  7. # "build.properties", and override values to adapt the script to your  
  8. # project structure.  
  9.   
  10. # Project target.  
  11. target=android-9  
  12. proguard.config=proguard.cfg  

大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:


如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可


如何进行反编译

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。

在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。


一、反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI

前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:

dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

具体步骤:

首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录

运行

dex2jar.bat    classes.dex

生成

classes.dex.dex2jar.jar

生成jar文件的截图如下:

 

运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了


HelloAndroid源码(编译前的apk源码对照)如下:

 


二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

如果是只是汉化软件,这将特别有用。

首先还是下载工具,这次用到的是apktool

下载地址:http://code.google.com/p/android-apktool/downloads/list

下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

具体步骤:

将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:

 

命令行解释:apktool   d   [apk文件 ]   [输出文件夹]

反编译的文件如下(AndroidManifest.xml为例):


特别注意:你要反编译的文件一定要放在C盘的根目录里


将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:

 

打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok



混淆代码中常遇到的问题

问题一:proguard:Parse Exception:

解决方法:由于Eclipse的工作空间路径中有空格(可能还有其他原因导致此错误),

问题二:Conversion to Dalvik format failed with error 1 

解决办法:网上下一个新版本的proguard,解压后,复制里面的lib和bin目录覆盖SDK中tools/progurad/下的lib和bin目录即可。

proguard的下载地址:http://proguard.sourceforge.net/#downloads.html最终解决问题!

【Android】反编译与预防被反编译 近期在开发一款软件时,遇上了加密、解密数据方面的一些技术问题无法攻克,于是抱着试试看的态度使用jadx-gui工具进行反编译一下。哎,居然还成功了,更骚的是,这一款App没有对应用进行混淆、加密、加固,没多久我就研究明白了他们的应用是如何解决我所遇到的问题,升职加薪又离我更近一步了🤭但是呢,为了防止我所编写的软件遇上像我这样的老六,特地写一篇文章来告诉大家如何能成为我这样的老六,以及如何加强App的软件防护等级。 阅读详情

相关推荐

如何防止Class文件被反编译?

各位伟大的Java程序员,现在有一条财富自由的路摆在你的面前,你有没有信心为此去挑战一下自己?​ 这次我们来聊一个比较有意思的话题,如何防止Class文件被反编译。

roykingw的专栏 1376

Android APK反编译详解

转载:http://blog.youkuaiyun.com/sunboy_2050/article/details/6727581   注:反编译过来的代码很难看懂,但布局文件和资源是原样,有时候做项目的时候可以拿图片来当测试也可以   这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。 在此...

haishizi1的专栏 192

python是这样来防止被反编译的

加密工具如何做到Python程序防止被反编译的 1、 使用加密工具自动加密 2、 对加密后的pyc文件进行反编译测试 3、 插上加密狗(或软授权)可以打开加密后的Python程序。

world2000的博客 1601

如何防止代码被反编译

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34129145的博客 661

从零搭建ROS1导航小车(一):松灵SCOUT Mini底盘通讯配置与ROS包编译避坑指南

本文详细介绍了从零开始搭建ROS1导航小车的初始步骤,重点讲解松灵SCOUT Mini底盘的通讯配置与ROS包编译避坑指南。内容包括硬件连接、CAN通讯配置、ROS工作空间构建及编译优化等实用技巧,帮助开发者快速实现自主导航小车的通讯功能。

weixin_27014595的博客 188

C2000 CLA协处理器:嵌入式实时控制性能优化与实战指南

在嵌入式实时控制系统中,主CPU常因高频率、低延迟的控制算法而面临性能瓶颈。为解决此问题,协处理器技术应运而生,它通过硬件并行架构分担计算密集型任务,从而提升系统整体性能。其核心原理在于独立的计算单元与总线设计,能够实现近乎零延迟的响应,这对于电机驱动、数字电源等闭环控制场景具有极高的技术价值。本文聚焦于德州仪器C2000系列微控制器中的控制律加速器(CLA),深入解析其作为独立浮点协处理器如何通过任务调度与消息RAM通信机制,有效实现性能倍增,并提供了从内存配置到代码调试的完整工程实践方案。

weixin_29192211的博客 302

C++ 源码常量加密,防逆向破解小技巧

写在前面 做为个一个c++的搬砖猿,我很早之前就有一个想法。企图在c++代码编译时能够部分干预C++的编译过程,比如类似宏一样的行为,或者模板类的行为。在编译时才存在的一些代码或信息。而c++14 则提供了这样的特性。 实际效果 代码如下: int main() { printf("%s\r\n", ET("1234567890")); printf("%s\r\n", ("9876543210")); system("pause"); } ...

qq_31314583的博客 4824

Halcon实战:如何快速找到图像中的多个圆并计算圆心距离(附完整代码)

本文详细介绍了Halcon在工业视觉检测中快速定位图像中的多个圆并计算圆心间距离的实战方法。通过两种核心算法(阈值分割和动态阈值)的对比分析,结合完整代码示例和参数调优技巧,帮助开发者高效解决多圆检测问题,提升工业检测精度与效率。

weixin_33701251的博客 315

C#防止反编译

http://blog.youkuaiyun.com/wangpei421/article/details/42393095 http://www.cnblogs.com/tianguook/archive/2012/10/06/2713105.html http://zhoufoxcn.blog.51cto.com/792419/163944 C#编写的代码如果不进行一定程度的混淆和加密,那...

weixin_30430169的博客 621

使用网分对晶体ESR/L1/C1/C0进行测量计算

Use R&amp;S Vector Network Analyzer test XTAL ESR/L1/C1/C0 測量方法:使用儀器的Port1端口,測量XTAL的S11,通過諧振的參數計算出ESR/L1/C1/C0的值。 實際晶體的等效模型:通常方便晶體分析,使用下圖(b)的等效模型,但實際測量發現晶體存在多個串聯諧振點,實際等效模型更接近(c)。 儀器測量到的S11,其中M...

qq_39138630的博客 2082

QDMA工程搭建/windows驱动编译与性能测试

请注意,根据您的目标操作系统,您可能需要在windows启动配置中启用测试签名的驱动程序,以便启用此驱动程序的安装。右键单击设备,选择更新驱动程序软件,然后选择构建的QDMA驱动程序的文件夹(通常为。创建一个新工程,在IP Catalog中搜索QDMA,双击创建qdma ip核。驱动程序安装安装驱动程序最简单的方法是通过Windows的“设备管理器”。如果系统提示未经验证的驱动程序发布者,请选择无论如何安装此驱动程序软件。本节主要介绍QDMA驱动在Windows系统的源文件、编译和安装过程。

qq_28455081的博客 2287

Android APK反编译

1、Android APK反编译详解(附图) 2、XJad(Java源程序反编译软件) 3、Android如何防止apk程序被反编译 注意:dex2jar   有些应用反编译后java代码用jd-ui根本都无法打开,连混淆的代码都看不到的,本人尝试多次都做不到(网上有说是混淆工具针对反编译工具的), 希望知道的告知下怎么处理   的。   --注:上面的问题经过本人多次尝试终于找到部分原

dy_Learning的专栏 609

AI大模型探索之路-认知篇1-全景透视:揭秘AIGC技术的进化之路

随着人工智能技术的突飞猛进,内容创作方式的发生了革命性的转变;从早期专业人员主导的内容生产,到现如今生成式人工智(AIGC)能创作时代;本篇文章主要讲解AIGC技术的演变历程。

寻道AI,探索AI无限可能! 1645

.NET代码保护终极指南:使用Obfuscar防止反编译攻击

在当今数字化时代,.NET应用程序面临着严峻的安全挑战。恶意攻击者通过反编译工具可以轻易获取你的源代码,窃取核心业务逻辑和敏感数据。本文将为你提供一套完整的.NET代码保护解决方案,通过开源混淆工具Obfuscar实现程序集安全加固,有效防止逆向工程分析。 ## 为什么你的.NET代码需要保护?🚨 ### 反编译风险的真实案例 想象一下这样的场景:你花费数月开发的商业软件,竞争对手只需几分

gitblog_00039的博客 392

基于Python的二手奢侈品电商平台商品保值率数据爬取与分析

本文旨在探讨如何利用Python网络爬虫技术获取二手奢侈品电商平台商品数据,并通过数据分析研究奢侈品的保值率特性。研究将使用最新的爬虫技术(包括Playwright、异步处理和数据清洗技术)来高效获取数据,并利用Pandas、Matplotlib等数据分析库进行深入的数据可视化分析。本文详细介绍了爬虫的设计思路、实现过程以及数据分析方法,为奢侈品投资和消费提供数据参考。关键词:Python爬虫、奢侈品保值率、数据分析、Playwright、异步处理。

2201_76125261的博客 511

CRMEB开源电商系统 /api/products SQL注入漏洞复现(CVE-2024-36837)

2024年6月,CRMEB开源电商系统发布了新补丁,修复了一处SQL注入漏洞(CVE-2024-36837)。经分析,该漏洞可以通过请求api的路径接口来进行SQL注入,进而可能导致敏感信息泄露,该注入可暴露后台web绝对路径,深入利用可获取服务器权限,该漏洞无前置条件且利用简单,建议受影响的用户尽快修复漏洞。

0xSec 2881

关于如何使用反编译器,获取源码清单

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33758863的博客 425

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android程序保护、防止反编译(proguard),签名打包

1 使用proguard防止反编译    反编译了很多程序,发现基本上没有能读懂的,使用proguard防止反编译基本上已经普遍了,不会这个怎敢发布程序。  一般人这样告诉你,2.3就带了proguard.cfg文件,2.2没有(但其实也有了),但你可以拷过去,然后在系统属性文件中加入config就行了。 proguard.cfg的文件如下: [html] view

konkof的专栏 924

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android proguard 详解

本文转载于:http://blog.youkuaiyun.com/banketree/article/details/41928175 简介 Java代码是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。 ProGuard是一个混淆代码的开源项目。它的主要作用就是混淆,当然它还能对字节码进行缩减体积、优化等,但那些对

echo的专栏 382

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 怎么混淆代码,Android如何混淆代码

我们不得不面临一个问题,写出来的代码,被别人反编译过来 直接可以使用,那么我们如何有效的防止这种局面呢?android 引入了Proguard,Proguard 是Android tools包中提供用来对代码进行压缩,优化和进行混淆的工具,它能够移除无用的代码,对类名,方法名,字段名进行重命名,但不改变代码的结构,从而达到对代码混淆的作用。而这样做的好处是我们可以得到一个更小的apk文件和一份更难...

weixin_29356575的博客 416

Unity Mono脚本 加密

加密环境 引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android、IOS(暂定) 加密对象:C#源代码(dll文件) 解密方法:libmono.so (重点:加入解密算法并重编译此文件) 加密的目地 .NET Reflector等反编译工具 无法通过对dll反编译得到源码 注意事项...

weixin_33898233的博客 500

最全面的Obfuscar混淆工具使用教程:从入门到精通

还在为.NET程序集被反编译而烦恼吗?😟 Obfuscar混淆工具正是你需要的解决方案!作为一款开源的.NET程序集混淆器,它能有效保护你的代码安全,防止核心逻辑被轻易分析。本文将手把手教你如何快速上手这款强大的Obfuscar混淆工具。 ## 🚀 快速配置方法:5分钟搞定混淆设置 想要使用Obfuscar,首先需要获取项目代码。打开终端执行以下命令: ```bash git clone

gitblog_00475的博客 886

关于代码混淆器(论坛转)

    我们做java开发的一般都会遇到如何保护我们开发的代码问题。java语言由于是基于jvm上面,所以反编译class文件很很容易。假如我们做了一个web程序,并把这个web程序发布给客户。实际上,客户是很容易反编译出我们的源代码出来,包括所有的src文件和jsp文件等等。    那么,如何保护我们的源代码,实际上,应该有几种方法可以使用:1、使用代码混淆器  2、重载应用服务器的clas...

生活在爪洼岛上 167

DOTNET防止反编译

DOTNET防止反编译 目录 第一部分 相关理论 一 防止反编译概述 二 DOTNET编译原理简介 三 被反编译的后果 四 保护方案分类 第二部分 实践 一 Net强名称工具SN.EXE 二 使用Dotfuscator 三 Net加壳与脱壳 第三部分 推荐方案 第一部分 相关理论 一.DOTNET防止反编译概述 作为商用程序,C#如同 java一样,很容易被反编译。甚至VS...

bcbobo21cn的专栏 3367

如何防止python反编译

再次反编译main.exe后,原来的路径E:\t\dist\main.exe_extracted\out00-PYZ.pyz_extracted之下,已经找不到mylib.pyc了。注:当同时存在mylib.pyd和mylib.py时,引入优先级是pyd>py,所以不用移除py文件,默认引入时就是pyd。注意:编译需要相关的VC环境,因为python3.5是基于 VS14版本的,所以我这里安装的也是。同时,我们可以在下图圈起来的路径下,找到当时我们exe引入的mylib模块,其为pyc格式。

hakesashou的博客 1235
上一篇: playBackgroundMusic and playEffect crash
下一篇: 常用的RBG编码表
ecjtuync
博客等级 码龄20年 157粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值