From ca62b332756677129854a3d785eac266934e1b4b Mon Sep 17 00:00:00 2001 From: WhiteChi Date: Sat, 11 Nov 2023 23:02:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?`Shamrock`:=20=E4=BF=AE=E5=A4=8D=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=8E=86=E5=8F=B2=E6=B6=88=E6=81=AF=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E5=BD=93=E5=89=8DID=E7=9A=84=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/action/handlers/GetHistoryMsg.kt | 58 +++++++++++++------ .../shamrock/remote/api/OtherAction.kt | 2 +- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt index 4dd454a..723eac1 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt @@ -5,6 +5,7 @@ import com.tencent.qqnt.kernel.nativeinterface.MsgRecord import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonElement +import moe.fuqiuluo.qqinterface.servlet.MsgSvc import moe.fuqiuluo.qqinterface.servlet.msg.convert.MessageConvert import moe.fuqiuluo.shamrock.helper.MessageHelper import moe.fuqiuluo.shamrock.helper.db.MessageDB @@ -53,23 +54,46 @@ internal object GetHistoryMsg: IActionHandler() { return logic(result.msg ?: "获取历史消息失败", echo = echo) } - val msgList = result.data!!.map { msg -> - val msgHash = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId) - MessageDetail( - time = msg.msgTime.toInt(), - msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType), - msgId = msgHash, - realId = msg.msgSeq.toInt(), - sender = MessageSender( - msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid - ), - message = MessageConvert.convertMessageRecordToMsgSegment(msg).map { - it.toJson() - }, - peerId = msg.peerUin, - groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0, - targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0 - ) + val msgList = ArrayList().apply { + addAll(result.data!!.map { msg -> + val msgHash = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId) + MessageDetail( + time = msg.msgTime.toInt(), + msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType), + msgId = msgHash, + realId = msg.msgSeq.toInt(), + sender = MessageSender( + msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid + ), + message = MessageConvert.convertMessageRecordToMsgSegment(msg).map { + it.toJson() + }, + peerId = msg.peerUin, + groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0, + targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0 + ) + }) + if (startMsgId != 0L) { + val msg = MsgSvc.getMsgByQMsgId(chatType, peerId, startMsgId).onFailure { + return logic("Obtain msg failed, please check your msg_id.", echo) + }.getOrThrow() + val seq = msg.clientSeq.toInt() + add(MessageDetail( + time = msg.msgTime.toInt(), + msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType), + msgId = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId), + realId = seq, + sender = MessageSender( + msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid + ), + message = MessageConvert.convertMessageRecordToMsgSegment(msg).map { + it.toJson() + }, + peerId = msg.peerUin, + groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0, + targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0 + )) + } } return ok(data = GetHistoryMsgResult(msgList), echo = echo) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt index 972b94d..b8fe755 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt @@ -35,7 +35,7 @@ import java.util.concurrent.TimeUnit fun Routing.otherAction() { if (ShamrockConfig.allowShell()) { - getOrPost("/shell") { + post("/shell") { val runtime = Runtime.getRuntime() val dir = fetchOrThrow("dir") val out = StringBuilder() From d5378d8acb507889386aea9289ee7aadf36fd7b9 Mon Sep 17 00:00:00 2001 From: owo233 Date: Sun, 12 Nov 2023 05:49:22 +0800 Subject: [PATCH 2/3] =?UTF-8?q?`Shamrock`:=20=E4=BD=BF=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E7=9A=84=E6=94=B6=E5=8C=85cmd=E6=9B=B4=E5=8A=A0=E6=B8=85?= =?UTF-8?q?=E6=99=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt | 4 ++-- .../moe/fuqiuluo/shamrock/xposed/actions/HookWrapperCodec.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt index 14fd899..275af4c 100644 --- a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt +++ b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt @@ -110,8 +110,8 @@ fun LabFragment() { } Function( - title = "拦截QQ无用发包", - desc = "测试阶段,可能导致网络异常。", + title = "拦截QQ无用收包", + desc = "测试阶段,可能导致网络异常或掉线。", descColor = it, isSwitch = ShamrockConfig.isInjectPacket(ctx) ) { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/HookWrapperCodec.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/HookWrapperCodec.kt index 57f311c..a0e52bc 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/HookWrapperCodec.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/HookWrapperCodec.kt @@ -113,7 +113,7 @@ internal class HookWrapperCodec: IAction { from.putWupBuffer(merge.toByteArray()) } else if (from.appId != MAGIC_APP_ID) { if (from.serviceCmd in IgnoredCmd && ShamrockConfig.isInjectPacket()) { - from.serviceCmd = "ShamrockInjectedCmd" + from.serviceCmd = "ShamrockInjectedCmd_${from.serviceCmd}" from.putWupBuffer(EMPTY_BYTE_ARRAY) } else { pushOnReceive(from) From 19e3846e40c8aced978fa5bf661a7eafd570857b Mon Sep 17 00:00:00 2001 From: owo233 Date: Mon, 13 Nov 2023 01:32:53 +0800 Subject: [PATCH 3/3] `Shamrock`: fix #41 --- .../shamrock/remote/action/handlers/SetGroupUnique.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupUnique.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupUnique.kt index 4867a37..428b2ea 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupUnique.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupUnique.kt @@ -15,8 +15,8 @@ internal object SetGroupUnique: IActionHandler() { } suspend operator fun invoke(groupId: String, userId: String, unique: String, echo: JsonElement = EmptyJsonString): String { - if (!GroupSvc.isAdmin(groupId)) { - return error("you are not admin", echo) + if (!GroupSvc.isOwner(groupId)) { + return error("you are not owner", echo) } GroupSvc.setGroupUniqueTitle(groupId, userId, unique) return ok("成功", echo)