apk文件反编译以及签名打包

合集下载

【转】一步一步带你反编译apk,并教你修改smali和重新打包

【转】一步一步带你反编译apk,并教你修改smali和重新打包

【转】⼀步⼀步带你反编译apk,并教你修改smali和重新打包⼀、⼯具介绍:1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同⼀⽬录结合使⽤,⽤来反编译apk,apk重新打包;2.dex2jar:该⼯具作⽤是将classes.dex⽂件,反编译出源码(如果apk未加固),反编译出⽂件,使⽤jd-gui⼯具进⾏查看;3.Auto-Sign:⾃动签名⼯具,将重新打包的apk进⾏签名,如果不签名,⽆法安装使⽤。

⼯具下载地址:(需要3CSDN积分,原本我设置3积分的,不知道为什么涨到16积分了......)使⽤场景:项⽬源码丢失,只有线上apk,并且没有加固,要求修改apk接⼝地址,并且重新打包,再发布。

⼆、⼯具使⽤:解压后⼯具包如图:1.思路:使⽤⼯具dex2jar反编译,并⽤jd-gui⼯具进⾏查看项⽬结构,查看源码,并且找到接⼝地址类,修改接⼝地址;步骤⼀:下载好⼯具,将需要反编译的APK后缀名改为.rar或则 .zip,并解压,如图:得到其中的classes.dex⽂件(它就是java⽂件编译再通过dx⼯具打包⽽成的),将获取到的classes.dex复制到解压出来的⼯具dex2jar-0.0.9.15 ⽂件夹内,在命令⾏下,进⼊到dex2jar.bat所在⽬录,输⼊命令:dex2jar.bat classes.dex效果如下:步骤⼆:运⾏结束后,在该⽬录下会⽣成⼀个classes_dex2jar.jar的⽂件,如图:然后打开⼯具jd-gui⽂件夹⾥的jd-gui.exe,⽤该⼯具打开⽣成的classes_dex2jar.jar⽂件,便可以看到源码了,效果如下:2.思路:apktool,反编译修改smali⽂件,进⾏重新打包,通过⽤jd-gui⼯具找到接⼝地址类后,与相应的smali⽂件进⾏对⽐,修改接⼝地址;下载上述⼯具中的apktool,解压得到3个⽂件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK⽂件放到该⽬录下,如图:打开命令⾏界⾯(运⾏-CMD),定位到apktool⽂件夹,输⼊以下命令:apktool.bat d -f test.apk -o testapktool -f [待反编译的apk] -o [反编译之后存放⽂件夹]如图:反编译之后会得到test ⽂件夹,打开test⽂件夹,⾥边就是反编译出来的各种资源⽂件使⽤jd-gui查看源码找到地址类,然后在smali⽂件⾥找到地址的smali⽂件,更改smali⽂件内接⼝地址。

Apk反编译及签名工具使用

Apk反编译及签名工具使用

Apk反编译及签名工具使用1) APKtool软件包及签名toolAPKtool软件包有2个程序组成:apktool.jar 和aapt.exe另外提供一个批处理文件:apktool.bat,其内容为:java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9运行apktools.jar需要java环境(1.6.0版本以上)。

apktool.jar用于解包,apktool.jar和aapt.exe联合用于打包。

signapk.jar 用于签名。

2) APK文件的解包下面以解开Contacts.apk为例。

首先把Contacts.apk Copy到当前工作目录下(例:Test)。

在DOS下打入命令apktool d Contacts.apk ABC这里“d”表示要解码。

Contacts.apk是要解包的APK文件。

ABC是子目录名。

所有解包的文件都会放在这个子目录内。

3) APK文件的打包在DOS下打入命令apktool b ABC New-Contacts.apk这里“b”表示要打包ABC是子目录名,是解包时产生的子目录,用来存放所有解包后的和修改后的文件。

New-Contacts.apk是打包后产生的新的APK文件。

4) 签名,不签名安装时可能提示如下错误:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] --- 没有签名,可以尝试test证书;签名方法见下面。

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] ---- 已存在签名,但使用证书不对,可以尝试使用其他证书签名。

签名方法:到目录android\build\target\product\security找到证书文件,这里可能会有几种证书,test/shared/platform/media,各种证书使用场景不同,可以自己google一下,因为签名很快而且可任意后续更改签名,可以自己尝试各种不同签名;这个命令行是使用test证书的例子:java -jar signapk.jar testkey.x509.pem testkey.pk8 YOURAPK.apk YOURAPK_signed.apkYOURAPK_signed.apk就是签完名的apk,去测试一下您重新打包的apk吧。

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反编译和二次打包教程

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源代码和资源文件

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在此郑重声明:分享此文,不是为了破解别人的软件,完全是一种学习态度,代码要自己手敲出来才会有感情的。

反编译APK文件的三种方法(转)

反编译APK文件的三种方法(转)

反编译APK⽂件的三种⽅法(转)因为学习Android编程的需要,有时我们需要对⽹络上发布的应⽤项⽬进⾏学习,可是Android项⽬⼀般是通过APK⽂件进⾏发布的,我们看不到源代码,嘿嘿,办法总会有的,⽽且不⽌⼀个...ps:对于软件开发⼈员来说,保护代码安全也是⽐较重要的因素之⼀,不过⽬前来说Google Android平台选择了Java Dalvik VM的⽅式使其程序很容易破解和被修改,⾸先APK⽂件其实就是⼀个MIME为ZIP的压缩包,我们修改ZIP后缀名⽅式可以看到内部的⽂件结构,类似Sun JavaMe的Jar压缩格式⼀样,不过⽐较去别的是Android上的⼆进制代码被编译成为Dex的字节码,所有的Java⽂件最终会编译进该⽂件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。

所有的类调⽤、涉及到的⽅法都在⾥⾯体现到,⾄于逻辑的执⾏可以通过实时调试的⽅法来查看,当然这需要借助⼀些我们⾃⼰编写的跟踪程序。

Google最然在Android Market上设置了权限保护app-private⽂件夹的安全,但是最终我们使⽤修改定值的系统仍然可以获取到需要的⽂件。

⼀、dexdump⽅法dexdump是emulator⾃带提供的查看dex⽂件的⼯具,可使⽤类似这样的命令将dex⽂件dump到txt⽂件中:D:\Program Files\android-sdk-windows-1.6_r1\platforms\android-1.6\tools>dexdump.exe -d classes.dex > spk.dump.txt 得到的⽂件内容,描述了类的信息,但实在是不好读啊~~~~⼆、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包不能反编译出来。

Unity3D对apk反编译、重编译、重签名

Unity3D对apk反编译、重编译、重签名

Unity3D对apk反编译、重编译、重签名⼯具Java环境Apktool(这玩意有些坑爹,不是官⽹最新的就好,找到⼀个好⽤的版本号能少⾮常多坑)ApktoolJarsigner反编译var argList = ProcessHelper.CreateArgumentsContainer();argList.Add("java -jar");argList.Add(ApkToolPath);argList.Add("d");argList.Add(pathToBuildProject);argList.Add("-o");argList.Add(GetDecodeApkFolder(pathToBuildProject));var p = ProcessHelper.Start(ProcessHelper.CreateStartInfo());ProcessHelper.WriteLine(p, ProcessHelper.CreateArguments(argList));var result = p.StandardOutput.ReadToEnd();var error = p.StandardError.ReadToEnd();p.WaitForExit();p.Close();Debug.Log(result);Debug.Log(error);- 反编译之后的图如上(unknown是没有的)- 反编译之后能够做⼀些改动。

通常会改动AndroidMainifest.xml- ⽜逼⼀点的。

能够改动smali,⽐如前⾯提及到的重编译var unsignedApk = GetUnSignedApkPath(pathToBuildProject);FileHelper.DeleteFile(unsignedApk);var argList = ProcessHelper.CreateArgumentsContainer();argList.Add("java -jar");argList.Add(ApkToolPath);argList.Add("b");argList.Add(GetDecodeApkFolder(pathToBuildProject));argList.Add("-o");argList.Add(unsignedApk);var cmd = string.Join(" ", argList.ToArray());var p = ProcessHelper.Start(ProcessHelper.CreateStartInfo());ProcessHelper.WriteLine(p, ProcessHelper.CreateArguments(argList));var result = p.StandardOutput.ReadToEnd();var error = p.StandardError.ReadToEnd();p.WaitForExit();p.Close();Debug.Log(result);Debug.LogError(error);重签名var unsignedApk = GetUnSignedApkPath(pathToBuildProject);var finalApk = GetFinalApkPath(pathToBuildProject);FileHelper.DeleteFile(finalApk);var argList = ProcessHelper.CreateArgumentsContainer();argList.Add("jarsigner");argList.Add("-keystore 路径");argList.Add("-storepass password");argList.Add("-signedjar");argList.Add(finalApk);argList.Add(unsignedApk);argList.Add("别名");var p = ProcessHelper.Start(ProcessHelper.CreateStartInfo());ProcessHelper.WriteLine(p, ProcessHelper.CreateArguments(argList));var result = p.StandardOutput.ReadToEnd();var error = p.StandardError.ReadToEnd();p.WaitForExit();p.Close();Debug.Log(result);Debug.LogError(error);⼀个Keystore能够相应多个Key假设Key的password不⼀样,还得另外输⼊Key的password。

apk签名与破解

apk签名与破解

Android APK 签名比对发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的。

签名机制在Android应用和框架中有着十分重要的作用。

例如,Android系统禁止更新安装签名不一致的APK;如果应用需要使用system权限,必须保证APK签名与Framework签名一致,等等。

在《APK Crack》一文中,我们了解到,要破解一个APK,必然需要重新对APK进行签名。

