PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitte compilieren



kingweed
27.04.2009, 09:06
Tach,

kann mir bitte jemand folgendes compilieren und irgendwo hochladen?



/* This program is public domain. Share and enjoy.
*
* Example:
* $ gcc -O2 -fomit-frame-pointer mysqlfast.c -o mysqlfast
* $ mysqlfast 6294b50f67eda209
* Hash: 6294b50f67eda209
* Trying length 3
* Trying length 4
* Found pass: barf
*
* The MySQL password hash function could be strengthened considerably
* by:
* - making two passes over the password
* - using a bitwise rotate instead of a left shift
* - causing more arithmetic overflows
*/

#include <stdio.h>

typedef unsigned long u32;

/* Allowable characters in password; 33-126 is printable ascii */
#define MIN_CHAR 33
#define MAX_CHAR 126

/* Maximum length of password */
#define MAX_LEN 12

#define MASK 0x7fffffffL

int crack0(int stop, u32 targ1, u32 targ2, int *pass_ary)
{
int i, c;
u32 d, e, sum, step, diff, div, xor1, xor2, state1, state2;
u32 newstate1, newstate2, newstate3;
u32 state1_ary[MAX_LEN-2], state2_ary[MAX_LEN-2];
u32 xor_ary[MAX_LEN-3], step_ary[MAX_LEN-3];
i = -1;
sum = 7;
state1_ary[0] = 1345345333L;
state2_ary[0] = 0x12345671L;

while (1) {
while (i < stop) {
i++;
pass_ary = MIN_CHAR;
step_ary = (state1_ary & 0x3f) + sum;
xor_ary = step_ary*MIN_CHAR + (state1_ary << 8);
sum += MIN_CHAR;
state1_ary = state1_ary ^ xor_ary;
state2_ary = state2_ary
+ ((state2_ary << 8) ^ state1_ary);
}

state1 = state1_ary;
state2 = state2_ary;
step = (state1 & 0x3f) + sum;
xor1 = step*MIN_CHAR + (state1 << 8);
xor2 = (state2 << 8) ^ state1;

for (c = MIN_CHAR; c <= MAX_CHAR; c++, xor1 += step) {
newstate2 = state2 + (xor1 ^ xor2);
newstate1 = state1 ^ xor1;

newstate3 = (targ2 - newstate2) ^ (newstate2 << 8);
div = (newstate1 & 0x3f) + sum + c;
diff = ((newstate3 ^ newstate1) - (newstate1 << 8)) & MASK;
if (diff % div != 0) continue;
d = diff / div;
if (d < MIN_CHAR || d > MAX_CHAR) continue;

div = (newstate3 & 0x3f) + sum + c + d;
diff = ((targ1 ^ newstate3) - (newstate3 << 8)) & MASK;
if (diff % div != 0) continue;
e = diff / div;
if (e < MIN_CHAR || e > MAX_CHAR) continue;

pass_ary = c;
pass_ary = d;
pass_ary = e;
return 1;
}

while (i >= 0 && pass_ary >= MAX_CHAR) {
sum -= MAX_CHAR;
i--;
}
if (i < 0) break;
pass_ary++;
xor_ary[I] += step_ary[I];
sum++;
state1_ary[i+1] = state1_ary[I] ^ xor_ary[I];
state2_ary[i+1] = state2_ary[I]
+ ((state2_ary[I] << 8) ^ state1_ary[i+1]);
}

return 0;
}

void crack(char *hash)
{
int i, len;
u32 targ1, targ2, targ3;
int pass[MAX_LEN];

if ( sscanf(hash, "%8lx%lx", &targ1, &targ2) != 2 ) {
printf("Invalid password hash: %s\n", hash);
return;
}
printf("Hash: %08lx%08lx\n", targ1, targ2);
targ3 = targ2 - targ1;
targ3 = targ2 - ((targ3 << 8) ^ targ1);
targ3 = targ2 - ((targ3 << 8) ^ targ1);
targ3 = targ2 - ((targ3 << 8) ^ targ1);

for (len = 3; len <= MAX_LEN; len++) {
printf("Trying length %d\n", len);
if ( crack0(len-4, targ1, targ3, pass) ) {
printf("Found pass: ");
for (i = 0; i < len; i++)
putchar(pass[I]);
putchar('\n');
break;
}
}
if (len > MAX_LEN)
printf("Pass not found\n");
}

int main(int argc, char *argv[])
{
int i;
if (argc <= 1)
printf("usage: %s hash\n", argv[0]);
for (i = 1; i < argc; i++)
crack(argv[I]);
return 0;
}

hpoc
27.04.2009, 09:51
Man könnte sich jetzt einen Spass erlauben und den Source kompilieren mit einer "reverse shell" und seinen Spass haben.
Fazit: Wenn du nicht in der Lage bist, einen Source selbst zu kompilieren, solltest du es lassen.
(Nein, ich hab mir weder den Source genau angeschaut noch werde ich es kompilieren).

kingweed
27.04.2009, 09:52
Dann hättest du dir deinen Kommentar auch sparen können!

hpoc
27.04.2009, 09:59
Nein, definitiv nicht!

noctem
27.04.2009, 11:11
$ gcc -O2 -fomit-frame-pointer mysqlfast.c -o mysqlfast
Da steht doch wie es geht. Wo liegt das Problem?

gulp
27.04.2009, 11:57
Also ich bekomme beim compilieren folgende Fehler:

http://img26.imageshack.us/img26/9239/sshot6h.png

kingweed
27.04.2009, 11:59
Mit geht es mit Dev-C++ genauso.
Hab die exe aber mittlerweile auf meinem Rechner gefunden. Hatte ich mir von einem Kollegen bereits einmal compilieren lassen.
Und "gcc" is kacke. Muss aus den Daten ja erstmal was basteln, damit es auf Windows läuft.

hpoc
27.04.2009, 12:40
Was bitte ist an "gcc" nicht gut?

noctem
27.04.2009, 13:45
Mit geht es mit Dev-C++ genauso.
[...]
Und "gcc" is kacke. Muss aus den Daten ja erstmal was basteln, damit es auf Windows läuft.
:eek::p

Also ich finde gcc super. :rolleyes:
Was soll man denn da für Windows basteln müssen?

Und Dev-C++ nutzt MinGW, sprich den gcc port auf Windowsplatformen.
Wenn gcc also so schlecht ist, dann darfst du auch kein Dev-C++ verwenden. :p

~noctem

blackberry
27.04.2009, 13:46
@kingweed Wenn GCC "kacke" ist, dann solltest du dich fragen wieso du Dev-C++ als IDE benutzt, da dieses MinGW32 als Compilersystem benutzt (welches, kurz gesagt, die Windows-Version von GCC darstellt).

@hpoc "einen Spaß erlauben" könnte man auch wie folgt:
- die Datei als ELF-Binary compileren
- ihm dem Objektcode aushändigen (es wurde ja nicht nach linken gefragt) ;)


mfG. BlackBerry

EDIT: noctem denkt das gleiche <3

hpoc
27.04.2009, 23:33
Das ist natürlich auch eine möglichkeit. Wobei ich da meine toller finde,
einfach aus dem Grund um den Leuten zu zeigen dass sie nicht jedem trauen sollen.