Android反编译和编译

合集下载

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逆向助手使用说明

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 APK反编译得到Java源代码和资源文件

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编译流程

android编译流程

android编译流程Android编译流程是将源代码转化为可执行的Android应用程序的过程。

编译流程包括以下几个主要步骤:1.获取源代码:首先,开发人员需要从Android Open Source Project (AOSP) 或者其他可靠的源代码库中获取Android源代码。

获取源代码可以通过使用版本控制工具如Git来完成。

2.准备构建环境:在编译之前,需要准备好构建环境。

这包括安装正确的开发工具、依赖库和配置。

- 开发工具:Android编译使用Java编程语言,因此需要安装Java Development Kit (JDK)。

同时还需要安装Android软件开发工具包(SDK),用于构建和测试Android应用。

- 依赖库:编译Android需要一些依赖库,包括C/C++编译器、make 工具、libc、libm和其他系统库。

这些库可以通过安装合适的软件包管理工具来获取。

-配置:开发人员需要根据构建计划配置构建环境。

这包括选择编译器版本、构建目标平台以及其他构建选项。

3.设置环境变量:为了让系统能够找到正确的构建工具和依赖库,开发人员需要设置一些环境变量。

这可以通过在命令行终端中设置系统环境变量或者使用脚本文件进行配置来实现。

4.执行初始化构建:在进行实际的编译之前,需要执行一些初始化构建操作。

这包括解压源代码文件、创建构建描述文件、设置编译选项等。

5.编译源代码:编译源代码是整个编译流程的核心步骤。

在此步骤中,构建系统将递归地遍历整个源代码树,并将每个源文件编译成目标文件。

编译过程通常分为以下几个阶段:-预处理:在编译之前,构建系统会首先对源代码进行预处理。

预处理器将处理预处理指令、宏定义等,并将源代码转化为可供编译器识别的形式。

-编译:编译器将源代码编译成汇编语言或者中间代码。

-汇编:汇编器将汇编语言代码转化为机器可执行的二进制指令。

Android 反编译dex2&jd-gui&apktool教程

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文件夹。

Android逆向工具篇—反编译工具的选择与使用

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

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引⽤。

Android应用的反编译

Android应用的反编译

A dod应用 的反编译 n ri
徐 尤华 , 熊传玉
( 广东松 山职 业技术学院 , 东 韶关 5 22 ) 广 1 16 摘 要: 随着计算机软件 的广泛应 用, 反编译 n ri 应
的方法。 通过对 A dod应用的反编译 , n ri 可以推导出他人的思路 、 原理 、 结构 、 算法、 处理过程、 运行 方法等设计要素 , 为 自 作
让更多的人加入到应用开发队伍 中来 ,并且能够以更
该 应用运行界 面如下图 1 所示 , 点击 “ 开始 朗读” 按钮后开始朗读输入的内容。
快的速度成长 , 从而提供更多的优秀的应用产品 , 这无 疑能够很好的推动 A do 应用产业的发展。但是各 n rd i
个厂商和开发者出于各种原因,都不会公开 自己应用 的源代码 ,通过对应用 的反编译可以达到学习其设计
(un d n o ghnP lt hi ol e S aga 1 16Clm) G ag o gS n sa oy cncC lg , houn5 22 , a e e i
Ab t a t W i e tn i e u e f c mp t r s f r , e o f h s e o a i p r n r sa c r a n t e o t r sr c : t x e sv s o o u e o t e d c mp e a h wa l b c me n m o t t ee r h a e i h s f a wae r v r n i e r g ti p p r p ee t a wa o d c mp e a d o d a p c  ̄ n .Th o g d c mp e e es e g n e i , h s a e r sn s y t e o f n r i p f a o s e n l i ruh e o f ,we C l d r e t e i al e v h i ie s r c ls tu t r ,a o i ms r c s s p rt g me h d n te ein ee n s o t e , a s h s d a,p n i e ,s cu e l r h ,p 0 es 'o e ai t o s a d o h r d s lme t f o h r we c u e t e e a i p r g t e n g s n s o r o ee e c e e eo i g s f r ,o ie t o o r s f r e p o u t. u wn r fr n e wh n d v lp n ot e r d rcl t u ot wa y wa r d cs

android 源码编译原理(一)

android 源码编译原理(一)

android 源码编译原理(一)Android源码编译本文将以浅入深的方式解释Android源码编译的相关原理。

为什么需要编译Android源码?在Android应用开发中,我们通常使用Android SDK提供的API来开发应用程序。

然而,有时候我们需要对Android系统进行修改或扩展,这就需要我们直接修改Android源代码。

为了让这些修改生效,我们需要将修改后的源码编译成可执行的Android系统镜像,然后将该镜像刷入设备。

编译环境的准备在编译Android源码之前,我们需要准备编译环境。

首先,确保我们的电脑上已经安装了必要的开发工具,如JDK、Python、Git等。

然后,下载Android源码,并进行必要的配置。

要编译Android源码,我们需要使用Linux环境。

如果我们使用的是Windows操作系统,可以通过安装虚拟机或使用Docker等方式创建一个Linux环境。

编译Android源码的基本步骤编译Android源码的基本步骤如下:1.初始化编译环境:在Android源码根目录下执行source build/envsetup.sh命令,初始化编译环境。

2.选择编译目标:执行lunch命令,选择我们要编译的目标设备和版本号。

3.开始编译:执行make命令,开始编译Android源码。

编译过程通常需要较长的时间,这取决于电脑性能和代码的规模。

4.生成镜像:编译完成后,我们可以在out/target/product目录下找到生成的Android系统镜像文件。

深入了解Android源码编译编译Android源码并不仅仅是简单执行几个命令那么简单,背后涉及到了诸多复杂的过程和原理。

下面简单介绍一些主要的原理:1. Android.mk文件在进行Android源码编译时,系统会通过读取每个模块下的Android.mk文件来确定编译的方式和依赖关系。

Android.mk文件是GNU make的一个Makefile脚本,用于描述模块的编译规则、依赖关系和生成产物等信息。

android apk修改方法(反编译、修改、打包)

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安装最后工作目录是这个样子。

androidmanifest回编译

androidmanifest回编译

androidmanifest回编译
AndroidManifest.xml文件是Android应用程序的一个重要组成部分,它包含了应用程序的基本信息和组件声明。

如果你想回编译AndroidManifest.xml文件,你需要按照以下步骤进行操作:
1. 确保你有原始的AndroidManifest.xml文件。

如果原始文件已经丢失或被修改,你可能无法完全恢复到原始状态。

2. 将AndroidManifest.xml文件放置在你的Android项目的根目录下。

3. 打开命令行工具(如终端或命令提示符),并导航到你的项目目录。

4. 使用Android Studio打开你的项目。

如果你的项目已经打开,请关闭并重新打开它,以确保更改生效。

5. 在Android Studio中,选择"File"(文件)菜单,然后选择"Invalidate Caches / Restart"(清除缓存/重启)。

这将清除Android Studio的缓存并重新启动它。

6. 重新启动后,Android Studio将自动检测到AndroidManifest.xml文件的更改,并重新编译应用程序。

请注意,回编译AndroidManifest.xml文件可能无法完全恢复应用程序的原始状态,特别是如果其他代码或资源文件已经发生了更改。

因此,建议在修改AndroidManifest.xml文件之前备份整个项目,以避免不必要的损失。

Android apktool 工具使用介绍

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反编译教程

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包类也解析出来,能开到包的全貌。

android源码编译流程

android源码编译流程

android源码编译流程Android系统源代码是开源的,任何有兴趣的人都可以下载、阅读和修改它。

但是,为了保证该系统在各种硬件上的流畅运行,需要对Android源码进行编译。

以下是Android源码编译的流程:1. 安装编译环境编译Android源码需要安装一些必要的工具。

首先需要安装JDK(Java Development Kit),其次需要安装Android SDK(Software Development Kit)和NDK(Native Development Kit)。

此外,还需要安装Git和Repo工具,用于获取和同步源代码。

2. 下载源代码在安装好编译环境之后,需要从官方网站下载Android源代码。

这个过程可能需要一段时间,并且需要高速稳定的网络连接。

下载完成后,将源代码存储在本地磁盘上。

3. 初始化和同步源代码使用Repo工具初始化本地文件夹和Git工作区。

初始化完成之后,需要对代码库进行同步操作以确保源代码是最新的。

同步的过程可能需要几个小时,取决于网络速度和源代码树的大小。

4. 设置编译环境针对不同的设备和平台,需要配置不同的编译环境。

在此步骤中,需要设置所需的环境变量和其他相关的参数,例如,配置JDK路径、选择目标平台和设备、设置NDK路径等等。

5. 生成MakefileAndroid源代码使用GNU Make来构建,因此需要生成一个Makefile列表。

这个过程使用根目录下的build/envsetup.sh文件来完成。

一旦生成了Makefile,就可以开始编译Android源代码了。

6. 执行编译执行编译操作是最耗时的部分,需要等待一段时间才能完成。

编译和构建过程是一个逐步递进的过程。

首先需要编译基础库,然后编译各个组件和应用程序。

这个过程需要在控制台中执行一系列的命令,并且需要注意一些错误和警告消息。

