反编译android,so文件反编译

如何反编译android应用并重新打包

一.看android的源代码

目前累计服务客户上1000+,积累了丰富的产品开发及服务经验。以网站设计水平和技术实力,树立企业形象,为客户提供成都做网站、网站建设、网站策划、网页设计、网络营销、VI设计、网站改版、漏洞修补等服务。成都创新互联始终以务实、诚信为根本,不断创新和提高建站品质,通过对领先技术的掌握、对创意设计的研究、对客户形象的视觉传递、对应用系统的结合,为客户提供更好的一站式互联网解决方案,携手广大客户,共同发展进步。

1)将Apkd.apk 用zip解压后,出现了一个classes.dex文件

2014/02/19 19:42

.

2014/02/19 19:42

..

2014/02/19 15:35 1,656 AndroidManifest.xml

2014/02/19 15:35 687,024 classes.dex

2014/02/19 15:49

META-INF

2014/02/19 15:49

res

2014/02/19 15:35 2,200 resources.arsc

2)进入到dex2jar目录中,运行情况如下:

D:\developer\tools\test_apk\dex2jar-0.0.9.15dex2jar.bat "..\Apkd(d2j)\classes.d

ex"

this cmd is deprecated, use the d2j-dex2jar if possible

dex2jar version: translator-0.0.9.15

dex2jar ..\Apkd(d2j)\classes.dex - ..\Apkd(d2j)\classes_dex2jar.jar

Done.

在apk所在的目录会出现 classes_dex2jar.jar 文件。

3) 用JD-GUI对jar包进行查看,可以查看源文件

二.反编译apk

1.在 下载 APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.

2012/12/06 11:44 854,016 aapt.exe

2014/02/19 17:15 277,372 Apkd.apk //示例用 apk文件

2012/12/23 23:39 92 apktool.bat

2013/02/03 02:37 2,655,843 apktool.jar

2.进入到apktool.bat所在的目录,运行:

apktool d Apkd.apk decode_dir

反编译后,decode_dir目录下的内容如下:

2014/02/19 17:16 716 AndroidManifest.xml

2014/02/19 17:16 237 apktool.yml

2014/02/19 17:18

build

2014/02/19 17:16

res

2014/02/19 17:16

smali

此时我可以查看原文件AndroidManifest.xml了,也是查看smali源文件(是用smali语言写的,可以对照java看)。

三.APKTOOL的使用

1).decode

该命令用于进行反编译apk文件,一般用法为

apktool d

代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk

代表了反编译后的文件的存储位置,比如C:\MusicPlayer

如果你给定的已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令

apktool d –f

这样就会强行覆盖已经存在的文件

2).build

该命令用于编译修改好的文件,一般用法为

apktool b

这里的

就是刚才你反编译时输入的

(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。

3).install-framework

该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题

四.smali与java源码对照,并做出相应的修改

java源代码:

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.widget.*;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView a = (TextView)this.findViewById(R.id.test) ;

a.setText("raoliang");

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

对应的smali源代码:

.class public Lali/text/apkd/MainActivity;

.super Landroid/app/Activity;

.source "MainActivity.java"

# direct methods

.method public constructor ()V

.locals 0

.prologue

.line 8

invoke-direct {p0}, Landroid/app/Activity;-()V

return-void

.end method

# virtual methods

.method protected onCreate(Landroid/os/Bundle;)V

.locals 2

.parameter "savedInstanceState"

.prologue

.line 12

invoke-super {p0, p1}, Landroid/app/Activity;-onCreate(Landroid/os/Bundle;)V

.line 13

const/high16 v1, 0x7f03

invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;-setContentView(I)V

.line 14

const/high16 v1, 0x7f08

invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;-findViewById(I)Landroid/view/View;

move-result-object v0

check-cast v0, Landroid/widget/TextView;

.line 15

.local v0, a:Landroid/widget/TextView;

const-string v1, "raoliang"

invoke-virtual {v0, v1}, Landroid/widget/TextView;-setText(Ljava/lang/CharSequence;)V

.line 16

return-void

.end method

.method public onCreateOptionsMenu(Landroid/view/Menu;)Z

.locals 2

.parameter "menu"

.prologue

.line 21

invoke-virtual {p0}, Lali/text/apkd/MainActivity;-getMenuInflater()Landroid/view/MenuInflater;

move-result-object v0

const/high16 v1, 0x7f07

invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;-inflate(ILandroid/view/Menu;)V

.line 22

const/4 v0, 0x1

return v0

.end method

通过对比可以看到,常量是没有必变的,可以根据的smali的语法,进行相应的修改

五.3、打包、签名和安装修改后的apk

修改完了,就可以打包回apk了。执行以下命令:

apktool b decode_dir

在mygame目录下的dist在会看到打包好的apk。

当然,现在一般是无法安装的,因为apk还没有签名。下面就来签名。签名需要keystore文件,我已经有专用的keystore了,如果还没有,请参阅这里进行生成。

