简介:
随着技术的更新换代, 反爬是层出不穷, 三年前一个ip可以爬某宝的几百万的数据不会被封, 其他除了一些ip限制,和一些js的加解密几乎没有,随着移动端的兴起,数据已经倾斜到app端, 风控也是层出不穷, 各种加密解密,看着眼花缭乱,让人不知如何下手, 本系列主要分享爬虫需要到的一些基础破解工具,和思路。
首先声明: 此次分享只为学习交流使用,切勿用于其他非法用途,关键代码均打码
Frida:
虽说反爬严重了,但是活还的干不是, 但是app破解难度很大, 群控吧效率还比较低,而且不可控, 那么frida就派上了用场, 我们先来看看frida是干什么的, 他为什么那么厉害。
- frida是个什么玩意?Firda 是一款易用的跨平 Hook 工具, Java 层到 Native 层的 Hook 无所不能,是一种 动态 的插桩工具,可以插入代码到原生 App 的内存空间中,动态的去监视和修改行为,原生平台包括 Win、Mac、Linux、Android、iOS 全平台。
- 为啥要用他呢?
- 大部分 App 对于我们来说都是黑盒,对 App 进行逆向和动态调试、或自动化分析、需要不断的进行动态调试,Frida 通过使用 Python 注入 JavaScript 脚本,都是通过 JS 脚本来操作设备上的 Java代码。
frida的优点在于,配置环境简单,操作简洁,对于初期刚接触的破解者还是很友好的,而且可以动态调试, 不需要重启, 后需也会分享其他工具,比如xposed等等,因为大多爬虫都是基于python, 所以上手会快些。
Firda安装:
- frida分为客户端和服务端:
客户端:PC(控制端)
服务器:手机设备(被控制端)
客户端编写的 Python 代码,用于连接远程设备,提交要注入的 JS 代码到服务端,接受服务端发来的消息的 - 客户端安装:pip install frida-tools
- 服务端安装:adb shell cat /proc/cpuinfo 查看CPU架构
https://github.com/frida/frida/releases 根据手机架构要求找到frida-server1.armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
2.arm64-v8a: 第8代、64位ARM处理器,很少设备。
3.x86: 平板、模拟器用得比较多。
4.x86_64: 64位的平板。frida –v
把下载好的frida-server解压完,adb 放到 /data/local/tmp 目录下,进行启动。转发端口: adb forward tcp:27042 tcp:27042
HOOK:
上面基本简单介绍一下frida, 和安装流程,接下来就是一个简单的HookDemo, 话不多说上代码。
import frida
import sys
jscode = """
/* 这个字段标记Java虚拟机(例如:Dalvik 或者 ART)是否已加载, 操作Java任何东西的之前,要确认这个值是否为true */
if(Java.available){
Java.perform(function(){
/* Java.use方法用于声明一个Java类,在用一个Java类之前首先得声明。比如声明一个String类,要指定完整的类名var StringClass=Java.use("java.lang.String"); */
var MainActivity = Java.use("xxx.xxx.xxx.helpers.utils.Sign");
/* 类.函数.overload(参数类型).implementation = function(形参名称){ */
MainActivity.a.overload("java.lang.String", "java.lang.String", "java.lang.String", "java.lang.String").implementation = function(str1, str2, str3, str4){
for( var i=0; i<arguments.length; i++){
console.log("arge >>>>>>>" + arguments[i])
}
/* 修改addnumber函数的返回值 */
var result = this.a(str1, str2, str3, str4);
console.log("this sign >>>>>>>> " + result)
console.log('------------------------------------------------')
return result
}
});
}
"""
def on_message(message, data):
if message['type'] == 'send':
print(" {0}".format(message['payload']))
else:
print(message)
# 查找USB设备并附加到目标进程
session = frida.get_usb_device().attach('xxx.xxx.xxx') # appName
# 在目标进程里创建脚本
script = session.create_script(jscode)
# 注册消息回调
script.on('message', on_message)
# 加载创建好的javascript脚本
script.load()
# 读取系统输入
sys.stdin.read()
上面是hook, 某个app的sign加密, 我们可以看一下hook的效果。需要现在手机打开app, 再运行。
上面可以看到传入了4个参数, 然后返回了一个sign,因为本篇主要分享,frida的一个初级用法,所以就不多说,往深跟传入的加密参数了,如果有兴趣的可以关注我的公众号,我会在公众号上进行解答, 我分享的一些破解的小程序, app也可以直接在公众号上发给大家, 喜欢的关注一下, 给点动力,谢谢。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/26366.html