安卓基础逆向 — frida(1)

简介:
随着技术的更新换代, 反爬是层出不穷, 三年前一个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-server

1.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/8027.html

爬虫攻城狮的头像爬虫攻城狮

相关推荐

添加微信
添加微信
Ai学习群
返回顶部