执行以下命令为重新编译的my_game.apk签名:

jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore

最后,在安装到手机前,需要把手机中的已有版本先卸载,因为如果签名不同,是不能覆盖安装的,会提示“应用程序未安装”错误。

完整的运行情况如下:

D:\developer\tools\test_apk\new\decode\distkeytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

输入keystore密码:

再次输入新密码:

您的名字与姓氏是什么?

[Unknown]: rao

您的组织单位名称是什么?

[Unknown]: rao

您的组织名称是什么?

[Unknown]:

您所在的城市或区域名称是什么?

[Unknown]:

您所在的州或省份名称是什么?

[Unknown]:

该单位的两字母国家代码是什么

[Unknown]:

CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正确吗?

[否]: y

输入的主密码

(如果和 keystore 密码相同,按回车):

D:\developer\tools\test_apk\new\decode\distjarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore

输入密钥库的口令短语:

正在添加: META-INF/MANIFEST.MF

正在添加: META-INF/DEMO_KEY.SF

正在添加: META-INF/DEMO_KEY.RSA

正在签名: res/drawable-hdpi/ic_launcher.png

正在签名: res/drawable-mdpi/ic_launcher.png

正在签名: res/drawable-xhdpi/ic_launcher.png

正在签名: res/drawable-xxhdpi/ic_launcher.png

正在签名: res/layout/activity_main.xml

正在签名: res/menu/main.xml

正在签名: AndroidManifest.xml

正在签名: classes.dex

正在签名: resources.arsc

D:\developer\tools\test_apk\new\decode\dist

到此为止,修改后的apk可以正常的安装了,不过,在安装之前,必须要先卸载以前的apk,不能直接替换(因为签名不一样)

反编译Android APK的具体步骤是怎样的

1、配置好JAVA环境变量,下载:apktool 解压的文件放在C盘根目录的apktool文件夹里(apktool文件夹自己创立)

2打开命令提示符,(开始-运行-输入cmd)

3输入:cd \apktool 系统指令到了apktool文件夹(这里就是为什么要把解压的apktool解压的文件放到apktool文件夹的原因,当然你也可以自命名文件夹的名称,那么比如arc,那么指令就变成了:cd \arc 前提是你必须把apktool解压的文件放到这个文件夹里面)

4使用RE管理器把系统里面的framework-res.apk 与 SystemUI.apk 提取出来放在apktool文件夹里面

5 如果只是想反编译framework-res.apk

输入apktool if framework-res.apk(框架的建立)

6开始最重要的反编译,输入指令,apktool d framework-res.apk

(反编辑的APK一定要用没换过图片的,否则回编辑失败)

7最后反编译完成

修改代码完成后,输入代码:apktool d framework-res 即可完成回编译

8回编译后的新的 apk在framework/dis 文件夹里面

9如果反编译的是系统文件,比如,SystemUI.apk 那么必须进行挂载框架,反编译时,必须敲入一下命令:(然后再重复7-9步骤)

apktool if framework-res.apk

apktool if SystemUI.apk

10对于三星手机(比如9100、9108/9100G),如果反编译SystemUI.apk要敲入一下命令进行框架挂载apktool if framework-res.apk

apktool if twframework-res.apk

apktool if SystemUI.apk

11回编译的命令是 apktool b XXX (没有后面的apk后缀)反编译的命令是 apktool d xxx (有后面的apk)

如何反编译android 的apk

一、Apk反编译得到Java源代码

下载上述反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk反编译成java源码工具,以及源码查看工具。

apk反编译工具dex2jar,是将apk中的classes.dex转化成jar文件

源码查看工具jdgui,是一个反编译工具,可以直接查看反编译后的jar包源代码

具体步骤:

首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。

在命令行下定位到dex2jar.bat所在目录,运行

dex2jar.bat classes.dex

生成

classes_dex2jar.jar

然后,进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码了

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

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

首先还是要下载上述反编译工具包,其中最新的apktool,请到google code下载

apktool(google code)

具体步骤:

下载上述反编译工具包,打开apk2java目录下的apktool1.4.1文件夹,内含三个文件:aapt.exe,apktool.bat,apktool.jar

注:里面的apktool_bk.jar是备份的老版本,最好用最新的apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool.bat d -f abc123.apk abc123

三、 图形化反编译apk

上述步骤一、二讲述了命令行反编译apk,现在提供一种图形化反编译工具:Androidfby

首先,下载上述反编译工具包,打开Androidfby目录,双击Android反编译工具.exe,就可以浏览打开要反编译的apk

Android反编译(三)— 手动编译

PS: 最近没工作,没工作就没需求,没需求就没什么技术总结的灵感,那就没更新什么。但是两个月不更新了,要是三个月不更新就会出大事,所以这次打算做一件有意思又不难的事。

