- PVSM.RU - https://www.pvsm.ru -

Решаем Open Day CrackMe, таск Pizza

На момент написания статьи (16.12.2017) ридми от ЛК еще не выложили, поэтому я подумал, что можно и свой пока написать. Кому интересно почитать, как работать с il-кодом в powershell и какая у .NET PE структура, прошу под кат.

Часть 1

Скачав архив с заданиями, сначала я стал гуглить, что за расширение ps1, затем, попытался запустить файл pizza.ps1. И… ничего не запустилось. Во-первых, нужно разрешить выполнение скриптов (командлетов) павершеллу, во-вторых, нужно выполнить команду

[Environment]::CurrentDirectory = $PWD

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

Код. Часть 1


 set  6eJ  ([Type]("{0}{2}{1}" -f'Io','Ile','.f') )  ;  $iEslkQ  =  [Type]("{8}{4}{6}{5}{0}{1}{2}{3}{7}" -f 'tI','On','.PsseR','Ial','nT','a','.aUtOm','izeR','MAnagEmE'); $wa0  =  [TyPE]("{0}{2}{3}{1}"-F 'SyStEm','.encodIng','.Tex','T')  ;$XdmceU=  [type]("{3}{0}{2}{1}"-f'eNcO','INg','D','TeXT.')  ;   $768 =[typE]("{0}{1}{2}"-F 'cONV','er','t') ;function CRA`ck-`Me () 
{
    param (
        [Parameter(maNDATORY=${t`RUe})]
        [string]${password}       = $(throw "Please enter password (-password)")
    )
    try
    {
        ${e`Ncx} =   (iTEM vARiaBLe:6eJ  ).ValUe::("{3}{0}{2}{1}"-f 'Lby','ES','T','READAl')."i`NvOkE"("clixml.encr");
    }
    catch
    {
        .("{2}{1}{0}"-f 'st','e-Ho','Writ') 'clixml.encr not found'
        return
    }
    try
    { 
        ${D`ecp} =  $768::("{1}{4}{2}{3}{0}" -f 'g','frO','S','E64sTRIN','mba')."i`NVoKe"(${pa`sS`wo`Rd})
        for (${I} = 0; ${i} -lt ${e`NcX}."LEn`G`Th"; ${i}++)
        {
           ${E`NCX}[${i}] = ${E`Ncx}[${I}] -bxor ${dE`cp}[${i}%4]
           ${D`eCP}[${I}%4] = (${d`ECp}[${I}%4] + 0x10) -band 0xFF
        }
        ${o`Bj} =   $IESLKq::"DEs`ERi`A`LIzE"( (  vaRIable ("W"+"A0")  -ValUE )::"a`sCii"."gets`TriNG"(${e`NCX}));
         ( Gi VariAble:XDmCEu).valUe::"as`CIi"."GEts`T`Ri`Ng"( $768::("{3}{2}{4}{0}{1}" -f 's','trIng','mbAsE','fRO','64')."i`NVoke"(${o`Bj}."C`Md")) | &("{1}{0}{3}{2}"-f 'nvok','I','n','e-Expressio')
    }
    catch
    {
        .("{1}{0}{2}" -f'-Hos','Write','t') 'Incorrect password'
    }
}

.("{2}{1}{0}"-f 'st','e-Ho','Writ') @"
Take a slice!
by Kaspersky Lab
"@

&("{2}{1}{0}"-f 'k-Me','rac','C')

Проверяем, введен ли пароль, если нет, даем ошибку. Если да, читаем файл clixml.encr
Пароль — как минимум 4 символа в Base64
Далее, ксорим первые 4 символа пароля с содержанием файла clixml.encr и выполняем deserialize.
Спустя некоторое время в гугле, узнаем, что clixml начинается с <Objs (нам хватит первых 4х байт, чтобы расшифровать эту часть)

obj = [ord(i) for i in "<Obj"]
with open('clixml.encr', 'rb') as f:
    bytes = f.read()[:4]
password = [obj[i]^bytes[i] for i in range(4)]

Пробуем запустить и вывести содержание расшифрованного текста (добавим

echo (  vaRIable ("W"+"A0")  -ValUE )::"asCii"."getsTriNG"(${eNCX});

после цикла for)
Видим Base64 и разные ключи (cmd, x, a, s, iv)
Декодируем Base64 и переходим к части 2.

Часть 2

Под спойлером часть расшифрованного файла clixml.encr

Код. Часть 2


. ( ([STrIng]$VeRBoSEpReFErEnCe)[1,3]+'X'-JoiN'')([strinG]::joIN( '' ,( (12 , 73,91, 69 , 8 , 21, 8, 104, 0 ,1 , 37 , 34 ,92,90 ,81 ,37 ,34 ,83 , 37 ,34,8 , 8, 8 ,8, 12 ,73 ,91,69 , 8 ,21,8 , 115 , 97 , 103,6 ,110, 65 ,68,77 , 117, 18, 18, 122 ,77 ,73 , 76,105,68 , 68, 106,81 ,92,77,91, 0,10, 73 ,91 , 69 , 6 ,77, 70, 75 ,90 ,10,1,19 ,37 , 34 , 85, 37 ,34 , 75, 73 , 92, 75, 64,37,34, 83,37, 34 , 8 ,8, 8, 8 , 8 ,8 , 8 , 8,127 ,90 ,65, 92, 77 ,5,96 ,71, 91 , 92,8,15 ,73 , 91 ,69 ,6 , 77, 70, 75,90 , 8,70 , 71 , 92 , 8 , 78 ,71 , 93, 70,76, 15, 37 , 34,8,8 ,8, 8, 8, 8 , 8 ,8, 90,77 , 92 , 93 , 90, 70,37 ,34 ,85 ,37, 34,12,69 , 65,8,21,8 , 102, 77 ,95 ,5 ,103 ,74, 66, 77,75,92, 8,122, 77,78,68 , 77 ,75, 92,65 , 71 , 70, 6 ,109, 69 ,65 ,92 , 6 ,108 ,81, 70,73, 69,65,75,101 , 77 , 92 , 64, 71 , 76, 0 ,15 ,107, 64 , 77, 75,67 , 15 , 4,8,115 , 74 , 71, 71 , 68 ,117, 4, 8 , 104, 0 ,115, 106, 81 , 92, 77 ,115, 117,117 ,4 ,8 ,115 ,125, 97 , 70 ,92, 27, 26 ,115, 117, 117,4, 8 ,115 , 125 , 97 , 70 ,92, 27 ,26 ,115, 117 ,117, 1,1 , 37 , 34 ,12, 65,68 , 79, 8,21,8 ,12 ,69,65, 6, 111 ,77, 92 , 97 ,100, 111,77, 70, 77, 90 ,73,92 , 71,90, 0 ,1, 37,34 ,12,74 , 8, 21 , 8,12 , 65 , 68,79, 6, 108 , 77, 75 , 68 , 73, 90 ,77, 100 , 71 , 75, 73,68, 0, 115 ,97,70 , 92,27,26 ,117 ,1, 37 , 34 , 12, 74, 26, 8 , 21 , 8, 12 , 65 ,68,79, 6,108, 77 ,75, 68 ,73, 90, 77 , 100 ,71 ,75 , 73, 68, 0,115 , 74, 71, 71,68, 117, 1, 37, 34 ,12 ,74 ,27,8 , 21 ,8,12 ,65,68,79 ,6 ,108, 77 ,75,68 ,73,90,77 ,100 , 71 , 75,73,68 , 0 , 115 ,74, 71 ,71 , 68 , 117, 1 ,37, 34, 12 , 68, 74, 8 , 21 ,8, 12 , 65,68,79, 6,108,77 ,78 ,65 , 70 , 77 ,100 , 73 ,74 , 77,68 ,0 ,1 ,37, 34 ,12 , 68, 74,26 ,8 , 21, 8,12,65,68 ,79, 6,108, 77, 78 ,65 ,70 , 77 ,100 , 73, 74, 77 , 68 ,0, 1,37,34 , 12, 68,74,27,8 ,21 , 8,12 , 65 , 68,79,6 , 108,77,78 , 65,70 , 77 , 100 , 73 , 74 , 77 ,68 ,0 ,1, 37 ,34 ,12 , 68 ,71,75 ,8, 21,8,12,65 , 68,79 ,6, 108 , 77 ,78 , 65 ,70, 77 , 100 , 73 ,74 ,77 , 68 ,0 , 1,37,34,12 ,77,69,75,8 , 21,8,104 , 0 , 0 , 24, 4 ,15,102, 71 , 88 , 15 ,1,4 , 8 , 0, 24 , 4, 15,100,76, 75 ,119,97 ,28 , 119, 24 ,15, 1 ,4, 8, 0 , 24 ,4 ,15, 123,92, 68 ,71,75 , 119,24 ,15 ,1 ,4,8 ,0 ,24, 4, 15 , 106 , 90 ,119 , 123 ,4,8, 12, 68,74,15 , 1 , 4 , 8, 0,25, 4 ,15 , 12 , 68, 71 , 75,15, 1, 4,8,0, 24 ,4 ,15 , 102 , 71, 88 ,15 , 1,4,8,0 , 24,4,15,100,76 ,73 ,90 ,79 ,119, 25 ,15,1,4, 8 , 0, 24,4 , 15 , 100, 76, 68 ,71,75 , 119, 24 , 15,1,4, 8,0, 24 ,4 , 15 ,100 ,76,77 , 68,77, 69 ,119, 125, 28, 15,1, 4 ,8 ,0,24,4 ,15 , 100, 76, 73,90 , 79,119, 26 ,15 ,1, 4,8 ,0 ,24, 4,15 ,100 , 76 , 68, 71 , 75, 119, 24, 15, 1, 4, 8,0 ,24,4 ,15, 100 ,76,77,68, 77,69 , 119 ,125,28,15, 1 ,4 , 8 ,0,24, 4, 15,100 , 76 , 75,119 , 97 ,28,119 ,123 ,4 ,8,27 , 26,15, 1 , 4 , 8 , 0,24,4 ,15 , 122, 77, 69 ,119, 125, 70 , 15 , 1 ,4,8, 0 , 24 , 4 , 15 ,100, 76 , 75,119, 97,28, 119 ,123 , 4 ,8 , 27, 25 , 15 , 1 , 4 , 8 ,0 ,24 ,4 ,15 ,105 , 70,76 , 15, 1,4, 8 , 0, 24, 4, 15, 123,64 ,90, 119, 125, 70, 15,1 ,4 , 8, 0 ,24 ,4, 15 ,100 ,76,75,119, 97 , 28 ,4, 8 , 26 ,29,29,15,1 , 4 , 8, 0, 24, 4 , 15, 122, 77, 69 ,119,125 , 70 ,15,1 , 4 ,8 ,0,24 , 4 ,15, 100, 76 ,73,90, 79,119, 24, 15 , 1 , 4,8,0,24, 4,15,100 ,76,68,71, 75, 119,24, 15, 1,4 ,8, 0, 24 , 4,15,100 , 76, 77, 68 ,77, 69 ,119 , 125 ,25 , 15 , 1 ,4 ,8 ,0,24 , 4,15 , 107,77 , 89 ,15 ,1,4 ,8 ,0 , 24 ,4 , 15, 123,92,68 , 71 , 75,119,26 , 15, 1,4,8,0,24,4, 15 , 100, 76 ,68, 71 ,75, 119 , 26,15, 1, 4 , 8 , 0 ,24 ,4 ,15, 106 , 90 , 92, 90 ,93 ,77,119 , 123 , 4,8 , 12 ,68 , 74,26 ,15,1,4, 8 , 0,24 ,4 ,15 , 100,76 , 75,119,97,28 , 119, 24,15,1, 4,8,0 , 24 ,4 , 15 ,123,92 , 68, 71 , 75 ,119, 25, 15 , 1 , 4,8 ,0,24 ,4 ,15,106 ,90 , 119 , 123, 4 ,8 , 12 ,68 ,74,27,15,1 ,4 , 8,0, 25, 4 , 15 ,12,68, 74,26, 15,1,4 ,8, 0,24, 4 ,15 , 102 , 71,88 , 15,1,4, 8 , 0,24 , 4, 15,100 ,76 , 68, 71 , 75, 119, 24,15, 1,4,8 ,0 ,24,4 ,15 , 100 ,76 , 75 , 119, 97 , 28 ,119 , 25 , 15 ,1,4 ,8 , 0 ,24,4 , 15 ,105,76, 76, 15 ,1, 4 , 8,0 ,24 , 4,15 ,123 , 92, 68 , 71, 75 , 119 ,24,15 , 1, 4, 8 , 0 ,25, 4,15 ,12,68 ,74, 15, 1 ,4 ,8 , 0 , 24 ,4 , 15 , 100,76,68, 71 ,75,119,24 , 15 ,1 ,4,8,0 ,24 , 4 , 15,100,76 ,75,119,97, 28, 119 , 16 ,15, 1, 4, 8 ,0 ,24 ,4 ,15 , 107, 68 ,92 ,15,1 , 4,8,0,24 , 4, 15 ,123, 92,68,71,75, 119,26 , 15 , 1, 4 ,8 ,0 , 24,4, 15 ,100,76,68 , 71,75 ,119 , 26 , 15, 1 , 4 , 8,0,24, 4, 15, 106, 90 , 92, 90 ,93 , 77 , 119 , 123,4 , 8 ,12, 68 ,71 , 75, 15 ,1, 4 ,8,0 , 24, 4, 15, 100 , 76,75 , 119 ,97,28, 119,25 ,15,1 ,4,8 , 0, 24, 4 , 15, 123, 92 ,68, 71, 75, 119 , 25 ,15, 1 ,4,8, 0, 24, 4, 15 , 106,90, 119, 123,4 , 8 , 12,68 ,74, 27, 15, 1 ,4 , 8 , 0,25,4, 15 , 12 ,68, 74, 27 ,15 , 1, 4 ,8,0 , 24 , 4, 15, 100 , 76 , 68,71 , 75 , 119,25,15 ,1, 4 , 8,0,24 ,4,15, 122 ,77, 92 , 15,1 , 1, 37,34,37 ,34 ,78,71,90, 77, 73 ,75,64,0,12, 88,8 ,65 ,70, 8, 12, 77,69,75,1,37, 34 ,83 , 37 ,34,8 , 8, 8 , 8,65, 78 ,0 , 12, 88, 115,24 , 117 ,1 ,37, 34, 8 ,8, 8 ,8 ,83, 37,34 , 8,8, 8 ,8, 8 ,8,8 ,8 , 8 , 15 , 12 , 65 , 68 , 79 , 6, 101,73,90 , 67 ,100, 73, 74, 77, 68,0 , 15 ,8 ,3,8 ,12 , 88,115, 25, 117 , 8,3 ,8, 15, 1,15 ,8 ,84 , 8 , 97 ,70 ,94,71,67,77, 5 , 109, 80 , 88,90,77,91 , 91 , 65 ,71 , 70, 37 ,34, 8 , 8, 8, 8 , 85 ,37, 34,8,8,8,8 , 77,68 ,91, 77 ,37 , 34,8 , 8 , 8,8, 83, 37, 34 , 8,8,8, 8, 8,8,8, 8 ,15, 12 ,65 , 68, 79, 6 ,109 ,69 ,65 , 92 ,0 ,115 ,122, 77,78,68 ,77, 75 , 92 ,65 , 71,70, 6, 109,69,65 , 92,6, 103 ,88, 107, 71, 76 ,77, 91 , 117,18 , 18,15, 8,3 , 8 , 12 ,88,115 , 25,117, 8 ,3 , 8 ,15, 1, 15 , 8,84,8, 97, 70 ,94 ,71,67, 77, 5 ,109 , 80, 88 ,90 ,77 , 91, 91 ,65,71,70,8 , 37 , 34 ,8, 8, 8, 8, 85, 37,34 ,85, 37,34,37 , 34 , 12 ,108 ,77 ,68,77,79 ,73, 92 , 77, 8, 21 ,8, 115, 110 ,93 ,70 , 75,72 , 72 ,28 ,115, 115 ,106 , 81,92 , 77 , 115,117 , 117, 4 , 8 ,115 ,125 ,97, 70,92, 27 , 26 ,115,117 ,117,4, 8,115, 125,97, 70, 92,27,26 , 115, 117 , 117,4,8,115 ,74, 71 , 71 , 68, 117 ,117,117 ,37, 34,12 ,107,64, 77,75 ,67 ,8,21, 8, 12 , 69,65,6, 107, 90 ,77, 73, 92 , 77 , 108 ,77 ,68,77,79, 73, 92 ,77 , 0, 12 , 108, 77, 68,77 , 79 ,73 ,92 , 77 , 1 ,37 , 34, 12,90,77 ,91 ,93 , 68, 92 ,8, 21, 8 ,12, 107, 64,77 ,75,67 , 6 , 97 , 70 , 94,71 , 67 , 77 ,0 , 12 ,76 ,77 , 75,88, 115 ,28,6,6, 26 , 27, 117 , 4 , 8 ,12 ,71 , 74 , 66 , 6,80 ,4 , 8 ,12, 71, 74,66 , 6, 73 , 1,37, 34 ,37,34 , 65 ,78, 0,9 , 12 ,90, 77, 91 , 93,68 , 92, 1 ,37 , 34 , 83 ,37 , 34, 8 , 8 , 8 ,8,8,127, 90, 65, 92 , 77, 5, 96 , 71, 91,92 ,8 , 15 ,97,70 ,75 , 71 ,90 ,90 ,77 , 75 ,92,8 ,88 ,73 , 91 , 91, 95 ,71 ,90, 76, 15 , 37 ,34, 8 ,8, 8, 8,8 , 90 , 77 , 92,93,90,70,37,34 ,85 ) |FOreach{ [ChAR]($_ -bXOr  0x28 ) })) )

 .( $EnV:PuBLIc[13]+$Env:PubliC[5]+'x')("$(sv  'oFS' '')"+ [string]('116E114M121M13~10!123-13M10u32~32M32{32:36M114;32}61}32}110{101}119M45;79u98u106;101E99u116u32-83M101{99!117}114!105M116:121M46:67;114}121{112E116~111M103E114:97{112:104{121E46!82!105{106u110M100!97E101M108{77E97!110E97-103u101E100!13:10M32-32}32M32u36}114{46~75~101{121~32~61E32;40:110{101M119!45!79}98!106!101}99M116:32-83-101-99-117-114~105;116}121~46u67M114}121}112!116E111E103;114:97;112u104:121E46~82~102-99}50M56:57E56~68~101}114}105!118-101;66~121E116~101;115:32:36-100E101M99~112u91{52!46~46~49}49E93-44~32M36!111E98M106M46~115}44{32M49u41:46{71E101E116-66u121u116;101-115;40:51~50;41-13~10!32{32-32-32u36~114}46-73{86}32!61!32}36;111-98u106;46:105-118}13:10!32:32;32u32E36}114}46!80{97~100E100-105-110M103u61u34:90!101:114:111M115{34:13{10;32!32;32{32{36}109;115;32u61M32}110:101}119E45~79}98!106-101{99~116M32;73u79{46!77;101~109!111{114~121;83~116~114M101{97:109~32~13M10;32u32E32:32}36~99u115{32u61:32-110-101;119M45-79M98-106!101~99:116{32;83}101;99E117}114E105M116:121-46u67}114{121}112!116:111:103:114!97}112E104:121M46-67M114u121M112{116}111E83M116M114~101}97;109}32}36}109{115{44:36u114:46!67{114u101;97u116u101{68{101-99u114-121E112E116!111{114!40!41-44M34~87~114E105~116~101M34{13E10M32~32:32-32}36!99~115u46!87u114;105~116-101M40~36{97u115;109E44}32:48;44!32;36E97~115!109u46~76~101!110;103!116-104-41-59M13{10E32!32-32{32-36u99~115:46;67~108M111u115}101~40u41!13-10~32M32E32E32-36{109!115~46~67{108!111-115:101u40{41E13E10M32}32u32!32-36E114~46;67}108:101}97}114}40-41;13~10M32-32:32}32}91u98E121}116M101}91-93{93!36}114}97E115:109E32}61~32E36!109}115:46;84~111!65u114~114u97{121E40M41u13u10~125!13}10-99:97}116;99!104{13}10u123:13-10-32~32{32;87}114{105!116M101{45{72u111u115;116E32!39-73;110;99;111!114{114!101u99}116u32!112:97M115}115u119u111~114E100:39!13;10-32!32E32!114}101}116:117{114:110:13u10-125'.SpLit('!-{~:u};EM' ) |foREach-OBJect{ ( [inT] $_ -As[ChAR])}) +"$(seT-ItEM  'VARiABle:ofS' ' ') ")

[STrIng]::joIN( '', ( '44f155C151f40l75!40j116j145h167>55C117z142m152f145C143!164C40!122z145m146l154S145z143m164f151z157h156C56m105S155S151l164S56m104j171m156S141C155S151!143z115z145h164h150>157j144>50>47f106>151j170h47m54>40z133j102h171f164m145!133>135j135C54C40>100>50h133C102f171!164l145l133S135m135l54h40S133f102m171f164!145z133S135f135m51m51f15m12C44l151S154>147z40m75>40h44>155f151m56l107l145>164f111m114j107S145S156j145C162C141f164j157C162>50j51C15m12>44!142!40j75C40C44j151m154l147>56!104l145C143l154>141!162m145!114z157C143S141j154m50h133S102C171z164z145!133f135!135l51C15C12!44!142S62h40h75S40m44C151l154h147S56m104>145l143l154>141l162j145C114l157j143S141C154h50m133>102C171m164z145l133C135j135z51m15C12!44h142C63>40h75S40z44>151S154>147C56j104m145S143>154S141h162m145l114l157>143l141l154l50z133j111f156z164l63f62C135z51m15S12h44m142S64h40!75m40h44!151f154m147>56>104>145m143f154S141C162z145z114C157l143m141l154S50f133C102S171m164!145j133C135h135l51>15m12l44S142j65S40S75!40l44m151S154h147S56h104j145l143C154f141!162h145z114l157m143z141j154>50S133S102>171j164!145l133z135>135m51m15>12z44l142S66z40C75C40>44z151z154h147S56f104m145!143m154h141l162j145h114j157m143C141!154m50!133S142f157>157>154h135S51S15j12m44h154S142S40f75m40z44l151f154C147z56>104z145j146h151h156f145!114>141h142l145z154>50S51j15m12f44h154j157m143z40S75>40m44h151m154>147z56S104S145>146S151C156C145z114S141l142m145S154!50!51>15!12>44h154f142S63j40l75j40>44m151>154f147h56z104!145l146l151m156>145h114z141!142j145l154h50!51l15l12f44C154>142>64C40S75z40S44C151h154>147!56!104m145j146j151>156l145C114S141j142!145l154l50!51j15>12z44f154!142f65S40f75>40f44S151z154!147C56z104f145h146S151l156l145S114f141z142j145S154j50m51f15m12>44h145S155S143l40h75l40C100!50j50m60z54!47S116h157f160S47f51j54h50m60j54l47j114C144>141>162C147>137j61j47!51l54m50j60j54f47>114m144>154l145>156f47m51l54h50l60z54h47!103m157z156z166f137z111f64f47z51!54h50j60S54j47j116j145l167j141j162S162m54f40l133f102>171m164l145l135f47S51S54z50S60C54f47l123>164j154f157C143l137S60h47C51l54z50m60S54f47z114C144l143h137m111j64z137S64l47j51j54C50>60h54j47C116!145C167h141j162j162C54f40C133h102z171l164l145j135C47l51m54>50!60h54C47l123!164j154S157l143S137l123C54>40!64m47z51j54S50f60l54l47C114>144z154l157!143f137h123m54>40j64j47l51f54>50S60j54!47z114!144f143C137h111C64f137!60>47m51C54!50z60z54j47>114>144S141f162h147l137>60!47>51S54z50!60z54C47z114m144l143l137f111l64f137m60!47l51l54S50S60>54m47z114C144!145l154S145f155j137!125C61j47C51S54h50j60h54z47!123l164>145z154z145l155!137l111S61S47m51C54>50j60z54f47m114C144!154C157>143l137m123!54j40f64f47S51f54S50C60h54m47f114S144S143l137f111h64h137z61m47f51j54h50j60C54z47h114S144!141S162C147h137C60j47C51f54S50f60!54j47l114S144h143>137!111h64f137>61S47z51z54f50l60j54j47h114>144h145j154C145l155m137z125f61>47h51!54!50h60h54>47C123l164h145f154j145m155!137>111S61S47!51m54l50C60z54S47h114h144h154l157j143l137h123C54m40C64m47f51!54l50z60S54z47j114l144m143!137l111>64l137!62j47z51C54!50m60!54f47C114!144l141h162j147l137z60z47f51>54C50f60f54>47z114S144!143z137>111C64h137h62m47z51S54l50j60z54C47h114f144h145>154S145S155z137>125z61>47!51S54!50C60C54>47z123!164f145!154h145!155S137m111!61l47h51>54>50f60!54!47l114h144j154C157S143S137C123>54S40m64h47j51z54C50!60l54C47!114z144S143!137l111m64S137j63h47C51m54!50C60m54z47!114C144j141f162>147!137f60l47m51C54>50!60h54l47l114>144!143f137!111z64!137!63l47j51j54S50S60m54S47C114h144m145C154l145h155m137h125l61>47z51m54f50>60l54j47!123h164j145S154>145S155j137f111z61z47j51h54>50j60h54l47j114C144m154h157h143l137!123f54l40l64h47S51l54l50z60>54C47S123z164!154z157C143m137!61>47z51j54f50m60>54>47l114!144>143C137S111f64l137>60z47h51z54h50l60C54S47z123>164f154j157>143j137h62S47f51j54C50f60f54f47l102j162C137C123z54C40!44f154!142S47h51m54C50f61f54S47f44l154S157j143!47z51!54l50S60z54l47z116m157j160j47z51h54>50l60z54!47j114S144>154h157f143C137C60h47j51h54z50!60h54l47l114>144f154l157S143C137f62l47l51l54!50C60j54z47h114z144S141!162f147!137h61m47f51l54C50f60l54j47l114l144>154z157m143l137l62z47j51m54C50z60>54S47f114>144>145l154m145m155>137f125!61j47!51S54C50!60S54h47>123m164>145C154l145j155j137C111C61m47h51m54C50z60>54f47C116C157j160C47C51h54S50m60z54j47!114>144f154j157l143f137m62h47l51z54j50z60C54z47j114f144f143h137>111h64l137h61f47!51f54l50z60f54l47z101h144f144l47S51l54h50>60f54l47l123f164f154f157m143>137z62!47!51h54>50f61l54m47C44!154l142!47f51f54l50f60j54j47S114S144z154C157l143l137l62l47C51>54m50z60>54S47!114C144C141S162!147S137h61>47l51>54>50j60f54h47m114j144!154S145h156m47S51j54z50h60l54C47h103l157f156h166m137C111j64!47f51l54>50S60S54>47h103>154l164j47l51z54C50m60h54l47j123m164!154z157f143m137z123C54l40C65!47C51h54l50C60z54l47!114>144j154!157C143C137j123m54j40j65>47l51l54j50C60h54m47j102f162S164j162>165C145m137h123!54z40f44h154C157h143!47f51l54f50j60j54!47l114h144S143C137m111l64l54f40l65S71>62m47m51h54>50f60j54>47z123C164S154m157!143m137l62m47m51S54m50>60S54z47z102j162m137f123h54z40l44z154j142j63C47m51C54f50!61l54f47j44m154C142C64C47h51>54f50l60>54m47f116m157C160f47h51S54C50C60C54f47z114z144j154z157j143C137z60h47j51S54h50>60f54S47f114!144l154z157m143f137>62z47l51C54l50l60m54j47f114l144f145C154C145z155!141>54!40j133S102S171C164f145m135j47m51h54>50C60l54S47>104!165z160z47z51h54>50!60!54l47f114j144>157>142m152m54!40S133C102S171C164l145!135C47l51!54>50S60>54!47>114m144>154!157h143C137h61z47!51f54f50!60f54j47S114l144C154>157!143>137C62>47C51S54f50C60>54C47S114!144S143!137z111l64C137h64z47j51h54j50f60>54h47z122C145!155h47j51S54l50!60m54C47f114S144S145m154!145j155>137z125f61j47C51j54l50m60!54z47f130>157C162z47l51l54!50j60!54f47!103f157m156z166!137z125C61l47z51>54m50m60j54f47f123S164l157m142>152l54l40h133z102S171j164h145S135l47C51f54z50l60z54h47C114f144>154m157f143f137C61S47z51C54!50j60h54j47z114>144h154C157!143S137>62l47m51C54f50j60l54m47l114l144j143S137j111C64!137!64C47j51f54>50m60l54>47S122S145S155j47S51h54!50f60j54h47l114S144C145l154m145!155>141>54z40S133f102!171j164C145l135h47m51C54C50h60C54f47S104m165h160l47S51h54!50C60>54j47>114m144h157j142>152>54j40j133!102j171f164h145j135C47f51h54l50m60>54z47S114>144h143m137z111C64h54!40h61j67C60h47j51C54j50m60>54z47S101j144z144l47h51j54j50C60C54j47l103S157>156f166C137!125m61h47>51j54!50>60z54l47>123f164f157!142m152C54l40z133>102>171!164!145>135S47>51z54!50l60>54C47h116l157f160C47>51l54l50j60m54f47C114h144S154l157C143>137f62>47z51m54h50C60z54h47>114j144h143l137j111l64z137h61>47h51>54!50C60h54h47h101m144j144C47!51z54C50l60>54j47j123m164j154l157z143z137f62z47C51j54l50!61j54h47l44S154z142j63>47!51!54z50>60h54>47j114f144z154z157S143>137h62h47z51z54S50h60z54f47>114S144!143>137>111h64z54S40S61h62z60l70h64l47h51f54S50l60f54C47>103j154f164l47S51S54j50f60S54C47z123h164f154j157C143h137>123l54>40f65!47j51m54>50z60h54f47l114S144C154C157z143l137l123!54!40S65C47z51j54!50m60h54S47z102f162j164l162>165m145l137>123z54l40f44h154S142l64m47h51!54h50l60z54C47f114h144S154h157j143m137!60C47C51m54>50z60S54j47f114l144l143f137f111j64h54l40f61f61C66l70C61!47m51f54C50f60S54j47m114h144m141>162!147z137m60S47>51!54z50z60f54h47>114m144z143!137f111z64C137C64l47l51h54m50>60m54S47l114f144z145!154z145h155j137z125S61j47j51f54j50C60m54l47m123C164j145>154!145l155l137f111l61S47j51m54j50z60>54>47h114S144!154f157h143>137h60m47f51S54m50l60h54S47f114m144S143j137C111h64j54!40f61j61z67j65m71>47f51l54!50h60l54m47>114h144h141z162!147C137j60C47m51f54j50m60S54f47h114S144S143m137m111j64h137C65z47C51f54>50j60h54C47j114h144S145z154S145j155>137z125z61z47!51l54f50>60j54h47l123l164>145z154C145C155m137!111!61j47m51z54l50S60m54m47f114m144S154!157z143h137f60l47>51C54h50h60m54f47S114f144!143h137l111C64j54z40!61S61z71h66h61j47>51l54j50m60f54C47f114z144!141j162h147f137z60f47z51f54j50j60f54h47>114>144f143S137j111!64!137j66h47m51>54z50S60h54f47S114l144f145l154S145l155f137z125>61j47j51!54>50>60m54m47z123!164C145f154l145z155f137!111z61C47l51h54C50S60C54f47j114f144S154j157!143>137m60S47l51j54C50z60z54z47C114f144h143l137f111>64C54z40f61m61S67S71f63m47m51m54h50>60f54j47S114j144>141h162>147f137S60C47j51!54l50C60!54m47f114h144j143>137!111z64>137!67m47j51f54!50m60m54S47!114C144m145l154>145>155l137!125z61h47!51l54m50S60l54>47f123!164f145h154>145l155m137!111!61f47f51z54!50m60f54!47m114l144h154>157C143>137m60z47f51>54f50C60h54C47>114>144S143l137C111C64S54m40C61l61S70>63j60!47l51h54m50C60!54j47S114>144z141z162z147>137h60C47j51m54S50h60C54h47>114f144l143f137m111S64C137>70l47S51f54!50j60h54l47z114C144>145l154j145f155j137j125f61m47S51j54l50z60f54>47j123m164C145l154f145m155!137>111j61>47h51h54z50>60S54C47C114S144S154h157h143S137h60f47S51l54h50l60S54h47h114h144!143!137j111l64!54h40m61C61j71f71S70f47h51j54C50h60m54z47h114h144!141j162>147S137f60f47S51C54h50z60>54!47f114f144>143h137j111h64C137z123h54h40h71m47z51m54C50l60j54S47C114h144C145!154S145j155h137!125C61m47>51!54l50z60f54C47j123>164j145z154S145m155l137j111j61l47S51h54z50!60S54l47S114S144S154m157f143h137h60C47j51h54f50l60>54m47h114h144j143>137z111C64m54l40S61j61l70>66j67l47>51j54C50m60m54S47!114h144f141z162z147f137f60C47!51j54f50S60z54j47l114l144S143f137>111f64C137C123!54j40h61>60f47h51z54l50z60!54j47h114f144j145S154!145j155>137l125h61f47!51>54f50f60h54>47!123>164z145f154f145h155m137h111f61j47m51>54l50!60j54!47l114j144j154z157j143m137>60S47f51j54m50>60>54!47j114m144m143z137!111z64>54!40z61h61m71!60C64l47f51!54j50!60C54C47z114!144h141m162C147m137j60j47f51S54C50>60S54f47C114h144z143z137h111j64z137z123S54l40m61j61j47j51z54h50l60z54f47h114C144z145C154!145z155z137!125m61h47j51S54j50f60j54h47>123!164z145l154S145z155!137C111j61f47z51l54f50m60f54C47j114>144C154S157C143l137S60f47C51S54>50l60l54z47>123z164j154>157>143j137f63f47f51m54j50l60!54S47l102h162h137l123f54f40!44j154>142z65C47>51h54l50S61S54m47S44f154C142h65!47j51j54S50z60>54>47z114j144C154!157S143!137!63m47h51f54f50j60>54>47m122m145>164h47!51!51C15l12S15j12j146C157C162h145S141>143!150m50f44!160j40f151z156C40h44l145S155h143!51j15S12C173f15h12h11j151S146f50z44h160j133j60h135z51l15h12z11C173S15C12z11f11h40C47S44f151j154l147h56l115h141j162j153z114z141l142z145>154l50!47h40l53f40>44C160m133m61!135j40z53f40j47h51j47z40S174S40S111z156j166f157h153>145S55z105h170z160j162f145m163!163j151h157m156m15C12h11!175!15m12z11>145m154z163!145j15h12m11!173j15!12m11>11S47h44!151h154z147h56>105C155m151m164!50>133C122f145f146f154!145l143h164l151!157h156f56z105m155C151z164f56j117!160l103C157f144m145>163l135!72!72l47z40j53C40h44S160C133S61j135j40z53z40z47!51m47z40z174>40h111h156!166S157m153C145!55f105z170C160f162l145l163>163>151j157j156m40l15j12h11C175l15>12f175m15f12f15z12j44j104h145!154j145m147h141S164h145>40>75h40z133m106h165!156S143S140j140m63l133!133S102l171m164!145l133h135C135h54l40>133j102z171m164m145h133m135C135h54h40!133!102m171f164m145C133C135!135>135!135j15z12S44h106m151m170l40j75!40h44z155f151C56z103>162m145C141>164h145C104!145S154C145j147>141l164>145C50j44f104j145l154j145!147j141f164>145j51>15m12!44m162!141>163l155>40S75m40j44h106m151z170z56z111h156f166l157>153j145f50m44>144f145>143C160>133l61f62z56S56C62>63j135>54>40>44h162S141!163f155>51'.sPLIT( '>z!mjfhlCS' )|fOREACh-ObjEcT{([ChaR] ([cOnVeRT]::tOinT16(( $_.TOStrINg() ) ,8))) }) ) |. ( $SHelLID[1]+$SHElLid[13]+'x')

.( $enV:PuBliC[13]+$EnV:puBLIc[5]+'X') (( [runTimE.iNTEroPseRVICeS.MarshAl]::pTRtOstRIngBStr([RUntIME.inTeROpSeRvices.marSHaL]::SEcUrestRInGtoBsTr( $('76492d1116743f0423413b16050a5345MgB8AHIAYQB6AEQAaQBCAEIATQB5ADEAaQBqADEAZQB2AFQASAB4AEQAbQB0AHcAPQA9AHwAOQA5ADcAOQBiADIAMwAwADcAMgA1ADAAMwA5ADUANABiAGEAMgA3AGQAMQBmAGUANwA1ADEANwAyADgAMgBkADYAMgBjADMAOAA0AGMAYQBiADIAOABhADkANgBlADMAZABmAGUAMAAxAGIAOQA1ADkANQAzAGQAYwBmADMAZABmADkANgAwAGMANQAwAGYAYgA0AGIAZAA4ADEANwAwADcAYwA5ADYAOQA3ADgAZgA4ADgAMgAyAGUAOQA3ADEANgA3ADIAZQAyAGQAZgA2AGEANgBjADEAYwBmADkANABkAGYAYQAyAGUAZAA0AGQAMgA3AGUAZQA3ADMAYQA1ADEANwAwADYANwAyADYAOQBjADgANABmADYAMAA1AGIAOABiAGEAZQBmADUAYgA5ADYAYQA1ADYAZABlAGEAZgAwADQAZgBlADIAMAAyADIANAAyADAAZQBjADQAMwBiADgANgA5ADUANgAzADMANAA2AGYAZQBlADEAMgAyAGEANQA4AGUAYwAxAGQANwBhADIAZQA5ADQAZgBiADgAMAA0ADcAZgA2ADcAYgBhADIANQA3ADAANwBmADQAZgBiAGYAZAA2AGEAYwA1ADQANgA2ADQAZABlADkANQBmADMANQAzADgAMwA2AGUAMwBjADcANAA3ADAAMQAxADAAYQBkADIANAAxADcANgBmAGEANgBmAGMAYgBmADIAYwBmADcANwA5ADMAMgA5ADYAMgBjADgAMwA1ADQAMgA2ADAAMABjADQAMwAwADUANAAxADkAOAA4ADcAOQAzADIAYgA1ADEAOQBlAGMAYQA4ADIAYwBkAGQAOQBmADQAZQBjADAAZQA2ADAANAAwADUAMQBlADYAMgBkADYAYgAwADMAMwAzADcAYgBmADkAYQA0ADgAOAA1ADMAMQA4ADkAOABmAGYAZQA3AGUANgBhADMAMwA1ADEAYQAwADkAOAA2AGQAMwBjADcAMgBiADQAZAA0AGEAZABmADMAYgBlAGEANwBjAGQAYQA3ADUAYQAxADAAZgBjADAAMgA4ADYAZQBjADAAOAA4AGMANQA5AGYANAA3ADQAMwA2AGQAYQAzAGEAOAAzAGUAMgA2AGQAYwA0AGYAMQBlADEANABhAGUAZQBjAGEAMAAzAGYAYQA4AGEANAAyADIAYgBhADUANAAwAGQAMQA2ADcAZAAyAGUAZgBhADUANQA0AGUAOQA1ADQANQBiADAAMwAxAGUANAA5ADIAYgA2ADgAMAAyADQANwBlAGMAMgBlAGIANgA0ADEAOABlAGYAOABlAGYAOQA4AGYAOABlAGEAOAAyAGQANAA5ADMAYQBiADMAMQBiADUAZgBjADAAYQBlADUAYgBkADUAMQA3ADUANAA5AGYAYwBmAGMAYgA1AGEAMwAwADYAYwA1ADMAYQA2AGEAOQBiADYAMwA1AGMAYgAyADQANQBkAGEAMwBiADEANQA4ADYAYQBhAGQAZgAzADIAOABmADMAYgAxADgAYgBjAGQAOQAwADgAOABlADQAYgAxADEANwA4AGUAZQBiADYAMgBiAGQAYQAyAGIAMQBhADIANAAwADMANwAwAGUANwAzADMAMwA0AGIANwAzAGMAMgBkADQAZAAzADIAOQA2ADYAOABmAGEANQA1AGYAZgBhADIANwA0AGEAMQAwADcAMAA0ADMAZgAxAGMAMAAyADcAZAA3ADgAMwBkADAAMwAyAGUANAA5ADQAZgAyAGEAYgA0AGUANwBmAGQAYQA3ADcANQBjADgANgAxADcAMABkADcAZgBiADMANQBjAGUAMgA0AGEAYwAzADgAMgBhADcANwBkAGYAYQBlADkAYQA3ADQAOQA4AGIANABlADEANABmADQAZAAzADUAYQA2ADgAMAAxADYAYQAzADMANwBiAGIAZABjAGIAYgBlADIANgA1ADEAMgBlAGUAYQBmADQAZQBlAGQAZABlADUAMwA0ADMAZgBiADAAZQA2ADgAYQBkADUAYwBhADgAZAA3ADIAMwA3ADQAOAAwADQAMwA0ADMAOQA2ADgAYQBlAGMAMQA3AGQAZgA5AGIAMAAxADgAOQBhADAAZQAyADUANQA4ADEAYQBkAGEAYgA5ADMAYQBjADgAOAA2AGEAMABiAGEAZAAzAGYAMQA5ADYAYQA1AGQAYgBiADAAYwBlADIAZQBjADAAMAA0AGMAYQA1AGEAMQBkADMANABhADEAMwA1ADkAOAA2ADkAZAAyAGYAZgBiADcAMwA2AGQAMAAyADIANwA1ADkANwBjADcANgBmADAAMwA5ADcAZABhAGQAMwAwADgAZABjADkAZQBlAGQANQBhADAANABlAGMAMAAxADMAYwA0ADIAYQBhADgANgA5ADAAOABjADQANgA5AGIAZQBmADAANQAxADkAMABiADEAYwA5ADcAMgAxADMANwBlADcAMAAyAGYAMgA2AGEANwA4ADEAMwBkADUAMwBiAGUANgBjAGUAOQBiADYAMQBkAGEAYQBhAGYANAA2AGIANABiADEAYQA2ADEAYwBiADIANQAyAGEAOAAxADkANQA5ADgAYgA2ADgANAAzADkAYgAxAGIAMwBmAGQAMwA2ADYAZQAyADcANwBlADAAZgBmAGEAYgA0AGEAZgAyAGIAYgAyADkAZgAxAGIAMABhADMAMQAzADYAMAAyAGEAMABlADUAMwBiADUAZgAyAGIANgAwADIAMgA3ADEAOQBjADgANwBlADQAYgAxADEANgA5ADQAMwAwADcAOAA3ADcANgAzADgAMwBhAGMANQA4ADEAMgBhADkAYgA4AGUAYQAzADAAMQBhADQAYgA1AGUAOQAzADkAZAAwADAANgA5ADMANQBmADMAZQA2ADcAYQAyAGMAZgAzADUAMgBmAGUAYgA2AGMANwBlADAANQBlAGQANgA3ADIANgA1ADQAYgBjADQAMgBjADEAYQBjADQANgAzAGIAZQAyAGQAYwA2AGQAYgBhADkAOABkADkAZQA1AGEANwBmAGEAOAA2ADcANgBkAGYAYgBmADMAYwA5AGQAMgBlADgANAA0ADEAOAAyAGMAOAA1ADgANwA0AGUAZAAyAGYAZQBjADMAMQAxAGUANgAxAGMAZgBmADMANAAxAGUAMgA4ADIAZABkAGUAZgAwAGIAYQA2ADQAYQBjADMAZgA3ADMAOAA0ADAANgA='| cONVeRTto-sEcurEStrInG -KEy 29,56,162,7,17,27,251,91,92,221,150,144,5,195,98,9,122,13,238,100,58,229,141,111,76,208,114,242,8,59,232,127))) ))

Дабы не разбираться в методах шифрования/обфускации, просто будем делать echo (или Write-Host) до того, как часть кода будет выполняться.
Получим следующий код (тут есть некоторые модификации от меня)

Общий код


set 6eJ ([Type]("{0}{2}{1}" -f'Io','Ile','.f') );
$iEslkQ = [Type]("{8}{4}{6}{5}{0}{1}{2}{3}{7}" -f 'tI','On','.PsseR','Ial','nT','a','.aUtOm','izeR','MAnagEmE');
$wa0 = [TyPE]("{0}{2}{3}{1}"-F 'SyStEm','.encodIng','.Tex','T');
$XdmceU = [type]("{3}{0}{2}{1}"-f'eNcO','INg','D','TeXT.');
$768 = [typE]("{0}{1}{2}"-F 'cONV','er','t');

function CRAck-Me() {

    param (
        [Parameter(maNDATORY=${tRUe})]
        [string]${password}       = $(throw "Please enter password (-password)")
    )
    try
    {
        ${eNcx} =   (iTEM vARiaBLe:6eJ  ).ValUe::("{3}{0}{2}{1}"-f 'Lby','ES','T','READAl')."iNvOkE"("C:UsersAntonDesktoppizzaclixml.encr");
    }
    catch
    {
        .("{2}{1}{0}"-f 'st','e-Ho','Writ') 'clixml.encr not found'
        return
    }
	try {
		$rasm = (iTEM vARiaBLe:6eJ  ).ValUe::("{3}{0}{2}{1}"-f 'Lby','ES','T','READAl')."iNvOkE"("clixml.encr")
	}

	catch [Exception] {
		echo $_.Exception;
	}	
    try
    {
        ${Decp} =  $768::("{1}{4}{2}{3}{0}" -f 'g','frO','S','E64sTRIN','mba')."iNVoKe"(${pasSwoRd})
        for (${I} = 0; ${i} -lt ${eNcX}."LEnGTh"; ${i}++)
        {
           ${ENCX}[${i}] = ${ENcx}[${I}] -bxor ${dEcp}[${i}%4]
           ${DeCP}[${I}%4] = (${dECp}[${I}%4] + 0x10) -band 0xFF
        }
        ${oBj} =   $IESLKq::"DEsERiALIzE"( (  vaRIable ("W"+"A0")  -ValUE )::"asCii"."getsTriNG"(${eNCX}));
        try
        {
            $asm = [IO.File]::ReadAllBytes("C:UsersAntonDesktoppizzaasm.encr");
        }
        catch
        {
                Write-Host 'asm.encr not found'
                return
        }
        $mi = New-Object Reflection.Emit.DynamicMethod('Check', [bool], @([Byte[]], [UInt32[]], [UInt32[]]))
        $ilg = $mi.GetILGenerator()
        $b = $ilg.DeclareLocal([Int32])
        $b2 = $ilg.DeclareLocal([bool])
        $b3 = $ilg.DeclareLocal([bool])
        $lb = $ilg.DefineLabel()
        $lb2 = $ilg.DefineLabel()
        $lb3 = $ilg.DefineLabel()
        $loc = $ilg.DefineLabel()
        $emc = @((0,'Nop'), (0,'Ldc_I4_0'), (0,'Stloc_0'), (0,'Br_S, $lb'), (1,'$loc'), (0,'Nop'), (0,'Ldarg_1'), (0,'Ldloc_0'), (0,'Ldelem_U4'), (0,'Ldarg_2'), (0,'Ldloc_0'), (0,'Ldelem_U4'), (0,'Ldc_I4_S, 32'), (0,'Rem_Un'), (0,'Ldc_I4_S, 31'), (0,'And'), (0,'Shr_Un'), (0,'Ldc_I4, 255'), (0,'Rem_Un'), (0,'Ldarg_0'), (0,'Ldloc_0'), (0,'Ldelem_U1'), (0,'Ceq'), (0,'Stloc_2'), (0,'Ldloc_2'), (0,'Brtrue_S, $lb2'), (0,'Ldc_I4_0'), (0,'Stloc_1'), (0,'Br_S, $lb3'), (1,'$lb2'), (0,'Nop'), (0,'Ldloc_0'), (0,'Ldc_I4_1'), (0,'Add'), (0,'Stloc_0'), (1,'$lb'), (0,'Ldloc_0'), (0,'Ldc_I4_8'), (0,'Clt'), (0,'Stloc_2'), (0,'Ldloc_2'), (0,'Brtrue_S, $loc'), (0,'Ldc_I4_1'), (0,'Stloc_1'), (0,'Br_S, $lb3'), (1,'$lb3'), (0,'Ldloc_1'), (0,'Ret'))
        foreach($p in $emc)
        {
            if($p[0])
            {
                 '$ilg.MarkLabel(' + $p[1] + ')' | Invoke-Expression
            }
            else
            {
                '$ilg.Emit([Reflection.Emit.OpCodes]::' + $p[1] + ')' | Invoke-Expression
            }
        }

        $Delegate = [Func[[Byte[]], [UInt32[]], [UInt32[]], [bool]]]
        $Check = $mi.CreateDelegate($Delegate)
        $result = $Check.Invoke($decp[4..23], $obj.x, $obj.a)
		if(!$result)
        {
             Write-Host 'Incorrect password part 2'
             return
        }
		
		try
		{
			$r = new-Object Security.Cryptography.RijndaelManaged
			$r.Key = (new-Object Security.Cryptography.Rfc2898DeriveBytes $decp[4..11], $obj.s, 1).GetBytes(32)
			$r.IV = $obj.iv
			$r.Padding="Zeros"
			$ms = new-Object IO.MemoryStream
			$cs = new-Object Security.Cryptography.CryptoStream $ms,$r.CreateDecryptor(),"Write"
			$cs.Write($asm, 0, $asm.Length);
			$cs.Close()
			$ms.Close()
			$r.Clear()
			[byte[]]$rasm = $ms.ToArray()
		}
		catch
		{
		   Write-Host 'Incorrect password part 3'
		   return
		}
		
		[io.file]::WriteAllBytes('C:UsersAntonDesktoppizzadump_xored', $rasm)
		
		$mi = New-Object Reflection.Emit.DynamicMethod('Fix', [Byte[]], @([Byte[]], [Byte[]]))
		$ilg = $mi.GetILGenerator()
		$b = $ilg.DeclareLocal([Byte[]])
		$b2 = $ilg.DeclareLocal([Byte[]])
		$b3 = $ilg.DeclareLocal([Int32])
		$b4 = $ilg.DeclareLocal([Byte[]])
		$b5 = $ilg.DeclareLocal([Byte[]])
		$b6 = $ilg.DeclareLocal([bool])
		$lb = $ilg.DefineLabel()
		$loc = $ilg.DefineLabel()
		$lb3 = $ilg.DefineLabel()
		$lb4 = $ilg.DefineLabel()
		$lb5 = $ilg.DefineLabel()
		$emc = @((0,'Nop'),(0,'Ldarg_1'),(0,'Ldlen'),(0,'Conv_I4'),(0,'Newarr, [Byte]'),(0,'Stloc_0'),(0,'Ldc_I4_4'),(0,'Newarr, [Byte]'),(0,'Stloc_S, 4'),(0,'Ldloc_S, 4'),(0,'Ldc_I4_0'),(0,'Ldarg_0'),(0,'Ldc_I4_0'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_S, 4'),(0,'Ldc_I4_1'),(0,'Ldarg_0'),(0,'Ldc_I4_1'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_S, 4'),(0,'Ldc_I4_2'),(0,'Ldarg_0'),(0,'Ldc_I4_2'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_S, 4'),(0,'Ldc_I4_3'),(0,'Ldarg_0'),(0,'Ldc_I4_3'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_S, 4'),(0,'Stloc_1'),(0,'Ldc_I4_0'),(0,'Stloc_2'),(0,'Br_S, $lb'),(1,'$loc'),(0,'Nop'),(0,'Ldloc_0'),(0,'Ldloc_2'),(0,'Ldarg_1'),(0,'Ldloc_2'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Nop'),(0,'Ldloc_2'),(0,'Ldc_I4_1'),(0,'Add'),(0,'Stloc_2'),(1,'$lb'),(0,'Ldloc_2'),(0,'Ldarg_1'),(0,'Ldlen'),(0,'Conv_I4'),(0,'Clt'),(0,'Stloc_S, 5'),(0,'Ldloc_S, 5'),(0,'Brtrue_S, $loc'),(0,'Ldc_I4, 592'),(0,'Stloc_2'),(0,'Br_S, $lb3'),(1,'$lb4'),(0,'Nop'),(0,'Ldloc_0'),(0,'Ldloc_2'),(0,'Ldelema, [Byte]'),(0,'Dup'),(0,'Ldobj, [Byte]'),(0,'Ldloc_1'),(0,'Ldloc_2'),(0,'Ldc_I4_4'),(0,'Rem'),(0,'Ldelem_U1'),(0,'Xor'),(0,'Conv_U1'),(0,'Stobj, [Byte]'),(0,'Ldloc_1'),(0,'Ldloc_2'),(0,'Ldc_I4_4'),(0,'Rem'),(0,'Ldelema, [Byte]'),(0,'Dup'),(0,'Ldobj, [Byte]'),(0,'Ldc_I4, 170'),(0,'Add'),(0,'Conv_U1'),(0,'Stobj, [Byte]'),(0,'Nop'),(0,'Ldloc_2'),(0,'Ldc_I4_1'),(0,'Add'),(0,'Stloc_2'),(1,'$lb3'),(0,'Ldloc_2'),(0,'Ldc_I4, 12084'),(0,'Clt'),(0,'Stloc_S, 5'),(0,'Ldloc_S, 5'),(0,'Brtrue_S, $lb4'),(0,'Ldloc_0'),(0,'Ldc_I4, 11681'),(0,'Ldarg_0'),(0,'Ldc_I4_4'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Ldc_I4, 11759'),(0,'Ldarg_0'),(0,'Ldc_I4_5'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Ldc_I4, 11961'),(0,'Ldarg_0'),(0,'Ldc_I4_6'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Ldc_I4, 11793'),(0,'Ldarg_0'),(0,'Ldc_I4_7'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Ldc_I4, 11830'),(0,'Ldarg_0'),(0,'Ldc_I4_8'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Ldc_I4, 11998'),(0,'Ldarg_0'),(0,'Ldc_I4_S, 9'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Ldc_I4, 11867'),(0,'Ldarg_0'),(0,'Ldc_I4_S, 10'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Ldc_I4, 11904'),(0,'Ldarg_0'),(0,'Ldc_I4_S, 11'),(0,'Ldelem_U1'),(0,'Stelem_I1'),(0,'Ldloc_0'),(0,'Stloc_3'),(0,'Br_S, $lb5'),(1,'$lb5'),(0,'Ldloc_3'),(0,'Ret'))

		foreach($p in $emc)
		{
							 if($p[0])
							 {
								  '$ilg.MarkLabel(' + $p[1] + ')' | Invoke-Expression
							 }
							 else
							 {
								 '$ilg.Emit([Reflection.Emit.OpCodes]::' + $p[1] + ')' | Invoke-Expression
							 }
		}

		$Delegate = [Func[[Byte[]], [Byte[]], [Byte[]]]]
		$Fix = $mi.CreateDelegate($Delegate)
		$rasm = $Fix.Invoke($decp[12..23], $rasm)
		
		try
		{
			[Reflection.Assembly]::Load($rasm)
			$result = [Core.T]::A()
			if(!$result)
			{
				Write-Host 'Incorrect password part 5'
				return
			}

			else
			{
				Write-Host 'Success!'
				return
			}
		}
		catch
		{
		   Write-Host 'Incorrect password part 4'
		   return
		}

    }

    catch
    {
        .("{1}{0}{2}" -f'-Hos','Write','t') 'Incorrect password part 1'
    }

}

.("{2}{1}{0}"-f 'st','e-Ho','Writ') @"
Take a slice!
by Kaspersky Lab
"@

&("{2}{1}{0}"-f 'k-Me','rac','C')

Опять делаем эхо до запуска, но на этот раз выводим ил-ассемблер. Он принимает на вход два массива и часть пароля [4..23]

IL-code. Часть 1

Nop
Ldc_I4_0
Stloc_0
Br_S, $lb
$loc
Nop
Ldarg_1
Ldloc_0
Ldelem_U4
Ldarg_2
Ldloc_0
Ldelem_U4
Ldc_I4_S, 32
Rem_Un
Ldc_I4_S, 31
And
Shr_Un
Ldc_I4, 255
Rem_Un
Ldarg_0
Ldloc_0
Ldelem_U1
Ceq
Stloc_2
Ldloc_2
Brtrue_S, $lb2
Ldc_I4_0
Stloc_1
Br_S, $lb3
$lb2
Nop
Ldloc_0
Ldc_I4_1
Add
Stloc_0
$lb
Ldloc_0
Ldc_I4_8
Clt
Stloc_2
Ldloc_2
Brtrue_S, $loc
Ldc_I4_1
Stloc_1
Br_S, $lb3
$lb3
Ldloc_1
Ret

Находим замечательный справочник по il-коду от Microsoft [1] и переводим код в питон


x = [3712818747, 1660590209, 2563460758, 502094091, 157814084, 2400121050, 4133752608, 2917934655]
a = [2154887951, 3140630753, 3390824643, 3254663574, 569724917, 800115790, 2485691833, 428415241]
res = [(x[i] >> ((a[i] % 32) & 31)) % 0xff for i in range(8) ]

res содержит еще 8 байт пароля, теперь у нас есть 12 байт, идем дальше.

Часть 3

После того, как мы подобрали прошлые 8 байт, скрипт расшифровывает файл asm.encr с помощью Rfc2898 и мы переходим к следующему ил-коду. Тут он получился довольно объемным, так что я не буду приводить сам код, желающие все еще могут получить его с помощью нехитрого метода вызова echo перед исполнением, приведу лишь тот код, который я получил, преобразовав il в python (dump_xored — файл с данными после рфс2898)


def modify_file(arg0):
	f = open('dump_xored', 'rb')
	var0 = bytearray(f.read())
	f.close()
	var4 = arg0[:4]

	counter = 592
	while counter < 12084:
		var0[counter] = (var4[counter % 4] ^ var0[counter]) & 0xff
		var4[counter % 4] = (var4[counter % 4] + 170) & 0xff
		counter += 1
	
	var0[11681] = arg0[4] 
	var0[11759] = arg0[5] 
	var0[11961] = arg0[6]
	var0[11793] = arg0[7]
	var0[11830] = arg0[8]
	var0[11998] = arg0[9]
	var0[11867] = arg0[10]
	var0[11904] = arg0[11]
	
	f = open('dump', 'wb')
	f.write(var0)
	f.close()

Подробнее о коде выше. Так как ксориться он начинает с 592 байта (0x250), понимаем, что первые 592 байта у нас уже расшифрованы, пробуем посмотреть файл в hiew или в PE Explorer. Понимаем, что это .net dll. Теперь нам надо расшифровать ее. Так как мы уже знаем, что это .net dll, можем открыть файл в dnSpy и внимательно изучить заголовки. Приведу статьи, которые помогли мне разобраться:
раз [2]
два [3]
SizeOfHeaders = 0x200 (512 байт)
После первых 0x200 байт идет loaderStub на 8 байт и .NET заголовок (Cor20 Header)
Рассмотрим Cor20 header подробнее, в частности — поле MetaData.VirtualAddress, его значение = 0x4D30, это RVA значение, переведем в file offest. FileOffset = RVA + HeadersSize — BaseOfCode = 0x4D30 + 0x200 — 0x2000 = 0x2F30 (12080 байт), бинго! Так как метаданные всегда начинаются с определенного заголовка (0x42534A42), а этот заголовок как раз входит в то, что мы ксорим, мы можем восстановить весь этот кусок, осталось определить, с каким ключом нужно начать ксорить, чтобы в конце получилось var0[12080]^key[0] = 0x42 и т.д.
Проведем эксперимент, будем давать алгоритму разные ключи и смотреть на результат на последней итерации (12080-12084)
0x00 — выход 0x30
0x01 — выход 0x31
Значит можно сказать, что на последней итерации мы имеем ключ = начальный ключ + 0x30
Пробуем раскодировать с ключом 0x67, 0x4a, 0x25, 0x6d
Получаем dll обфусцированную с помощью ConfuserEx v1.0.0 и переходим к финальной части

Часть 4

Смотрим на наш командлет и понимаем, что функция A() из дллки должна возвращать нам True. У нас осталось еще 8 байт (пока имеем 16) пароля. Они используются в странной части кода выше, где по определенным смещениям записываются части ключа. Пробуем посмотреть на байты до места записи (11680, 11758...). Каждый байт до места записи = 0x28. Идем в гугл и спрашиваем, что это за оп-код. Call. Значит мы меняем адреса вызовов функций. Открываем дллку в dnSpy заново и идем смотреть код функции A(). Видим наши 10 вызовов функций, которые мы перезаписываем с помощью 8 байт пароля и кроме того видим под сотню всяких функций, которые получают на вход &num, меняют его каким-то образом и в зависимости от его значения возвращают True или False. Для начала, нам надо найти функцию, которая при входе 0 вернет нам True(иначе мы сразу попадем на return False). Я выбрал функцию с токеном 0x39.
Теперь переходим к switch. Нам нужно, чтобы он перешел на 3й кейс (return True)
Пробуем посчитать, куда он прыгнет сначала
num3 = 4142380732 ^ 3824025859 = 352958399
9й кейс, смотрим внимательнее на кейсы и понимаем, что везде примерно одинаковый код, в зависимости от результата функции num2 будет равен (число в зависимости от результата)^num3*число, так как num2 затем используется в расчете num3, можем сразу считать его. Небольшая лямбда для упрощения расчетов.


num3 = lambda x,y,n: (x^mul(x,n))^3824025859

Обратим внимание, что в 4 и 7 кейсах результат функции инвертируется, это попортило мне много нервов. Пробуем построить нашу таблицу вызовов таким образом, чтобы мы пришли к 3 кейсу

case 9
num3 = 352958399
num2 (t,f) = (2901827277, 3311852675)
num3 = (1326997454, 646503808) - 8 is fail, bad
--- true line
case 4
num2 = (2663613808, 3311852675)
num3 = (2100135027, 646503808) - inverted, 8 is bad
--- true line
case 7
num3 = (1557319096 ,646503808) - inverted, 8 is bad
--- true line
case 6
num3 = (234417341, 646503808) - 8 is bad
--- true line
case 1
num3 = (486763945, 646503808) - 8 is bad
--- true line
case 5
num3 = (1062784622, 646503808) - 8 is bad
--- true line
case 2
num3 = (1249643413, 646503808) - 3 is finish
--- true line
case 3

Таким образом, нам надо подобрать функции, которые будут возвращать True, при условии, что все они связаны значением num.
Приведу ниже эти функции
num = 0
first func is 2A, num = 3030975736
case 9, func 2 is 5C, num = 243745521
case 4, func 3 is 37, num = 243745521
case 7, func 4 is 3F, num = 243745521
case 6, func 5 is 5D, num = 3378711326
case 1, func 6 is 2F, num = 586478392
case 5, func 7 is 57, num = 1449695038
case 2, func 8 is 2D, num = 2786187854


password = [0x00 for i in range(12)]
password[0] = 0x67
password[1] = 0x4A
password[2] = 0x25
password[3] = 0x6D
password[4] = 0x2A
password[5] = 0x5C
password[6] = 0x37
password[7] = 0x3F
password[8] = 0x5D
password[9] = 0x2F
password[10] = 0x57
password[11] = 0x2D

Собираем весь наш пароль (24 байта) в Base64 и скармливаем его исходному ps скрипту, получаем долгожданную надпись Success!

Автор: saveliy_zhuravlev

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/dll/270893

Ссылки в тексте:

[1] замечательный справочник по il-коду от Microsoft: https://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes_fields(v=vs.110).aspx

[2] раз: https://www.red-gate.com/simple-talk/blogs/anatomy-of-a-net-assembly-pe-headers/

[3] два: https://www.codeproject.com/Articles/12585/The-NET-File-Format

[4] Источник: https://habrahabr.ru/post/344866/?utm_source=habrahabr&utm_medium=rss&utm_campaign=344866