Что нового

[Криптография] Хранение пароля в скомпилированном скрипте

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ааа,полезная штука,в сообщении AZJIO я так понял она уже существует? И где её достать можно если существует?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Viktor1703 [?]
Чем?

в сообщении AZJIO я так понял она уже существует?
Имелось ввиду известное декомпилирование (которое обсуждать тут нельзя), и обратно компилирование, поставляемым вместе с AutoIt инструментом (Au3ToExe).

P.S
Мне кажется, что ты взялся делать то, что привышает намного твой уровень знания AutoIt в частности, и программирование в целом.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
А ясно,да нет,ничего такого я делать не собираюсь (если только свой личный компилятор :smile: ),я пытаюсь сделать пример для данной темы, и если кому понадобится то может модифицировать как хочет,просто если этого не сделать, то тема защиты приложения (хотя бы на 70%) ни когда не решится, только если всем станет это безразлично, в чём я очень сомневаюсь. :smile:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
А так?
По принципу передачи командной строки - Первый-Второй-Первый
Первый - AutoIt
Второй - нативный EXE (другой ЯП).
Первый передает командную строку Второму.
Второй, получив командную строку, вставил недостающий элемент (пароль),
выполнил команду и возвратил результат Первому (Ложь или Истина).
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Во первых - я не знаю другого языка,во вторых - у меня терпения не хватит делать таким способом программу которая после компиляции весит 8Mb и в третьих - могут и AutoIt'овский exe декомпилировать,и тот который с ним общается. :smile: Ещё есть вопрос по поводу ресурсов,если это можно сделать то .... возможно как нибудь скрыть используемые скриптом ресурсы?
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Тот, который с ним общается - декомпилировть не смогут. Только - дизассемблироаать.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Ну и пусть, если смогут дизассемблировать.
Кто знает ASM, тому и флаг в руки.
Это фигня по сравнению с декомпилированием!
Просто еще спрошу: Вы понимаете разницу между
декомпилированием и дезассемблированием?
Ваша задача?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Нет,я же написал в предыдущем сообщении что не знаю другого языка значит и как там всё делается, я просто хочу написать какую либо защиту, для этого мне нужна помощь, на другие языки мне *** (всё равно), я пользуюсь автоитом и он мне нравится,и хочется его защитить (не стандартными способами) ;) вот пока первое на сегодняшний день что меня волнует больше всего... :smile:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Пиши.
Это (в данном случае - твоем случае) - не возможно.
Пусть - ты придумал супер алгоритм шифрования пароля,
супер алгоритм получения пароля из чего-то. Но!!!!!!!!!
Это все в AutoIt !!!
Пишешь код в AutoIt.
И, доходишь до строки с командой, где надо вставить пароль!!!!!!!!!!
И, ты, вставишь значение переменной (пароль), хоть он (пароль) до этого
100500 раз генерировался по супералгоритму! Типа $Var1 (переменная, содержащая пароль)
А, мне, не интересно будет как там это пароль 100500 генерировался, мне интереснее будет - его значение получить, а именно, в данном случае - значение переменной $Var1 - MsgBox(64, ii, $Var1)
Так что др. ЯП учи.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Другой ЯП не выход! , всё тоже самое можно проделать с любым языком программирования,учить другой ЯП - значин на 60% перейти на него - там же больше возможностей,зачем тогда на AutoIt'е писать...
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
значит на 60% перейти на него - там же больше возможностей,зачем тогда на AutoIt'е писать...
Пиши на AutoIt. Ни в коем случае, я не предлагал тебе именно перейти
на др. ЯП, а - знать его (др. ЯП, и, при необходимости применять) надо.
Ладно. Вот тебе пример. Ты заменишь AutoIt на Sign Of Misery ?
Хотя, с помощью SoM (как вспомогательного инструмента) - реально решить твою задачу.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Viktor1703
Yuriy но дезассемблировать то можно!
А мы тут декомпиляцию обсуждаем.
Дизассемблинг - в расчет не берем (это друга тема, хотя не менее интересная)
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Работает Random'но но очень долго, для теста скомпилируйте и запустите!
Может быстрее будет на _Crypt_HashData() ? просто _StringEncrypt() сома по себе
медленная функция.

Код:
#include <String.au3>

;MsgBox(0,'',Execute("4/@Compiled&(@ScriptLineNumber*-(Round(Random(100,400))&@ScriptLineNumber*-5))"))

;FileWrite("23.txt",_StringEncrypt(1,"password","41665"))

While 1
	$sData = "C972FE3C0F896A3784CD101E40BB6307"
	$Passw = Execute("4/@Compiled&(@ScriptLineNumber*-(Round(Random(100,400))&@ScriptLineNumber*-5))")
	$Encrypt = _StringEncrypt(0,$sData,$Passw)
	If _StringEncrypt(1,$Encrypt,$Passw) = $sData Then
		MsgBox(0,'',$Encrypt) 
		Exitloop
	EndIf	
