Last active
October 14, 2020 10:55
-
-
Save shugen002/8c429a2b20c90b39d25d2eafa696dc33 to your computer and use it in GitHub Desktop.
KaiHeiLa RongIMLib Proxy 开黑啦注入器
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 开黑啦注入器 | |
* 需要插入在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