android反编译工具总结
Android反编译查看源代码
Android是个神奇的货,近两年比较火热,学习他的人也比较多,但是对于很多初学者来说比较头疼,(当然本人也很菜鸟),今天在学习一个安卓项目时,苦于找不到源代码,无奈只好下载网上现成的.apk文件,顿时好奇能不能反编译看到源代码呢?答案是肯定的!让我们行动起来!
首先,我们将文件的后缀名改为.zip。
这时候我们将可以解压这个文件,如图:
此处我们已经看到一个压缩文件了,打开它。
注意我们的重点是.dex 文件
这个classes.dex是个好东西呀!
然后,然后……
我们需要下两个软件:
dex2jar下载地址:/p/dex2jar/
JD-GUI下载地址:http://java.decompiler.free.fr/?q=jdgui
把我们刚找到的classes.dex拷贝到dex2jar的目录下吧(与dex2jar.bat在同一个目录下),然后运行dex2jar.bat classes.dex,将会生成一个文件classes_dex2jar.jar。
快OK 啦~~~~
运行jd-gui.exe 直接将classes_dex2jar.jar 拖进去吧,瞧!我们要的出来了!。
Android逆向助手使用说明
1、“源文件”处支持文件或文件夹拖放;
2、必须安装【.NET Framework2.0简体中文版】框架;
3、部份功能依赖java运行环境,因此必须安装java。
12、替换dex;
13、修复dex;
14、加密xml转txt;
15、字符串unicode编解码。
更新日志
v2.1主要修改:
1、部份功能新增错误回显;
2、修复java环境判断错误的bug;Android逆向助手是一款针对安卓平台的强大逆向辅助软件,功能涵盖apk反编译打包签名;dex/jar互转替换提取修复;so反编译;xml、txt加密;字符串编码等。支持直接将文件拖放到源和目标文件,不用每次都点浏览选择。软件暂时支持WinXP、Win7、Win2003系统。
功能介绍
1、反编译apk;
2、重新打包成apk;
3、对apk进行签名;
4、反编译dex;
5、重新打包成dex;
6、dex转jar;
7、dex转ddx;
8、dex导出成txt;
9、反编译so;
10、jar转dex;
11、提取dex;
菜鸟夜谈android反编译
菜鸟夜谈android反编译⼯具:反编译命令提取资源(smail汇编代码):apktool d file.apk pathdex2jar反编译:dex2jar file.apk (or classes.dex)⽤jd-gui就可以打开jar看了⽤jd-gui在windows下没问题,在linux64下要装ia32的库。
⼀般代码都被混淆过。
都是abcdefg。
下⾯讲讲本⼈的⼀些⼩技巧。
本⼈最近反编译⼀个aide,菜鸟抄抄别⼈的实现。
⼀般都是从布局⼊⼿,找出相应关键的view类:如<com.aide.ui.AIDEEditorPager 。
可以在代码⽂件⾥找到AIDEEditorPager这个类,下⾯贴点代码:package com.aide.ui;import android.content.Context;import android.graphics.Rect;import android.os.Build.VERSION;import android.support.v4.view.ViewPager;import android.support.v4.view.aa;import android.util.AttributeSet;import youtInflater;import android.view.MotionEvent;import android.view.View;import mon.c;import com.aide.engine.SyntaxError;import com.aide.ui.util.k;import ng.reflect.Field;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import rg;import rh;import ri;public class AIDEEditorPagerextends ViewPagerimplements ri{private boolean DW;private f FH;private boolean Hw;private List j6 = new ArrayList();private l v5;public AIDEEditorPager(Context paramContext){super(paramContext);sG();}public AIDEEditorPager(Context paramContext, AttributeSet paramAttributeSet){super(paramContext, paramAttributeSet);sG();}private void DW(boolean paramBoolean){int i = 4;View localView1 = getRootView();int j;View localView3;if (localView1 != null){View localView2 = localView1.findViewById(2131427448);if (localView2 != null){if (!paramBoolean) {break label62;}j = 0;localView2.setVisibility(j);}localView3 = localView1.findViewById(2131427446);if (localView3 != null) {if (!paramBoolean) {break label68;}}}for (;;){localView3.setVisibility(i);return;label62:j = i;break;label68:i = 0;}}private int Hw(String paramString){for (int i = 0;; i++){if (i >= this.j6.size()) {i = -1;}while (v5(i).d_().equals(paramString)) {return i;}}}private void Sf(){postDelayed(new Runnable(){public void run(){AIDEEditorPager.DW(AIDEEditorPager.this).v5();}}, 50L);}这么乱的代码,想找到⾃⼰想要的代码真是不容易。
Android APK反编译得到Java源代码和资源文件
Android APK反编译得到Java源代码和资源文件2011年3月9日iStar发表评论阅读评论这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。
在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。
一.反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。
以下是下载地址:dex2jar:/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:/files/jdgui.zip具体步骤:1.首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;2.解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。
在命令行下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex生成classes.dex.dex2jar.jar3.运行JD-GUI,打开上面生成的jar包,即可看到源代码了。
二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件如果是只是汉化软件,这将特别有用。
首先还是下载工具,这次用到的是apktool,下载地址:/p/android-apktool/,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
具体步骤:1.将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar;2.在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\***.apk C:\***文件夹命令行解释:apktool d [要反编译的apk文件 ] [输出文件夹],特别注意:你要反编译的文件一定要放在C盘的根目录里;3.将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
Android 反编译dex2&jd-gui&apktool教程
一.APKTool的安装1.其实这个谈不上安装,不过如果你愿意的话可以把下载到的APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到任一目录下2.在DOS命令下切换到APKTool解压缩目录。
3.运行下面命令:1.decode该命令用于进行反编译apk文件,一般用法为Apktool d <file.apk><dir><file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk<dir>代表了反编译后的文件的存储位置,比如C:\MusicPlayer??如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令apktool d –f<file.apk><dir>这样就会强行覆盖已经存在的文件2.build该命令用于编译修改好的文件,一般用法为Apktool b <dir>这里的<dir>就是刚才你反编译时输入的<dir>(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。
3.install-framework该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。
二、dex2jar&jd-gui的使用1.首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.15文件夹。
apk 破解之dexdump反编译Android程序
apk破解之dexdump反编译Android程序-OMS操作系统平台专区-(转载)2010-07-0717:28反编译Android程序目前没有什么好的方法,但是在Android Emulator中可以找到一个名为dexdump的程序,文件中的dex执行情况,ophone一些底层的xx。
相关内容都放到了dex文件中,为什么要反编译apk文件呢?就目前来看Android开放度还很低,很多东西只对于软件开发人员来说,保护代码安全也是比较重要的因素之一,不过目前来说Google Android平台选择了Ja容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。
所有的类调用、涉及到的方法都在里面体现到时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。
模拟器自带了一个dexdump,有兴趣的关APK文件的汉化,我们将在下一次做详细的分析,因为这里主要是修改的不是dex而是资源文件,使用类似齐的方式逐个替换即可,最终再签名下即可使用,这样的行为可以算作是非法修改,不过目前这样的方法在国内AndroidMarket上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取=================================================觉着这2个工具配合学习android太靠谱了,所以放上来给大家共享,开源的好处就是好东西大家一起分享;1.首先找到Android软件安装包中的class.dex源文件;2.把class.dex拷贝到dex2jar.bat所在目录。
运行dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar3.运行JD-GUI工具(它是绿色无须安装的)打开上面的jar文件,即可看到源代码俺也是今天才试验了下效果,那是相当的凑效,所以兄弟姐妹们觉着好就给句鼓励的话把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上=================================================关于apk文件反编译的方法(dex2jar和JD-GUI)1、下载dex2jar最新版本0.0.7,下载地址http:2、下载class反编译工具,我用的是jad,大家可以根据自己情况选择。
Android开发apk反编译和二次打包教程
Android开发apk反编译和⼆次打包教程作为Android开发者,⼯作中少不了要反编译别⼈的apk,当然主要⽬的还是为了学习到更多,取彼之长,补⼰之短。
今天就来总结⼀下Android反编译和⼆次打包的⼀些知识。
⾸先声明本⽂的⽬的是为了通过例⼦讲解反编译和⼆次打包的原理和⽅法,继⽽作为后续讲解防⽌⼆次打包和App安全的依据,并不是⿎励⼤家去重新打包别⼈的App,盗取他⼈劳动成果。
本⽂⾸先介绍⼏种Android反编译⼯具的使⽤,然后实现在不需要知道源代码的情况下,仅通过修改反编译得到的smali⽂件实现修改apk逻辑功能的⽬的。
Android中常⽤的反编译⼯具有三个:dex2jar、jd-gui和apktool,这三个⼯具的作⽤如下:dex2jar:将apk中的classes.dex⽂件转换成jar⽂件。
jd-gui:查看由dex2jar转换成的jar⽂件,以界⾯的形式展⽰反编译出来的Java源代码。
apktool:反编译⽣成smali字节码⽂件,提取apk中的资源⽂件。
为了尽可能的把问题讲清楚,我们来实现⼀个很简单的例⼦。
⾸先创建⼀个⼯程DecompileDemo,在MainActivity中定义⼀个布局,其中包含⼀个Button,点击会打印⼀段⽇志。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private static final String TAG = "MainActivity";private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {Log.d(TAG,"Button is clicked");}}将这个⼯程编译⽣成的apk解压,取出其中的classes.dex放在dex2jar⼯具的⽬录下,然后执⾏命令会在当前⽬录下⽣成class-dex2jar.jar⽂件然后打开jd-gui,将class-dex2jar.jar⽂件拖进去,就可以看到反编译出来的源代码。
Android APK反编译得到Java源代码和资源文件
Android APK反编译得到Java源代码和资源文件一、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件工具下载:地址:/p/android-apktool/downloads/list如下图,途中红圈的两个都要下载。
将上面2个文件解压到同一个文件夹下面,将有3个文件被解压出来,如下图所示打开cmd命令行窗口定位到刚才解压的文件夹下,即apktool.bat所在的文件夹,如下图所示1. 将APK反编译将待反编译的apk文件放到c盘根目录下,特别注意,一定要放到根目录下。
输入反编译命令apktool d c:\xxxxx.apk c:\***文件夹命令行解释:apktool d [要反编译的apk文件] [输出文件夹]如:注意:demo文件夹不能是已存在的文件夹,否则会报错2. 将反编译完的文件重新打包成APK很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
二、反编译apk得到Java源代码工具下载:dex2jar:/p/dex2jar/downloads/listJD-GUI:/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zi p&can=2&q=如下图的两个文件:具体步骤:1. 解压上面两个压缩文件。
2. 从apk文件中解压出classes.dex,将它复制到dex2jar.bat所在的文件夹下3. 命令行下定位到dex2jar.bat所在的目录,然后运行dex2jar.bat classes.dex如图:注:classes.dex不一定要复制到这个文件夹下,在其前面加上路径也是一样的,这里只是为了输命令方便。
如上图所示,看到Done表示成功,将得到下图中红圈内所示的jar文件4. 然后双击jd-gui.exe,打开刚才生成的jar文件,即可看到下图如此,便可看到代码了。
附上上文中所有用到的工具:apk2android.rar在此郑重声明:分享此文,不是为了破解别人的软件,完全是一种学习态度,代码要自己手敲出来才会有感情的。
Android逆向工具篇—反编译工具的选择与使用
Android逆向⼯具篇—反编译⼯具的选择与使⽤作者 | 天天记⼩本⼦上的lilac 来源 | CSDN今天给⼤家介绍⼀下Android App 在Java层的逆向⼯具。
逆向⼯具的介绍在过去,当我们想要了解⼀个 app 内部运作细节时,往往先通过 ApkTool 反编译 APK,⽣成 smali 格式的反汇编代码[1],然后⼤佬和⽼⼿直接阅读 smali 代码,适当的进⾏修改、插桩、调试,经过⼀定的经验和猜想,理解程序的运⾏逻辑和加解密细节,⽐如如下的 smali 代码。
smail我们只要先这样,再那样,最后再这样,对对对,就这样,⼀个程序的加密就被破解出来了。
是不是迫不及待想来⼀次App的逆向之旅了?事实上,这种⽅式对⼩⽩实在不友好,有没有更加友好的⽅式呢?当然是有的,如果你百度或者 google 搜索逆向相关的教程和分享,很容易就会发现下⾯这三个⼯具。
在介绍⼯具之前,我们先补充⼀下APK结构的知识,我们以伊对这个社交 Apk 为例。
APK ⽂件其实是⼀种特殊的 zip 格式,我们可以直接⽤ 360 压缩或者别的压缩⼯具打开。
为了满⾜⾃⾝的功能和设计,⼏乎每⼀个都会在基础的⽂件结构上添加不少东西,但有六个部分是不变的,我们罗列和称述⼀下。
⽂件或⽬录作⽤META-INF/描述apk包信息的⽬录,主要存放了签名信息,配置信息,service注册信息res/存放apk资源⽂件的⽬录,⽐如图⽚、图标、字符串、样式、颜⾊assets/同样是存放apk资源⽂件的⽬录,但和res有差异,和我们关系不⼤resources.arsc资源索引,包含不同语⾔环境中res⽬录下所有资源的类型、名称与ID所对应的信息lib/存放so⽂件,越来越多的应⽤由C/C++编写核⼼代码,以SO⽂件的形式供上层JAVA代码调⽤,以保证安全性,这个⽬录是逆向解密关注的重点classes.dex(⼀个或数个)Android程序运⾏在Dalvik虚拟机上,⽽dex就是Dalvik虚拟机的可执⾏⽂件, 相当于Windows平台中的exe⽂件,通过反编译dex,可以获得apk源码(这个说法不很准确,但⽅便理解)AndroidManifest.xml清单⽂件,包含了App⼤量的的配置信息,⽐如包名、应⽤需要拥有的权限(打电话/录⾳/⽹络通信等等)、以及所有的界⾯和程序组件的信息,⽆法解压apk时直接打开,因为清单⽂件在apk打包过程中被编译成了⼆进制格式⽂件接下来我们介绍以下反编译⼯具,看⼀下反编译⼯具的作⽤⼯具作⽤ApkTool解析resources.arsc,AndroidManifest.xml等⽂件,反编译dex⽂件为smali源码Dex2jar将dex⽂件转化为jar⽂件Jd-gui反编译jar,查看java源码⽐如使⽤ Dex2jar+Jd-gui, 最终得到这样的结果。
Android程序反编译工具JEB
Android程序反编译⼯具JEB
⼀、下载并打开
JEB是⼀个付费的逆向⼯具,专业版售价⾼达1800美元,此分享仅供学习使⽤,切勿⽤于商业盈利。
下载并解压后,找到jeb_wincon.bat,双击这个批处理程序。
会依次出现⼀个命令⾏窗⼝和JEB程序窗⼝
不⽤在意那个“检查更新出错”,不影响正常使⽤。
⼆、简要介绍
JEB是⼀个功能强⼤的为安全专业⼈⼠设计的Android应⽤程序的反编译⼯具。
⽤于逆向⼯程或审计APK⽂件,可以提⾼效率,节约⼯程师的分析时间。
①可将Dalvik字节码反编译为Java源码,⽆须DEX-JAR转换⼯具
②JEB强⼤的⽤户界⾯使你可以检查交叉引⽤,重命名的⽅法、字段、类、代码和数据之间导航,以及做笔记和添加注释等
③可以检查解压缩的资源和资产、证书、字符串和常量等。
可以保存对JEB数据库⽂件的分析,通过JEB的修订历史记录机制跟踪进展。
④JEB⽀持Windows、Linux和macOS
⑤使⽤Java或Python语⾔,⽤户可以编写⾃⼰的脚本和插件来⾃动执⾏逆向⼯程流程。
⾼级⽤户可以编写完整的分析模块。
三、参考书籍
《Android⾼效进阶:从数据到AI》第9章静态分析Android引⽤。
apktool 用法
apktool 用法apktool是一个用于反编译和重新打包Android应用的工具。
它可以帮助开发者分析应用的代码和资源,更好地理解应用的结构和功能。
以下是使用 apktool 的一些基本用法:1. 反编译应用使用命令 `apktool d [apk文件名]` 可以将一个应用反编译为其代码和资源文件。
反编译后的文件可以在指定的目录中找到。
2. 重新打包应用使用命令 `apktool b [反编译后的目录]` 可以重新打包一个应用。
重新打包后的应用可以在指定的目录中找到。
3. 修改应用的代码和资源在反编译后的目录中可以找到应用的代码和资源文件。
开发者可以对这些文件进行修改,并使用 apktool 打包成新的应用。
4. 查看应用的 AndroidManifest.xml 文件使用命令 `apktool d [apk文件名]` 可以将一个应用反编译为其代码和资源文件,并在反编译后的目录中找到AndroidManifest.xml 文件。
这个文件包含了应用的所有信息,包括应用的权限、入口、组件等。
5. 使用 apktool 进行调试在使用 apktool 进行反编译和重新打包应用时,可能会遇到一些问题。
开发者可以通过使用 apktool 的调试命令 `apktool--debug` 来解决这些问题。
6. 使用 apktool 进行签名在重新打包应用后,开发者需要对应用进行签名才能在设备上安装和运行。
使用命令 `apktool sign [apk文件名]` 可以对应用进行签名。
签名后的应用可以在指定的目录中找到。
总之,apktool 是一个非常有用的工具,可以帮助开发者更好地理解和修改 Android 应用。
但是,在使用 apktool 进行反编译和重新打包应用时需要小心,遵守相关法律法规,不要进行非法操作。
android apk修改方法(反编译、修改、打包)
1、baksmali:classes.dex反编译为smali格式(smali:smali格式编译打包为classes.dex,但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助)2、dex2jar:classes.dex转为jar包3、jdgui:jar反编译并阅读操作顺序:apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar 处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali 里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。
注意安装时要先删除原来手机里的版本,因为签名不同。
1、apk用zip解开,得到classes.dex2、用baksmali处理为smali(只是反编译看代码就不需要这一步,修改才用) java -jar baksmali-1.4.1.jar -x classes.dex得到out目录,里面是smali文件3、用dex2jar处理classes.dex为jar包dex2jar.bat classes.dex得到classes.dex.dex2jar.jar4、用jdgui打开classes.dex.dex2jar.jar好了,可以看代码,但还不能直接修改,需要对比着来修改smali文件改好后,用java -jar smali-1.2.6.jar -o classes.dex out得到修改后的classes.dex,用这个文件替换fishing_joy_1.apk中的同名文件但这个apk是不能用的,还没有进行重新签名先用keytool生成keystorekeytool -genkey -keystore mykeystore -alias mykeystore -validity 999 把apk中的META-INF删除,再用jarsigner 签名jarsigner -verbose -keystore mykeystore -signedjar fishing_joy_1_signed.apk fishing_joy_1.apk mykeystore先卸载原来手机中安装的这个游戏,再用fishing_joy_1_signed.apk安装最后工作目录是这个样子。
安卓apk反编译查看源代码
安卓apk反编译查看源代码
相信很多初学者很像看看大公司比如jd,qq,淘宝手机端的商城是如何开发的,对于java开发的系统来说,大家都知道,反编译是容易的事情,如果换成android的,安装文件变成apk,那么又是什么情况了
带着好奇,我googl e了一下,分享一下:
反编译apk文件,得到其源代码的方法!!
dex2jar和JD-GUI这2个工具配合学习android太靠谱了,所以放上来给大家共享,开源的好处就是好东西大家一起分享。
dex2jar下载地址:http://laichao.googl /fil es/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI下载地址:http://cod e.googl /p/dex2jar/ 请下载最新版的,旧版本有bug
1.首先找到Android软件安装包中的classes.dex
方法是把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
2.把classes.dex拷贝到dex2jar.bat所在目录。
windows系统下:
在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar linux、Ubuntu系统下:在终端下定位到dex2jar.sh所在目录,运行
sh dex2jar.sh classes.dex
则可生成classes.dex.dex2jar.jar
3.运行JD-GUI工具(它是绿色无须安装的)
打开上面的jar文件,即可看到源代码
来源:清源教育。
各种对抗反编译的手段
各种对抗反编译的⼿段正是因为反编译这么简单,如果不加保护,我们的劳动成果就会被轻易盗取。
市⾯上⽐较常⽤的反编译⼯具有:dex2jar,jd-gui,apktool,IDA等等。
这⾥我简单的说⼀下dex2jar这个常⽤反编译⼯具的使⽤。
在下载到了dex2jar和jd-gui这两个⼯具之后。
1.将要反编译的APK后缀名改为.rar或 .zip,并解压-------------------------------------------------------------2.得到其中的classes.dex⽂件(它就是java⽂件编译再通过dx⼯具打包⽽成的),将获取到的classes.dex放到之前解压出来的⼯具dex2jar-0.0.9.15 ⽂件夹内-------------------------------------------------------------3.在命令⾏下定位到dex2jar.bat所在⽬录,输⼊dex2jar.bat classes.dex。
效果如下:在该⽬录下会⽣成⼀个classes_dex2jar.jar的⽂件,然后打开⼯具jd-gui⽂件夹⾥的jd-gui.exe,之后⽤该⼯具打开之前⽣成的classes_dex2jar.jar⽂件,便可以看到源码了,效果如下:被混淆过的效果图(类⽂件名称以及⾥⾯的⽅法名称都会以a,b,c....之类的样式命名):没有经过处理或者只是简单的混淆过的APP其代码的反编译的⽐较容易的。
你的代码经过上⾯那三步已经暴露出来了。
在下⾯提供的更多的途径来给各位学习反编译。
更多反编译的教程:-------------------------------------------------------------[size=21.3333339691162px]apktool反编译⼯具使⽤教程:-------------------------------------------------------------反编译与防⽌反编译:-------------------------------------------------------------⿊马Android视频教程——119_应⽤程序的反编译:怎样防⽌应⽤被破解?在知道了这么容易就可以破解我苦⼼经营的APP时,我的⼼是崩溃的。
Android apktool 工具使用介绍
Android apktool 工具使用apktool可以将apk反编译为smail格式的汇编语言代码, 也可重新编译 smail为dex文件,进而打包为apk,通过signapk工具签名.一. apktool 工具提供的命令1. 反编译.apktool d [decode] <apk-file> [apk文件] outdir [输出目录]2. 回编译apktool b [build] <apk-file> <out-path>二. ddx.jar 实现.dex反汇编java -jar ddx.jar -d [反编译后的文件输出目录] <dex文件路径>eg:java -jar ddx.jar -d ddxout Hello.dex三. smali 和 baksmali 相关命令1. 将.dex文件反汇编为smali语言格式java -jar baksmali.jar -o [编译后的smali文件输入目录] <dex文件路径>eg:java -jar baksmali.jar -oF:\Workspace\CWorkspace\ReverseDemo01\bin\baksmaliF:\Workspace\CWorkspace\ReverseDemo01\bin\classes.dex具体:.class public LHelloReverse;.super Ljava/lang/Object;.source "HelloReverse.java"# direct methods.method public constructor <init>()V.registers 1.prologue.line 2invoke-direct {p0}, Ljava/lang/Object;-><init>()Vreturn-void.end method.method public static main([Ljava/lang/String;)V.registers 5.prologue.line 5new-instance v0, LHelloReverse;invoke-direct {v0}, LHelloReverse;-><init>()V.line 6const/4 v1, 0x5const/4 v2, 0x3invoke-virtual {v0, v1, v2}, LHelloReverse;->foo(II)Imove-result v0.line 7sget-object v1, Ljava/lang/System;->err:Ljava/io/PrintStream; new-instance v2, Ljava/lang/StringBuilder;invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()Vconst-string v3, "foo: "invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v2invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v0invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v0invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V.line 8return-void.end method# virtual methods.method public foo(II)I.registers 5.prologue.line 11add-int v0, p1, p2sub-int v1, p1, p2mul-int/2addr v0, v1return v0.end method。
Android反编译教程
息,但实在是不好读啊~~~~二、dex2jar + XJad 方法该方法是使用dex2jar.jar包,将classes.dex文件解包成jar,在通过XJad(或者其他class反编译工具)进行java反编译。
如:1、dex2jar.bat d:\play\classes.dex默认的输出路径同classes.dex,生成的文件名为classes.dex.dex2jar.jar2、使用XJad反编译该jar包之后的使用方法,大家都懂的:)该方法的好处在于,通过XJad反编译后,大家可直接开到java源文件,缺点在于只能反编译出开发时的java文件,而开发时使用的lib包不能反编译出来。
三、AXMLPrinter2.jar + baksmali.jar + smali.jar 方法这个方法就强大了,AXMLPrinter2是还原AndroidManifest.xml和main.xml的工具,直接打开这两个xml文件是乱码,而通过还原之后,可以很明白的看到里面的内容(我猜测还是使用了字节异或的方式加的密)。
baksmali.jar是反解析dex的工具,smali.jar则是再还原成dex的工具操作方式如下:1、java -jar AXMLPrinter2.jar D:\play\AndroidManifest.xml > AndroidManifest.txt2、java -jar AXMLPrinter2.jar D:\play\res\layout\main.xml > main.txt3、java -jar baksmali-1.2.5.jar -o classout/ d:\play\classes.dexbaksmali可解析(注意,是解析,不是反编译)原java包以及引用的lib包,解析出的文件认真看还是能看懂,比如以下片段:view plaincopy to clipboardprint?.class Lcom/paul/test/a;.super Landroid/view/View;# static fields.field private static final a:Landroid/graphics/Typeface;# instance fields.field private b:I.field private c:I.field private d:Z.field private e:J.field private f:I.field private l:[Ljava/lang/String;# direct methods.method static constructor <clinit>()V.registers 2sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;const/4 v1, 0x0invoke-static {v0, v1},Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;move-result-object v0sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;return-void.end method## other methods ..........## virtual methods.method public onKeyUp(ILandroid/view/KeyEvent;)Z.registers 4const/16 v0, 0x42if-eq p1, v0, :cond_8const/16 v0, 0x17if-ne p1, v0, :cond_b:cond_8invoke-direct {p0}, Lcom/paul/test/a;->d()V:cond_bconst/4 v0, 0x0invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)Vinvoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z move-result v0return v0.end method.class Lcom/paul/test/a;.super Landroid/view/View;# static fields.field private static final a:Landroid/graphics/Typeface;# instance fields.field private b:I.field private c:I.field private d:Z.field private e:J.field private f:I.field private l:[Ljava/lang/String;# direct methods.method static constructor <clinit>()V.registers 2sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;const/4 v1, 0x0invoke-static {v0, v1},Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;move-result-object v0sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;return-void.end method## other methods ..........## virtual methods.method public onKeyUp(ILandroid/view/KeyEvent;)Z.registers 4const/16 v0, 0x42if-eq p1, v0, :cond_8const/16 v0, 0x17if-ne p1, v0, :cond_b:cond_8invoke-direct {p0}, Lcom/paul/test/a;->d()V:cond_bconst/4 v0, 0x0invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)Vinvoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Zmove-result v0return v0.end method认真一看,就知道:# static fields 定义静态变量的标记# instance fields 定义实例变量的标记# direct methods 定义静态方法的标记# virtual methods 定义非静态方法的标记以onKeyUp方法为例,其中定义了处理逻辑,if-eq p1, v0, :cond_8 表示如果p1和v0相等,则执行cond_8的流程::cond_8invoke-direct {p0}, Lcom/paul/test/a;->d()V调用com.paul.test.a的d()方法不相等:if-ne p1, v0, :cond_b 则执行cond_b的流程::cond_bconst/4 v0, 0x0invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)Vinvoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Zmove-result v0大概意思就是调用com.paul.test.a的setPressed方法,然后再调用父类View的onKeyUp方法最后return v0该方法,能把外部引用的lib包类也解析出来,能开到包的全貌。
小程序反编译方法-概述说明以及解释
小程序反编译方法-概述说明以及解释1.引言1.1 概述概述部分旨在介绍本文的主题以及小程序反编译方法的背景和意义。
在这一部分,我们将简要介绍小程序以及其在现代互联网应用中的普及程度,并解释为何研究小程序反编译方法具有重要性。
小程序是一种轻量级的应用程序,可在移动端设备上无需下载和安装即可使用。
它以其便捷的使用体验和广泛的应用领域而受到用户的喜爱,如电商、社交媒体、游戏等。
作为开发者,我们必须充分认识到小程序在用户生活中的重要性,并采取措施确保其安全性和保密性。
然而,随着小程序在市场中的普及,黑客和竞争对手也开始关注其中蕴含的商业机会。
他们可能试图通过反编译小程序源代码来窃取知识产权、寻找安全漏洞或复制核心功能。
因此,了解小程序反编译方法变得至关重要,以便开发者能够及时发现并解决潜在的安全风险。
在本文中,我们将探讨小程序反编译的方法和技术。
我们将涵盖常见的反编译工具和技术,并提供一些实用的防护建议,帮助开发者保护自己的小程序免受恶意攻击。
通过深入研究小程序的反编译过程,我们可以加强对小程序开发的理解,并提高应对安全威胁的能力。
总之,本文将为读者提供关于小程序反编译方法的综合指南,以帮助开发者加强对小程序安全性的保护。
通过了解这些方法,开发者可以及时发现并解决潜在的安全风险,提供更可靠和安全的小程序产品。
文章结构是指文章的整体组织方式和篇章布局。
通过合理的文章结构,可以使读者更好地理解文章的内容,逻辑性更强,并能更好地抓住文章的要点。
本文将按照以下结构进行展开:1. 引言:1.1 概述:在这一部分,我们将介绍小程序反编译的概念和背景,解释为什么小程序反编译方法的研究非常重要。
1.2 文章结构:本部分将详细介绍文章的整体结构和各个章节的内容,帮助读者更好地理解文章的组织和流程。
1.3 目的:在这一部分,我们将明确本文的目的和意义,解释为什么需要进行小程序反编译方法的研究。
2. 正文:2.1 小程序反编译方法要点1:这一部分将详细介绍小程序反编译的基本概念和原理,说明如何进行小程序反编译,并提供相关的技术和工具。
Androidapk反编译基础(apktoos)图文教程
Androidapk反编译基础(apktoos)图⽂教程很久有写过⼀个⼴⼯图书馆主页⼀个类爬⾍的demo(因为没接⼝,只能扒取静态⽹页),实现⼀些图书馆系统的⼀些功能。
但最近发现图书馆系统在html页⾯上做了⼿脚,⼀页html 页⾯中嵌⼊了⼏千⾏的注释,并有了⾃⼰的App,应该是为了增加扒取的流量成本来防⽌别⼈去扒取⽹页,不过加注释这⼿段就不敢恭维了,内⽹访问速度还⾏,但外⽹访问的话体验很差的。
如下图:⼀堆注释,导致⼀个⽹页要2MB主页上的APP,必然是⽤了图书馆的后台接⼝和服务器交互的,从⽽想试试⽤反编译的⼿段来看看APP使⽤了什么接⼝。
(另外更简单可以通过来给Android⼿机抓包分析其接⼝,再⽤Wireshark来分析tcp包,不过你想要知道全部接⼝的话,可能需要⼀个个接⼝去调⽤,会⽐较⿇烦,采⽤反编译,可能集中在⼀个类中找到这些接⼝)。
解压缩APKTool,并把要反编译的APK放⼊⽬录中反编译:通过CMD进⼊上⾯的⽬录,执⾏命令: apktool decode ZhaoBenShu.apk outdir稍等⽚刻完成反编译,反编译后的⽂件会在outdir⽬录下。
---outdir⽬录结构res :资源⽂件,跟adnroid⼯程⽬录下的res基本⼀样,各种UI图⽚ XML布局⽂件 values xml⽂件(多了⼀个public.xml,有各个资源的id号(R.java中的id))smail:这个是重点⽂件夹,⾥⾯都是smail格式⽂件,是Dalvik虚拟机执⾏的操作码(Dalvik opcodes),这些操作吗有⾃⼰的语法,如果有学过JNI的话,这些语法还是⽐较容易看懂和理解的。
AndroidManifest.xml:Android⼯程下的AndroidManifest.xmlapktool.yml:⽤于重打包。
smail语法:(全部语法请)smail中的数据类型签名跟java中的是⼀样的,如下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
android反编译工具总结
序:
总结反编译主要的目的在于学习。
利用反编译进行相关的汉化或修改,都是不道德的!
大家都知道,将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex文件(.dex),我们可以从.dex 文件中得到.class,利用后者再得到大家垂涎已久的java文件。
下面分别针对这三种格式的文件进行反编译处理;
1.对xml文件进行包的解析,一般有两种方式:apktool(推荐)和AXMLPrinter
2.jar;
2.从dex到class公认dex2jar.bat,实现反编译;公认的强者;
3.而class到java的方式要更多样化一些,因为只是查看反编译后的代码:jd-gui(推荐),Jodeclipse(Jode的Eclipse 插件),JadClipse(Jad的Eclipse插件)。
还是作个大致介绍吧:
1.首先把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的。
2.把class.dex拷贝到dex2jar.bat所在目录。
运行dex2jar.bat class.dex,生成classes.dex.dex2jar.jar。
3.运行JD-GUI工具(绿色软件,好用的软件!),打开上面的jar文件,即可看到java源代码。
如果上面的步骤都可以自我完成了,那么,下面内容就可忽略不看了!
这几个软件,细分开来介绍(用步骤A(分A1,A2), B, C(分C1,C2,C3), ABC分别代表三个不同的步骤):
A1. apktool:
通常用于生成程序的源代码和图片、XML配置、语言资源等文件。
我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。
支持Linux 、Windows下工作
安装步骤:
1.安装JAVA环境(官方推荐jdk 1.6);
2.下载apktool.jar:/p/android-apktool/downloads/list
点击下载apktool1.3.2.tar.bz2 和apktool-install-windows-2.2_r01-3.tar.bz2 (不一定是这个,但最好选最新版本的吧!)
3.解压apktool1.3.2.tar.bz2得到apktool.jar;
解压apktool-install-windows.zip到任意文件夹,将apktool.jar拷入此文件夹中(也有人说是直接全部拷入C:/Windows,一样的);
(目前此文件夹中有三个文件:apktool.jar/apktool.bat/aapt.exe)
4.cmd命令行进入到解压apktool-install-windows-2.2_r01-3.tar.bz2所得的文件夹,输入apktool测试是否安装成功;安装成功后,下面开始反编译过程:
1.apktool d (要反编译的文件)(输出文件夹)
如:
apktool d XXX.apk (目标文件夹)反编译geek.apk到文件夹test
2.apktool b (目标文件夹)
从目标文件夹中重建APK,生成的APK在"目标文件夹"\dist文件夹里,叫out.apk。
这个out.apk是没有签名的,所以不能直接装到手机里。
签名工具和方法见
/bbs/thread-21261-1-1.html,这里就不说了。
签名后得到的APK,就是可以装到手机里的了。
A2. AXMLPrinter2.jar
将它放到android-sdk-windows-1.5_r3\tools文件夹中
运行cmd,进入tools目录,运行java -jar AXMLPrinter2.jar main.xml > main.txt;
于是我们就得到了反编译后的XML文件;
经历了这么多,我们得到的只是部分布局文件和资源文件,但java文件还是"犹抱琵琶半遮面"。
下面,让我们掀起她的红盖头来:
B. dex2jar
下载:/p/dex2jar/downloads/list
方法:
1.首先找到Android软件安装包中的classes.dex (解压得到);
它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
2.把classes.dex拷贝到dex2jar.bat所在目录;
在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex
,生成classes.dex.dex2jar.jar,成功了一半!
C1. JD-GUI
下载:http://java.decompiler.free.fr/?q=jdgui
方便好用,直接解压得到JD-GUI,用它打开上面的jar文件,File-->Save JAR Source,即可看到梦寐以求的java源代码;
我们也可以解压B步骤得到的jar文件得到class文件,到这里,我们就要用到Jodeclipse和JadClipse了;
C2. Jodeclipse---Jode的Eclipse插件
C3. JadClipse---Jad的Eclipse插件
关于这两个Eclipse插件的安装可见下面链接:
/blog/553061
(C4. 还有朋友提到DJ Java Decompiler,没用过,可以一试!)
但也有人提出此问题:
自从eclipse升级到3.3以后jad插件就一直没有成功的安装上去,网上看了好多文章也是以前版本的安装方法,3.3目前通过eclipse的software update的插件安装方式已经不行了。
解决方法如下:
1.从/jad.html#download地址下载最新的jad,我目前下载的是jadnt158.zip;
2.从/s ... jadclipse_
3.3.0.jar地址下载jadclipse_3.3.0.jar,拷贝到eclipse的plugins目录下;
3.启动或重起eclipse,修改window -> Preferences -> Java -> JadClipse 下的
Path to decompiler 如:D:\eric\jadnt158\jad.exe(jadnt158.zip解压后的目录);
4.Windows -> Perference -> General -> Editors -> File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”
大功告成,之后在java类里按住ctrl点击类就可以看到它jad反编译后的源带码了;
如果发现安装了没有效果,可以删除eclipse主目录下的\configuration\org.eclipse.update后,再执行eclipse -clean试试
最后,将得到的java文件和得到的xml文件组合可得一个android工程,即可得到相对比较完整的apk源码;但也有些额外加的包没被编译出来。
但做到这一步已经足够用于学习,我们的目的也就达到了!
大家也可关注下这两篇文章,用的不同方法(dexdump,baksmali.jar,smali.jar),但效果也还不错:
/Android_Tutor/archive/2010/07/09/5724435.aspx
/huyipeng/archive/2010/07/25/1784679.html
有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:
“用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。
反编译后一般都变成a, b , c,...这样的名字,只能一点点的看懂,再利用Eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。
”
所以,大家的关键代码最好还是打成.so库吧!要不会被一些人搞得内裤都没得穿!。