公司一直用的360加固保可视化工具,其实已经很方便了,但是小张说这个得有人盯着,加固失败了还得手动拖进去,为了满足他(实现全面懒人化),写了这个借助360加固保去批量加固,失败了自动重试,停电了也自动重试,已经加固一部分的也能断点再续!把大象关进冰箱需要六步!:
1.去360加固保官网下载个360加固保
2.在目录360jiagubao/jiagu下面新建个local文件夹(名字随意)
3.文件夹local下面新建inputAPK文件夹
4.把安卓签名文件也放到local下面
5.文件夹local下面新建py脚本local-jiagu.py(名字随意),整个目录结构是这样的:

6.最后就是脚本内容了,配置下360加固保账号和密码、安卓签名文件账号信息就行了:

# -*- coding: utf-8 -*-
import os,sys,time,shutil#项目根目录
APP_PATH = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) + "/"
#脚本目录
JIAGU_PATH = APP_PATH + 'jiagu/'
print("JIAGU_PATH==== " + JIAGU_PATH)#失败最大重试次数
MAX_FAIL_TRY_TIMES = 2
#为了续传,记录下是不是第一次运行py
IS_FIRST_RUN = True#login
name = '' #360加固保的账号(没有就去360加固保注册个,免费的)
pwd = '' #360加固保的账号密码
#sign
key_path = JIAGU_PATH + 'local/android-key.keystore' #安卓都懂
key_pwd = '' #安卓签名密码
alise = '' #别名
alise_pwd = '' #别名密码
#jiagu
apkInPutPath = JIAGU_PATH + 'local/inputAPK'
apkOutPutPath = JIAGU_PATH + 'output'os.chdir(JIAGU_PATH)
perStr = " "def loginAndImportsign():os.system('java -jar jiagu.jar -login ' + name + perStr + pwd)os.system('java -jar jiagu.jar -importsign ' + key_path + perStr + key_pwd + perStr + alise + perStr + alise_pwd)def jiaguApk(apkName):apkPath = apkInPutPath + '/' + apkNameprint('start jiagu apkPath==== ' + apkPath)os.system('java -jar jiagu.jar -jiagu ' + apkPath + perStr + apkOutPutPath)def signOutputApk(outputApk):cmd = 'jarsigner -verbose -keystore ' + key_path + ' -storepass '+ key_pwd + ' -signedjar '+ outputApk + perStr + outputApk + perStr + alise + ' -keypass ' + alise_pwdos.system(cmd)# 对目录下的文件按文件名排序
def dirSort(path):next(os.walk(path))[1].sort()def checkJiagu(apkList):noJiaguList = {} #未加固列表# 输出目录按文件名排序dirSort(apkOutPutPath)for apkIndex in apkList:inputApkName = apkList[apkIndex] apkIndexSucc = FalseperInputApkName = inputApkName[0:-4] #去掉‘.apk’后的字符串 for outputApkName in os.listdir(apkOutPutPath):if outputApkName.endswith('.apk'): if outputApkName.startswith(perInputApkName):apkIndexSucc = Truebreak         if not apkIndexSucc:print('log no jiagu apk==== ' + str(inputApkName))length = len(noJiaguList)noJiaguList[length+1] = inputApkNamereturn noJiaguList# 获取上次运行最后一个加固的apk,防止因意外情况造成的失败
def checkLastRunApk(apkList,noJiaguList):global IS_FIRST_RUNif IS_FIRST_RUN:IS_FIRST_RUN = Falseif len(noJiaguList) == 0:if apkList[len(apkList)]:print('warning last Run Apk, try again: ' + apkList[len(apkList)])jiaguApk(apkList[len(apkList)]) else:if len(noJiaguList) < len(apkList):for apkIndex in apkList:if apkList[apkIndex] == noJiaguList[1]:if apkList[apkIndex-1]:print('warning last Run Apk, try again: ' + apkList[apkIndex-1])jiaguApk(apkList[apkIndex-1]) #启动加固
def runJiagu(apkList):global MAX_FAIL_TRY_TIMES#验证加固的完整性,返回未加固的apk列表noJiaguList = checkJiagu(apkList)checkLastRunApk(apkList,noJiaguList)if len(noJiaguList)>0 and MAX_FAIL_TRY_TIMES>0:MAX_FAIL_TRY_TIMES = MAX_FAIL_TRY_TIMES - 1for apkIndex in noJiaguList:apkName = noJiaguList[apkIndex]jiaguApk(apkName)runJiagu(noJiaguList)def delAllOutPutApk():if os.path.exists(apkOutPutPath):for outputApk in os.listdir(apkOutPutPath):if outputApk.endswith('.apk'):os.remove(os.path.join(apkOutPutPath, outputApk))def jiagu():global IS_FIRST_RUNglobal MAX_FAIL_TRY_TIMES_isSuccess = False_isFirstRun = IS_FIRST_RUN_maxFailTryTimes = MAX_FAIL_TRY_TIMESapkList = {}#输入目录按文件名排序dirSort(apkInPutPath)for apk in os.listdir(apkInPutPath):if apk.endswith('.apk'):length = len(apkList)apkList[length+1] = apkif len(apkList)>0:#登录 签名loginAndImportsign()#开始加固runJiagu(apkList)#再次验证加固的完整性noJiaguList = checkJiagu(apkList)if len(noJiaguList)>0:IS_FIRST_RUN = _isFirstRunMAX_FAIL_TRY_TIMES = _maxFailTryTimesprint('failure check, run again!')runJiagu(noJiaguList)#最后一次验证加固的完整性lastList = checkJiagu(apkList)if len(lastList)>0:_isSuccess = Falseelse:_isSuccess = Trueelse:_isSuccess = Trueelse:print('failure no apk in path: ' + apkInPutPath)_isSuccess = Falsereturn _isSuccessdef upload():uploadList = {}#筛选出inputPath里面导出的apkfor outputApk in os.listdir(apkOutPutPath):apkCanUpload = Falseif outputApk.endswith('.apk'):for inputApk in os.listdir(apkInPutPath):if inputApk.endswith('.apk'):perInputApk = inputApk[0:-4] #去掉‘.apk’后的字符串if outputApk.startswith(perInputApk):apkCanUpload = Truebreakif apkCanUpload:uploadList[len(uploadList)+1] = outputApkelse:print('warning outputApk: ' + outputApk +  ' not in path: ' + apkInPutPath)uploadCount = len(uploadList)if uploadCount>0:print('start upload, uploadCount: ' + str(uploadCount))for apkIndex in uploadList:uploadApkName = uploadList[apkIndex]print('upload====: ' + str(apkIndex) + "/" + str(uploadCount))# todo 上传osselse:print("upload failure: no outputApk")# 重新签名
def reSignApk():#筛选出inputPath里面导出的apkfor outputApk in os.listdir(apkOutPutPath):apkNeedSign = Falseif outputApk.endswith('.apk'):for inputApk in os.listdir(apkInPutPath):if inputApk.endswith('.apk'):perInputApk = inputApk[0:-4] #去掉‘.apk’后的字符串if outputApk.startswith(perInputApk):apkNeedSign = Truebreakif apkNeedSign:signOutputApk(apkOutPutPath + '/' + outputApk)else:print('warning outputApk: ' + outputApk +  ' not in path: ' + apkInPutPath)if __name__ == '__main__':_isSucc = jiagu()if _isSucc:print('jiagu success')# 成功加固后 重新签名reSignApk()else:print('jiagu failure')

