PowerShell и ЖЖ: аутентификация challenge-response, ч.3 (практика через интерфейс «XML-RPC»)

Feb 08, 2023 16:36

Ранее в этой серии постов:
...
11. Общение с ЖЖ из PowerShell: простейшая аутентификация, получаю текст поста (интерфейс «flat»), ч.3
12. Общение с ЖЖ из PowerShell: простейшая аутентификация, получаю текст поста (интерфейс «XML-RPC»)
13. PowerShell: преобразование хеш-таблицы в формат XML-RPC
14. PowerShell и ЖЖ: аутентификация challenge-response и регистр букв хеш-суммы, ч.1
15. PowerShell и ЖЖ: аутентификация challenge-response, ч.2 (практика через интерфейс «flat»)

Окружение: операционная система «Windows 10», программа-оболочка «PowerShell» версии 7.

Готовлю нужные функции

function toXML($hashT) {
$xml = ''
$xml += ""
$xml += "LJ.XMLRPC." + $hashT["mode"] + ""
$xml += "

"
foreach ($key in $hashT.Keys) {
if ($key -ne "mode") {
$xml += ""
$xml += "" + $key + ""
$type = ($hashT[$key]).GetType().FullName
if ($type -eq "System.Int32") {$type = "int"} else {$type = "string"}
$xml += "<$type>" + $hashT[$key] + ""
$xml += ""
}
}
$xml += ""
$xml += ""
return $xml
}

function toHashTable1($str) {
$xml = [xml]$str
$arr = $xml.methodResponse.params.param.value.struct.member
$hash = @{}
for ($i = 0; $i -lt $arr.Length; $i++) {
$hash[$arr[$i].name] = $arr[$i].value.FirstChild."#text"
}
return $hash
}

function toHashTable2($str) {
$xml = [xml]$str
$arr = $xml.methodResponse.params.param.value.struct.member
$events = ($arr.where{ $_.name -eq "events" })[0]
$arr = $events.value.array.data.value.struct.member
$hash = @{}
for ($i = 0; $i -lt $arr.Length; $i++) {
$hash[$arr[$i].name] = $arr[$i].value.FirstChild."#text"
}
return $hash
}

function getHash($str, $alg) {
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write($str)
$writer.Flush()
$stringAsStream.Position = 0
(Get-FileHash -InputStream $stringAsStream -Algorithm $alg).Hash.ToLower()
}

Аутентификация «challenge-response», получаю пост журнала по интерфейсу «XML-RPC»

$body = @{
mode = "getchallenge"
}
$body = toXML($body)
$Response = Invoke-WebRequest -URI "https://www.livejournal.com/interface/xmlrpc" -Body $body -Method "POST"
$params = toHashTable1($Response.Content)
$hPass = getHash "пароль" "MD5"
$hResp = getHash ($params["challenge"] + $hPass) "MD5"
$body = @{
mode = "getevents"
username = "vbgtut"
auth_method = "challenge"
auth_challenge = $params["challenge"]
auth_response = $hResp
selecttype = "one"
itemid = 148
ver = 1
}
$body = toXML($body)
$Response = Invoke-WebRequest -URI "https://www.livejournal.com/interface/xmlrpc" -Body $body -Method "POST"
$params = toHashTable2($Response.Content)
$params["url"]

https://vbgtut.livejournal.com/37952.html

В этом посте - только код, все пояснения уже даны в предыдущих постах.

Инструмент, Образование, Сайтостроение, Программирование, ЖЖ

Previous post Next post
Up