android之cmd手工反编译笔记

Android反编译教程

——西北狼

前端时间有人让帮忙修改apk包名,然后我就翻出以前的翻编译工具来,可以的是,一个小小的APK,居然反编译失败~~~

然后找了些文章看了下,最后自己重新装工具用cmd命令行手工反编译成功,修改部分东西后重新打包成功,签名成功,安装成功~~~~

先把经验总结一下:

手工反编译比 网上的集成好的工具成功率要高很多(android 逆向助手 v2.0 这个工具的成功率也比较高,里面有很多功能,有兴趣可以试试),so更加推荐使用酱紫的方式~~自己也好了解了解相关知识~~

---------------------------------------------------------------------------------------------------------------------------------------------------------------

笔记是以前写word里面的,难得重新打字,就直接复制过来了~~~为方便对比,借用了网友的图

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

http://developer.android.com/tools/publishing/app-signing.html】官方签名教程

以下所有都需要安装JDK

Apktool下载地址:

https://code.google.com/p/android-apktool/downloads/list

下载apktool1.5.2.tar.bz2apktool-install-windows-r05-ibot.tar.bz2

将两个包解压到一个同一个目录,应该有三个文件aapt.exe和apktool.bat和apktool.jar

然后打开cmd定位到解压的目录(DOS命令自己查询,百度一搜一大把)

附上 开源中国社区的一篇反编译教程:http://www.oschina.net/question/54100_33457

反编译命令:apktool d c:\*.apkc:\target

C:\target为目标目录

注意:有的教程说的需要反编译的文件一定要房子根目录,我自己试的时候,第一次没放根目录失败了,第二次放根目录成功了,或许还真实必须放盘根目录。

至此反编译完成

重新打包:

命令:apktool b c:\target

完成后会砸target目录生成build和dist两个文件夹,新生成的apk在dist文件夹下

至此重新打包完成

新打包的APK未签名无法安装,下面介绍签名:

签名工具使用JDK自带的jarsigner

1生成签名文件keystore

执行:keytool –genkey –keystoremy.keystore keyalg RSA –validity 10000 –alias my.keystore

生成my.keystore签名文件

执行:jarsigner –verbose –keystoremy.keystore –signedjar c:\target\dist\*.apk my.keystore c:\target\dist\new.apk

到此签名APK完成

命令:jarsigner -verify -verbose -certs abc.apk 
查看APK签名信息

【详细生成签名步骤:

详细的签名步骤:

第一步

C:/Program Files/Java/jdk1.6.0_10/bin>keytool -genkey-alias wendy.keystore

-keyalg RSA -validity 20000 -keystore wendy.keystore

输入keystore密码:[密码不回显]

再次输入新密码:[密码不回显]

您的名字与姓氏是什么?

[Unknown]:  wendy

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

[Unknown]:  home

您的组织名称是什么?

[Unknown]:  home

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

[Unknown]:  New York

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

[Unknown]:  New York

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

[Unknown]:  CN

CN=wendy, OU=home, O=home, L=New York, ST

=New York, C=CN 正确吗?

[否]:  Y

输入<wendy.keystore>的主密码

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

其中参数-validity为证书有效天数,这里我们写的大些20000天。还有在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,最后需要记下来后面还要用

接下来我们开始为apk文件签名了。

第二步

执行下面这句jarsigner -verbose -keystore wendy.keystore-signedjar wendy_signed.apk wendy.apk wendy.keystore
就可以生成签名的apk文件,这里输入文件wendy.apk,最终生成wendy_signed.apk为Android签名后的APK执行文件。下面提示输入的密码和keytool输入的一样就行了,

Keytool用法:

附上keytool参数以及jarsigner参数:

keytool用法:

-certreq    [-v] [-protected]

[-alias <别名>][-sigalg <sigalg>]

[-file<csr_file>] [-keypass <密钥库口令>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath<路径列表>]

-changealias[-v] [-protected] -alias <别名>-destalias <目标别名>

[-keypass <密钥库口令>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-delete     [-v] [-protected] -alias <别名>

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-exportcert [-v] [-rfc] [-protected]

[-alias <别名>][-file <认证文件>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass<提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-genkeypair [-v] [-protected]

[-alias <别名>]

[-keyalg <keyalg>] [-keysize <密钥大小>]

[-sigalg <sigalg>] [-dname <dname>]

[-validity<valDays>] [-keypass <密钥库口令>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-genseckey  [-v] [-protected]

[-alias <别名>][-keypass <密钥库口令>]

[-keyalg <keyalg>] [-keysize <密钥大小>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-help

-importcert [-v] [-noprompt] [-trustcacerts] [-protected]

[-alias <别名>]

[-file<认证文件>][-keypass <密钥库口令>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-importkeystore[-v]

[-srckeystore <源密钥库>][-destkeystore <目标密钥库>]

[-srcstoretype <源存储类型>][-deststoretype <目标存储类型>]

[-srcstorepass <源存储库口令>][-deststorepass <目标存储库口令>]

[-srcprotected] [-destprotected]

[-srcprovidername <源提供方名称>]

[-destprovidername <目标提供方名称>]

[-srcalias <源别名>[-destalias <目标别名>]

[-srckeypass <源密钥库口令>][-destkeypass <目标密钥库口令>]]

[-noprompt]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-keypasswd  [-v] [-alias <别名>]

[-keypass <旧密钥库口令>][-new <新密钥库口令>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-list       [-v | -rfc] [-protected]

[-alias <别名>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath <路径列表>]

-printcert  [-v] [-file <认证文件>]

-storepasswd[-v] [-new <新存储库口令>]

[-keystore <密钥库>][-storepass <存储库口令>]

[-storetype <存储类型>][-providername <名称>]

[-providerclass <提供方类名称>[-providerarg <参数>]]...

[-providerpath<路径列表>]

Jarsigner用法

jarsigner用法: [选项] jar
文件别名

jarsigner -verify [选项] jar
文件

[-keystore<url>]          
密钥库位置

[-storepass <口令>]        用于密钥库完整性的口令

[-storetype <类型>]        密钥库类型

[-keypass <口令>]          专用密钥的口令(如果不同)

[-sigfile <文件>]          .SF/.DSA
文件的名称

[-signedjar <文件>]        已签名的 JAR
文件的名称

[-digestalg <算法>]   
摘要算法的名称

[-sigalg <算法>]      签名算法的名称

[-verify]                  验证已签名的 JAR
文件

[-verbose]                 签名/验证时输出详细信息

[-certs]                   输出详细信息和验证时显示证书

[-tsa<url>]               时间戳机构的位置

[-tsacert <别名>]          时间戳机构的公共密钥证书

[-altsigner <类>]          替代的签名机制的类名

[-altsignerpath <路径列表>]
替代的签名机制的位置

[-internalsf]              在签名块内包含 .SF
文件

[-sectionsonly]            不计算整个清单的散列

[-protected]               密钥库已保护验证路径

[-providerName <名称>]     
提供者名称

[-providerClass <类>       加密服务提供者的名称

[-providerArg <参数>]] ...
主类文件和构造函数参数

补充:

如果需要最终发行你的android程序,必需为apk文件签名。这里apk和jar的签名方式都是一样的,使用sunjdk的jarsigner工具来完成,但是执行时会提示jarsigner:无法对
jar 进行签名: java.util.zip.ZipException:invalid entry compressed size (expected xxx but got xxx bytes)这样的提示,

这些问题主要是由于资源文件造成的,对于android开发来说应该检查res文件夹中的文件,逐个排查。这个问题可以通过升级系统的JDK和JRE版本来解决。

时间: 2024-10-09 23:22:21

android之cmd手工反编译笔记的相关文章

Proguard android代码混淆 防止反编译

Proguard android代码混淆 防止反编译 http://www.360doc.com/content/13/1030/13/9171956_325290258.shtml

Android实践APK一键反编译

1.需要软件:onekey-decompile-apk 2.软件功能: 1)集成apktool/dex2jar/jd-gui. 2)只需执行一步即可反编译出apk所有文件(资源文件和jar等等). 3)反编译完毕后自动打开jd-gui反编译jar文件. 3.使用方法: 1)将下载的 onekey-decompile-apk.zip解压缩. 2)将apk文件放到 onekey-decompile-apk目录下. 3)将apk文件拖拽到_onekey-decompile-apk.bat上. 4.执行

