Skip to content

Instantly share code, notes, and snippets.

@fielding
Created June 14, 2015 16:09
Show Gist options
  • Save fielding/133b742ede476b801768 to your computer and use it in GitHub Desktop.
Save fielding/133b742ede476b801768 to your computer and use it in GitHub Desktop.
node script to generate john the ripper wordlist to crack insanity+ rar instead of following Hopsin's crazy engrish instructions
// this was a lazy hack, so use:
//
// sudo launchctl limit maxfiles 1000000 1000000
//
//
// to get past the kqueue error on writing to the wordlist file
var ascii = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ<>{}()[]":;-+=*&?^%$#@!~`_/|,.';
var hkeys = "0123456789";
var lowerLetters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
var upperLetters = lowerLetters.slice();
var numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
Array.prototype.Upper=function() {
var i;
for (i=0; i<this.length;i++)
{
this[i]=this[i].toUpperCase();
}
}
upperLetters.Upper();
var temp = upperLetters.concat(numbers);
var letters = lowerLetters.concat(temp);
function A(n) {
for (i = 0; i < n; i++) {
this[i] = 0;
this.length = n
}
}
function Z(n) {
return n % (0xffffffff + 1)
}
function Q(a, b) {
a = Z(a);
b = Z(b);
if (a - 0x80000000 >= 0) {
a = a % 0x80000000;
a >>= b;
a += 0x40000000 >> (b - 1)
} else {
a >>= b
}
return a
}
function D(a) {
a = a % 0x80000000;
if (a & 0x40000000 == 0x40000000) {
a -= 0x40000000;
a *= 2;
a += 0x80000000
} else {
a *= 2
}
return a
}
function Y(a, b) {
a = Z(a);
b = Z(b);
for (var i = 0; i < b; i++) {
a = D(a)
}
return a
}
function V(a, b) {
a = Z(a);
b = Z(b);
var c = (a - 0x80000000);
var d = (b - 0x80000000);
if (c >= 0) {
if (d >= 0) {
return ((c & d) + 0x80000000)
} else {
return (c & b)
}
} else if (d >= 0) {
return (a & d)
} else {
return (a & b)
}
}
function M(a, b) {
a = Z(a);
b = Z(b);
var c = (a - 0x80000000);
var d = (b - 0x80000000);
if (c >= 0) {
if (d >= 0) {
return ((c | d) + 0x80000000)
} else {
return ((c | b) + 0x80000000)
}
} else if (d >= 0) {
return ((a | d) + 0x80000000)
} else {
return (a | b)
}
}
function U(a, b) {
a = Z(a);
b = Z(b);
var c = (a - 0x80000000);
var d = (b - 0x80000000);
if (c >= 0) {
if (d >= 0) {
return (c ^ d)
} else {
return ((c ^ b) + 0x80000000)
}
} else if (d >= 0) {
return ((a ^ d) + 0x80000000)
} else {
return (a ^ b)
}
}
function R(a) {
a = Z(a);
return (0xffffffff - a)
}
var CS = new A(4);
var CX = new A(2);
CX[0] = 0;
CX[1] = 0;
var CB = new A(99);
var BF = new A(16);
var DG = new A(16);
var S11 = 11;
var S12 = 12;
var S13 = 13;
var S14 = 14;
var S21 = 15;
var S22 = 16;
var S23 = 21;
var S24 = 23;
var S31 = 27;
var S32 = 32;
var S33 = 37;
var S34 = 38;
var S41 = 41;
var S42 = 42;
var S43 = 43;
var S44 = 46;
function F(x, y, z) {
return M(V(x, y), V(R(x), z))
}
function G(x, y, z) {
return M(V(x, z), V(y, R(z)))
}
function H(x, y, z) {
return U(U(x, y), z)
}
function I(x, y, z) {
return U(y, M(x, R(z)))
}
function L(a, n) {
return M(Y(a, n), (Q(a, (32 - n))))
}
function FF(a, b, c, d, x, s, r) {
a = a + F(b, c, d) + x + r;
a = L(a, s);
a = a + b;
return a
}
function GG(a, b, c, d, x, s, r) {
a = a + G(b, c, d) + x + r;
a = L(a, s);
a = a + b;
return a
}
function HH(a, b, c, d, x, s, r) {
a = a + H(b, c, d) + x + r;
a = L(a, s);
a = a + b;
return a
}
function II(a, b, c, d, x, s, r) {
a = a + I(b, c, d) + x + r;
a = L(a, s);
a = a + b;
return a
}
function RF(e, f) {
var a = 0,
b = 0,
c = 0,
d = 0;
var x = BF;
a = CS[0];
b = CS[1];
c = CS[2];
d = CS[3];
for (i = 0; i < 16; i++) {
x[i] = V(e[i * 4 + f], 0xff);
for (j = 1; j < 4; j++) {
x[i] += Y(V(e[i * 4 + j + f], 0xff), j * 8)
}
}
a = FF(a, b, c, d, x[0], S11, 0xd76aa478);
d = FF(d, a, b, c, x[1], S12, 0xe8c7b756);
c = FF(c, d, a, b, x[2], S13, 0x242070db);
b = FF(b, c, d, a, x[3], S14, 0xc1bdceee);
a = FF(a, b, c, d, x[4], S11, 0xf57c0faf);
d = FF(d, a, b, c, x[5], S12, 0x4787c62a);
c = FF(c, d, a, b, x[6], S13, 0xa8304613);
b = FF(b, c, d, a, x[7], S14, 0xfd469501);
a = FF(a, b, c, d, x[8], S11, 0x698098d8);
d = FF(d, a, b, c, x[9], S12, 0x8b44f7af);
c = FF(c, d, a, b, x[10], S13, 0xffff5bb1);
b = FF(b, c, d, a, x[11], S14, 0x895cd7be);
a = FF(a, b, c, d, x[12], S11, 0x6b901122);
d = FF(d, a, b, c, x[13], S12, 0xfd987193);
c = FF(c, d, a, b, x[14], S13, 0xa679438e);
b = FF(b, c, d, a, x[15], S14, 0x49b40821);
a = GG(a, b, c, d, x[1], S21, 0xf61e2562);
d = GG(d, a, b, c, x[6], S22, 0xc040b340);
c = GG(c, d, a, b, x[11], S23, 0x265e5a51);
b = GG(b, c, d, a, x[0], S24, 0xe9b6c7aa);
a = GG(a, b, c, d, x[5], S21, 0xd62f105d);
d = GG(d, a, b, c, x[10], S22, 0x2441453);
c = GG(c, d, a, b, x[15], S23, 0xd8a1e681);
b = GG(b, c, d, a, x[4], S24, 0xe7d3fbc8);
a = GG(a, b, c, d, x[9], S21, 0x21e1cde6);
d = GG(d, a, b, c, x[14], S22, 0xc33707d6);
c = GG(c, d, a, b, x[3], S23, 0xf4d50d87);
b = GG(b, c, d, a, x[8], S24, 0x455a14ed);
a = GG(a, b, c, d, x[13], S21, 0xa9e3e905);
d = GG(d, a, b, c, x[2], S22, 0xfcefa3f8);
c = GG(c, d, a, b, x[7], S23, 0x676f02d9);
b = GG(b, c, d, a, x[12], S24, 0x8d2a4c8a);
a = HH(a, b, c, d, x[5], S31, 0xfffa3942);
d = HH(d, a, b, c, x[8], S32, 0x8771f681);
c = HH(c, d, a, b, x[11], S33, 0x6d9d6122);
b = HH(b, c, d, a, x[14], S34, 0xfde5380c);
a = HH(a, b, c, d, x[1], S31, 0xa4beea44);
d = HH(d, a, b, c, x[4], S32, 0x4bdecfa9);
c = HH(c, d, a, b, x[7], S33, 0xf6bb4b60);
b = HH(b, c, d, a, x[10], S34, 0xbebfbc70);
a = HH(a, b, c, d, x[13], S31, 0x289b7ec6);
d = HH(d, a, b, c, x[0], S32, 0xeaa127fa);
c = HH(c, d, a, b, x[3], S33, 0xd4ef3085);
b = HH(b, c, d, a, x[6], S34, 0x4881d05);
a = HH(a, b, c, d, x[9], S31, 0xd9d4d039);
d = HH(d, a, b, c, x[12], S32, 0xe6db99e5);
c = HH(c, d, a, b, x[15], S33, 0x1fa27cf8);
b = HH(b, c, d, a, x[2], S34, 0xc4ac5665);
a = II(a, b, c, d, x[0], S41, 0xf4292244);
d = II(d, a, b, c, x[7], S42, 0x432aff97);
c = II(c, d, a, b, x[14], S43, 0xab9423a7);
b = II(b, c, d, a, x[5], S44, 0xfc93a039);
a = II(a, b, c, d, x[12], S41, 0x655b59c3);
d = II(d, a, b, c, x[3], S42, 0x8f0ccc92);
c = II(c, d, a, b, x[10], S43, 0xffeff47d);
b = II(b, c, d, a, x[1], S44, 0x85845dd1);
a = II(a, b, c, d, x[8], S41, 0x6fa87e4f);
d = II(d, a, b, c, x[15], S42, 0xfe2ce6e0);
c = II(c, d, a, b, x[6], S43, 0xa3014314);
b = II(b, c, d, a, x[13], S44, 0x4e0811a1);
a = II(a, b, c, d, x[4], S41, 0xf7537e82);
d = II(d, a, b, c, x[11], S42, 0xbd3af235);
c = II(c, d, a, b, x[2], S43, 0x2ad7d2bb);
b = II(b, c, d, a, x[9], S44, 0xeb86d391);
CS[0] += a;
CS[1] += b;
CS[2] += c;
CS[3] += d
}
function N() {
CX[0] = CX[1] = 0;
CS[0] = 0x67452301;
CS[1] = 0xefcdab89;
CS[2] = 0x98badcfe;
CS[3] = 0x10325476;
for (i = 0; i < DG.length; i++) DG[i] = 0
}
function K(b) {
var y, i;
y = V(Q(CX[0], 3), 0x3f);
if (CX[0] < 0xffffffff - 7) {
CX[0] += 8
} else {
CX[1]++;
CX[0] -= 0xffffffff + 1;
CX[0] += 8
}
CB[y] = V(b, 0xff);
if (y >= 63) {
RF(CB, 0)
}
}
function J() {
var a = new A(18);
var p;
var i = 0,
y = 0,
l = 0;
for (i = 0; i < 4; i++) {
a[i] = V(Q(CX[0], (i * 8)), 0xff)
}
for (i = 0; i < 4; i++) {
a[i + 4] = V(Q(CX[1], (i * 8)), 0xff)
}
y = V(Q(CX[0], 3), 0x3f);
l = (y < 56) ? (56 - y) : (120 - y);
p = new A(99);
p[0] = 0x80;
for (i = 0; i < l; i++) {
K(p[i])
}
for (i = 0; i < 8; i++) {
K(a[i])
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
DG[i * 4 + j] = V(Q(CS[i], (j * 8)), 0xff)
}
}
}
function W(a) {
var h = hkeys;
var r = "";
for (i = 0; i < 8; i++) {
r = h.charAt(Math.abs(a) % 16) + r;
a = Math.floor(a / 16)
}
return r
}
function P(a) {
var l, s, k, ka, kb, kc, kd;
N();
for (k = 0; k < a.length; k++) {
l = a.charAt(k);
K(ascii.lastIndexOf(l))
}
J();
ka = kb = kc = kd = 0;
for (i = 0; i < 4; i++) ka += Y(DG[15 - i], (i * 8));
for (i = 4; i < 8; i++) kb += Y(DG[15 - i], ((i - 4) * 8));
for (i = 8; i < 12; i++) kc += Y(DG[15 - i], ((i - 8) * 8));
for (i = 12; i < 16; i++) kd += Y(DG[15 - i], ((i - 12) * 8));
s = W(kd) + W(kc) + W(kb) + W(ka);
return s
}
function X(i) {
return hkeys.charAt((i >> 9) & 0x0f) + hkeys.charAt(i & 0x0f)
}
function _hash(a) {
k = '';
s = "";
for (i = 0; i < a.length; i++) {
s += a.charAt(i % a.length)
}
k = P(s + a.length).slice(0, 10);
return k
}
var combinations = []
var hashes = []
var nHashes = []
for (var i = 0; i < letters.length; i++){
for (var j=0; j < letters.length; j++){
combinations.push(letters[i] + letters[j]);
}
}
for (var h = 0; h < combinations.length; h++){
hashes.push(_hash(combinations[h]));
// small bit of reverse engineering -.-
// if(_hash(combinations[h]) == '6161116979'){
// console.log(combinations[h]);
// }
}
for ( var x = 0; x < hashes.length; x++){
for ( var y = 0; y < 10; y++){
nHashes.push(hashes[x].slice(0, y) + 'N' + hashes[x].slice(y, 10));
}
}
var fs = require('fs');
for ( var n = 0; n < nHashes.length; n++){
fs.appendFile("insanity_wordlist", nHashes[n] + '\n', function(err) {
if(err) {
return console.log(err);
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment