强制更新
打开后提示版本太旧,提示更新,而且更新的弹窗无法取消。解决办法:
- 关闭和打开网络:app都是刚打开时会提示更新,更新的代码不会写死在手机上,通常情况下都是刚打开时手机向后台发送一个请求,后台返回最新的版本信息,手机接收到后会进行版本对比,然后才会提示更新。**根据这个流程,可以先关闭网络,打开app,这样一开始发送版本的请求会失败,当再连接上网络时,也许就可以绕过更新。**能否绕过需要看app的逻辑,也许一开始请求失败后就不会再进行验证了,也许会不死不休,等网络一来继续验证。
- Hook机制:找到更新弹窗的代码,通过hook让弹窗的代码失效即可。
以上介绍的两种方式,都是在前端进行的绕过,如果后端的API也更新了,那虽然绕过了前端,但前后端会出现不匹配,也会无法使用。
举例:识货
进行hook绕过:寻找版本等关键字,发现更新弹窗的位置
触发更新弹窗的就是updateDialog.show()
,只要让show()
函数失效即可,首先定位UpdateDialog类,但在UpdateDialog类中没有找到show函数,但也可以尝试hook:让show方法不执行,就不会出现更新弹窗。
import frida
import sys
rdev = frida.get_remote_device() # 连接手机设备
session = rdev.attach("识货")
scr = """
Java.perform(function () {
// 包.类
var UpdateDialog = Java.use("com.azhon.appupdate.dialog.UpdateDialog");
// Hook,替换
UpdateDialog.show.implementation = function(){
// 执行原来的方法
console.log('------------show------------')
// var res = this.show();
// return res;
}
});
"""
script = session.create_script(scr)
def on_message(message, data): # 处理报错
print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
在定位弹窗函数时,可以搜索的关键字除了汉字外,还可以搜索UpdateDialog
。
【PS:Android 逆向进阶专栏地址:https://blog.csdn.net/dafan0/category_12682484.html】