Android代码混淆防反编译解决方案研究

做Android开发的都知道要做混淆去防apk被反编译.破解,通过proguard进行Java代码混淆.但是,Android代码混淆真的能起到实质性的作用吗?看下面分析 1.Android代码混淆 如上图,对Android 代码进行混淆后混淆器将代码中的所有变量.函数.类的名称加密为简短的英文字母代号,在APP被破解后增加破解者对代码的阅读难度. 但是混淆的功效只能运作在APP已经被破解后,而且只是增加破解者的难度时间,对其防止破解的作用意义不是很大. 那么,Android代码混淆不能从根本上防

Android系统安全和反编译实战——互动出版网

这篇是计算机类的优质预售推荐>>>><Android系统安全和反编译实战> Android安全专家写作,从Android系统安全机制介绍到综合实例演练,是完整学习Android系统安全知识的必备指南 内容简介 <Android系统安全和反编译实战>循序渐进地讲解了Android系统安全方面的基本知识,从Android系统介绍开始到综合实例的实战过程,全程剖析了Android系统安全.应用安全开发和加密.解密方面的核心知识.全书共17章,主要内容包括,Andr

Android应用程序破解(反编译)

一.apktools进行反编译 1.首先安装需要JAVA环境(JDK和JRE) 设置JAVA环境变量 CLASSPATH       %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar JAVA_HOME     C:\Program Files\Java\jdk1.8.0_20 Path    %JAVA_HOME%\bin;C:\Program Files\Java\jre1.8.0_20\bin 2.下载apktools并解压 (1)下载apk

JAVA代码反编译笔记

最近有个朋友说有个java弄的软件是从朋友处拿来的,由于进行了网卡地址绑定,不修改网卡地址无法使用,叫我看看有无办法破解,之前都很少玩这些东西,本着帮忙的心态,尝试了下,便有了一下的笔记内容. 1.使用jd-gui进行反编译,找到核心校验代码,将该b.class文件单独从jar包中抽离出来,由于该jar包编译打包时采用加密混淆,是无法直接使用的,而且代码非常难读懂,也只能将就着看了: 2.将包含b.class的jar包通过winrar解压工具直接打开,根据包名路径找到b.class然后直接删掉里

【Android】Android如何对APK反编译

本文笔者粗略的介绍如何利用一些工具,对Android进行反编译,从而得到源码,希望对你有所帮助,笔者的android环境为4.4.2. 1.准备资源. 在开始之前,需要准备三项工具:apktool       作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar     作用:将apk反编译成java源码(classes.dex转化成jar文件) jd-gui     作用:查看APK中classes.dex转化成出的jar文件,即源码文件 2.获取资源文件 使用apkt

Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正

一.前言 在之前的破解过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工具是开源的,也是使用Java语言开发的,代码相对简单,我们今天就来分析一下他的大体逻辑,注意是大体逻辑哦,因为如果要一行一行代码分析,首先觉得没必要,其次浪费时间,有了源码,谁看不懂呢.至于为什么要分析这个工具其实原因只有一个,就是我们在之前的反编译过程中会发现,总是有那么几个apk应用不让我们那么容易的反编译,他们就利用apktool

[Android]APK一键反编译

每次反编译就是件很烦的事情,烦了就开始偷懒.直接写成脚本节省操作. 使用apktool,d2j-dex2jar进行反编译 脚本:reseve-complie-apk.py 1 import os 2 import sys 3 import commands 4 5 6 base_dir="" 7 apktool_path="%s" % base_dir 8 dex2jar_path="../dex2jar-2.0" 9 10 def apktoo