ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
Циклический инкремент паролей |

19.05.2010, 18:19
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Циклический инкремент паролей
Только начал изучать С под Linux, просьба отнестись с пониманием)
Вот у меня такой код, для брута паролей по набору символов:
Код:
#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
но там пример на С++, внимание вопрос:
как внедрить данную идею - "Циклический инкремент паролей" - в код выше. Просто раньше с ассемблерными вставками и вообще программированием на С под никсами не сталкивался. В идеале готовый пример. Спасибо.
|
|
|

19.05.2010, 22:22
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Код будет практически мгновенно работать, если ты уберешь строчку
printf("%s\r",current);// Выводим текущую комбинацию
printf каждого пароля жрет приличное время.
|
|
|

19.05.2010, 23:15
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
это ми в курске, это просто демонстрация) Но если это переложить на брут MD5 - без всякий вообще выводов - скорость в 10 раз ниже, чем у PasswordsPro. Отсюда и сабж
|
|
|

19.05.2010, 23:25
|
|
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
Провел на форуме: 2083691
Репутация:
330
|
|
То что они назвали си плюс плюс-ом на самом деле чистый С.
|
|
|

19.05.2010, 23:58
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
пробовал. Не комплится чото "тот чистый си". Мильон ошибок
|
|
|

20.05.2010, 00:13
|
|
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
Провел на форуме: 2083691
Репутация:
330
|
|
Ясное дело, откуда же в линуксе взяться хедеру windows.h
И с ассемблерными вставками в линуксе не так как в винде, но об этом более конкретно сказать не могу )
Так то писать нужно было не:
а
нo там пример под Windows

|
|
|

20.05.2010, 00:16
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
спасибо за ценную информацию
|
|
|

20.05.2010, 00:52
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
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;
}
|
|
|

20.05.2010, 01:00
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
2 d_x:
йо, а вот это круто, вот это действительно работает, ты мозг, большое спасибо
ps: только ми не вогнал, как тут сработало без AT&T
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
|
|
|

20.05.2010, 01:03
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Док правильный нашел, там написано все. А чтобы вырубить at&t, используется директива .intel_syntax, можешь погуглить. Чтобы включить обратно - .att_syntax.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|