Wend

А это с выводом не правильного значения

Код:
#include <String.au3>

;MsgBox(0,'',Execute("4/@Compiled&(@ScriptLineNumber*-(Round(Random(100,400))&@ScriptLineNumber*-5))"))

;FileWrite("23.txt",_StringEncrypt(1,"password","41665"))

While 1
	$sData = "C972FE3C0F896A3784CD101E40BB6307"
	$Passw = Execute("4/@Compiled&(@ScriptLineNumber*-(Round(Random(100,400))&@ScriptLineNumber*-5))")
	$Encrypt = _StringEncrypt(0,$sData,$Passw)
	If _StringEncrypt(1,$Encrypt,$Passw) = $sData Then
		Execute(BinaryToString("0x41737369676E2827456E6372797074272C20526F756E642852616E646F6D2833303938372C3936373434292929"))
		MsgBox(0,'',$Encrypt) ; настоящий пароль 41665
		Exitloop
	EndIf	
Wend
 

sss

Продвинутый
Сообщения
332
Репутация
96
Попробовал так, как говорил Yuriy - с другим ЯП. Тем более, 2 дн назад начал изучать C++ :smile: .
Сделал, получается хорошо, кроме двух минусов - работаю через StdInOut и часть пароля жестко вшит в exe = для каждого пароля свой exe. Консольная программа на C++ весит 19 Кб - вроде не много, хотя думаю можно и меньше :smile: . Пароль, зашитый в скрипте - 123456789. А настоящий - jj123456789123456789123456789asd :smile:
Привожу исходники и exe-шники.
Код:
#include <Constants.au3>

$pass='123456789'

if @Compiled=1 then
FileInstall('cpp.exe','cpp.exe')
Local $foo = Run("cpp.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
StdinWrite($foo, $pass & @CRLF & @CRLF)
StdinWrite($foo)

Local $data
While True
    $data &= StdoutRead($foo)
    If @error Then ExitLoop
    Sleep(25)
WEnd

If ProcessExists('cpp.exe')=1 then ProcessClose('cpp.exe')
FileDelete('cpp.exe')
MsgBox(0, "Пароль - ", $data)
EndIf
Код:
#pragma hdrstop

#include <tchar.h>
//---------------------------------------------------------------------------

#pragma argsused

#include <iostream.h>

int main(int argc, _TCHAR* argv[])
{
   _TCHAR* a;
   cin>>a;
   cout<<"jj"<<a<<a<<a<<"asd";
   cin.get();
    cin.get();
   return 0;
}
EXE скрипта со встроенным cpp.exe


UPD

Сделал более удачный алгоритм генерации пароля в модуле C++. Пароль, зашитый в скрипте - 169136, а настоящий - 6OTWOQT11.
Код:
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

#include <iostream.h>

using namespace std;

void encrypt (char buf[],int value)
{
   for( int i=0; buf[i] != '\0'; ++i)
    {
      buf[i]=buf[i]+value;
    }
}

void decrypt(char buf[],int value)
{
    for(int i = 0; buf[i] != '\0'; ++ buf)
     {
      buf[i]=buf[i]-value;
     }
}


void main()
{
    char *a = (char*)malloc(100);
    char b,c,d;
    cin>>a;

    int l1,l2,l3;
    if ((sizeof (a)/sizeof(a[0]))>2) l1=1;
    else l1=0;
    b=a[l1];
    if ((sizeof (a)/sizeof(a[0]))>4) l2=3;
    else l2=0;
    c=a[l2];
    if ((sizeof (a)/sizeof(a[0]))>6) l3=5;
    else l3=0;
    d=a[l3];
    encrypt(a,30);
    cout<<b<<a<<c<<d;
    cin.get();
    cin.get();
}
Ссылка - au3, cpp + EXE, все а архиве zip
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Я, честно сказать, подразумевал "Хранение и Использование пароля" в программе.
Смысл в том, что хранящийся в программе пароль, рано или поздно
будет задействован; иначе - смысл тогда его хранить?
Вот момент задействования пароля (подстановка его непосредственно
в коде AutuIt), - прокол.

Примерно так я это представлял:
- передача командной строки другому приложению или DLL
(из AutoitIt передаем, например, команду подключения к Интернет)
- параметр "Пароль", при этом, передаем пустым
- другое приложение, DLL, принимает команду, обрабатывая
(подставляя свое значение "пароль" и возвращает AutoIt-у результат -
успех подключения к Интернет или неудачу)
- AutoIt, получив результат (истина или ложь), работает дальше в зависимости от результата ...
 
Верх