Skip to content

Instantly share code, notes, and snippets.

@shugen002
Last active October 14, 2020 10:55
Show Gist options
  • Save shugen002/8c429a2b20c90b39d25d2eafa696dc33 to your computer and use it in GitHub Desktop.
Save shugen002/8c429a2b20c90b39d25d2eafa696dc33 to your computer and use it in GitHub Desktop.
KaiHeiLa RongIMLib Proxy 开黑啦注入器
/**
* 开黑啦注入器
* 需要插入在lib与主程序执行之间
*
* 成功加载后可通过 window.__botInject.addEventListener('message',(e)=>{})
* 监听消息。
*
* 需要监视所有对RongIMLib的操作可以执行
* window.__botInject.dolog = true
*/
(() => {
var that = new EventTarget()
that.dolog = false
let __order = 0
that.RongIMClient = window.RongIMClient
that.RongIMLib = window.RongIMLib
function fixedOrderLength(order, length) {
let result = order.toString()
while (result.length < length) {
result = " " + result
}
return result
}
function getProxy(target, name) {
return new Proxy(target, {
construct(target, args, newTarget) {
let order = __order++
let result = new target(...args)
that.dolog ? console.log(`[${fixedOrderLength(order,10)}] new ${name}()`, args, result) : ""
return getProxy(result, `(new ${name}())`)
},
apply(target, thisArgs, args) {
let order = __order++
if (name === 'RongIMClient.setOnReceiveMessageListener') {
that.rawReceiver = args[0].onReceived
args[0].onReceived = (...args) => {
let event = new CustomEvent('message', {
detail: args[0],
bubbles: false,
cancelable: false
})
that.dispatchEvent(event)
that.rawReceiver(...args)
}
}
let result = target.apply(thisArgs, args);
that.dolog ? console.log(`[${fixedOrderLength(order,10)}] apply ${name}()`, args, result) : ""
switch (typeof result) {
case "object":
case "function":
return getProxy(result, `${name}()`)
default:
return result;
}
},
get(target, p, receiver) {
let order = __order++
that.dolog ? console.log(`[${fixedOrderLength(order,10)}] get ${name}.${p.toString()}`) : ""
switch (typeof target[p]) {
case "object":
case "function":
return getProxy(target[p], `${name}.${p.toString()}`)
default:
return target[p];
}
},
set(target, p, value, receiver) {
let order = __order++
that.dolog ? console.log(`[${fixedOrderLength(order,10)}] set ${name}.${p.toString()}`, value) : ""
return target[p] = value
}
});
}
that.getProxy = getProxy
window.RongIMClient = getProxy(that.RongIMClient, 'RongIMClient')
window.RongIMLib = getProxy(that.RongIMLib, 'RongIMLib')
window.__botInject = that
})()
window.__botInject.addEventListener('message', (e) => {
console.log(e)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment