Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » нужна помощь по кодированию строки

Ответить
Настройки темы
нужна помощь по кодированию строки

Новый участник


Сообщения: 13
Благодарности: 4

Профиль | Отправить PM | Цитировать


полная предыстория:
есть такой jabber клиент jajc хочется его развернуть в домене
доменное имя пользователя = имя юзера на jabber сервере
так вот jajc хранит логин/пароль в реестре в шифрованном виде
идея такая - при первом запуске юзером jajc писать в реестр все настройки

вопрос: как писать в реестр уже шифрованное значение?
оговорюсь сразу программист из меня не очень
что удалось выяснить:
строку jajc хранит там в Base 64 вроде как
если поможет то на оф. форуме эта тема поднималась но я если честно не очень понял как сделать

пример строки: admin на выходе получаем cQf4Zvo=

Отправлено: 08:42, 11-09-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Другими словами, нужно перекодировать строку в Base64 и/или обратно?

Вот функции для этого:

Код: Выделить весь код
$sEncode = _Base64Encode("admin")
$sDecode = _Base64Decode($sEncode)

ConsoleWrite("_Base64Encode: " & $sEncode & @CRLF)
ConsoleWrite("_Base64Decode: " & $sDecode & @CRLF)

Func _Base64Decode($Data)
    Local $Opcode = "0xC81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D75014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"

    Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
    DllStructSetData($CodeBuffer, 1, $Opcode)

    Local $Ouput = DllStructCreate("byte[" & BinaryLen($Data) & "]")
    Local $Ret = DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
            "str", $Data, _
            "ptr", DllStructGetPtr($Ouput), _
            "int", 0, _
            "int", 0)

    Return BinaryToString(BinaryMid(DllStructGetData($Ouput, 1), 1, $Ret[0]))
EndFunc

Func _Base64Encode($Data, $LineBreak = 76)
    Local $Opcode = "0x5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A0688470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000"

    Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
    DllStructSetData($CodeBuffer, 1, $Opcode)

    $Data = Binary($Data)
    Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]")
    DllStructSetData($Input, 1, $Data)

    $LineBreak = Floor($LineBreak / 4) * 4
    Local $OputputSize = Ceiling(BinaryLen($Data) * 4 / 3)
    $OputputSize = $OputputSize + Ceiling($OputputSize / $LineBreak) * 2 + 4

    Local $Ouput = DllStructCreate("char[" & $OputputSize & "]")

    DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
            "ptr", DllStructGetPtr($Input), _
            "int", BinaryLen($Data), _
            "ptr", DllStructGetPtr($Ouput), _
            "uint", $LineBreak)

    Return DllStructGetData($Ouput, 1)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 09:28, 11-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 13
Благодарности: 4

Профиль | Отправить PM | Цитировать


здорово
но не то возвращает что нужно
admin
на выходе должно быть
cQf4Zvo=
а получаем
YWRtaW4=

гляньте на оф. форум то что я ссылку давал может что то прояснится почему

Отправлено: 09:57, 11-09-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата BrAWo:
не то возвращает что нужно »
Возвращает перекодированную строку в base64. А вам видимо нужно расшифровать логин полученный из реестра. Алгоритмы шифрования для меня смутная тема, но я вот попробовал перевести функцию Decrypt с дельфи (та что в теме по ссылке):

Код: Выделить весь код
$sDecrypt = Decrypt(_Base64Decode("cQf4Zvo="), 4235)

ConsoleWrite("Decode: " & $sDecrypt & @CRLF)

Func Decrypt($S, $Key)
    Const $c1 = 51472, $c2 = 30759
    $aS = StringSplit($S, "")
    $S = ""

    For $i = 1 To $aS[0]
        $S &= Chr(BitXOR($aS[$i], BitShift($Key, 8)))
        $Key = ($aS[$i] + $Key) * $c1 + $c2
    Next

    $result = $S ;UTF8Decode($X)
    Return $result
EndFunc

Func _Base64Decode($Data)
    Local $Opcode = "0xC81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D75014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"

    Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
    DllStructSetData($CodeBuffer, 1, $Opcode)

    Local $Ouput = DllStructCreate("byte[" & BinaryLen($Data) & "]")
    Local $Ret = DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
            "str", $Data, _
            "ptr", DllStructGetPtr($Ouput), _
            "int", 0, _
            "int", 0)

    Return BinaryToString(BinaryMid(DllStructGetData($Ouput, 1), 1, $Ret[0]))
EndFunc
Но безрезультатно (не уверен на счёт UTF8Decode()), либо я что-то накосячил при переводе кода, либо нужен другой алгоритм/метод.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 15:37, 11-09-2009 | #4


Новый участник


Сообщения: 13
Благодарности: 4

Профиль | Отправить PM | Цитировать


нет нужно наоборот зашифровывать и писать это в реестр
может ключевая фраза там (оф. форум) "Параметр Key для имени - 4235"

Отправлено: 19:39, 11-09-2009 | #5


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата BrAWo:
вопрос: как писать в реестр уже шифрованное значение? »
Очень сложно вычислить алгоритм этого шифрования. Но я предлагаю тебе сделать вот что, напиши скрипт, который будет создавать нового пользователя в jajc на твоем компе и потом из реестра брать зашифрованное значение. Таким образом можеш насоздавать себе сколько заготовок ИМЯ--ЗАШИФРОВАННОЕ ИМЯ, сколько тебе нужно для дела.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 20:24, 11-09-2009 | #6


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


beve, ты про декодирование без ключа? эм... по идее это невозможно
но по той ссыле говорят что ключ известен

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 23:47, 11-09-2009 | #7


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата kaster:
ты про декодирование без ключа? »
Ему ж нужно не декодирование, а как раз наоборот. Я дал только идею, которой цена - пол копейки ...

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 23:58, 11-09-2009 | #8


Новый участник


Сообщения: 13
Благодарности: 4

Профиль | Отправить PM | Цитировать


спасибо всем
списался с разработчиком
он ответил что использует некий свой механизм шифровки и раскрывать его не хочет так что угадывать можно долго
будем думать как по другому сделать

Отправлено: 18:35, 12-09-2009 | #9


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Тема еще актуальна? Я на основе делфёвой функции сделал енкодер/декодер если кому-то это еще нужно - пишите в личку

Отправлено: 20:53, 05-12-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » нужна помощь по кодированию строки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Нужна помощь ponch_31 Мобильные ОС, смартфоны и планшеты 2 12-03-2009 17:36
нужна помощь NiceSindy Хочу все знать 11 01-05-2004 10:16
нужна помощь Garry73 Хочу все знать 1 27-03-2004 16:04
Нужна помощь TVI Microsoft Windows 2000/XP 6 26-04-2003 21:31




 
Переход