7. 生成系统映像一旦编译完成,在源代码树下的out目录中就会生成一个system.img文件,这是Android系统的镜像文件。

apktool反编译、编译和签名

apktool反编译、编译和签名

反编译、编译和签名№.1 反编译1、反编译:高级语言源程序经过“编译”变成可执行文件,反编译就是逆过程。

但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。

2、通过反编译我们都能做什么:简单的说通过反编译我们可以修改任意参数来使其达到我们预想中的效果,比如修改APP名字3、APK的反编译(APKTool)3.1、APKTool的使用环境配置请参见第一讲:在PC端搭建JAVA环境3.2、下载所需附件①打开地址:链接地址见原文②下载两个文件“apktool1.4.3.tar.bz2”和“apktool-install-windows-r04-brut1.tar.bz2”3.3、安装APKTool(其实算不上“安装”)①解压上一步下载的两个文件,得到三个文件,如图所示②将解压出来的三个文件移动到C盘的windows目录下③打开CMD命令(方法在第一讲中有介绍),直接输入“apktool”,然后“回车”如果没有提示错误信息,就说明安装成功(如下图)3.4、反编译.apk文件(以“MiuiMusic.apk ”为例)①打开CMD命令(方法在第一讲中有介绍),输入代码:apktool dD:\MiuiMusic.apk D:\APK▲这里第一个D表示要反编译的apk文件所在的目录,所以首先要将apk文件放到D盘里再举个例子,假如我把apk文件放到了D盘的“abcd ”文件夹里了,那么我要输入的代码就应该是:apktool dD:\abcd\MiuiMusic.apk D:\APK▲这里第二个D表示反编译apk后的目录,意思就反编译到D盘的APK文件夹里再举个例子,假如我要把apk文件反编译到E盘的“abcd ”文件夹里,那么我要输入的代码就应该是:apktool dD:\MiuiMusic.apk E:\abcd②对于这段代码的详细解释,如下图所示▲输出目录文件夹名字可以自定义,输入代码后,会自动在指定目录下创建文件夹③代码输入完成后“回车”,稍等片刻,即可反编译完成那么这个时候在代码中所指定的目录里就可以找到反编译后的文件了!3.5、有些apk需要framework框架支持,下面说说如何导入该框架①用压缩软件打开apk文件所在ROM(这里以MIUI ROM为例)如图所示②打开文件夹system\framework,找到文件“framework-res.apk”,并将它复制到C盘的Windows文件夹里③打开CMD命令,输入代码:apktool ifC:\windows\framework-res.apk,然后“回车”瞬间就会完成,如下图所示,即导入框架成功!4、JAR的反编译(JD-GUI)这里仅介绍JD-GUI这个软件,其他更复杂的修改在以后我会继续为大家带来教程这款反编译器叫"JavaDecompiler",由Pavel Kouznetsov开发,目前最新版本为0.3.3;它由C++开发,并且官方可以下载windows、linux和苹果Mac Os 三个平台的可执行程序。

Androidapk反编译基础(apktoos)图文教程

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中的是⼀样的,如下。

Android APK+Dex文件反编译及回编译工具APKDB v1.7.2正式版教程

Android APK+Dex文件反编译及回编译工具APKDB v1.7.2正式版教程

我目前用的就是这个软件,很强大,推荐一下。顺便提醒下,要安装JDK软件,设置环境变量才能用
软件简介:
全名:《Android APK+Dex文件反编译及回编译工具》v1.7.2正式版
简称:APKDB,作者是Soyu Zom。
它是一款,针对Android OS系统的APK程序,直接反编译修改的工具。
汉化修改完成后,对文件夹点击【鼠标右键】根!
同时,针对apk和zip文件增加签名操作,只要【鼠标右键】点击,选择
【签名XX文件】即可!签名前无需删除原来的【META-INF】签名数据。本工具会
判别apk还是zip并自动删除签名数据。
· 对*.Apk 文件 批量反编译 及 回编译
· 对*.Apk、*.Zip 文件执行签名
· Windows下直接显示APK文件自身图标
可兼容手机管理工具:
? * 豌豆荚手机精灵
* 魔乐手机管家
* 91手机助手
* QQ应用助手
? * APK安装器123
* 手机乐园APK安装器
APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具;
正常安装后,它直接在【鼠标右键】创建快捷菜单;
非常方便汉化工作者,对APK或Dex文件进行简易的反编译回编译操作。
相信很多高手都用过吧。
软件功能特性:
· 对*.Apk 文件 反编译 及 回编译 用于汉化修改
· 对*.Dex 文件 反编译 及 回编译 或查看详细源代码
* N多APK安装器
? * 隔壁的 APK安装器
使用说明:
本工具执行安装后,直接在【鼠标右键】生成快捷键,自动关联APK、DEX、

菜鸟夜谈android反编译

菜鸟夜谈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);}这么乱的代码,想找到⾃⼰想要的代码真是不容易。

dex编译解析

dex编译解析

dex编译解析一、DEX简介DEX(Dalvik Executable Format)是一种适用于Android平台的字节码格式,它由谷歌公司开发。

与Java字节码相似,DEX字节码可以在Dalvik虚拟机上运行。

在Android应用开发中,DEX文件是编译后的产物,包含了应用程序的代码、数据和资源。

二、DEX编译原理1.源代码编写:开发者使用Java或Kotlin等编程语言编写应用程序的源代码。

2.编译:使用Android Studio或其他IDE将源代码编译成DEX字节码。

在这个过程中,编译器会将代码优化、打包,并生成一个包含多个DEX文件的APK。

3.打包:编译后的DEX文件需要与其他资源(如图片、音频等)一起打包成一个APK文件,以便在Android设备上安装和运行。

4.安装和运行:用户在Android设备上安装APK文件,Dalvik虚拟机负责加载和执行DEX字节码。

三、DEX解析方法1.反编译:通过反编译工具(如apktool、jadx等)将APK文件解压,获取其中的DEX文件。

反编译有助于分析代码结构、查看变量和方法等。

2.静态分析:使用静态分析工具(如Android Studio、jadx等)对DEX 文件进行语法分析,获取类的结构、方法调用关系等信息。

3.动态调试:在模拟器或实际设备上安装应用程序,并使用调试工具(如Android Studio、ADB等)对DEX文件进行动态调试,实时观察程序运行状态、方法调用等。

四、DEX在实际应用中的优势1.跨平台:DEX字节码可以在多种Android设备上运行,具有良好的兼容性。

2.高效执行:Dalvik虚拟机针对DEX字节码进行了优化,执行效率较高。

3.占用资源少:DEX文件相对于Java字节码文件较小,节省了存储空间和传输带宽。

4.易于调试和分析:DEX文件具有较好的可读性,便于开发者进行调试和分析。

五、总结DEX编译解析是Android应用开发过程中不可或缺的一环。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【Android 教程】反编译和编译
第一:要在你的PC上建立Java的环境,才能执行编译工作。

具体方法我这个就不说了,你百度或者Google下就知道了,很简单的。

第二:下载必要的工具。

Apktool工具,下载地址/file/e65esebm
下载后解压(有三个文件aapt.exe,apktool.bat,apktool.jar),为了方便。

将解压出来的文件放在CDM模式(win+R)默认的目录下。

比如,我的是Windows7 32位我的CDM模式默认目录是C:\USER\用户名。

第三:如果你是要编译系统文件的话,请将你要修改的rom里的framework-res.apk和com.htc.resources.apk(暂时叫做依赖包)用CMD模式“安装”下。

这样编译才不会出错。

我一开始就是在这里纠结了很久。

呵呵
安装方法:把依赖包放在刚才放apktool的目录下。

(你也可以用指定目录的方法安装)cmd模式执行apktool if framework-res.ap k这个是安装framework-res.apk
apktool if com.htc.resources.apk 这个是安装com.htc.resources.ap k
第四:准备工作都做好了,现在就可以反编译和编译了。

将你要反编译的ap k放在ap ktool的目录下。

(你也可以用指定目录)
cmd模式执行apktool d **X.ap k 这个是Decode也就是反编译
比如反编译rosie 就执行ap ktool d rosie.ap k 就可以了(会在当前的目录下生成rosie的文件夹,修改就是在这个文件夹里进行)
cmd模式执行apktool b **X 这个是build 也就是编译回去
比如编译rosie 就执行ap ktool b rosie 就可以了(会在rosie的文件夹中生成一个叫dist 的文件夹,编译回去的ap k就是此文件夹中)
另外说明:
反编译和编译也可以用第三方工具而不用命令行。

这里提供一个好用的工具Ap kT ool_GUI_1.3.5。

(感谢这个工具的作者)下载:/file/e65esav4
使用方法,先打开工具,然后直接将要反编译的ap k拖入到相应的窗口中,再点击就可以了。

这个工具编译非系统文件时很方便,但是编译系统文件时会出错,会卡死。

比如rosie这个apk 我每次都卡死。

呵呵
建议编译系统文件的时候还是用CMD。

非系统文件时就用ApkT ool_GUI_1.3.5
注意:第三步很重要,很多人不成功就是因为没做第三步。

相关文档
最新文档