{"id":12293,"date":"2026-04-22T04:03:44","date_gmt":"2026-04-22T04:03:44","guid":{"rendered":"https:\/\/serisec.com\/index.php\/2026\/04\/22\/32910\/"},"modified":"2026-04-22T04:03:44","modified_gmt":"2026-04-22T04:03:44","slug":"32910","status":"publish","type":"post","link":"https:\/\/serisec.com\/index.php\/2026\/04\/22\/32910\/","title":{"rendered":"A .WAV With A Payload, (Tue, Apr 21st)"},"content":{"rendered":"<p>    A .WAV With A Payload, (Tue, Apr 21st)<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n    <!-- no image --><br \/>\n \t<BR><br \/>\n<BR><\/BR><\/p>\n<div>\n<p>There have been reports of threat actors using a <a href=\"https:\/\/www.bleepingcomputer.com\/news\/security\/backdoored-telnyx-pypi-package-pushes-malware-hidden-in-wav-audio\/\">.wav file as a vector for malware<\/a>.<\/p>\n<p>It&#8217;s a proper .wav file, but they didn&#8217;t use staganography. The .wav file will play, but you&#8217;ll just hear noise:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/20260419-100007.png?ssl=1\" style=\"width: 941px; height: 721px;\"><\/p>\n<p>That&#8217;s because the TAs have just replaced the bytes that encode the sound with the BASE64 representation of their payload:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/20260419-100220.png?ssl=1\" style=\"width: 597px; height: 497px;\"><\/p>\n<p>Thus I don&#8217;t need a .wav parser to extract the encoded payload, I can just use my <a href=\"https:\/\/github.com\/DidierStevens\/DidierStevensSuite\/blob\/master\/base64dump.py\">base64dump.py<\/a> tool:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/20260419-100408.png?ssl=1\" style=\"width: 993px; height: 223px;\"><\/p>\n<p>The BASE64-decoded payload is an XOR-encoded PE file. So I don&#8217;t need to make a custom decoder, I can just perform a known-plaintext attack looking for the DOS header with my <a href=\"https:\/\/github.com\/DidierStevens\/DidierStevensSuite\/blob\/master\/xor-kpa.py\">xor-kpa.py<\/a> tool:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/20260419-100857.png?ssl=1\" style=\"width: 1165px; height: 247px;\"><\/p>\n<p>The XOR key was found. Thus we can easily dump the decoded PE file and see the MZ header at position 0x08 and a bit further down the DOS header we used in the known-plaintext-attack:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/20260419-102311.png?ssl=1\" style=\"width: 1165px; height: 413px;\"><\/p>\n<p>And my tool <a href=\"https:\/\/github.com\/DidierStevens\/DidierStevensSuite\/blob\/master\/pecheck.py\">pecheck.py<\/a> can extract an analyse the <a href=\"https:\/\/www.virustotal.com\/gui\/file\/a0a8857e8a65c05778cf6068ad4c05ec9b6808990ae1427e932d2989754c59a4\/detection\">sample<\/a>:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" alt=\"\" src=\"https:\/\/i0.wp.com\/isc.sans.edu\/diaryimages\/images\/20260419-101916.png?ssl=1\" style=\"width: 1165px; height: 171px;\"><\/p>\n<p>Didier Stevens<br \/>\nSenior handler<br \/>\n<a href=\"http:\/\/blog.didierstevens.com\/\">blog.DidierStevens.com<\/a><\/p>\n<p> (c) SANS Internet Storm Center. https:\/\/isc.sans.edu Creative Commons Attribution-Noncommercial 3.0 United States License.<\/p><\/div>\n<p> \t<BR><br \/>\n <BR><\/BR><\/p>\n<p> \t<BR><br \/>\n<BR><\/BR><br \/>\n<a href=\"https:\/\/isc.sans.edu\/diary\/rss\/32910\">Go to isc.sans.edu<\/a><br \/>\n \t<BR><br \/>\n <BR><\/BR><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A .WAV With A Payload, (Tue, Apr 21st) There have been reports of threat actors using a .wav file as a vector for malware. It&#8217;s a proper .wav file, but they didn&#8217;t use staganography. The .wav file will play, but you&#8217;ll just hear noise: That&#8217;s because the TAs have just replaced the bytes that encode [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[69],"class_list":["post-12293","post","type-post","status-publish","format-standard","hentry","category-isc-sans-edu","tag-isc-sans-edu"],"_links":{"self":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts\/12293"}],"collection":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/comments?post=12293"}],"version-history":[{"count":0,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/posts\/12293\/revisions"}],"wp:attachment":[{"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/media?parent=12293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/categories?post=12293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serisec.com\/index.php\/wp-json\/wp\/v2\/tags?post=12293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}