介绍一下搭建中需要用到的nps服务器 
nps分为服务器端和客户端,针对不同的架构有区分,分别下载不同的压缩包部署即可。
实验中我使用的是云服务器和模拟器,所以选择了386的版本 
在服务器端,启动之前确保服务器的 80,443,8080,8024端口都没有被占用,如果启动失败,可以查看在/var/log/nps.log中的日志找出问题出在哪里并且解决。云服务器还要记得将这些端口放进安全组。
启动之后,直接访问服务器的8080端口,就可以进入web管理界面, 默认的账号密码为admin,123,生产环境中一定要记得更改。
登录后,进入客户端管理界面,

点击新增,(图中是我已经配置好的三台手机模拟器)

简单的添加一个备注

点击左上角的+号就可以看到在客户端运行的命令。

模拟器端,需要启动wifiadb,查看该手机模拟器的内网端口 
服务端还需要最后一步,新建隧道,服务端端口可以随便填没有被占用的端口,
目标的ip端口需要填写模拟器所在的内网ip,和frida监听的端口。知道这个内网ip后,关闭wifiadb后好像也没影响,在模拟器上是这样,手机没试过,但估计必须要打开吧!

这样一个最重要的公网访问frida-server的部分就完成了,要想搭建集群,只要多添加几个手机客户端就可以了。
但是这种frida-server集群的方法不是很方便,每个手机客户端都要开两个命令行窗口,但是应该可以做一个py脚本批量运行命令,要不然一个一个的启动实在太过麻烦。我三台模拟器就开了6个窗口。还有多台设备管理的问题,需要在python中将每台设备主动调用函数的次数做到限制,使用类似负载均衡中用到的方法?(轮询?随机?大佬做过的可以讲讲,谢谢)并且对外做成一个web服务,这样别人不用管内部具体实现,直接调用接口即可。

nps地址 13cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6W2K9r3q4F1k6#2)9J5k6r3W2G2i4K6u0r3L8Y4m8K6
解压
tar zxvf linux_386_server.tar.gz
安装
sudo .
/
nps install
启动
sudo nps start
解压
tar zxvf linux_386_server.tar.gz
安装
sudo .
/
nps install
启动
sudo nps start
启动frida,
adb
-
s emulator
-
5554
shell
'./data/local/tmp/fs -l 0.0.0.0:1111'
启动nps客户端
adb
-
s emulator
-
5554
shell
'./data/local/tmp/npc -server=62.234.132.155:8024 -vkey=fqclv2e4kqv4xf6f -type=tcp'
启动frida,
adb
-
s emulator
-
5554
shell
'./data/local/tmp/fs -l 0.0.0.0:1111'
启动nps客户端
adb
-
s emulator
-
5554
shell
'./data/local/tmp/npc -server=62.234.132.155:8024 -vkey=fqclv2e4kqv4xf6f -type=tcp'
这段代码的目的就是,挨个启动手机中的设置,也可以自己再使用frida
-
rpc调用主动调用app中的函数,只要hook好,什么都跑不掉^_^,
device_list
=
[
"服务器ip:1111"
,
"服务器ip:2222"
,
"服务器ip:3333"
]
for
device
in
device_list:
time.sleep(
2
)
device
=
frida.get_device_manager().add_remote_device(device)
print
(device.get_frontmost_application())
pid
=
device.spawn(
"com.android.settings"
)
device.resume(pid)
print
(pid)
time.sleep(
1
)
device.attach(pid)
session
=
device.attach(pid)
with
open
(
"demo.js"
) as f:
script
=
session.create_script(f.read())
script.load()
[培训]科锐逆向工程师培训第53期2025年7月8日开班!