Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   нужна помощь по кодированию строки (http://forum.oszone.net/showthread.php?t=150234)

BrAWo 11-09-2009 08:42 1216317

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

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

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

Creat0R 11-09-2009 09:28 1216353

Другими словами, нужно перекодировать строку в 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


BrAWo 11-09-2009 09:57 1216374

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

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

Creat0R 11-09-2009 15:37 1216600

Цитата:

Цитата 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()), либо я что-то накосячил при переводе кода, либо нужен другой алгоритм/метод.

BrAWo 11-09-2009 19:39 1216794

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

beve 11-09-2009 20:24 1216824

Цитата:

Цитата BrAWo
вопрос: как писать в реестр уже шифрованное значение? »

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

kaster 11-09-2009 23:47 1216927

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

beve 11-09-2009 23:58 1216935

Цитата:

Цитата kaster
ты про декодирование без ключа? »

Ему ж нужно не декодирование, а как раз наоборот. Я дал только идею, которой цена - пол копейки :) ...

BrAWo 12-09-2009 18:35 1217364

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

Vorona 05-12-2009 20:53 1287619

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

kaster 05-12-2009 21:06 1287626

Vorona, а какой именно код ты брал за основу? если тот, что в ссылке в шапке указан, то разраб изменил способ кодирования. да и переделали уже сразу же. Пост №4

Vorona 06-12-2009 18:00 1287946

http://forum.jrudevels.org/viewtopic...c305301cb#4378 вот эта функция, всё работает на ура, могу поделиться дллкой, чтобы не заморачиваться

Кстати, за что отдельное спасибо тов. Lion'у :)

Да и еще, насчёт переделали, что переделывали там, я не знаю, на на версии программы 0.0.8.125 (от 22.06.2009) всё работает отлично. Могу даже заделиться шойтан-программой, которая при установке в логон-скрипт (в АД) будет проверять наличие определённого ключа реестра и при его отсутствии запрашивать логин и пароль у юзера и производить авто - установку и настройу программы

kaster 06-12-2009 18:44 1287988

Цитата:

Цитата Vorona
вот эта функция »

тот код, что ты говоришь переделали сразу же, в том посте в котором я уже указывал (Пост 4)

Vorona 06-12-2009 18:46 1287993

Ну тот переделанный код в 4-м посте отличный от моего, по крайней мере мой работает :)
а ключи от логина 4235, а от пароля 2336

Подобрано брутфорсом :)


Время: 23:25.

Время: 23:25.
© OSzone.net 2001-