之前有发文章写过反编译,今天就来试试反编译之正编译,开玩笑的,就是试试手动编译的过程, 平时我们在项目中编译出包都是使用Gradle直接执行assemble任务就能解决,我打算试试手动模拟整个过程。当然我也是第一次这样搞,所以如果有写得不对的地方,还望指出。

众所周知,apk实质上就是一个压缩包。复习一下,我们写个最简单的Demo,然后打包,然解压,注意是解压,不是反编译,意义是不同的。

注意我这个Demo很简单,什么都不引入

然后我们看看整个出包的过程,随便从网上拿张图

然后这里我们用Android SDK给我们提供的工具来完成整个流程,工具在sdk文件夹下的build-tools文件夹下,有什么aapt.exe、dx.bat,用的就是这些

这步应该是整个流程最简单的吧,我感觉,所以从最简单的开始。

我们先看看生成的dex有什么

对比项目,我是一开始最基本的项目,什么都没动,所以只有一个MainActivity.clas,所以这里肯定是要先想办法得到BuildConfig.class和R.class。

输入命令:

aapt p -f -m -J 输出路径 -S res路径 -I android.jar路径 -M Manifest路径

下一步,我们需要BuildConfig.class

这个BuildConfig.java是由gradle在我们配置好gradle之后自己帮我们生成的,所以我们直接拿来用,然后再javac就得到class文件了

然后我们再编译我们的MainActivity.java并将它们放到同一个文件夹下, MainActivity因为引用了Android.jar和R文件,所以编译时注意点,我为此被动好好的复习了一遍javac,都是泪

最后一步,我们用dx工具就能打出dex文件了

然后执行命令就得到一个Dex文件,看看这个文件里面和上面直接打出的apk中的Dex文件有什么不同:

看图,我们上一步已经生成.dex了,那么我们需要和compiled Resource 还有 Other Resource 一起生成APK。

我们先来生成compiled Resource,也就是resources.arsc

发现之前使用aapt生成R文件的时候没写完整,当时可以加一个-F参数直接生成arsc和Manifest

导出的abc.zip里面就有resources.arsc和AndroidManifest.xml。

因为之前写漏了,所以肯定要重新编一次MainActivity.java和Dex

我们把刚才的dex文件和aapt生成的resources.arsc、AndroidManifest.xml和res放到一个文件夹里面。

PS:res文件夹也是上面aapt的命令生成的

然后我们对比这个文件夹和之前apk解压的文件夹

最后运行

看来是成功了。

再说说遇到的还有两个问题,并说下我解决问题的思路

(1)我把它们都放到一个文件夹之后,我压缩成压缩包,然后改后缀成.apk,然后发现安装不了,我就直接反编译,发现发编译失败,提示包有问题,以我多点玩包的经验,我感觉就是压缩工具出了问题,然后我去下个“好压”(这不是广告啊),然后就能正常反编译了。

(2)但是还是安装不了,再根据我多年的玩包经验,我感觉是签名问题,然后我随便给这个包上一个签名,就能正常安装得到上图的结果了。

总体来说,还真挺好玩的,这整个过程,就是翻车了几次。做完之后感觉非常牛逼,为什么这样说,因为我知道这整个过程,我就可以做到,我不经过gradle来打包,我自己写个python脚本来调用aapt和dx来打包也是能做到的。

当然上面纯属异想天开,因为这是个什么都没有的Demo所以觉得简单,要是一个真实的项目,我感觉肯定要有很多坑,别的先不说,一个项目那么多依赖关系,我这javac要搞死人。

最后如果有不对的地方,希望有大佬能够指出,毕竟能运行也不能证明完全没问题。然后我使用的build-tools是28的,不敢保证其它版本包括以后版本的玩法都一样。

Android 如何对apk文件进行反编译以及重新

第一:使用apktool直接反编译apk

第二:apk中包含的内容

第三:进入到hellodemo\smali\com\example\hello,打开MainActivity.smali。找到:

const-string v1, "\u4f60\u597d",

修改为:

const-string v1, "hello",

第四:然后在命令行输入:apktool b hellodemo hellodemo1.apk。这回重新打包成hellodemo1.apk。

第五:然后给新生成的apk进行签名。把这个apk拷贝到autosign的目录下面,然后切换过去,在命令行输入:java -jar signapk.jar testkey.x509.pem testkey.pk8 hellodemo1.apk hellodemo.apk。

第六:把生成的hellodemo.apk安装到手机,可以看到主界面上已经显示的是hello,而不再是你好。说明反编译重新打包成功!

[img]

android 怎么进行反编译

下载附件解压在桌面,打开桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool回车测试apktool可用性 提取ROM里的框架和ui 放在桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool if framework-res.apk回车加载框架完成 反编译ui打开桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool d SystemUI.apk回车反编译完成 回编译ui打开桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool b SystemUI回车回编译完成


文章标题:反编译android,so文件反编译
链接URL:http://ybzwz.com/article/dsopeep.html