最后把要加固的apk都放到inputAPK目录下,直接运行脚本就行了,最后会在360jiagubao\jiagu\output下面生成所有加固过的apk,收工!
#食色性也,为何罚我#

python实现借助360加固保代码实现批量、断点再续等功能相关推荐

  1. android 360加固保

    android 360加固 360加固保是什么 转自:http://www.veryhuo.com/a/view/92865.html 360加固保是为移动应用安全提供专业保护的平台,盗版App通常是 ...

  2. 使用360加固保后获取不到友盟多渠道信息

    使用360加固保后获取不到友盟多渠道信息 今天在使用360加固保进行多渠道打包时遇到一个很有趣的问题,就是打完包后怎么也获取不到渠道信息(统计用的友盟),但是使用Studio gradle多渠道打包就 ...

  3. 360加固保 安全防护 多渠道打包

    官网:http://jiagu.360.cn/ 功能还是比较多的,这里仅摘录最常用的部分. 介绍 加固保介绍 加固保是为移动应用安全提供专业保护的平台,盗版App通常是将正版App进行破解.篡改后重新 ...

  4. 使用360加固保加固安卓APK

    内容简介 为了保护我们的劳动成果和知识产权,必须对APK对加固工作,否则极易被人破解.篡改,二次打包.市面上当前做加固的有很多家,实际使用了腾讯乐固和360加固(看了网易也有易盾,但是因为只能试用,所 ...

  5. iOS bitCode -- 360 加固保加固 iOS 应用所遇到的问题

    前言 今天尝试使用 360 加固助手 在线加固 iOS 应用,上传之后总是提示加固失败,后面查看帮助文档发现需要启用 bitCode ,在此记录本次经历. 相关资料 五款 iOS 加固产品测试与点评 ...

  6. Android studio gradle实现360加固保自动化打包

    Android studio gradle实现360加固保自动化打包 随着目前行业竞争越来越激烈,apk加固防逆向应该是标配,而360加固保应该是这方面比较成熟可靠的加固工具了,一次性完成了签名混淆加 ...

  7. 360加固保mac不能打开以及不能输入密码的解决方法

    一.首先我们来解决360加固保在Mac10.12不能打开的问题.Mac10.12的安全性设置里不在有允许任何来源安装的选项,所以很多宝宝在官网下载360加固宝不能打开. 1.首先我们应该做的就是把允许 ...

  8. android 360加固远离,安卓党小心账户被克隆!360加固保为开发者提供修复建议

    来源: 互联网 2018-01-10/19:22 近期国内多款安卓版知名手机APP被曝光存在"应用克隆"漏洞.攻击者利用该漏洞,可以轻松"克隆"用户账户,窃取隐 ...

  9. android应用加固后闪退,360加固保加固后打开app即闪退

    首次使用360加固,完全按照说明操作. 用签名后的apk进行加固,加固选项选择了应用盗版检测和支持x86架构.加固后下载到本地,使用了360提供的签名工具进行签名.签名后安装到手机里,一运行就闪退. ...

最新文章

  1. golang sqlite数据库 rows.Close()造成 错误database is locked
  2. 读《程序是怎样跑起来的》第七章有感
  3. 多线程:一些好的编程建议
  4. Flutter 2 源码阅读
  5. 做世界首富的妻子,是一种怎样的体验?
  6. 格式小结 html 0926
  7. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...
  8. NFS双机热备探究实验
  9. 基于对比学习(Contrastive Learning)的文本表示模型为什么能学到语义相似度?
  10. (二)java版电子商务spring cloud分布式微服务b2b2c社交电商-Spring Boot配置文件详解...
  11. 坦克世界无法连接服务器未响应,打开坦克世界提示网络异常或者连接不上
  12. 大学生计算机竞赛试题,大学生计算机基础知识竞赛题库_大学生计算机基础知识竞赛试题附答案.docx...
  13. 出租车计费-Java练习题
  14. Android 百度翻译API(详细步骤+源码)
  15. 单变量微积分笔记28——不定式和洛必达法则
  16. 1074 Reversing Linked List (25 分) java 题解
  17. 上计算机课睡觉检讨书400,上自习课睡觉检讨书500字范文【三篇】
  18. 怎么彻底删除手机上的微信聊天记录?百看不如一试的删除方法!
  19. 立创开源 WCHLink/DapLink下载器 沁恒
  20. 32位系统的X86到底能支持多大内存

热门文章

  1. 2020年12月电子学会Python等级考试试卷(三级)考题解析
  2. android屏幕两点距离,Android之通过距离传感器控制屏幕熄灭
  3. 【学习笔记】Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞教程
  4. 2012年08月22日
  5. 微信小程序开发更改js文件后编译结果没变化
  6. mysql 绿色版 无法启动_MySql免安装版安装配置,附MySQL服务无法启动解决方案
  7. 示波器李萨如图形的调节
  8. 03-树1 树的同构 (25分)
  9. FloTHERM 12.0热管铝挤CPU风冷仿真分析视频教程
  10. GMV从5w日增到1000w,夏日经济下它是如何成为直播间的新宠?