Циклический инкремент паролей

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Pashkela, 19 May 2010.

  1. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Только начал изучать С под 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

    но там пример на С++, внимание вопрос:

    как внедрить данную идею - "Циклический инкремент паролей" - в код выше. Просто раньше с ассемблерными вставками и вообще программированием на С под никсами не сталкивался. В идеале готовый пример. Спасибо.
     
  2. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Код будет практически мгновенно работать, если ты уберешь строчку

    printf каждого пароля жрет приличное время.
     
  3. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    это ми в курске, это просто демонстрация) Но если это переложить на брут MD5 - без всякий вообще выводов - скорость в 10 раз ниже, чем у PasswordsPro. Отсюда и сабж
     
  4. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    То что они назвали си плюс плюс-ом на самом деле чистый С.
     
  5. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    пробовал. Не комплится чото "тот чистый си". Мильон ошибок
     
  6. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Ясное дело, откуда же в линуксе взяться хедеру windows.h :)

    И с ассемблерными вставками в линуксе не так как в винде, но об этом более конкретно сказать не могу )

    Так то писать нужно было не:
    а
    ;)
     
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    спасибо за ценную информацию
     
  8. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Pashkela, там реально пример на чистом СИ, и из windows.h там используется отсилы слово TRUE и ZeroMemory.

    Этот код я переписал тебе под gcc:

    PHP:
    #include "stdio.h" 

    int main(int argccharargv[]) 

      static 
    char szPassword[256];
      static 
    char szAlphabet[256]; 
      static 
    unsigned char bAlphabet[256]; 
      
      
    memset(szPassword0sizeof(szPassword)); 
      
    strcpy(szAlphabet"ABC"); 
      
    memset(bAlphabet0sizeof(bAlphabet)); 

      
    int i 00
      while (
    1
      { 
        
    bAlphabet[k] = (unsigned char)szAlphabet[i]; 
        if (!
    szAlphabet[i]) 
          break; 
          
        
    = (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
    }
     
    4 people like this.
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    2 d_x:

    йо, а вот это круто, вот это действительно работает, ты мозг, большое спасибо

    ps: только ми не вогнал, как тут сработало без AT&T

    http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
     
  10. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Док правильный нашел, там написано все. А чтобы вырубить at&t, используется директива .intel_syntax, можешь погуглить. Чтобы включить обратно - .att_syntax.
     
  11. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Еще раз огромное спасибо, информация просто бесценная, можно применить много где
     
    #11 Pashkela, 20 May 2010
    Last edited: 20 May 2010