{"id":8003,"date":"2024-06-18T10:36:46","date_gmt":"2024-06-18T10:36:46","guid":{"rendered":"\/cybersecurity-blog\/?p=8003"},"modified":"2024-07-31T09:33:31","modified_gmt":"2024-07-31T09:33:31","slug":"vmprotect-themida-malware-analysis","status":"publish","type":"post","link":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/","title":{"rendered":"Analyzing Malware Protected with Themida and VMprotect: Is It Really That Hard?"},"content":{"rendered":"\n<p>Malware authors use protectors like Themida and VMProtect in the hope that they will completely prevent analysts from reversing samples.&nbsp;&nbsp;<\/p>\n\n\n\n<p>These protectors can use sophisticated techniques to hide malicious functionality: code virtualization, obfuscation, anti-debugging, compression, and <a href=\"https:\/\/any.run\/cybersecurity-blog\/aes-encryption\/\" target=\"_blank\" rel=\"noreferrer noopener\">encryption<\/a>. (We&#8217;ll see later in the article why we said &#8220;can.&#8221;) &nbsp;<\/p>\n\n\n\n<p>So, do Themida and VMProtect really always prevent something interesting from being extracted from malicious samples, like C2 servers, strings, or analyzable code?&nbsp;<\/p>\n\n\n\n<p>To answer that question, we&#8217;ll analyze malware samples from different families that use Themida and VMProtect and compare the specific protection mechanisms they use.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Research results&nbsp;<\/h2>\n\n\n\n<p>Our analysis is quite detailed, so to make it easier to keep up, we&#8217;ll take a somewhat unusual approach and start with the results.&nbsp;<\/p>\n\n\n\n<p>The table below shows our findings for six malware families \u2014 all of which use protectors. The table ranks them from least to most difficult to analyze.&nbsp;<\/p>\n\n\n\n<div class=\"wpdt-c row wpDataTableContainerSimpleTable wpDataTables wpDataTablesWrapper\n\"\n    >\n        <table id=\"wpdtSimpleTable-105\"\n           style=\"border-collapse:collapse;\n                   border-spacing:0px;\"\n           class=\"wpdtSimpleTable wpDataTable\"\n           data-column=\"7\"\n           data-rows=\"8\"\n           data-wpID=\"105\"\n           data-responsive=\"0\"\n           data-has-header=\"0\">\n\n                    <tbody>        <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000011 wpdt-empty-cell  wpdt-merged-cell \"\n                     colspan=\"1\"  rowspan=\"2\"                     data-cell-id=\"A1\"\n                    data-col-index=\"0\"\n                    data-row-index=\"0\"\n                    style=\" width:19.45107398568%;                    padding:10px;\n                    \"\n                    >\n                                                            <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011 wpdt-merged-cell \"\n                     colspan=\"1\"  rowspan=\"2\"                     data-cell-id=\"B1\"\n                    data-col-index=\"1\"\n                    data-row-index=\"0\"\n                    style=\" width:13.126491646778%;                    padding:10px;\n                    \"\n                    >\n                                        Compressed\/<br>encrypted\u00a0\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011 wpdt-merged-cell \"\n                     colspan=\"1\"  rowspan=\"2\"                     data-cell-id=\"C1\"\n                    data-col-index=\"2\"\n                    data-row-index=\"0\"\n                    style=\" width:13.126491646778%;                    padding:10px;\n                    \"\n                    >\n                                        \u00a0Virtualization\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011 wpdt-merged-cell \"\n                     colspan=\"1\"  rowspan=\"2\"                     data-cell-id=\"D1\"\n                    data-col-index=\"3\"\n                    data-row-index=\"0\"\n                    style=\" width:18.496420047733%;                    padding:10px;\n                    \"\n                    >\n                                        Obfuscation\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011 wpdt-merged-cell \"\n                     colspan=\"1\"  rowspan=\"2\"                     data-cell-id=\"E1\"\n                    data-col-index=\"4\"\n                    data-row-index=\"0\"\n                    style=\" width:11.933174224344%;                    padding:10px;\n                    \"\n                    >\n                                        Anti-debug                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011 wpdt-merged-cell \"\n                     colspan=\"2\"  rowspan=\"1\"                     data-cell-id=\"F1\"\n                    data-col-index=\"5\"\n                    data-row-index=\"0\"\n                    style=\" width:23.866348448687%;                    padding:10px;\n                    \"\n                    >\n                                        What is encrypted in the dump                     <\/td>\n                                                    <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                                                                            <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"F2\"\n                    data-col-index=\"5\"\n                    data-row-index=\"1\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Strings\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"G2\"\n                    data-col-index=\"6\"\n                    data-row-index=\"1\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        \u04212\u00a0                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"A3\"\n                    data-col-index=\"0\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Arkei (VMP)\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"B3\"\n                    data-col-index=\"1\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"C3\"\n                    data-col-index=\"2\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"D3\"\n                    data-col-index=\"3\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Only\u00a0<br> unpacker\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"E3\"\n                    data-col-index=\"4\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"F3\"\n                    data-col-index=\"5\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"G3\"\n                    data-col-index=\"6\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"A4\"\n                    data-col-index=\"0\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        RisePro (Themida)\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"B4\"\n                    data-col-index=\"1\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"C4\"\n                    data-col-index=\"2\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"D4\"\n                    data-col-index=\"3\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Only unpacker\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"E4\"\n                    data-col-index=\"4\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"F4\"\n                    data-col-index=\"5\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"G4\"\n                    data-col-index=\"6\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"A5\"\n                    data-col-index=\"0\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        RisePro (VMP)\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"B5\"\n                    data-col-index=\"1\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"C5\"\n                    data-col-index=\"2\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"D5\"\n                    data-col-index=\"3\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Only unpacker\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"E5\"\n                    data-col-index=\"4\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"F5\"\n                    data-col-index=\"5\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"G5\"\n                    data-col-index=\"6\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"A6\"\n                    data-col-index=\"0\"\n                    data-row-index=\"5\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        PrivateLoader (VMP)\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"B6\"\n                    data-col-index=\"1\"\n                    data-row-index=\"5\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"C6\"\n                    data-col-index=\"2\"\n                    data-row-index=\"5\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"D6\"\n                    data-col-index=\"3\"\n                    data-row-index=\"5\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Only unpacker\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"E6\"\n                    data-col-index=\"4\"\n                    data-row-index=\"5\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"F6\"\n                    data-col-index=\"5\"\n                    data-row-index=\"5\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"G6\"\n                    data-col-index=\"6\"\n                    data-row-index=\"5\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"A7\"\n                    data-col-index=\"0\"\n                    data-row-index=\"6\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Amadey (Themida)\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"B7\"\n                    data-col-index=\"1\"\n                    data-row-index=\"6\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"C7\"\n                    data-col-index=\"2\"\n                    data-row-index=\"6\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"D7\"\n                    data-col-index=\"3\"\n                    data-row-index=\"6\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Only unpacker\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"E7\"\n                    data-col-index=\"4\"\n                    data-row-index=\"6\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"F7\"\n                    data-col-index=\"5\"\n                    data-row-index=\"6\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"G7\"\n                    data-col-index=\"6\"\n                    data-row-index=\"6\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"A8\"\n                    data-col-index=\"0\"\n                    data-row-index=\"7\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Lumma (VMP)\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000014 wpdt-bold\"\n                                            data-cell-id=\"B8\"\n                    data-col-index=\"1\"\n                    data-row-index=\"7\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        +\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"C8\"\n                    data-col-index=\"2\"\n                    data-row-index=\"7\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000011\"\n                                            data-cell-id=\"D8\"\n                    data-col-index=\"3\"\n                    data-row-index=\"7\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Control flow flattening technique\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"E8\"\n                    data-col-index=\"4\"\n                    data-row-index=\"7\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"F8\"\n                    data-col-index=\"5\"\n                    data-row-index=\"7\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000016 wpdt-bold\"\n                                            data-cell-id=\"G8\"\n                    data-col-index=\"6\"\n                    data-row-index=\"7\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        -\u00a0                    <\/td>\n                                        <\/tr>\n                    <\/table>\n<\/div><style id='wpdt-custom-style-105'>\ntable#wpdtSimpleTable-105{ table-layout: fixed !important; }\ntable#wpdtSimpleTable-105 td, table.wpdtSimpleTable105 th { white-space: normal !important; }\n.wpdt-fs-000011 { font-size: 11px !important;}\n.wpdt-fs-000014 { font-size: 14px !important;}\n.wpdt-fs-000016 { font-size: 16px !important;}\n<\/style>\n\n\n\n\n<p>You may have noticed something interesting \u2014 none of the samples use code virtualization. This makes analysis so much easier! Only one sample has anti-debugging enabled. The malware code itself is largely unprotected, except for the initial stages of compression and decryption. And,&nbsp;while almost all samples have encrypted\/obfuscated strings, only two obfuscate their C2 servers.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RisePro<\/h2>\n\n\n\n<p><a href=\"https:\/\/any.run\/cybersecurity-blog\/risepro-malware-communication-analysis\/\" target=\"_blank\" rel=\"noreferrer noopener\">RisePro<\/a> is a stealer known since 2022 and distributed as Malware-as-a-Service. It\u2019s known to use various protectors \u2014 there are samples found with Themida and VMProtect.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"548\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1-1024x548.png\" alt=\"\" class=\"wp-image-8029\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1-1024x548.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1-300x161.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1-768x411.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1-370x198.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1-270x144.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1-740x396.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/1.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/app.any.run\/tasks\/ab2cbff5-24df-4ecd-a94c-0f1fcf18a2be\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=malware_with_vmprotect&amp;utm_term=180624&amp;utm_content=linktoservice\" target=\"_blank\" rel=\"noreferrer noopener\">Sample with Themida<\/a>.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/app.any.run\/tasks\/96154cac-ea3f-4c84-a3f8-cb2d0047e5c8\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=malware_with_vmprotect&amp;utm_term=180624&amp;utm_content=linktoservice\" target=\"_blank\" rel=\"noreferrer noopener\">Sample with VMProtect<\/a>.&nbsp;<\/li>\n<\/ul>\n\n\n\n<!-- Regular Banner START -->\n<div class=\"regular-banner\">\n<!-- Text Content -->\n<p class=\"regular-banner__text\">\nEasily analyze malware in <span class=\"highlight\">ANY.RUN sandbox<\/span>&nbsp;\n<\/p>\n<!-- CTA Link -->\n<a class=\"regular-banner__link\" id=\"article-banner-regular\" href=\"https:\/\/app.any.run\/?utm_source=anyrunblog&#038;utm_medium=article&#038;utm_campaign=malware_with_vmprotect&#038;utm_term=180624&#038;utm_content=linktoregistration#register\" rel=\"noopener\" target=\"_blank\">\nRegister for free\u00a0\n<\/a>\n<\/div>\n<!-- Regular Banner END -->\n<!-- Regular Banner Styles START -->\n\n<style>\n.regular-banner {\ndisplay: flex;\ntext-align: center;\nflex-direction: column;\nalign-items: center;\ngap: 1.5rem;\nwidth: 100%;\npadding: 2rem;\nmargin: 1.5rem 0;\nborder-radius: 0.5rem;\nfont-family: 'Catamaran Bold';\nmargin-inline: auto;\nbackground: rgba(32, 168, 241, 0.1);\nborder: 1px solid rgba(75, 174, 227, 0.32);\n}\n\n.regular-banner__text {\nfont-size: 1.5rem;\nmargin: 0;\n}\n\n.highlight {\ncolor: #ea2526;\n}\n\n.regular-banner__link {\npadding: 0.5rem 1.5rem;\nfont-weight: 500;\ntext-decoration: none;\nborder-radius: 0.5rem;\ncolor: #FFFFFF;\nbackground-color: #1491D4;\ntext-align: center;\ntransition: all 0.2s ease-in;\n}\n\n.regular-banner__link:hover {\nbackground-color: #68CBFF;\ncolor: white;\n}\n<\/style>\n<!-- Regular Banner Styles END -->\n\n\n\n<h3 class=\"wp-block-heading\">RisePro with Themida<\/h3>\n\n\n\n<p>Of all the protection techniques Themida offers, this sample only uses compressed\/encrypted sections, junk code, and API wrapping. What&#8217;s more, the junk code and API wrapping were only used in the unpacking routine.&nbsp;<\/p>\n\n\n\n<p>We didn&#8217;t encounter any anti-debugging tricks, nor did we notice any code virtualization employed.&nbsp;<\/p>\n\n\n\n<p>Our first goal is to extract the malware body and see how amenable it is to analysis. For this, we&#8217;ll need the x64dbg debugger and a couple of minutes.&nbsp;<\/p>\n\n\n\n<p>After loading the sample in the debugger and reaching its entry point, we need to set a breakpoint on the loading of any system DLL.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"606\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/2.png\" alt=\"\" class=\"wp-image-8030\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/2.png 852w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/2-300x213.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/2-768x546.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/2-370x263.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/2-270x192.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/2-740x526.png 740w\" sizes=\"(max-width: 852px) 100vw, 852px\" \/><\/figure><\/div>\n\n\n<p>Next, we&#8217;ll let the program run until it hits the breakpoint (press F9), and we can then dump the unpacked sample for further <a href=\"https:\/\/any.run\/cybersecurity-blog\/malware-analysis-explained\/\" target=\"_blank\" rel=\"noreferrer noopener\">static analysis<\/a>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1338\" height=\"1193\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-1024x913.png\" alt=\"\" class=\"wp-image-8031\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-1024x913.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-300x267.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-768x685.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-370x330.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-270x241.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-335x300.png 335w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3-740x660.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/3.png 1338w\" sizes=\"(max-width: 1338px) 100vw, 1338px\" \/><\/figure><\/div>\n\n\n<p>Now that we have the dump, we can assess how amenable it is to analysis. As we&#8217;ll see, the code is quite readable. For instance, the following code loads an encrypted string onto the stack and calls a function to decrypt it:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"562\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-1024x562.png\" alt=\"\" class=\"wp-image-8032\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-1024x562.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-300x165.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-768x422.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-1536x843.png 1536w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-370x203.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-270x148.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4-740x406.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/4.png 1756w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>This code ultimately generates this string:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"152\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5-1024x152.png\" alt=\"\" class=\"wp-image-8033\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5-1024x152.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5-300x45.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5-768x114.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5-370x55.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5-270x40.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5-740x110.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/5.png 1061w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>However, there is still some obfuscation in play &#8211; the encrypted string isn&#8217;t stored anywhere, but rather pushed onto the stack using instructions. This raises the question: was this obfuscation done by Themida, or was it present in the sample before packing?&nbsp; &nbsp;<\/p>\n\n\n\n<p>We&#8217;ll answer that a little later.&nbsp;<\/p>\n\n\n\n<p>We can also try searching the dump for anything interesting. In the example below, using the ImHex hex editor and regular expressions, we manage to find the C2 server.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"517\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-1024x517.png\" alt=\"\" class=\"wp-image-8048\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-1024x517.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-300x151.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-768x387.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-1536x775.png 1536w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-2048x1033.png 2048w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-370x187.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-270x136.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/6-1-740x373.png 740w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">RisePro with VMProtect&nbsp; &nbsp;<\/h3>\n\n\n\n<p>Unpacking the VMProtect sample happens similarly. After the first system DLL loads, we dump it and see the same picture \u2014 the C2 server right there in the dump, along with quite readable code.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"525\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-1024x525.png\" alt=\"\" class=\"wp-image-8046\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-1024x525.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-300x154.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-768x394.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-1536x788.png 1536w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-2048x1050.png 2048w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-370x190.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-270x138.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-585x300.png 585w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/7-1-740x379.png 740w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>The code that pushes the same string (&#8220;CreateDirect3dd11DeviceFromDXGIDevice&#8221;) onto the stack looks very similar to the snippet we saw in the Themida sample. From this, we can conclude that the string protection functionality belongs to RisePro itself, not the protector.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"526\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-1024x526.png\" alt=\"\" class=\"wp-image-8036\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-1024x526.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-300x154.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-768x394.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-1536x789.png 1536w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-370x190.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-270x139.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-585x300.png 585w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8-740x380.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/8.png 1756w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>The VMProtect sample also doesn&#8217;t use any code virtualization.&nbsp;<\/p>\n\n\n\n<p>You may notice that although the C2 servers differ between the two samples, their offsets from the start of the segment are identical, despite the different protectors. The same goes for the code that pushes and decrypts the string \u2014 the offsets match.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Other families&nbsp;<\/h3>\n\n\n\n<p>In addition to RisePro, similar protectors are used by families like <a href=\"https:\/\/any.run\/cybersecurity-blog\/privateloader-analyzing-the-encryption-and-decryption-of-a-modern-loader\/\" target=\"_blank\" rel=\"noreferrer noopener\">PrivateLoader<\/a>, <a href=\"https:\/\/any.run\/malware-trends\/amadey\" target=\"_blank\" rel=\"noreferrer noopener\">Amadey<\/a>, <a href=\"https:\/\/any.run\/malware-trends\/arkei\" target=\"_blank\" rel=\"noreferrer noopener\">Arkei<\/a>, and <a href=\"https:\/\/any.run\/cybersecurity-blog\/lumma-github-campaign\/\" target=\"_blank\" rel=\"noreferrer noopener\">Lumma<\/a>. In each case, the virtualization functionality is ignored &#8211; the protectors are used as <a href=\"https:\/\/any.run\/cybersecurity-blog\/malware-packers-explained\/\" target=\"_blank\" rel=\"noreferrer noopener\">simple packers<\/a>, barely hindering analysis.&nbsp;<\/p>\n\n\n\n<!-- Regular Banner START -->\n<div class=\"regular-banner\">\n<!-- Text Content -->\n<p class=\"regular-banner__text\">\nTry all features of ANY.RUN <span class=\"highlight\">for free<\/span><br>\nRequest a 14-day trial&nbsp;\n<\/p>\n<!-- CTA Link -->\n<a class=\"regular-banner__link\" id=\"article-banner-regular\" href=\"https:\/\/any.run\/demo\/?utm_source=anyrunblog&#038;utm_medium=article&#038;utm_campaign=malware_with_vmprotect&#038;utm_term=180624&#038;utm_content=linktodemo\" rel=\"noopener\" target=\"_blank\">\nRequest now\n<\/a>\n<\/div>\n<!-- Regular Banner END -->\n<!-- Regular Banner Styles START -->\n\n<style>\n.regular-banner {\ndisplay: flex;\ntext-align: center;\nflex-direction: column;\nalign-items: center;\ngap: 1.5rem;\nwidth: 100%;\npadding: 2rem;\nmargin: 1.5rem 0;\nborder-radius: 0.5rem;\nfont-family: 'Catamaran Bold';\nmargin-inline: auto;\nbackground: rgba(32, 168, 241, 0.1);\nborder: 1px solid rgba(75, 174, 227, 0.32);\n}\n\n.regular-banner__text {\nfont-size: 1.5rem;\nmargin: 0;\n}\n\n.highlight {\ncolor: #ea2526;\n}\n\n.regular-banner__link {\npadding: 0.5rem 1.5rem;\nfont-weight: 500;\ntext-decoration: none;\nborder-radius: 0.5rem;\ncolor: #FFFFFF;\nbackground-color: #1491D4;\ntext-align: center;\ntransition: all 0.2s ease-in;\n}\n\n.regular-banner__link:hover {\nbackground-color: #68CBFF;\ncolor: white;\n}\n<\/style>\n<!-- Regular Banner Styles END -->\n\n\n\n<h2 class=\"wp-block-heading\">PrivateLoader&nbsp;<\/h2>\n\n\n\n<p>Let\u2019s look at the <a href=\"https:\/\/app.any.run\/tasks\/6e43f440-c3d8-4331-a5a5-cd5c8ddb8294\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=malware_with_vmprotect&amp;utm_term=180624&amp;utm_content=linktoservice\" target=\"_blank\" rel=\"noreferrer noopener\">sample packed with VMProtect<\/a>.&nbsp;<\/p>\n\n\n\n<p>The PrivateLoader sample unpacks in a similar fashion, but unlike RisePro, it doesn&#8217;t store the C2 server in the dump. Instead, it uses a simple <a href=\"https:\/\/any.run\/cybersecurity-blog\/encryption-in-malware\/\" target=\"_blank\" rel=\"noreferrer noopener\">XOR<\/a> algorithm (unrelated to the protector) to decrypt it. To obtain the C2, you just need to emulate the code below or step through it with a debugger.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"768\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imagea-1.png\" alt=\"\" class=\"wp-image-8049\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imagea-1.png 940w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imagea-1-300x245.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imagea-1-768x627.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imagea-1-370x302.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imagea-1-270x221.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imagea-1-740x605.png 740w\" sizes=\"(max-width: 940px) 100vw, 940px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">Arkei&nbsp;<\/h2>\n\n\n\n<p>The Arkei sample is also <a href=\"https:\/\/app.any.run\/tasks\/95b41668-8e3d-438b-a3f9-1233437f71fd\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=malware_with_vmprotect&amp;utm_term=180624&amp;utm_content=linktoservice\" target=\"_blank\" rel=\"noreferrer noopener\">packed with VMProtect<\/a>. After unpacking, we get readable code that loads the required functions from libraries:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"762\" height=\"573\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imageb.png\" alt=\"\" class=\"wp-image-8014\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imageb.png 762w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imageb-300x226.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imageb-370x278.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imageb-270x203.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imageb-740x556.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imageb-80x60.png 80w\" sizes=\"(max-width: 762px) 100vw, 762px\" \/><\/figure>\n\n\n\n<p>We can also find the DDR (Dead Drop Resolver) profiles for C2 server address in the dump among other strings.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"197\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1-1024x197.png\" alt=\"\" class=\"wp-image-8038\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1-1024x197.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1-300x58.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1-768x148.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1-370x71.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1-270x52.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1-740x143.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/9-1.png 1256w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">Lumma&nbsp;<\/h2>\n\n\n\n<p>Here\u2019s the <a href=\"https:\/\/app.any.run\/tasks\/9ad7374d-beb5-44ec-ac0b-1391c79f1205\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=malware_with_vmprotect&amp;utm_term=180624&amp;utm_content=linktoservice\" target=\"_blank\" rel=\"noreferrer noopener\">Lumma sample<\/a> we\u2019ll look at.&nbsp;<\/p>\n\n\n\n<p>Lumma is packed with VMProtect, and unlike the other samples, obfuscation mechanisms are enabled here.&nbsp;<\/p>\n\n\n\n<p>The unpacked code executes in a loop:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"171\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged-1024x171.png\" alt=\"\" class=\"wp-image-8016\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged-1024x171.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged-300x50.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged-768x128.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged-370x62.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged-270x45.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged-740x123.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/imaged.png 1217w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>This appears to be the control flow flattening technique. The function is broken into blocks, each assigned a number. The loop selects which block will execute next on each iteration.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"715\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10-1024x715.png\" alt=\"\" class=\"wp-image-8039\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10-1024x715.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10-300x209.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10-768x536.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10-370x258.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10-270x189.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10-740x517.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/10.png 1054w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>Meanwhile, the C2 server is present in the dump among other strings:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"205\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/11.png\" alt=\"\" class=\"wp-image-8040\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/11.png 1010w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/11-300x61.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/11-768x156.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/11-370x75.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/11-270x55.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/11-740x150.png 740w\" sizes=\"(max-width: 1010px) 100vw, 1010px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">Amadey&nbsp;<\/h2>\n\n\n\n<p>This <a href=\"https:\/\/app.any.run\/tasks\/5b6ae864-a592-477a-9c26-f4807587c1da\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=malware_with_vmprotect&amp;utm_term=180624&amp;utm_content=linktoservice\" target=\"_blank\" rel=\"noreferrer noopener\">Amadey sample<\/a> is packed with Themida.&nbsp;<\/p>\n\n\n\n<p>In Amadey&#8217;s case, strings only appear <a href=\"https:\/\/any.run\/cybersecurity-blog\/malware-configuration\/\">in memory<\/a> after loading kernel.appcore.dll. Unlike previous samples, anti-debugging mechanisms are enabled here. To reach the kernel.appcore.dll loading stage, you&#8217;ll need to use something like TitanHide.&nbsp;<\/p>\n\n\n\n<p>After that, you can dump it like in all the previous cases.&nbsp;<\/p>\n\n\n\n<p>Amadey stores base64-encoded strings in encrypted form. Using the strings utility, we can extract them from the dump:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"966\" height=\"431\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/12.png\" alt=\"\" class=\"wp-image-8041\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/12.png 966w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/12-300x134.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/12-768x343.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/12-370x165.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/12-270x120.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/06\/12-740x330.png 740w\" sizes=\"(max-width: 966px) 100vw, 966px\" \/><\/figure><\/div>\n\n\n<p>To obtain the original strings, we need to decrypt them (Amadey uses its own shuffling algorithm) and decode from base64.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">So, what\u2019s the takeaway?&nbsp;<\/h2>\n\n\n\n<p>We&#8217;ve looked at samples packed with Themida and VMProtect across many families. Did you notice a trend? Almost all of them skip key features like virtualization. This makes reverse engineering them so much easier! They use protectors like <a href=\"https:\/\/any.run\/cybersecurity-blog\/malware-packers-explained\/\" target=\"_blank\" rel=\"noreferrer noopener\">basic packers<\/a>, and that barely hides the analysis.&nbsp;<\/p>\n\n\n\n<p>We can say this: the main challenges that make analysis difficult are not the protectors themselves, but rather the string obfuscation and C2 concealment techniques implemented in the malware itself.&nbsp;<\/p>\n\n\n\n<p>Malware deobfuscation is a whole other complex area that we have previously covered in our blog. <a href=\"https:\/\/any.run\/cybersecurity-blog\/deobfuscating-guloader\/\" target=\"_blank\" rel=\"noreferrer noopener\">This link<\/a> will take you to an in-depth explanation of common obfuscation techniques, ways to get around them, and real-world examples based on GuLoader. Check it out!&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">About ANY.RUN&nbsp;&nbsp;<\/h2>\n\n\n\n<p>ANY.RUN helps more than 400,000 cybersecurity professionals worldwide. Our interactive sandbox simplifies malware analysis of threats that target both Windows and Linux systems. Our threat intelligence products, <a href=\"https:\/\/any.run\/cybersecurity-blog\/introducing-any-run-threat-intelligence-lookup\/\" target=\"_blank\" rel=\"noreferrer noopener\">TI Lookup<\/a>, <a href=\"https:\/\/any.run\/cybersecurity-blog\/yara-search\/\" target=\"_blank\" rel=\"noreferrer noopener\">Yara Search<\/a>, and <a href=\"https:\/\/any.run\/cybersecurity-blog\/threat-intelligence-feeds\/\" target=\"_blank\" rel=\"noreferrer noopener\">Feeds<\/a>,help you find <a href=\"https:\/\/any.run\/cybersecurity-blog\/indicators-of-compromise\/\" target=\"_blank\" rel=\"noreferrer noopener\">IOCs<\/a> or files to learn more about the threats and respond to incidents faster.&nbsp;&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Advantages of ANY.RUN&nbsp;&nbsp;<\/h3>\n\n\n\n<p>ANY.RUN helps you analyze threats faster while improving detection rates. The platform detects common malware families with <a href=\"https:\/\/any.run\/cybersecurity-blog\/yara-search-guide\/\" target=\"_blank\" rel=\"noreferrer noopener\">YARA<\/a> and <a href=\"https:\/\/any.run\/cybersecurity-blog\/detection-with-suricata-ids\/\" target=\"_blank\" rel=\"noreferrer noopener\">Suricata<\/a> rules and identifies malware behavior with signatures when detection by family is not possible.&nbsp;<\/p>\n\n\n\n<p><strong>With ANY.RUN you can:<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Detect malware in under 40s.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/any.run\/cybersecurity-blog\/how-to-use-interactivity-in-a-malware-sandbox\/\" target=\"_blank\" rel=\"noreferrer noopener\">Interact<\/a> with samples in real time.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Save time and money on <a href=\"https:\/\/any.run\/cybersecurity-blog\/how-to-create-a-sandbox\/\" target=\"_blank\" rel=\"noreferrer noopener\">sandbox setup<\/a> and maintenance&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Record and study all aspects of malware behavior.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/any.run\/cybersecurity-blog\/teamwork\/\" target=\"_blank\" rel=\"noreferrer noopener\">Collaborate<\/a> with your team&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scale as you need.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>Try the full power of ANY.RUN for free&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/any.run\/demo\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=malware_with_vmprotect&amp;utm_term=180624&amp;utm_content=linktodemo\" target=\"_blank\" rel=\"noreferrer noopener\">Request free trial \u2192&nbsp;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Malware authors use protectors like Themida and VMProtect in the hope that they will completely prevent analysts from reversing samples.&nbsp;&nbsp; These protectors can use sophisticated techniques to hide malicious functionality: code virtualization, obfuscation, anti-debugging, compression, and encryption. (We&#8217;ll see later in the article why we said &#8220;can.&#8221;) &nbsp; So, do Themida and VMProtect really always [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":8044,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[57,15,34,40],"class_list":["post-8003","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-malware-analysis","tag-anyrun","tag-malware","tag-malware-analysis","tag-malware-behavior"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.10 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Analysis of Malware Protected with Themida and VMprotect<\/title>\n<meta name=\"description\" content=\"See how malware authors use protectors like Themida and VMProtect to hide malicious functionality and learn how to analyze such samples.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Electron and OverviewEffect\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/\"},\"author\":{\"name\":\"Electron and OverviewEffect\",\"@id\":\"https:\/\/any.run\/\"},\"headline\":\"Analyzing Malware Protected with Themida and VMprotect: Is It Really That Hard?\",\"datePublished\":\"2024-06-18T10:36:46+00:00\",\"dateModified\":\"2024-07-31T09:33:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/\"},\"wordCount\":1323,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/any.run\/\"},\"keywords\":[\"ANYRUN\",\"malware\",\"malware analysis\",\"malware behavior\"],\"articleSection\":[\"Malware Analysis\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/\",\"url\":\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/\",\"name\":\"Analysis of Malware Protected with Themida and VMprotect\",\"isPartOf\":{\"@id\":\"https:\/\/any.run\/\"},\"datePublished\":\"2024-06-18T10:36:46+00:00\",\"dateModified\":\"2024-07-31T09:33:31+00:00\",\"description\":\"See how malware authors use protectors like Themida and VMProtect to hide malicious functionality and learn how to analyze such samples.\",\"breadcrumb\":{\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/any.run\/cybersecurity-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Malware Analysis\",\"item\":\"https:\/\/any.run\/cybersecurity-blog\/category\/malware-analysis\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Analyzing Malware Protected with Themida and VMprotect: Is It Really That Hard?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/any.run\/\",\"url\":\"https:\/\/any.run\/\",\"name\":\"ANY.RUN&#039;s Cybersecurity Blog\",\"description\":\"Cybersecurity Blog covers topics for experienced professionals as well as for those new to it.\",\"publisher\":{\"@id\":\"https:\/\/any.run\/\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/any.run\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/any.run\/\",\"name\":\"ANY.RUN\",\"url\":\"https:\/\/any.run\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/any.run\/\",\"url\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg\",\"contentUrl\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg\",\"width\":1,\"height\":1,\"caption\":\"ANY.RUN\"},\"image\":{\"@id\":\"https:\/\/any.run\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/www.any.run\/\",\"https:\/\/twitter.com\/anyrun_app\",\"https:\/\/www.linkedin.com\/company\/30692044\",\"https:\/\/www.youtube.com\/channel\/UCOgCPho7lzmH7m6fPNlukrQ\"]},[{\"@type\":[\"Person\"],\"@id\":\"https:\/\/any.run\/\",\"name\":\"Electron\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/any.run\/\",\"inLanguage\":\"en_US\",\"url\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2023\/05\/6394744-150x150.png\",\"caption\":\"Electron\"}},{\"@type\":[\"Person\"],\"@id\":\"https:\/\/any.run\/\",\"name\":\"OverviewEffect\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/any.run\/\",\"inLanguage\":\"en_US\",\"url\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/1024-1024x683-1-150x150.jpg\",\"caption\":\"OverviewEffect\"}}]]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Analysis of Malware Protected with Themida and VMprotect","description":"See how malware authors use protectors like Themida and VMProtect to hide malicious functionality and learn how to analyze such samples.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/","twitter_misc":{"Written by":"Electron and OverviewEffect","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#article","isPartOf":{"@id":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/"},"author":{"name":"Electron and OverviewEffect","@id":"https:\/\/any.run\/"},"headline":"Analyzing Malware Protected with Themida and VMprotect: Is It Really That Hard?","datePublished":"2024-06-18T10:36:46+00:00","dateModified":"2024-07-31T09:33:31+00:00","mainEntityOfPage":{"@id":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/"},"wordCount":1323,"commentCount":0,"publisher":{"@id":"https:\/\/any.run\/"},"keywords":["ANYRUN","malware","malware analysis","malware behavior"],"articleSection":["Malware Analysis"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/","url":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/","name":"Analysis of Malware Protected with Themida and VMprotect","isPartOf":{"@id":"https:\/\/any.run\/"},"datePublished":"2024-06-18T10:36:46+00:00","dateModified":"2024-07-31T09:33:31+00:00","description":"See how malware authors use protectors like Themida and VMProtect to hide malicious functionality and learn how to analyze such samples.","breadcrumb":{"@id":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/any.run\/cybersecurity-blog\/vmprotect-themida-malware-analysis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/any.run\/cybersecurity-blog\/"},{"@type":"ListItem","position":2,"name":"Malware Analysis","item":"https:\/\/any.run\/cybersecurity-blog\/category\/malware-analysis\/"},{"@type":"ListItem","position":3,"name":"Analyzing Malware Protected with Themida and VMprotect: Is It Really That Hard?"}]},{"@type":"WebSite","@id":"https:\/\/any.run\/","url":"https:\/\/any.run\/","name":"ANY.RUN&#039;s Cybersecurity Blog","description":"Cybersecurity Blog covers topics for experienced professionals as well as for those new to it.","publisher":{"@id":"https:\/\/any.run\/"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/any.run\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/any.run\/","name":"ANY.RUN","url":"https:\/\/any.run\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/any.run\/","url":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg","contentUrl":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg","width":1,"height":1,"caption":"ANY.RUN"},"image":{"@id":"https:\/\/any.run\/"},"sameAs":["https:\/\/www.facebook.com\/www.any.run\/","https:\/\/twitter.com\/anyrun_app","https:\/\/www.linkedin.com\/company\/30692044","https:\/\/www.youtube.com\/channel\/UCOgCPho7lzmH7m6fPNlukrQ"]},[{"@type":["Person"],"@id":"https:\/\/any.run\/","name":"Electron","image":{"@type":"ImageObject","@id":"https:\/\/any.run\/","inLanguage":"en_US","url":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2023\/05\/6394744-150x150.png","caption":"Electron"}},{"@type":["Person"],"@id":"https:\/\/any.run\/","name":"OverviewEffect","image":{"@type":"ImageObject","@id":"https:\/\/any.run\/","inLanguage":"en_US","url":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/1024-1024x683-1-150x150.jpg","caption":"OverviewEffect"}}]]}},"_links":{"self":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts\/8003"}],"collection":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/comments?post=8003"}],"version-history":[{"count":12,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts\/8003\/revisions"}],"predecessor-version":[{"id":8496,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts\/8003\/revisions\/8496"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/media\/8044"}],"wp:attachment":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/media?parent=8003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/categories?post=8003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/tags?post=8003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}