{"id":76,"date":"2018-08-01T10:52:39","date_gmt":"2018-08-01T08:52:39","guid":{"rendered":"http:\/\/wp.famlarsson.net\/?p=76"},"modified":"2018-08-01T10:52:39","modified_gmt":"2018-08-01T08:52:39","slug":"ta-sig-forbi-losenordsskydd-excel-macro","status":"publish","type":"post","link":"https:\/\/wp.famlarsson.net\/?p=76","title":{"rendered":"Ta sig f\u00f6rbi l\u00f6senordsskydd Excel macro"},"content":{"rendered":"<p>Written by <a href=\"https:\/\/stackoverflow.com\/users\/1188513\/mathieu-guindon\"><u><span style=\"color: #0066cc;\">Mathieu Guindon<\/span><\/u><\/a><\/p>\n<p>found on<\/p>\n<p>https:\/\/stackoverflow.com\/questions\/1026483\/is-there-a-way-to-crack-the-password-on-an-excel-vba-project<\/p>\n<p><span class=\"vote-accepted-on load-accepted-answer-date\" title=\"loading when this answer was accepted...\">You can try this direct <code><span style=\"font-size: medium;\">VBA<\/span><\/code> approach which doesn&#8217;t require HEX editing. It will work for any files (*.xls, *.xlsm, *.xlam &#8230;).<\/span><\/p>\n<div class=\"answercell post-layout--right\">\n<div class=\"post-text\">\n<p>Tested and works on<\/p>\n<blockquote><p>Excel 2007<br \/>\nExcel 2010<br \/>\nExcel 2013 &#8211; <strong>32 bit version<\/strong>.<br \/>\nExcel 2016 &#8211; <strong>32 bit version<\/strong>.<\/p><\/blockquote>\n<p>Looking for 64 bit version? See <a href=\"https:\/\/stackoverflow.com\/a\/31005696\/4342479\"><u><span style=\"color: #0066cc;\">https:\/\/stackoverflow.com\/a\/31005696\/4342479<\/span><\/u><\/a><\/p>\n<p><strong>how it works<\/strong><\/p>\n<p>I will try my best to explain how it works &#8211; please excuse my english.<\/p>\n<ol>\n<li>The VBE will call a system function to create the password dialog box.<\/li>\n<li>If user enters the right password and click OK, this function returns 1. If user enters the wrong password or click Cancel, this function returns 0.<\/li>\n<li>After the dialog box is closed, the VBE checks the returned value of the system function<\/li>\n<li>if this value is 1, the VBE will &#8221;think&#8221; that the password is right, hence the locked VBA project will be opened.<\/li>\n<li>The code below swaps the memory of the original function used to display the password dialog with a user defined function that will always return 1 when being called.<\/li>\n<\/ol>\n<p><em>using the code<\/em><\/p>\n<ol>\n<li>Open the file(s) that contain your locked VBA Projects<\/li>\n<li>Create a new xlsm file and store this code in <strong>Module1<\/strong>\n<p><code><span style=\"font-size: medium;\">code credited to Siwtom (nick name), a Vietnamese developer<\/span><\/code><\/p>\n<pre class=\"lang-vb prettyprint prettyprinted\"><code><span class=\"kwd\">Option<\/span><span class=\"pln\"> Explicit\r\n\r\n<\/span><span class=\"kwd\">Private<\/span> <span class=\"kwd\">Const<\/span><span class=\"pln\"> PAGE_EXECUTE_READWRITE <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">&amp;H40<\/span>\r\n\r\n<span class=\"kwd\">Private<\/span> <span class=\"kwd\">Declare<\/span> <span class=\"kwd\">Sub<\/span><span class=\"pln\"> MoveMemory <\/span><span class=\"kwd\">Lib<\/span> <span class=\"str\">\"kernel32\"<\/span> <span class=\"kwd\">Alias<\/span> <span class=\"str\">\"RtlMoveMemory\"<\/span><span class=\"pln\"> _\r\n        <\/span><span class=\"pun\">(<\/span><span class=\"pln\">Destination <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> Source <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> Length <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">)<\/span>\r\n\r\n<span class=\"kwd\">Private<\/span> <span class=\"kwd\">Declare<\/span> <span class=\"kwd\">Function<\/span><span class=\"pln\"> VirtualProtect <\/span><span class=\"kwd\">Lib<\/span> <span class=\"str\">\"kernel32\"<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">lpAddress <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _\r\n        <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> dwSize <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> flNewProtect <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> lpflOldProtect <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span>\r\n\r\n<span class=\"kwd\">Private<\/span> <span class=\"kwd\">Declare<\/span> <span class=\"kwd\">Function<\/span><span class=\"pln\"> GetModuleHandleA <\/span><span class=\"kwd\">Lib<\/span> <span class=\"str\">\"kernel32\"<\/span> <span class=\"pun\">(<\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> lpModuleName <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">String<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span>\r\n\r\n<span class=\"kwd\">Private<\/span> <span class=\"kwd\">Declare<\/span> <span class=\"kwd\">Function<\/span><span class=\"pln\"> GetProcAddress <\/span><span class=\"kwd\">Lib<\/span> <span class=\"str\">\"kernel32\"<\/span> <span class=\"pun\">(<\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> hModule <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _\r\n        <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> lpProcName <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">String<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span>\r\n\r\n<span class=\"kwd\">Private<\/span> <span class=\"kwd\">Declare<\/span> <span class=\"kwd\">Function<\/span><span class=\"pln\"> DialogBoxParam <\/span><span class=\"kwd\">Lib<\/span> <span class=\"str\">\"user32\"<\/span> <span class=\"kwd\">Alias<\/span> <span class=\"str\">\"DialogBoxParamA\"<\/span> <span class=\"pun\">(<\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> hInstance <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _\r\n        <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> pTemplateName <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> hWndParent <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _\r\n        <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> lpDialogFunc <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> dwInitParam <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Integer<\/span>\r\n\r\n<span class=\"kwd\">Dim<\/span><span class=\"pln\"> HookBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span> <span class=\"kwd\">To<\/span> <span class=\"lit\">5<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Byte<\/span>\r\n<span class=\"kwd\">Dim<\/span><span class=\"pln\"> OriginBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span> <span class=\"kwd\">To<\/span> <span class=\"lit\">5<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Byte<\/span>\r\n<span class=\"kwd\">Dim<\/span><span class=\"pln\"> pFunc <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span>\r\n<span class=\"kwd\">Dim<\/span><span class=\"pln\"> Flag <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Boolean<\/span>\r\n\r\n<span class=\"kwd\">Private<\/span> <span class=\"kwd\">Function<\/span><span class=\"pln\"> GetPtr<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> Value <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pln\">\r\n    GetPtr <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> Value\r\n<\/span><span class=\"kwd\">End<\/span> <span class=\"kwd\">Function<\/span>\r\n\r\n<span class=\"kwd\">Public<\/span> <span class=\"kwd\">Sub<\/span><span class=\"pln\"> RecoverBytes<\/span><span class=\"pun\">()<\/span>\r\n    <span class=\"kwd\">If<\/span><span class=\"pln\"> Flag <\/span><span class=\"kwd\">Then<\/span><span class=\"pln\"> MoveMemory <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> pFunc<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> VarPtr<\/span><span class=\"pun\">(<\/span><span class=\"pln\">OriginBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">)),<\/span> <span class=\"lit\">6<\/span>\r\n<span class=\"kwd\">End<\/span> <span class=\"kwd\">Sub<\/span>\r\n\r\n<span class=\"kwd\">Public<\/span> <span class=\"kwd\">Function<\/span><span class=\"pln\"> Hook<\/span><span class=\"pun\">()<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Boolean<\/span>\r\n    <span class=\"kwd\">Dim<\/span><span class=\"pln\"> TmpBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span> <span class=\"kwd\">To<\/span> <span class=\"lit\">5<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Byte<\/span>\r\n    <span class=\"kwd\">Dim<\/span><span class=\"pln\"> p <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span>\r\n    <span class=\"kwd\">Dim<\/span><span class=\"pln\"> OriginProtect <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pln\">\r\n\r\n    Hook <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">False<\/span><span class=\"pln\">\r\n\r\n    pFunc <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> GetProcAddress<\/span><span class=\"pun\">(<\/span><span class=\"pln\">GetModuleHandleA<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"user32.dll\"<\/span><span class=\"pun\">),<\/span> <span class=\"str\">\"DialogBoxParamA\"<\/span><span class=\"pun\">)<\/span>\r\n\r\n\r\n    <span class=\"kwd\">If<\/span><span class=\"pln\"> VirtualProtect<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> pFunc<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">6<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> PAGE_EXECUTE_READWRITE<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> OriginProtect<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">&lt;&gt;<\/span> <span class=\"lit\">0<\/span> <span class=\"kwd\">Then<\/span><span class=\"pln\">\r\n\r\n        MoveMemory <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> VarPtr<\/span><span class=\"pun\">(<\/span><span class=\"pln\">TmpBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">)),<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> pFunc<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">6<\/span>\r\n        <span class=\"kwd\">If<\/span><span class=\"pln\"> TmpBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">&lt;&gt;<\/span> <span class=\"lit\">&amp;H68<\/span> <span class=\"kwd\">Then<\/span><span class=\"pln\">\r\n\r\n            MoveMemory <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> VarPtr<\/span><span class=\"pun\">(<\/span><span class=\"pln\">OriginBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">)),<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> pFunc<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">6<\/span><span class=\"pln\">\r\n\r\n            p <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> GetPtr<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">AddressOf<\/span><span class=\"pln\"> MyDialogBoxParam<\/span><span class=\"pun\">)<\/span><span class=\"pln\">\r\n\r\n            HookBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=<\/span> <span class=\"lit\">&amp;H68<\/span><span class=\"pln\">\r\n            MoveMemory <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> VarPtr<\/span><span class=\"pun\">(<\/span><span class=\"pln\">HookBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1<\/span><span class=\"pun\">)),<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> VarPtr<\/span><span class=\"pun\">(<\/span><span class=\"pln\">p<\/span><span class=\"pun\">),<\/span> <span class=\"lit\">4<\/span><span class=\"pln\">\r\n            HookBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">5<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=<\/span> <span class=\"lit\">&amp;HC3<\/span><span class=\"pln\">\r\n\r\n            MoveMemory <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> pFunc<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> VarPtr<\/span><span class=\"pun\">(<\/span><span class=\"pln\">HookBytes<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">)),<\/span> <span class=\"lit\">6<\/span><span class=\"pln\">\r\n            Flag <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">True<\/span><span class=\"pln\">\r\n            Hook <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">True<\/span>\r\n        <span class=\"kwd\">End<\/span> <span class=\"kwd\">If<\/span>\r\n    <span class=\"kwd\">End<\/span> <span class=\"kwd\">If<\/span>\r\n<span class=\"kwd\">End<\/span> <span class=\"kwd\">Function<\/span>\r\n\r\n<span class=\"kwd\">Private<\/span> <span class=\"kwd\">Function<\/span><span class=\"pln\"> MyDialogBoxParam<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> hInstance <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _\r\n        <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> pTemplateName <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> hWndParent <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _\r\n        <\/span><span class=\"kwd\">ByVal<\/span><span class=\"pln\"> lpDialogFunc <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">ByVal<\/span><span class=\"pln\"> dwInitParam <\/span><span class=\"kwd\">As<\/span> <span class=\"kwd\">Long<\/span><span class=\"pun\">)<\/span> <span class=\"kwd\">As<\/span> <span class=\"kwd\">Integer<\/span>\r\n    <span class=\"kwd\">If<\/span><span class=\"pln\"> pTemplateName <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">4070<\/span> <span class=\"kwd\">Then<\/span><span class=\"pln\">\r\n        MyDialogBoxParam <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">1<\/span>\r\n    <span class=\"kwd\">Else<\/span><span class=\"pln\">\r\n        RecoverBytes\r\n        MyDialogBoxParam <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> DialogBoxParam<\/span><span class=\"pun\">(<\/span><span class=\"pln\">hInstance<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> pTemplateName<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _\r\n                           hWndParent<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> lpDialogFunc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> dwInitParam<\/span><span class=\"pun\">)<\/span><span class=\"pln\">\r\n        Hook\r\n    <\/span><span class=\"kwd\">End<\/span> <span class=\"kwd\">If<\/span>\r\n<span class=\"kwd\">End<\/span> <span class=\"kwd\">Function<\/span><\/code><\/pre>\n<\/li>\n<li>Paste this code in <strong>Module2<\/strong> and run it\n<pre class=\"lang-vb prettyprint prettyprinted\"><code><span class=\"kwd\">Sub<\/span><span class=\"pln\"> unprotected<\/span><span class=\"pun\">()<\/span>\r\n    <span class=\"kwd\">If<\/span><span class=\"pln\"> Hook <\/span><span class=\"kwd\">Then<\/span><span class=\"pln\">\r\n        MsgBox <\/span><span class=\"str\">\"VBA Project is unprotected!\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> vbInformation<\/span><span class=\"pun\">,<\/span> <span class=\"str\">\"*****\"<\/span>\r\n    <span class=\"kwd\">End<\/span> <span class=\"kwd\">If<\/span>\r\n<span class=\"kwd\">End<\/span> <span class=\"kwd\">Sub<\/span><\/code><\/pre>\n<\/li>\n<li>Come back to your VBA Projects and enjoy.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Written by Mathieu Guindon found on https:\/\/stackoverflow.com\/questions\/1026483\/is-there-a-way-to-crack-the-password-on-an-excel-vba-project You can try this direct VBA approach which doesn&#8217;t require HEX editing. It will work for any files (*.xls, *.xlsm, *.xlam &#8230;). Tested and works on Excel 2007 Excel 2010 Excel 2013 &#8211; 32 bit version. Excel 2016 &#8211; 32 bit version. Looking for 64 bit version? See [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=\/wp\/v2\/posts\/76"}],"collection":[{"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=76"}],"version-history":[{"count":1,"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions"}],"predecessor-version":[{"id":77,"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions\/77"}],"wp:attachment":[{"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.famlarsson.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}