草庐IT

Android Apk反编译并重签名

Jey 2023-03-28 原文

参考文档:
反编译包:https://www.cnblogs.com/findyou/p/3450721.html
重签名:https://www.cnblogs.com/findyou/p/3801273.html

【1】反编译工具apktool

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

命令:

apktool d [目标.apk] [目标文件夹]           ---------反编译(decode)
apktool b [文件夹] -o [编译之后的名称.apk]   ---------重新编译成apk(buid)
apktool if framework-res.apk                  --------加载资源(install framework)

【2】apktool的安装

地址:https://ibotpeaches.github.io/Apktool/
传送门:https://ibotpeaches.github.io/Apktool/install/

Mac安装:

brew install apktool

apktool

就可以直接使用apktool命令了

或者下载apktool_2.xxx.xx.jar,在使用的时候:java -jar 路径/apktool_2.xx.xx.jar d [目标.apk] [目标文件夹]

【3】开始操作

新建个test文件夹,把test.apk丢进去,一步一步执行

cd test
apktool d test.apk
apktool b test -o test-build.apk
修改所需文件
# jarsigner -verbose -keystore key_test.keystore -storepass 123456 -keypass 123456 -signedjar resigned.apk test-build.apk key0
apksigner sign --ks key_test.keystore --ks-key-alias 别名 -ks-pass pass:密码 --out resigned.apk test-build.apk
zipalign -v 4 resigned.apk resigned_new.apk
resigned_new.apk 是最终的包
  • 新建一个test文件夹,把test.apk放进去
  • cd test
  • 执行:apktool d test.apk
  • 得到反编译后的android工程文件夹,反编译后的AndroidManifest.xml内容可以明文查看,这个时候可以修改值


    test1.png
  • 执行:apktool b test -o test-build.apk, test-build.apk是重新编译后的apk
  • 重新签名,在test文件夹放入key_test.keystore文件
jarsigner -verbose -keystore key_test.keystore -storepass 签名别名密码 -keypass 签名密码 -signedjar resigned-重新签名后的apk.apk test-build.apk 签名别名
# jarsigner -verbose -keystore key_test.keystore -storepass 123456 -keypass 123456 -signedjar resigned.apk test-build.apk key0

新:

apksigner sign --ks key_test.keystore --ks-key-alias 别名 -ks-pass pass:密码 --out resigned.apk test-build.apk
  • 得到重新签名后的resigned.apk,使用apktool d [目标.apk]查看apk包内容是否修改成功
  • 优化包:zipalign -v 4 resigned.apk resigned_new.apk
    zipalign优化的最根本目的是帮助操作系统更高效率的根据请求索引资源,将resource-handling code统一将Data structure alignment(数据结构对齐标准:DSA)限定为4-byte boundaries。

【4】扩展 - 命令生成keystore

keytool -genkey -v -keystore 签名.keystore -alias 别名 -keyalg RSA -validity 10000
  • keytool:工具名称,-genkey:生成数字证书操作,-v将生成证书的详细信息打印出来
  • -keystore 签名.keystore 表示生成的数字证书的文件名为“ xxx.keystore”
  • -alias 别名
  • -keyalg RSA :成密钥文件采用RSA算法
  • -validity 10000 :数字证书的有效期为10000天,意味着10000/365年之后该证书将失效

【5】发生问题:

  1. Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package
    原因:android7.0后需要使用v2签名,要使用apksigner

老的:

jarsigner -verbose -keystore key_test.keystore -storepass 签名别名密码 -keypass 签名密码 -signedjar resigned-重新签名后的apk.apk test-build.apk 签名别名

解决:

apksigner sign --ks ${filename}.keystore --ks-key-alias 别名 -ks-pass pass:密码 --out ${agent}/${agent}_resigned.apk ${agent}/${agent}.apk

查看v2签名是否完好:

apksigner verify -v xx.apk

输出如下代表正常:
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1
  1. Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]
    解决:
zipalign -p -f -v 4 file.apk  out.apk

zipalingn文档:https://developer.android.google.cn/studio/command-line/zipalign.html

有关Android Apk反编译并重签名的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby - 使用 S/MIME 在 Ruby 中对电子邮件进行数字签名 - 2

    Ruby中是否有一种方法可以使用S/MIME对电子邮件消息进行数字签名?我们的团队使用PKI,我们的用户习惯于期待重要消息的数字签名。我知道我可以调用openssl命令行工具:opensslsmime-sign-signer$CERT_FILE-passinpass:$CERT_PASS-in$UNSIGNED_MAIL-out$SIGNED_MAIL-certfile$CERT_CA_FILE-from'your'-to'recipients'-subject'TheSubject'但我希望利用Ruby解决方案。 最佳答案 我最终

  3. ruby-on-rails - 查看上传到 AWS S3 的私有(private)图像 - 从 secret 访问 key 创建签名 - 2

    我通过Paperclipgem在Rails应用程序上上传了一些图像,我希望只有后端的管理员能够查看这些图像。因此,我将它们设置为私有(private)。然后我四处搜索解决方案,以了解只有具有特定链接的管理员才能查看文件。这就是我found.我继续尝试这个,但我正在努力创建所需的签名。公式在上面的链接中给出,是:Signature=URL-Encode(Base64(HMAC-SHA1(YourSecretAccessKeyID,UTF-8-Encoding-Of(StringToSign))));StringToSign=HTTP-VERB+"\n"+Content-MD5+"\n"+

  4. ruby - 使用 Fog 和 Ruby 生成预签名 URL 以将文件放入 Amazon S3 - 2

    我正在使用Foggem生成预签名url。我可以成功执行此操作以获得对该文件的读取权限。这是我的做法:fog_s3=Fog::Storage.new({:provider=>'AWS',:aws_access_key_id=>key,:aws_secret_access_key=>secret})object_path='foo.wav'expiry=Date.new(2014,2,1).to_time.to_iurl=fog_s3.directories.new(:key=>bucket).files.new(:key=>object_path).url(expiry,path_sty

  5. ruby - 使用 Ruby 为 CloudFront 创建签名 url - 2

    历史:我在Amazon上创建了一个key和pem文件。我创建了一个私有(private)存储桶我创建了一个公共(public)分配并使用原始ID连接到私有(private)存储桶:有效我创建了一个私有(private)分配并像#3一样连接它-现在我得到拒绝访问:预期我很难生成一个有效的url。我一直在尝试按照此处描述的说明进行操作:http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html这就是我到目前为止所得到的......虽然不起作用-

  6. ruby - 使用自签名证书 - 2

    我只是想了解SSL。我已经在我的本地主机上设置了一个Jetty服务器,并使用Keytool生成了我自己的证书.现在当我去https://localhost:8443/我收到无法信任此证书错误。我用keytool-export-aliaspongus-keystorekeystore-filecertfile.cer创建我认为是客户端需要向服务器进行身份验证的证书。(这是我可能大错特错的地方!)我有以下ruby代码:require'net/https'require'openssl'require'open-uri'puts'yay'ifFile.exists?('certfile.ce

  7. ruby - 一组字符串并重新打开字符串 - 2

    试图回答这个问题:HowcanImakethesetdifferenceinsensitivetocase?,我正在试验集合和字符串,试图得到一组不区分大小写的字符串。但是由于某种原因,当我重新打开String类时,当我将字符串添加到集合时,我的自定义方法都没有被调用。在下面的代码中,我看不到任何输出,但我希望至少调用一个我重载的运算符。这是为什么?编辑:如果我创建一个自定义类,比如String2,我在其中定义了一个散列方法等,当我将我的对象添加到一个集合时,这些方法会被调用。为什么不是字符串?require'set'classStringalias:compare_orig:defv

  8. ruby-on-rails - 在 Ruby 中为 S3 Bucket 生成预签名 URL 的推荐方法 - 2

    我正在尝试在我的Rails服务器上生成一个预签名的url以发送到浏览器,以便浏览器可以上传到S3。aws-sdk-s3似乎是future可以使用的gem。但不幸的是,我还没有找到可以提供清晰度的gem文档。似乎有几种不同的方法可以做到这一点,如果对以下方法的区别有任何指导,我们将不胜感激-使用Aws::S3::Presigner.new(https://github.com/aws/aws-sdk-ruby/blob/master/aws-sdk-core/lib/aws-sdk-core/s3/presigner.rb),但它似乎没有接受对象参数或身份验证凭证。使用Aws::S3::

  9. ruby - 我可以在方法签名中指定鸭子类型吗? - 2

    示例代码:#typed:trueclassKeyGettersig{params(env_var_name:String).returns(KeyGetter)}defself.from_env_var(env_var_name)returnNull.newifenv_var_name.nil?returnnew(env_var_name)enddefinitialize(env_var_name)@env_var_name=env_var_nameenddefto_key"keyfrom#{@env_var_name}"enddefto_s"strfrom#{@env_var_nam

  10. ruby - 使用安全转换验证使用 Ruby/OpenSSL 创建的 RSA 签名 - 2

    我正在尝试为我的应用程序实现一个简单的许可key方案,但我遇到了重大障碍。我正在按照OpenSSLforLicenseKeys中的示例进行操作.自从该博文写于2004年并且OpenSSL在OSX上已被弃用后,我尝试使用SecurityTransformsAPI代替OpenSSL来完成许可证key验证。但是,我正在使用OpenSSL生成私钥和公钥;许可证key由Ruby网络应用程序使用私钥生成,该应用程序使用来自购买者电子邮件地址的SHA-256摘要的RubyOpenSSL包装器库。问题是,我所做的任何事情似乎都无法使用安全转换API验证的OpenSSL从Ruby生成签名。我正在处理的R

随机推荐