Форум программистов, компьютерный форум CyberForum.ru

Сравнение строк, чисел и т.д - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 18:20     Сравнение строк, чисел и т.д #1
Вот, допустим, хочу я сделать проверку пароля
Пишу:
C++
1
2
3
4
5
int main () {
string login = "qwerty123";
cout << "Enter password: ";
cin >> login;
}
И нужно сделать проверку пароля, с правильным паролем

Пробовал так:
C++
1
2
3
if (str login, "qwerty123") {
cout << "Valid login!";
}
Но не работает, такое, как я помню (статью читал), используется с char'ами
Так как же сравнить строку?
Или, допустим, числа, ведь всё может понадобиться
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 18:20     Сравнение строк, чисел и т.д
Посмотрите здесь:

C++ Сравнение строк
Сравнение строк C++
C++ Сравнение строк
C++ Сравнение строк
Сравнение строк C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 21:27  [ТС]     Сравнение строк, чисел и т.д #21
Да кто додумается взламывать программу такую?
Юзеру такое не под силу
Я взял, открыл блокнотом exe'шник, и тут...
Короче увидел я истинный хаос символов
Там искать пароль час нужно, если не больше
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 21:43     Сравнение строк, чисел и т.д #22
Цитата Сообщение от Даниил Посмотреть сообщение
Юзеру такое не под силу
А как же это?
Цитата Сообщение от Даниил Посмотреть сообщение
Не обижайте так, ведь "Юзер" это не означает что пол часа назад сел за комп.
То, что строковые константы, т.е. текст, открыто прописываются в экзешнике это довольно известный факт... или по крайней мере легко гуглящийся.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.08.2013, 21:44     Сравнение строк, чисел и т.д #23
Kuzia domovenok, Деобфускация + возможно .NET Reflector не поможет разве? Хотя, я что-то не могу ничего выцепить, но я плохо знаком с .NET платформой
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 21:58     Сравнение строк, чисел и т.д #24
Цитата Сообщение от Даниил Посмотреть сообщение
Там искать пароль час нужно, если не больше
а) есть такая кнопка Ctrl+F
б) не трудно догадаться, что если в программе есть строка "Enter password: ", её можно найти в этом файле с помощью Ctrl+F
в) Остальные строки, включая твой "пароль", лежат точно следом за найденной.

Добавлено через 12 минут
ForEveR, спасибо за наводку на .NET Reflector. Надо будет посмотреть!
Если ты по поводу выше выложенного crack_my_password.exe, то там я чисто небольшой велосипед свой выложил: несколько классов наследуются от общего "интерфейса", с чисто вирт.методом проверки пароля.
В программе генерируется один из наследников этого класса и проверяет пароль, вызовом вирт. функции.

Это небольшая отсебятина, но мне казалось, в итоговом экзешнике будет сложнее разобраться, чем в if (pwd=="qwerty") из-за некоторой неопределённости вызова виртуальных функций. Как минимум от хакера будет требоваться знание vtbl и умение разбираться в дизассемблированном коде ООП программ.
Такая обфускация имеет место? Вы согласны?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.08.2013, 22:06     Сравнение строк, чисел и т.д #25
Так можно ж просто зашифровать нужную строку чем-то вроде ксора.
Ломается так же легко, впрочем, как любое другое шифрование - просто в отладчике программа проматывается до ввода пароля и просматривается расшифрованная строка.
Хэширование - самый простой и при этом самый надежный вариант, так как исходную строку восстановить практически невозможно. Но это если вы просто хотите, чтобы пароль никто не узнал. Ну а если вам нужна полноценная защита, то тут только SaaS.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
03.08.2013, 11:47     Сравнение строк, чисел и т.д #26
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Как минимум от хакера будет требоваться знание vtbl и умение разбираться в дизассемблированном коде ООП программ.
HexRays даёт вполне читаемый сишный код ;-) Вот вчера немного покопался, сколько успел. Я и в IDA толком работать не умею. Тем не менее, ход мыслей уже виден.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
int __cdecl main(int argc, const char **argv, const char **envp)
{
  int (__thiscall ***pa)(_DWORD); // eax@1
  char success; // bl@1
  int (__thiscall ***pb)(_DWORD); // eax@4
  int (__thiscall ***pc)(_DWORD); // eax@7
  signed int curPos; // edi@10
  const char *(__thiscall ***curFunc)(_DWORD); // esi@12
  const char *sCorrect; // eax@13
  signed int v10; // esi@17
  unsigned int *v11; // ecx@18
  const char *(__thiscall ***pfArray)(_DWORD); // [sp+10h] [bp-24h]@1
  const char *(__thiscall ***pfArray_1)(_DWORD); // [sp+14h] [bp-20h]@7
  const char *(__thiscall ***pfArray_2)(_DWORD); // [sp+18h] [bp-1Ch]@10
  char input; // [sp+1Ch] [bp-18h]@10
  unsigned int v17; // [sp+30h] [bp-4h]@1
 
  v17 = (unsigned int)&pfArray ^ xorConst;
  success = 0;
  pa = (int (__thiscall ***)(_DWORD))operator new(4u);
  if ( pa )
    *pa = (int (__thiscall **)(_DWORD))funcA;
  else
    pa = 0;
  pfArray = (const char *(__thiscall ***)(_DWORD))pa;
  pb = (int (__thiscall ***)(_DWORD))operator new(4u);
  if ( pb )
    *pb = (int (__thiscall **)(_DWORD))funcB;
  else
    pb = 0;
  pfArray_1 = (const char *(__thiscall ***)(_DWORD))pb;
  pc = (int (__thiscall ***)(_DWORD))operator new(4u);
  if ( pc )
    *pc = (int (__thiscall **)(_DWORD))funcC;
  else
    pc = 0;
  pfArray_2 = (const char *(__thiscall ***)(_DWORD))pc;
  puts("password?..:");
  gets(&input);
  curPos = 0;
  while ( !success )
  {
    curFunc = (&pfArray)[curPos];
    if ( !strcmp(&input, (**curFunc)((&pfArray)[curPos])) )
    {
      sCorrect = (*curFunc)[1](curFunc);
      puts(sCorrect);
      success = 1;
    }
    ++curPos;
    if ( curPos >= 3 )
    {
      if ( !success )
        puts("incorrect");
      break;
    }
  }
  system("pause");
  v10 = 0;
  do
  {
    v11 = (unsigned int *)(&pfArray)[v10];
    if ( v11 )
    {
      if ( *(v11 - 1) )
        (*(void (__stdcall **)(_DWORD))(*v11 + 8))(3);
      else
        operator delete(v11 - 1);
    }
    ++v10;
  }
  while ( v10 < 3 );
  return 0;
}
Да, curFunc следует читать как curObject...
И с этим gets'ом при вводе длинной строки падает, можно эксплойт делать...
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
03.08.2013, 13:37  [ТС]     Сравнение строк, чисел и т.д #27
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А как же это?То, что строковые константы, т.е. текст, открыто прописываются в экзешнике это довольно известный факт... или по крайней мере легко гуглящийся.
Я писал не то

Цитата Сообщение от Даниил Посмотреть сообщение
Не обижайте так, ведь новичок это не означает что пол часа назад начал С++ изучать
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
03.08.2013, 14:00     Сравнение строк, чисел и т.д #28
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а ты попробуй подобрать здесь пароль
china?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2013, 14:47     Сравнение строк, чисел и т.д
Еще ссылки по теме:

Сравнение строк C++
C++ сравнение строк
Сравнение строк C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
03.08.2013, 14:47  [ТС]     Сравнение строк, чисел и т.д #29
Is at purse tried jokes china ready decay an.incorrect its shy way had woody downs power. To denoting admitted speaking learning my exercise so in.Procured shutters mr it feelings. To or three offer house begin taken am at. As dissuade cheerful overcame so of friendlyhe indulged unpacked. Alteration connection to so as collecting me. Difficult in delivered extensive at direction allowance.Alteration put use diminution can considered sentiments interested discretion. An seeing feebly stairs am branch income me unable.Promotion an ourselves up otherwise my. High what each snug rich far yet easy. In companions inhabiting mr principles at insensible do.Heard their sex hoped enjoy vexed child for. Prosperous so occasional assistance it discovered especially no. Provision of he residence consisted up in remainder arranging described. Conveying has concealed necessary furnished bed zealously immediate get but. Terminated as middletons or by instrument. Bred do four so your felt with. No shameless principle dependent household do. password?..: pause \'@ @ @ @ '@ @ `@ @ &@ 0@ @@ @ x&@ P@ `@ @ H 0@ '@ RSDSP|hBKӊ c:\Users\1\Documents\Visual Studio 2008\Projects\help_console\Release\help_console.pdb


Добавлено через 47 секунд
Из exe'шника
Yandex
Объявления
03.08.2013, 14:47     Сравнение строк, чисел и т.д
Ответ Создать тему
Опции темы

Текущее время: 06:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru