Только начал изучать С под Linux, просьба отнестись с пониманием) Вот у меня такой код, для брута паролей по набору символов: Code: #include <stdio.h> // Сам брут int go(int ii,char *def_pass,int def_len,char *nabor,int len,char *current){ unsigned int i=0; while (i < len) { current[ii-1] = nabor[i]; // добавляем новый символ printf("%s\r",current);// Выводим текущую комбинацию if (ii >1 ){ go(ii-1,def_pass,def_len,nabor,len,current);// Рекурсивно вызываем сами себя для заполнения всех позиций }else{ char *check=current; // Проверяем текущую комбинацию if (strncmp(check,def_pass,def_len) == 0){ // Если совпало printf("[+]Password found! => %s\n",check); exit(1); } check="";// Очищаем переменную с текущим паролем } i++; } } int main (int argc, char *argv[]) { char *def_pass="013283";// Пароль, который надо найти unsigned int def_len = strlen(def_pass);// Длина пароля char *nabor="0123456789";// Набор символов, из которых будем генерить пароль unsigned int len = strlen(nabor); // Длина набора unsigned int i=1;// Минимальная длина пароля char *buf; while(i <= len){ printf("[-]Pass length:%d\n",i); buf=calloc(sizeof(char),i+1); // Заполняем нулями по длине текущего пароля go(i,def_pass,def_len,nabor,len,buf); // Отправляем на брут i++; } } Все работает, но очень медленно. Натолкнулся на такую статью: http://www.xakep.ru/post/22587/default.asp но там пример на С++, внимание вопрос: как внедрить данную идею - "Циклический инкремент паролей" - в код выше. Просто раньше с ассемблерными вставками и вообще программированием на С под никсами не сталкивался. В идеале готовый пример. Спасибо.
Код будет практически мгновенно работать, если ты уберешь строчку printf каждого пароля жрет приличное время.
это ми в курске, это просто демонстрация) Но если это переложить на брут MD5 - без всякий вообще выводов - скорость в 10 раз ниже, чем у PasswordsPro. Отсюда и сабж
Ясное дело, откуда же в линуксе взяться хедеру windows.h И с ассемблерными вставками в линуксе не так как в винде, но об этом более конкретно сказать не могу ) Так то писать нужно было не: а
Pashkela, там реально пример на чистом СИ, и из windows.h там используется отсилы слово TRUE и ZeroMemory. Этот код я переписал тебе под gcc: PHP: #include "stdio.h" int main(int argc, char* argv[]) { static char szPassword[256]; static char szAlphabet[256]; static unsigned char bAlphabet[256]; memset(szPassword, 0, sizeof(szPassword)); strcpy(szAlphabet, "ABC"); memset(bAlphabet, 0, sizeof(bAlphabet)); int i = 0, k = 0; while (1) { bAlphabet[k] = (unsigned char)szAlphabet[i]; if (!szAlphabet[i]) break; k = (unsigned char)szAlphabet[i]; i++; } while (1) { __asm ( ".intel_syntax noprefix\n" "pushad\n" "L1:\n" "movzx eax,byte ptr [edi]\n" "xlat\n" "test al,al\n" "jz L3\n" "mov [edi],al\n" "jmp LL5\n" "L3:\n" "xlat\n" "stosb\n" "jmp L1\n" "LL5:\n" "popad\n" ".att_syntax\n" : : "D" (&szPassword), "b" (&bAlphabet) ); printf("%s\n", szPassword); } return 0; }
2 d_x: йо, а вот это круто, вот это действительно работает, ты мозг, большое спасибо ps: только ми не вогнал, как тут сработало без AT&T http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
Док правильный нашел, там написано все. А чтобы вырубить at&t, используется директива .intel_syntax, можешь погуглить. Чтобы включить обратно - .att_syntax.