2019独角兽企业重金招聘Python工程师标准>>>

前言:

1、很多APK用apktool反编译后,重打包失败;

2、dex中smali指令硬编码,安装失败;

解决方法:

一、针对第一个问题,就是不反编译APK,而是直接从APK包从用Zip工具(winzip)将classes.dex提取出来,再使用IDA等反编译工具找到要修改指令的偏移,最后使用winhex等编辑工具修改指令,然后保存即可;

详细修改指令的方法是将OPCODE直接填充到相应位置即可:

原始JAVA代码如下:

    public static void b(String arg4, String arg5, int arg6, Throwable arg7) {Log.d(arg4, arg5);return;}

IDA中此代码的opcode如下:

二、针对第二个问题,在classes.dex硬编码完成后,需要校正checksum和signture,使用下面的java程序修正classes.dex,

代码如下:

package javaproject;import java.security.*;
import java.util.zip.Adler32;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileOutputStream;public class ReDEX {public static void main(String[] args) {if (args.length == 1) {try {File file = new File(args[0]);byte[] barr = null;barr = getBytesFromFile(file);System.out.print("Original Checksum: ");for(int i = 8; i<12; i+=4)System.out.printf("0x%02X%02X%02X%02X ", barr[i+3], barr[i+2], barr[i+1], barr[i]);System.out.print("\nOriginal Signature: 0x");for(int i = 12; i<32; i+=4)System.out.printf("%02X%02X%02X%02X ", barr[i], barr[i+1], barr[i+2], barr[i+3]);calcSignature(barr);calcChecksum(barr);System.out.print("\n\nNew Checksum: ");for(int i = 8; i<12; i+=4)System.out.printf("0x%02X%02X%02X%02X ", barr[i+3], barr[i+2], barr[i+1], barr[i]);System.out.print("\nNew Signature: 0x");for(int i = 12; i<32; i+=4)System.out.printf("%02X%02X%02X%02X ", barr[i], barr[i+1], barr[i+2], barr[i+3]);try{String str = readUserInput("\nSave it(Yes or No):");if (str.equalsIgnoreCase("yes")) {putBytesToFile(barr, args[0]);System.err.println("\nFixed.");System.err.println(args[0]);} else{System.err.println("\nNothing");}}catch(IOException except){except.printStackTrace();}}catch (Exception e) {System.err.println("File input error");}}elseSystem.out.println("Invalid parameters");}private static String readUserInput(String prompt) throws IOException {System.out.print(prompt);InputStreamReader is_reader = new InputStreamReader(System.in);return new BufferedReader(is_reader).readLine();}public static byte[] getBytesFromFile(File file) throws IOException {InputStream is = new FileInputStream(file);// Get the size of the filelong length = file.length();if (length > Integer.MAX_VALUE) {// File is too large}// Create the byte array to hold the databyte[] bytes = new byte[(int)length];// Read in the bytesint offset = 0;int numRead = 0;while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {offset += numRead;}// Ensure all the bytes have been read inif (offset < bytes.length) {throw new IOException("Could not completely read file "+file.getName());}// Close the input stream and return bytesis.close();return bytes;}public static void putBytesToFile(byte[] data, String outfile) throws IOException {File destinationFile = new File(outfile);if (destinationFile.exists()) {System.out.println("overwrite");}FileOutputStream fos = new FileOutputStream(destinationFile);try {fos.write(data, 0, data.length);fos.flush(); fos.close();} catch (IOException e) {System.out.println(e);}        }private static void calcSignature(byte bytes[]){MessageDigest md;try{md = MessageDigest.getInstance("SHA-1");}catch(NoSuchAlgorithmException ex){throw new RuntimeException(ex);}md.update(bytes, 32, bytes.length - 32);try{int amt = md.digest(bytes, 12, 20);if(amt != 20)throw new RuntimeException((new StringBuilder()).append("unexpected digest write:").append(amt).append("bytes").toString());}catch(DigestException ex){throw new RuntimeException(ex);}}private static void calcChecksum(byte bytes[]){Adler32 a32 = new Adler32();a32.update(bytes, 12, bytes.length - 12);int sum = (int)a32.getValue();bytes[8] = (byte)sum;bytes[9] = (byte)(sum >> 8);bytes[10] = (byte)(sum >> 16);bytes[11] = (byte)(sum >> 24);}
}

将修正好的dex直接替换进原始的APK中,重新签名安装会报INSTALL_PARSE_FAILED_NO_CERTIFICATES错误,此时使用jdk中jarsigner验证APK中签名问题,如下:

$jarsigner.exe -verify mod_sign.apk
jarsigner: java.lang.SecurityException: invalid SHA1 signature file digest for classes.dex

提示这种错误是因为原始APK中的签名文件没有删除掉,将META-INF下面的*.RSA、*.SF删除后,重新签名,就可以安装成功。

转载于:https://my.oschina.net/u/2424583/blog/619260

classes.dex硬编码后重签名安装相关推荐

  1. apk加固后重签名-mac

    apk加固后重签名 签名工具的区别 进入签名工具目录 签名 签名验证 apk升级发版本前需要做安全检测,检测之前一般会进行加固处理,加固完成后,还需要对apk包进行重新签名. 有文章说需要把apk原来 ...

  2. iOS 用通用测试证书通过爱思助手重签名安装测试IPA

    其他步骤跟其他证书生成一样 在配置bundle ID的时候要注意:写com.* 就可以了 通过爱思助手 - 工具箱 - IPA签名 - 证书签名 注意:通用证书里面要包含测试设备的ID才可以安装,重签 ...

  3. 逆向-002-iOS重签名

    在Windows环境下会有,静默安装.通过iOS应用重签名(安装app到手机上),苹果签名机制,防止未授权的应用进行安装 ①获取应用ipa ②Codesign重签名 ③Xcode自动签名 ④Shell ...

  4. 专注于非越狱环境下iOS应用逆向研究,从dylib注入,应用重签名到App Hook

    专注于非越狱环境下iOS应用逆向研究,从dylib注入,应用重签名到App Hook. 注意!本文所有操作均在以下环境下成功进行,不同平台或环境可能存在某些问题,欢迎大家在issue中提出问题以及相互 ...

  5. 解决iOS版抖音破解重签名后无法安装

    解决iOS版抖音破解重签名后无法安装 回顾 上篇文章讲到 抖音9.8.1无法安装报错 DuplicateIdentifier 这个里更正下:版本为10.4.0 错误详细信息怎么查看 这里可以通过移动设 ...

  6. 海马苹果助手ipad版_iOS逆向-ipa包重签名及非越狱手机安装多个微信!

    前一段时间学了点儿逆向相关的一些东西,但是都是基于越狱手机上的操作,给视频类应用去广告之类的.随着苹果生态圈的逐渐完善.及苹果对自身系统的保护越来越严格,导致现在的iPhone手机并不像以前那样存在大 ...

  7. iOS逆向-ipa包重签名及非越狱手机安装多个微信

    前一段时间学了点儿逆向相关的一些东西,但是都是基于越狱手机上的操作,给视频类应用去广告之类的.随着苹果生态圈的逐渐完善.及苹果对自身系统的保护越来越严格,导致现在的iPhone手机并不像以前那样存在大 ...

  8. iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信

    本文要达成如图效果,在一台iPhone上安装第二个微信: 准备: Xcode 微信ipa(可通过iTool进行下载) 重签名脚本 步骤 打开Xcode,新建Single View App项目,名字可以 ...

  9. 通过resign.jar重签名apk后出现raw目录下文件未找到的解决方法

    问题: 通过resign.jar重签名的apk后,安装运行后直接出现闪退的情况,查看log的原因是提示android.content.res.Resources$NotFoundException: ...

最新文章

  1. web 容器 支持 php,web服务器lighttpd 对php的支持
  2. XamarinSQLite教程Xamarin.iOS项目中打开数据库文件
  3. jQuery 参考手册 - 事件
  4. 为什么 K8s 在阿里能成功?| 问底中国 IT 技术演进
  5. 如何在线将pdf转换成ppt格式
  6. 华为有造车实力,却坚决不造整车,这背后有着怎样的无奈与思考?
  7. 作者:​赵洋(1988-),男,国家超级计算天津中心中级工程师、科学计算组组长。...
  8. 忘记mysql的root密码后,修改密码
  9. (21)Verilog HDL结构:task语句
  10. python制作软件excel_利用Python制作一个 截图+Excel操作浏览器小工具
  11. Bailian4138 POJ NOI MATH-7827 质数的和与积【数论】
  12. protues 快捷键和元件
  13. dlibdotnet 人脸相似度源代码_C#开发的人脸左右相似度计算软件源码分析
  14. uint8_t / uint16_t / uint32_t /uint64_t 这些数据类型是什么?
  15. html幻灯片图片切换效果代码,jquery的幻灯片图片切换效果代码分享
  16. 各种域名都代表什么意思?
  17. 计算机语言学习书籍目录资源自己找(到处复制粘贴的目录)
  18. 逻辑电路是计算机学的吗,下列属于组合逻辑电路的是( )。
  19. 一种简单的仓储系统实物可视化分布实现方案
  20. FPGA开发——图像处理(包括MT9V034等摄像头学习笔记)

热门文章

  1. 研磨设计模式 之 生成器模式(Builder)2 ——跟着cc学设计系列
  2. USART - Design Flow
  3. AITO问界系列大卖背后,华为正在孵化更多的“赛力斯”
  4. 新的征程,决心踏上博客之路。
  5. 不容错过 名片卡证模板素材网站
  6. unity 多视角下的鱼眼效果
  7. uni-app微信小程序键盘遮住输入框bug解决
  8. Linux中samba共享服务的部署及安全优化详解
  9. 【业务数据分析】—— 用户留存分析(以挖掘Aha时刻为例)
  10. 张逸:老鸟对菜鸟的一些建议