mac下自己实现re-sign.jar对apk进行重签名
利用Robotinum对给的apk文件进行自动化测试,在不知道源码的情况下,只有apk文件如何进行自动化测试呢?
首先需要对apk文件进行重签名,并获得该apk文件的包名和程序入口的类名。
最开始网上说用re-sign.jar这个jar包,但是我用mac电脑实验了很多次都不行,一直提示JAVA_HOME环境变量没有设置,可是我已经设置了,echo $PATH输出也能看到JAVA_HOME,不过在Windows系统上实验是好的,可惜我是mac电脑,实验了好几个小时都不行,特别是在真心实意的请教测试的小姑娘帮忙,但是小姑娘不鸟我的情况下,于是一怒之下就自己实现了re-sign.jar的功能。
通过在Windows上看到的情况,re-sign.jar做了哪些事呢?首先是对已有的apk进行重签名,然后是获得该apk文件的包名和程序入口的类名,为了获得apk文件的包名和入口类名我们需要用到apktool这个工具,因为有些apk是做了混淆的,需要反编译才能得到清晰的AndroidManifest.xml文件。我们知道apk的包名是有这样的标示的: package="xxxxxx",而程序入口类名就是<activity > </activity>标签中包含<xxx.action.MAIN>和<category.LAUCNCH>的部分。这样通过解析Manifest.xml文件,就能获得包名和入口类名了。
注意:其中需要配置JAVA环境变量,Android环境变量,还需要将apktool所在目录加入到环境变量。该shell脚本需要与apk在同级目录下
开始动手写shell 脚本。
#!/bin/bash
# Program :
# re-sign to specialy apk
# History :
# 2015.9.4 evilking First release
echo ===============================
echo 1.将此.sh文件放置您需要签名的apk同级目录下
echo 2.传入FILE_NAME参数,并设置为需要签名的apk文件名
echo 3.设置ANDROID_TOOLS_PATH 环境变量 为sdk下的tools路径
echo 4.设置JDK/bin 环境变量
echo 5.需要将/Users/你的用户名/.android/debug.keystore复制到apk同级目录下
echo 5.此脚本是基于JDK1.6来签名的,如果之前的apk不是用此版本签名可能会出血“无法对jar进行签名”的情况,用ZIP工具打开,找到下面的目录META-INF,删除目录
echo 6.如果出现未提供-tsa或-tsacert的警告,签名指令后加上-tsa https://timestamp.geotrust.com/tsa
echo ===============================
#获得当前路径
Cur_Dir=$(pwd)
#需要签名的apk文件名
FILE_NAME=$1
#验证该apk文件是否存在
if [ ! -e ${FILE_NAME}.apk ];then
echo "error: not fount ${FILE_NAME}.apk file"
exit 1
fi
#查看指定apk的签名信息
echo 查看指定apk的签名信息
jarsigner -verify -verbose -certs ${Cur_Dir}/${FILE_NAME}.apk | tail -n 10
#删除掉apk中的签名信息
echo =================================
echo 开始删掉apk中的签名信息
mv ${FILE_NAME}.apk ${FILE_NAME}.zip
#从zip包中直接删除META-INF文件夹
zip -d ${FILE_NAME}.zip META-INF/*
mv ${FILE_NAME}.zip ${FILE_NAME}.apk
echo 删除META-INF完成
echo =================================
#将原来的apk修改回来
#再次查看_unsign.apk签名信息
echo =================================
echo 再次查看_unsign.apk的签名信息
jarsigner -verify -verbose -certs ${FILE_NAME}.apk | tail -n 10
#对apk包重新签名
echo =================================
echo 对.apk包重新签名
#检测debug.keystore是否在本目录下
if [ ! -e debug.keystore ];then
echo "warning:re-sign need username/.android/debug.keystore file"
read -p "input your uname : " uname
cp /Users/${uname}/.android/debug.keystore ./debug.keystore
fi
jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore debug.keystore -storepass android -keypass android ${FILE_NAME}.apk androiddebugkey -tsa https://timestamp.geotrust.com/tsa
echo ==================================
echo =========签名成功......开始简化......
zipalign 4 ${FILE_NAME}.apk ${FILE_NAME}_sign.apk
echo ============简化签名完成============
#查看重新签名的apk信息
echo ===================================
echo ======查看重新签名后的apk信息==========
jarsigner -verify -verbose -certs ${FILE_NAME}_sign.apk | tail -n 10
rm ${FILE_NAME}.apk
#下面部分是提取该应用的包名和程序入口类名
echo =======================================
echo ================开始提取包名=============
apktool d ${FILE_NAME}_sign.apk &>/dev/null
echo =============提取包名=================
package_name=$(egrep "package=\".*\"" ${FILE_NAME}_sign/AndroidManifest.xml | sed 's/.*package=//g')
echo "package=$package_name"
#获取程序入口
echo =============获取程序入口================
declare -i last_line
last_line=$(grep -n "action.MAIN" ${FILE_NAME}_sign/AndroidManifest.xml | cut -d ':' -f 1)
declare -i first_line
first_line=$(cat ${FILE_NAME}_sign/AndroidManifest.xml | head -n ${last_line} | egrep -n "<activity" | cut -d ':' -f 1 | tail -n 1)
echo "程序入口类为:"
entry_class=$(head -n $last_line ${FILE_NAME}_sign/AndroidManifest.xml | tail -n +$first_line | sed 's/.*android:name=\"//g' | cut -d "\"" -f 1 | head -n 1)
if [ "$(echo $entry_class | cut -d "." -f 1)" == "" ];then
echo "$(echo $package_name | sed 's/"//g')$entry_class"
else
echo "$entry_class"
fi
rm -r ${FILE_NAME}_sign/
echo ===================结束=============
整整花了一天的时间,不过值了,久违的成就感啊。
参考博文:http://blog.csdn.net/h5q8n2e7/article/details/47837653
mac下自己实现re-sign.jar对apk进行重签名的更多相关文章
- 使用re-sign.jar对apk进行重签名
准备: ① re-sign.jar重签名工具:(下载地址为:http://troido.de/downloads/category/1): ② 待重签名的apk: 重签名步骤: ① 右键re ...
- 【Vegas原创】MAC下,idea手动maven jar包的方法
1,到自己的项目目录下 Vegass-MacBook-Air:gms-boyol Vegas$ pwd/Users/Vegas/SynologyDrive/Coding/workspace/gms-b ...
- 用re-sign.jar重签名apk后安装失败的解决办法
问题 打开re-sign.jar,将下载好的apk拖入re-sign.jar的界面进行重签名.重签名成功后,通过adb intall命令安装重签名后的apk文件失败.提示:Failure [INSTA ...
- 【工匠大道】Mac下Java开发环境配置简述
本文地址 原文地址 分享提纲: 1. 下载JDK1.7 2. 配置java_home 3 .安装tomcat 4 .安装eclipse或者myeclipse 5. mysql安装 破解版下载请参考M ...
- Mac下手动安装SafariDriver extension
环境:Mac OS X Yosemite 10.10.4下, Safari 8 Step 1:第一次运行SafariDriver时,先找到WebDriver extension的安装路径,比如/Use ...
- 在MAC下搭建JSP开发环境
1.Mac下JDK的下载安装及配置 在安装jdk之后,需要为jdk安装目录配置环境变量: 任意打开终端,默认是家目录的,然后直接输入: touch .bash_profile 然后输入:vi .bas ...
- Mac下lombok无法安装到eclipse mars
eclipse升级到mars之后 , 在mac下已经不再是文件夹中有很多文件的eclipse了 , 只有一个单独的app文件.用原来的方式运行lombok再选eclipse.app已经不行了. 自己鼓 ...
- Mac下使用Apache TCPMon
Mac下使用Apache TCPMon 参考链接: TCPMon Tutorial Anyone know how to get TCPMON working on a mac? Apache TCP ...
- 在mac下安装jdk1.7(转)
转自:http://vela.diandian.com/post/2012-01-06/15379924 最近呢,想玩玩jdk1.7,不过mac平台下的jvm一直都是Apple自己改的,所有有些麻烦. ...
随机推荐
- 浅谈-对modbus的理解
浅谈-对modbus的理解 一.简介 Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP ...
- Jmeter与BlazeMeter使用 录制导出jmx
本文链接:https://blog.csdn.net/weixin_38250126/article/details/82629876JMeter 的脚本录制,除了自带的HTTP代理服务器以外,被大家 ...
- iOS中处理json解析出现的null,nil的解决办法
最开始是使用的一个函数进行处理,代码如下: - (id) setNoNull:(id)aValue{ if (aValue == nil) { aValue = @"";//为nu ...
- Egret入门学习日记 --- 第十一篇(书中 4.1~4.6节 内容)
第十一篇(书中 4.1~4.6节 内容) 好了,到了这篇开始,前三章都记录完了. 接下来就是到第四章了. 4.1节 的内容总结一下重点: 1.resource目录下default.res.json文件 ...
- Flarum 安装问题 编译安装 fileinfo.so
大部分人上传 会遇到文件没有权限这一问题 ,这个好解决 下边是服务器 php.ini 扩展 fileinfo 由于php 版本是7.1.8 最新的 又是用的一键环境安装 所以 没有安装这个扩展 1.去 ...
- The request was aborted: Could not create SSL/TLS secure channel
一.背景: 公司底层服务CDN从Akamai迁移到阿里云之后, 使用该服务的一个应用报错如下: System.AggregateException: One or more errors occurr ...
- google搜索设置,在新的窗口打开
- springboot集成elk 四:springboot + Elasticsearch+Jest
依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...
- 如何用IDEA创建springboot(maven)并且整合mybatis连接mysql数据库和遇到的问题
一.New->Project 二.点击next 三.在Group栏输入组织名,Artifact就是项目名.选择需要的java版本,点击next 四.添加需要的依赖 在这里我们也可以添加sql方面 ...
- 【坑】Mybatis 多次逆向工程生成mapper文件
在使用 mybatis 逆向工程的时候,多次逆向工程生成的文件,是不会产生覆盖的,而是追加: 假如,你第一次逆向,发生数据库的某个字段类型错了,修改以后再次逆向,那么得到的 mapper文件,将是 2 ...