之前尝试用过virjar大佬的hermesagent, 后来大佬又迭代出新的基于长链接的Sekiro
, 一直想看都被耽搁了, 今天正好抽空尝试一下, 顺便写篇笔记, 有错误的地方大佬们请指正哈
SEKIRO 是一个android下的API服务暴露框架,可以用在app逆向、app数据抓取、android群控等场景
和其他群控框架相比的特点如下:
Sekiro架构
123456789101112 | server: 暴露一个TCP端口和两个HTTP端口 管理通过TCP连接的client和user发来的http 请求client: 通过TCP和server连接,响应server发来的请求 工作流程是这样的: 1. client通过TCP和server建立长连接 2. user发送http请求给server 3. server根据用户发来的http请求的参数,通过TCP将请求转发给client 4. client收到请求并响应server 5. server将从client收到的请求返回给user |
---|
详细的可以去看项目的readme, 说的非常详细: 项目传送门
git clone https://github.com/virjar/sekiro.git
include ':sekiro-server', ':sekiro-lib'
,删掉appdemo防止编译它1234567891011 | 1. server端在`sekiro-server/src/main/resources/appliation.properties`中可以配置三个服务端端口, 主要服务端安全策略的出入口需要开放这个三个端口 #tomcat 占用端口 server.port=5602 #长链接服务占用端口 natServerPort=5600 # 异步http占用端口 natHttpServerPort=5601 # websocket占用端口 webSocketServerPort=5603 2. 如果自定义端口,client需要调用SekiroClient.start(String serverHost, int serverPort, final String clientID, String group)中去连接server |
---|
./gradlew sekiro-server:bootJar
即可在 sekiro-server/build/libs/sekiro-server-0.0.1-SNAPSHOT.jar
找到all-in-one的jar包nohup java -jar sekiro-server/build/libs/sekiro-server-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &
启动server
android.permission.INTERNET
权限
public
class
MainActivity extends AppCompatActivity {
public static
int
Add(int
n1,
int
n2)
{
return
n1
+
n2;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(MainActivity.this,
"3 + 2 = "
+
Add(3,
2), Toast.LENGTH_LONG).show();
}
}
implementation 'com.virjar:sekiro-api:1.0.1'
handleLoadPackage
中启动client链接server,并添加处理事件的handler, 用于调用Add函数
Log.i(TAG,
"connect server....");
//服务端host
String testHost
=
"your_host";
//客户端标识
String clientId
=
UUID.randomUUID().toString();
//接口组名称
String groupName
=
"addDemoTest2";
//暴露的接口名称
String actionName
=
"myAdd";
//拿classloader
clzLoader
=
lpparam.classLoader;
//连接服务端并且注册处理的handler
SekiroClient.start(testHost, clientId, groupName)
.registerHandler(actionName, new SekiroRequestHandler(){
@Override
public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse){
//当服务端分配任务时, 这里处理逻辑, 并把结果返回给服务端, 服务端再返回给调用者
Class<?> clz
=
XposedHelpers.findClass("com.example.administrator.adddemo.MainActivity", clzLoader);
int
arg1
=
sekiroRequest.getInt("arg1");
int
arg2
=
sekiroRequest.getInt("arg2");
Log.i(TAG, String.format("arg1 : %d, arg2 : %d", arg1, arg2));
Object
result
=
XposedHelpers.callStaticMethod(clz,
"Add", arg1, arg2);
Log.i(TAG,
"result : "
+
result);
sekiroResponse.success(result);
}
});
More than one file was found with OS independent path
解决1234567 | //build.gradle里android{}添加错误的path packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/INDEX.LIST' exclude ('META-INF/io.netty.versions.properties')} |
---|
[your_server_ip]:[server.port]/groupList
格式: your_server_ip:[natHttpServerPort]/[invoke_type]?group=[group_id]&action=[action_name]¶m1=[arg]
例子: https://x.x.x.x:5602/asyncInvoke?group=addDemoTest2&action=myAdd&arg1=300&arg2=300
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。