Quick Brute Force Code for C++


SUBMITTED BY: LeeechGather

DATE: Dec. 5, 2018, 9:23 p.m.

FORMAT: C++

SIZE: 27.4 kB

HITS: 332

  1. */ this code is for a quick, simple and easy brute force program created by myself. Please report any bugs, this is still a work in progress but works, we're constantly updating. Thanks all involved/*
  2. #include <iostream>
  3. #include <ctime>
  4. using namespace std;
  5. string crackPassword(string pass);
  6. long long int attempt;
  7. clock_t start_t, end_t;
  8. int main(){
  9. string password;
  10. cout << "Enter the password to crack : ";
  11. cin >> password;
  12. cout << endl << endl << endl << ">\n>> CRACKED THE PASSWORD! >>\n>" << endl << endl <<"The password : " << crackPassword(password) << endl;
  13. cout << "The number of attempts : " << attempt << endl;
  14. cout << "The time duration passed : " << (double)(end_t - start_t)/1000 << " seconds" << endl << endl;
  15. return 0;
  16. }
  17. string crackPassword(string pass){
  18. int digit[7],alphabetSet=1,passwordLength=1;
  19. start_t = clock();
  20. string test,alphabet = "1337 also daktari is pro";
  21. while(1){
  22. switch(passwordLength){
  23. case 1:
  24. while(alphabetSet<4){
  25. switch(alphabetSet){
  26. case 1 : alphabet = "-0123456789";
  27. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  28. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  29. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  30. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  31. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  32. }
  33. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  34. attempt++;
  35. if(attempt%2500000==0) cout << ".";
  36. test=alphabet[digit[0]];
  37. for(int i=1;i<passwordLength;i++)
  38. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  39. if(pass.compare(test)==0){end_t = clock(); return test;}
  40. }
  41. alphabetSet++;
  42. }
  43. break;
  44. case 2:
  45. alphabetSet=1;
  46. while(alphabetSet<6){
  47. switch(alphabetSet){
  48. case 1 : alphabet = "-0123456789";
  49. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  50. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  51. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  52. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  53. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  54. case 4 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyz";
  55. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyz) - 36 Characters, please wait"; break;
  56. case 5 : alphabet = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  57. }
  58. for(digit[1]=0;digit[1]<alphabet.length();digit[1]++)
  59. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  60. attempt++;
  61. if(attempt%2500000==0) cout << ".";
  62. test=alphabet[digit[0]];
  63. for(int i=1;i<passwordLength;i++)
  64. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  65. if(pass.compare(test)==0){end_t = clock(); return test;}
  66. }
  67. alphabetSet++;
  68. }
  69. break;
  70. case 3:
  71. alphabetSet=1;
  72. while(alphabetSet<8){
  73. switch(alphabetSet){
  74. case 1 : alphabet = "-0123456789";
  75. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  76. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  77. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  78. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  79. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  80. case 4 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyz";
  81. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyz) - 36 Characters, please wait"; break;
  82. case 5 : alphabet = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  83. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing uppercase characters and numbers(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 36 Characters, please wait"; break;
  84. case 6 : alphabet = "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  85. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 52 Characters, please wait"; break;
  86. case 7 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  87. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 62 Characters, please wait"; break;
  88. }
  89. for(digit[2]=0;digit[2]<alphabet.length();digit[2]++)
  90. for(digit[1]=0;digit[1]<alphabet.length();digit[1]++)
  91. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  92. attempt++;
  93. if(attempt%2500000==0) cout << ".";
  94. test=alphabet[digit[0]];
  95. for(int i=1;i<passwordLength;i++)
  96. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  97. if(pass.compare(test)==0){end_t = clock(); return test;}
  98. }
  99. alphabetSet++;
  100. }
  101. break;
  102. case 4:
  103. alphabetSet=1;
  104. while(alphabetSet<8){
  105. switch(alphabetSet){
  106. case 1 : alphabet = "-0123456789";
  107. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  108. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  109. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  110. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  111. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  112. case 4 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyz";
  113. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyz) - 36 Characters, please wait"; break;
  114. case 5 : alphabet = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  115. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing uppercase characters and numbers(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 36 Characters, please wait"; break;
  116. case 6 : alphabet = "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  117. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 52 Characters, please wait"; break;
  118. case 7 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  119. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 62 Characters, please wait"; break;
  120. }
  121. for(digit[3]=0;digit[3]<alphabet.length();digit[3]++)
  122. for(digit[2]=0;digit[2]<alphabet.length();digit[2]++)
  123. for(digit[1]=0;digit[1]<alphabet.length();digit[1]++)
  124. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  125. attempt++;
  126. if(attempt%2500000==0) cout << ".";
  127. test=alphabet[digit[0]];
  128. for(int i=1;i<passwordLength;i++)
  129. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  130. if(pass.compare(test)==0){end_t = clock(); return test;}
  131. }
  132. alphabetSet++;
  133. }
  134. break;
  135. case 5:
  136. alphabetSet=1;
  137. while(alphabetSet<8){
  138. switch(alphabetSet){
  139. case 1 : alphabet = "-0123456789";
  140. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  141. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  142. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  143. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  144. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  145. case 4 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyz";
  146. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyz) - 36 Characters, please wait"; break;
  147. case 5 : alphabet = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  148. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing uppercase characters and numbers(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 36 Characters, please wait"; break;
  149. case 6 : alphabet = "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  150. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 52 Characters, please wait"; break;
  151. case 7 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  152. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 62 Characters, please wait"; break;
  153. }
  154. for(digit[4]=0;digit[4]<alphabet.length();digit[4]++)
  155. for(digit[3]=0;digit[3]<alphabet.length();digit[3]++)
  156. for(digit[2]=0;digit[2]<alphabet.length();digit[2]++)
  157. for(digit[1]=0;digit[1]<alphabet.length();digit[1]++)
  158. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  159. attempt++;
  160. if(attempt%2500000==0) cout << ".";
  161. test=alphabet[digit[0]];
  162. for(int i=1;i<passwordLength;i++)
  163. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  164. if(pass.compare(test)==0){end_t = clock(); return test;}
  165. }
  166. alphabetSet++;
  167. }
  168. break;
  169. case 6:
  170. alphabetSet=1;
  171. while(alphabetSet<8){
  172. switch(alphabetSet){
  173. case 1 : alphabet = "-0123456789";
  174. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  175. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  176. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  177. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  178. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  179. case 4 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyz";
  180. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyz) - 36 Characters, please wait"; break;
  181. case 5 : alphabet = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  182. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing uppercase characters and numbers(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 36 Characters, please wait"; break;
  183. case 6 : alphabet = "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  184. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 52 Characters, please wait"; break;
  185. case 7 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  186. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 62 Characters, please wait"; break;
  187. }
  188. for(digit[5]=0;digit[5]<alphabet.length();digit[5]++)
  189. for(digit[4]=0;digit[4]<alphabet.length();digit[4]++)
  190. for(digit[3]=0;digit[3]<alphabet.length();digit[3]++)
  191. for(digit[2]=0;digit[2]<alphabet.length();digit[2]++)
  192. for(digit[1]=0;digit[1]<alphabet.length();digit[1]++)
  193. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  194. attempt++;
  195. if(attempt%2500000==0) cout << ".";
  196. test=alphabet[digit[0]];
  197. for(int i=1;i<passwordLength;i++)
  198. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  199. if(pass.compare(test)==0){end_t = clock(); return test;}
  200. }
  201. alphabetSet++;
  202. }
  203. break;
  204. case 7:
  205. alphabetSet=1;
  206. while(alphabetSet<8){
  207. switch(alphabetSet){
  208. case 1 : alphabet = "-0123456789";
  209. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  210. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  211. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  212. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  213. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  214. case 4 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyz";
  215. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyz) - 36 Characters, please wait"; break;
  216. case 5 : alphabet = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  217. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing uppercase characters and numbers(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 36 Characters, please wait"; break;
  218. case 6 : alphabet = "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  219. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 52 Characters, please wait"; break;
  220. case 7 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  221. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 62 Characters, please wait"; break;
  222. }
  223. for(digit[6]=0;digit[6]<alphabet.length();digit[6]++)
  224. for(digit[5]=0;digit[5]<alphabet.length();digit[5]++)
  225. for(digit[4]=0;digit[4]<alphabet.length();digit[4]++)
  226. for(digit[3]=0;digit[3]<alphabet.length();digit[3]++)
  227. for(digit[2]=0;digit[2]<alphabet.length();digit[2]++)
  228. for(digit[1]=0;digit[1]<alphabet.length();digit[1]++)
  229. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  230. attempt++;
  231. if(attempt%2500000==0) cout << ".";
  232. test=alphabet[digit[0]];
  233. for(int i=1;i<passwordLength;i++)
  234. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  235. if(pass.compare(test)==0){end_t = clock(); return test;}
  236. }
  237. alphabetSet++;
  238. }
  239. break;
  240. case 8:
  241. alphabetSet=1;
  242. while(alphabetSet<8){
  243. switch(alphabetSet){
  244. case 1 : alphabet = "-0123456789";
  245. cout << endl << endl <<"Testing only digits(0123456789) - 10 Characters, please wait"; break;
  246. case 2 : alphabet = "-abcdefghijklmnopqrstuvwxyz";
  247. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only lowercase characters(abcdefghijklmnopqrstuvwxyz) - 26 Characters, please wait"; break;
  248. case 3 : alphabet = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  249. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing only uppercase characters(ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 26 Characters, please wait"; break;
  250. case 4 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyz";
  251. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyz) - 36 Characters, please wait"; break;
  252. case 5 : alphabet = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  253. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing uppercase characters and numbers(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 36 Characters, please wait"; break;
  254. case 6 : alphabet = "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  255. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 52 Characters, please wait"; break;
  256. case 7 : alphabet = "-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  257. cout << endl << endl << "Couldn't find the password, increasing the searching level."<< endl << endl << "Testing lowercase, uppercase characters and numbers(0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ) - 62 Characters, please wait"; break;
  258. }
  259. for(digit[7]=0;digit[7]<alphabet.length();digit[7]++)
  260. for(digit[6]=0;digit[6]<alphabet.length();digit[6]++)
  261. for(digit[5]=0;digit[5]<alphabet.length();digit[5]++)
  262. for(digit[4]=0;digit[4]<alphabet.length();digit[4]++)
  263. for(digit[3]=0;digit[3]<alphabet.length();digit[3]++)
  264. for(digit[2]=0;digit[2]<alphabet.length();digit[2]++)
  265. for(digit[1]=0;digit[1]<alphabet.length();digit[1]++)
  266. for(digit[0]=1;digit[0]<alphabet.length();digit[0]++){
  267. attempt++;
  268. if(attempt%2500000==0) cout << ".";
  269. test=alphabet[digit[0]];
  270. for(int i=1;i<passwordLength;i++)
  271. if(alphabet[digit[i]]!='-')test+=alphabet[digit[i]];
  272. if(pass.compare(test)==0){end_t = clock(); return test;}
  273. }
  274. alphabetSet++;
  275. }
  276. break;
  277. }
  278. cout << endl << endl << endl << endl << "*" << endl;
  279. cout << "*** Password length is not " << passwordLength << ". Increasing password length! ***";
  280. cout << endl << "*" << endl << endl;
  281. passwordLength++;
  282. }
  283. }

comments powered by Disqus