安卓逆向神器- frida(1)简介

6 篇文章 1 订阅
2 篇文章 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安装:

  1. frida分为客户端和服务端:

     客户端:PC(控制端)
     服务器:手机设备(被控制端)
     客户端编写的 Python 代码,用于连接远程设备,提交要注入的 JS 代码到服务端,接受服务端发来的消息的
    
  2. 客户端安装:

    pip install frida-tools

    在这里插入图片描述

  3. 服务端安装:

    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也可以直接在公众号上发给大家, 喜欢的关注一下, 给点动力,谢谢。

在这里插入图片描述

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值