而这个签名,一般情况无法再与APK原先的签名保持一致。

(除非APK原作者的私钥泄漏,那已经是另一个层次的软件安全问题了。

)简单地说,签名机制标明了APK的发行机构。

因此,站在软件安全的角度,我们就可以通过比对APK的签名情况,判断此APK是否由“官方”发行,而不是被破解篡改过重新签名打包的“盗版软件”。

Android签名机制为了说明APK签名比对对软件安全的有效性,我们有必要了解一下Android APK的签名机制。

为了更易于大家理解,我们从Auto-S ign工具的一条批处理命令说起。

在《APK Crack》一文中,我们了解到,要签名一个没有签名过的APK,可以使用一个叫作Auto-sign的工具。

Auto-sign工具实际运行的是一个叫做Sign.bat的批处理命令。

用文本编辑器打开这个批处理文件,我们可以发现,实现签名功能的命令主要是这一行命令:java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.a pk这条命令的意义是:通过signapk.jar这个可执行jar包,以“testkey.x509.pem”这个公钥文件和“testkey.pk8”这个私钥文件对“update.apk”进行签名,签名后的文件保存为“update_signed.apk”。

对于此处所使用的私钥和公钥的生成方式,这里就不做进一步介绍了。

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

android技巧:apk文件反编译以及签名打包
(dex2jar&jd,apktool,apk-sign)
通过dex2jar和jd我们可以反编译apk中的dex,可以比较完美的查看java源文件;通过apktool可以反编译apk中的xml等资源文件,然后通过apk-sign签名,可以制作成修改版的可发布apk文件。

1.dex2jar反编译dex文件:
a.下载文件见附件:apktool-1.3.1.tar.bz2,jd-gui.zip,或点击这里下载;解压;
b.把apk文件后缀名改为.zip,然后解压缩其中的class.dex文件,它是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件;
c.把class.dex拷贝到dex2jar.bat所在目录,运行dex2jar.bat class.dex,生成classes.dex.dex2jar.jar ;
d.运行jd-gui工具(绿色无须安装),打开上面生成的jar文件,即可看到源代码;
2.apktool反编译xml等资源文件:
a.安装java环境,下载文件件附件:apktool-1.3.1.tar.bz2,
apktool-install-windows-2.2_r01-2.tar.bz2,或点击这里下载;把这两个文件解压到同一目录下,该目录下cmd中运行apktool获得帮助信息;
b.apktool d XXX.apk ABC 反编译XXX.apk到文件夹ABC
c.apktool b ABC 从反编译后的文件夹ABC重建APK,输出到ABC\dist\out.apk
d.这样我们就可以把远apk文件通过反编译后,然后对里面资源文件作修改,然后再重建为apk即可;
3.apk-sign签名apk文件:
a.下载文件件附件apk-sign.rar,解压到apk-sign文件夹;
b.将XXX.apk文件解压到XXX文件夹,然后将XXX直接拖到apk-sign文件中的sign_pack.bat批处理文件上以执行,弹出cmd执行窗口,等待执行完即可;
c.生成新文件夹XXX_signed中的apk文件即为已签名;
apktool用法
C:\Documents and Settings\Administrator>cd e:
E:\
C:\Documents and Settings\Administrator>e:
E:\>cd android_dev
E:\android_dev>cd apk反编译
E:\android_dev\apk反编译>apktool.bat
Apktool v1.3.2 - a tool for reengineering Android apk files
Copyright 2010 Ryszard Wi?niewski <brut.alll@>
Apache License 2.0 (/licenses/LICENSE-2.0) Usage: apktool [-v|--verbose] COMMAND [...]
COMMANDs are:
d[ecode] [OPTS] <file.apk> [<dir>]
Decode <file.apk> to <dir>.
OPTS:
-s, --no-src
Do not decode sources.
-r, --no-res
Do not decode resources.
-d, --debug
Decode in debug mode. Check project page for more info.
-f, --force
Force delete destination directory.
-t <tag>, --frame-tag <tag>
Try to use framework files tagged by <tag>.
--keep-broken-res
Use if there was an error and some resources were dropped, e.g.:
"Invalid config flags detected. Dropping resources", but you want to decode them anyway, even with errors. You will have to
fix them manually before building.
b[uild] [OPTS] [<app_path>] [<out_file>]
Build an apk from already decoded application located in
<app_path>.
It will automatically detect, whether files was changed and perform
needed steps only.
If you omit <app_path> then current directory will be used.
If you omit <out_file> then
<app_path>/dist/<name_of_original.apk>
will be used.
OPTS:
-f, --force-all
Skip changes detection and build all files.
-d, --debug
Build in debug mode. Check project page for more info.
if|install-framework <framework.apk> [<tag>]
Install framework file to your system.
For additional info, see: /p/android-apktool/ E:\android_dev\apk反编译>。

相关文档
最新文档