0x00 pyenv更新

当有Python新版本更新后,如果旧版本pyenv没有集成进去的话,需要手动更新一下pyenv版本,方便安装。

Windows

win比较简单,直接 pyenv update 就行

image.png

Linux

参考:GitHub - pyenv/pyenv-update: update pyenv and plugins

1、安装pyenv的更新扩展

git clone https://github.com/pyenv/pyenv-update.git $(pyenv root)/plugins/pyenv-update

2、更新

pyenv update

0x01 Demo介绍

代码介绍

1、定义两个方法 method01和method02,分别用来进行AES加密和解密。

其中method01为静态方法;method02为实例方法。

image.png

2、进到so层中查看具体函数实现,会发现这两个函数是做了动态绑定的(java层和so层的函数名不要求一样,会在代码中进行动态绑定的)

image.png

image.png

3、在java代码中,会调用method01和method02对StringFromJNI2返回的内容进行加密和解密

image.png

StringFromJNI2函数返回的内容为“Hello from c++ StringFromJNI2”

image.png

到这,整个demo的逻辑就清楚了~~~

参数构造和主动调用核心原则

第一步:Hook

主动调用之前先hook,hook本身就是一个主动调用的过程。

android hooking list classes
android hooking list class_methods com.example.demoso1.MainActivity

image.png

# hook类中所有方法
android hooking watch class com.example.demoso1.MainActivity

# hook关键函数method01和method02
android hooking watch class com.example.demoso1.MainActivity.method01 --dump-args --dump-backtrace --dump=return
android hooking watch class com.example.demoso1.MainActivity.method02 --dump-args --dump-backtrace --dump=return

image.png

image.png

image.png

第二步,主动调用

1、首先,method01是静态方法,可以直接调用

image.png

运行之后发现,打印出来的result 为 undefined????这是啥原因

这是因为,我们将 var result 定义到了Java.preform的虚拟机中了,这样在主动调用的时候,是传不到外面来的。

所以,修改代码如下:

img

成功打印:

img

2、method02是非静态方法,所以,需要先找到它的实例对象,再调用method02方法

使用Java.choose进行查找。

image.png

image.png

这块就可以保证在JS代码中主动调用正常运行了

第三步:rpc

rpc.exports={
fridamethod01:fridamethod01,
fridamethod02:fridamethod02
}

img

基于IP构建Frida-server集群

使用Python来调用上面的Frida脚本

import frida

# 定义错误处理
def on_message(message, data):
// message 参数包含消息的类型和内容
// data
print(message)
print(data)

# 启动目标应用并附加到 Frida
device = frida.get_device_manager().add_remote_device("192.168.0.1:8888")
pid = device.spawn('com.example.demoso1')
device.resume(pid)
time.sleep(1)
session = device.attach(pid)

# 加载JS脚本
with open('my_script.js') as f:
script = session.create_script(f.read())

# 加载脚本并定义消息处理函数
script.on('message', on_message)
script.load()


# 现在可以通过 RPC 调用定义的函数
result = script.exports.myFunction(arg1, arg2)
print(result)


# 脚本会持续运行等待输入
input()

0x02 配置flask实现Http接口调用

[原创]frida-rpc 远程调用SO里面的加解密算法-Android安全-看雪-安全社区|安全招聘|kanxue.com

apk拖到jadx里面,找到我们需要调用的方法

img

我们就不去分析他的so了 我们要使用的是frida-rpc远程调用接口。。。

看一下,这两个方法的具体代码:

image.png

传string参数 返回byte[]

直接调用encryptSrc 传string返回string,decryptSrc 同理

上frida rpc代码

test.js

img

python 代码 我们要远程调用API接口,
直接在GitHub下载的 别人代码改了一下,全POST接口方法传参数

flask框架

img

启动我们手机里面的frida-server 服务,我改名为fs 用后台启动

看图

img

运行我们的flask框架

img

调用一下加解密,接迷的API接口看看

img

img

0x03 配置NPS实习外网调用fs或http接口

https://blog.csdn.net/qq_41813208/article/details/113760249

0x04 压力测试Http接口并发性能

siege压力测试工具,可参考如下:

【压测】压力测试工具siege的用法 - 陈晓猛 - 博客园 (cnblogs.com)

web网站压测工具Siege介绍-腾讯云开发者社区-腾讯云 (tencent.com)