Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Даниил
68 / 41 / 7
Регистрация: 14.05.2013
Сообщений: 383
#1

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

02.08.2013, 18:20. Просмотров 1419. Ответов 28
Метки нет (Все метки)

Вот, допустим, хочу я сделать проверку пароля
Пишу:
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'ами
Так как же сравнить строку?
Или, допустим, числа, ведь всё может понадобиться
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение строк, чисел и т.д (C++):

Сравнение строк - C++
нужно сравнить две строки на сходство, но они не обязательно должны быть полностью одинаковы, и потом вывести первую стоку если они ...

Сравнение строк - C++
Здравствуйте. Есть 2 файла содержимое которых нужно сравнить и вывести на экран не совпадающие строки. С считыванием строк вроде...

Сравнение строк - C++
Написать собственную функцию, без использования функций стандартной библиотеки, которая сравнивает две строки, игнорируя количество...

Сравнение 2-х строк S и s - C++
Заданы две строки S и s. Определить, является ли строка s префиксом, суффиксом, и тем, и другим или ни тем, ни другим для S. Строки S и s...

сравнение строк - C++
как сравнить строки на совпадающие? идея такая...есть исходная строка типа char вводим с клавы ещё одну строку и если эти 2 строки...

Сравнение строк - C++
Тупо и банально нужно сравнить строки средствами с++. Гуглил, но не нашел работающих примеров, толи руки из одного места.. Как сравнивать...

28
dima55501
30 / 34 / 6
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 20:05 #16
Kuzia domovenok, в общем я видимо ошибался, когда думал, что пароль там будет написан большими буквами посередине
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
02.08.2013, 20:15 #17
Цитата Сообщение от dima55501 Посмотреть сообщение
в общем я видимо ошибался, когда думал, что пароль там будет написан большими буквами посередине
Однако, он будет в открытом виде, так что если блокнот не подумал, что этот файл в Unicode, то надо просто внимательнее посмотреть.

Добавлено через 1 минуту
Да, строчку эту надо бы где-нибудь в проге использовать, а иначе её после оптимизации может не остаться уже.
0
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,274
Записей в блоге: 1
02.08.2013, 20:56 #18
dima55501, а ты попробуй подобрать здесь пароль
0
Вложения
Тип файла: rar crack_my_password.rar (4.7 Кб, 11 просмотров)
Даниил
68 / 41 / 7
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 21:13  [ТС] #19
Дадите исходник подберём

Добавлено через 5 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
забыл. Новичок не догадается вставить
Не обижайте так, ведь новичок это не означает что пол часа назад начал С++ изучать

Добавлено через 7 минут
Решил так, чтоб особо не заморачиваться

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
// Проверка строк (пароля).cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
 
void valid () {
    cout << "Valid password! =)" << endl;
}
 
int main() {
    string s1 = "qwerty", s2;
    cout << "Enter password: ";
    cin >> s2;
    if (s2 == s1) {
    valid();
    }
    else {
    cout << "Error!No valid password!" << endl;
    }
    getch();
    return 0;
}
0
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,274
Записей в блоге: 1
02.08.2013, 21:23 #20
Цитата Сообщение от Даниил Посмотреть сообщение
Дадите исходник подберём
вполне реально без исходника обойтись.
Цитата Сообщение от Даниил Посмотреть сообщение
Решил так, чтоб особо не заморачиваться
Заморачиваться не стал, но и проблема защиты от взлома не исчезла.
0
Даниил
68 / 41 / 7
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 21:27  [ТС] #21
Да кто додумается взламывать программу такую?
Юзеру такое не под силу
Я взял, открыл блокнотом exe'шник, и тут...
Короче увидел я истинный хаос символов
Там искать пароль час нужно, если не больше
0
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,274
Записей в блоге: 1
02.08.2013, 21:43 #22
Цитата Сообщение от Даниил Посмотреть сообщение
Юзеру такое не под силу
А как же это?
Цитата Сообщение от Даниил Посмотреть сообщение
Не обижайте так, ведь "Юзер" это не означает что пол часа назад сел за комп.
То, что строковые константы, т.е. текст, открыто прописываются в экзешнике это довольно известный факт... или по крайней мере легко гуглящийся.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
02.08.2013, 21:44 #23
Kuzia domovenok, Деобфускация + возможно .NET Reflector не поможет разве? Хотя, я что-то не могу ничего выцепить, но я плохо знаком с .NET платформой
1
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,274
Записей в блоге: 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 и умение разбираться в дизассемблированном коде ООП программ.
Такая обфускация имеет место? Вы согласны?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.08.2013, 22:06 #25
Так можно ж просто зашифровать нужную строку чем-то вроде ксора.
Ломается так же легко, впрочем, как любое другое шифрование - просто в отладчике программа проматывается до ввода пароля и просматривается расшифрованная строка.
Хэширование - самый простой и при этом самый надежный вариант, так как исходную строку восстановить практически невозможно. Но это если вы просто хотите, чтобы пароль никто не узнал. Ну а если вам нужна полноценная защита, то тут только SaaS.
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 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'ом при вводе длинной строки падает, можно эксплойт делать...
1
Даниил
68 / 41 / 7
Регистрация: 14.05.2013
Сообщений: 383
03.08.2013, 13:37  [ТС] #27
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А как же это?То, что строковые константы, т.е. текст, открыто прописываются в экзешнике это довольно известный факт... или по крайней мере легко гуглящийся.
Я писал не то

Цитата Сообщение от Даниил Посмотреть сообщение
Не обижайте так, ведь новичок это не означает что пол часа назад начал С++ изучать
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
03.08.2013, 14:00 #28
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а ты попробуй подобрать здесь пароль
china?
3
Даниил
68 / 41 / 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'шника
0
03.08.2013, 14:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2013, 14:47
Привет! Вот еще темы с ответами:

Сравнение строк - C++
Написал элементарную функцию, проверяющую введённый пользователем текст. Проблема в том, что он в любом случае выдаёт &quot;Ввод не удался....

сравнение строк - C++
Нужно сравнить строки типа стринг, без использования стандартных функций НЕ знаю,как их присвоить, пытаюсь передать функции string11 b...

Сравнение строк - C++
Объясните пожалуйста по какому способу строки сравниваются? А то я сравнивал так и не понял в чем состоит хитрость. Допустим пример...

Сравнение строк - C++
#include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;stdlib.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru