{"id":47,"date":"2011-08-23T16:07:02","date_gmt":"2011-08-23T16:07:02","guid":{"rendered":"http:\/\/www.gironsec.com\/?p=47"},"modified":"2015-06-25T06:58:20","modified_gmt":"2015-06-25T06:58:20","slug":"things-that-make-cracking-a-pain","status":"publish","type":"post","link":"https:\/\/www.gironsec.com\/blog\/2011\/08\/things-that-make-cracking-a-pain\/","title":{"rendered":"Things that make cracking a pain"},"content":{"rendered":"<p>Below is a proof of concept I wrote that that implements several techniques that makes cracking a pain in the ass. I use the classic isdebuggerpresent api as well as use the assembly implementation of it (that I grabbed by stepping through it in a debugger). I use loadlibrary, check for the trap flag, and a few other things that make stepping through the code sucky. On top of that, I mutate strings and store every string as a character array since I&#8217;ve found that storing strings this way fools the string utility in IDA pro. Since loadlibrary uses this weird method it makes it so that you have to breakpoint on the loadlibrary call, but since im checking for breakpoints, you&#8217;re SOL. The one other thing I should have done was used LockFile and memory mapped files so that if you attempt to open the &#8216;sekret&#8217; file while its running it complains windows style with the access denied message. Oh well, another time.<\/p>\n<p>&nbsp;<\/p>\n<p>Here it is in classic C:<\/p>\n<p><!-- HTML generated using hilite.me --><\/p>\n<div style=\"background: #f0f0f0; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #007020;\">#include &lt;stdio.h&gt;<\/span>\r\n<span style=\"color: #007020;\">#include &lt;stdlib.h&gt;<\/span>\r\n<span style=\"color: #007020;\">#include &lt;windows.h&gt;<\/span>\r\n<span style=\"color: #007020;\">#define WIN32_LEAN_AND_MEAN<\/span>\r\n<span style=\"color: #007020;\">#define file \"sektrit.txt\"<\/span>\r\n<span style=\"color: #007020;\">#define FILE_WRITE_TO_END_OF_FILE       0xffffffff<\/span>\r\nBOOL <span style=\"color: #06287e;\">FirstInit<\/span>(<span style=\"color: #902000;\">void<\/span>);\r\n<span style=\"color: #902000;\">int<\/span> <span style=\"color: #06287e;\">SecondInit<\/span>(<span style=\"color: #902000;\">void<\/span>);\r\n<span style=\"color: #902000;\">int<\/span> <span style=\"color: #06287e;\">ThirdInit<\/span>(<span style=\"color: #902000;\">void<\/span>);\r\n<span style=\"color: #902000;\">void<\/span> <span style=\"color: #06287e;\">naw<\/span>(<span style=\"color: #902000;\">void<\/span>);\r\n<span style=\"color: #902000;\">char<\/span><span style=\"color: #666666;\">*<\/span> <span style=\"color: #06287e;\">Mutate<\/span>(<span style=\"color: #902000;\">char<\/span><span style=\"color: #666666;\">*<\/span>);\r\n<span style=\"color: #902000;\">void<\/span> <span style=\"color: #06287e;\">ClosingFile<\/span>(HANDLE);\r\n<span style=\"color: #902000;\">char<\/span><span style=\"color: #666666;\">*<\/span> <span style=\"color: #06287e;\">Pass2File<\/span>(HANDLE,<span style=\"color: #902000;\">char<\/span>[]);\r\n\r\n<span style=\"color: #902000;\">int<\/span> <span style=\"color: #06287e;\">main<\/span>(<span style=\"color: #902000;\">int<\/span> argc, <span style=\"color: #902000;\">char<\/span> <span style=\"color: #666666;\">*<\/span>argv[])\r\n{\r\nprintf(<span style=\"color: #4070a0;\">\"****************************************************************<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>);\r\nprintf(<span style=\"color: #4070a0;\">\"****************************************************************<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>);\r\nprintf(<span style=\"color: #4070a0;\">\"******************Joe G's Ultimate Crackme v 1.1****************<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>);\r\nprintf(<span style=\"color: #4070a0;\">\"****************************************************************<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>);\r\nprintf(<span style=\"color: #4070a0;\">\"****************************************************************<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>);\r\nprintf(<span style=\"color: #4070a0;\">\"<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">Email answers to Evil1 aka iamtheevil1@gmail.com<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>);\r\nSleep(<span style=\"color: #40a070;\">3000<\/span>);\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(IsDebuggerPresent())\r\n{\r\nMessageBox(<span style=\"color: #007020;\">NULL<\/span>,<span style=\"color: #4070a0;\">\"KNOCK IT OFF\"<\/span>,<span style=\"color: #4070a0;\">\"2\"<\/span>,MB_OK);\r\nnaw();\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(<span style=\"color: #40a070;\">1<\/span><span style=\"color: #666666;\">==<\/span><span style=\"color: #40a070;\">2<\/span>)\r\n{\r\nFirstInit();\r\nMessageBox(<span style=\"color: #007020;\">NULL<\/span>,<span style=\"color: #4070a0;\">\"KNOCK IT OFF\"<\/span>,<span style=\"color: #4070a0;\">\"2\"<\/span>,MB_OK);\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> <span style=\"color: #40a070;\">0<\/span>;\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(SecondInit() <span style=\"color: #666666;\">==<\/span> <span style=\"color: #40a070;\">1<\/span>)\r\n{\r\n<span style=\"color: #60a0b0; font-style: italic;\">\/\/ exit gracefully<\/span>\r\nMessageBox(<span style=\"color: #007020;\">NULL<\/span>,<span style=\"color: #4070a0;\">\"KNOCK IT OFF\"<\/span>,<span style=\"color: #4070a0;\">\"2\"<\/span>,MB_OK);\r\nnaw();\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(ThirdInit() <span style=\"color: #666666;\">+<\/span> <span style=\"color: #40a070;\">2<\/span> <span style=\"color: #666666;\">==<\/span> <span style=\"color: #40a070;\">4<\/span>)\r\n{\r\nMessageBox(<span style=\"color: #007020;\">NULL<\/span>,<span style=\"color: #4070a0;\">\"KNOCK IT OFF\"<\/span>,<span style=\"color: #4070a0;\">\"2\"<\/span>,MB_OK);\r\nnaw();\r\n}<span style=\"color: #902000;\">char<\/span> randgenfilepass[<span style=\"color: #40a070;\">24<\/span>];\r\nrandgenfilepass[<span style=\"color: #40a070;\">0<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'t'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">1<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'h'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">2<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'e'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">3<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'r'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">4<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'e'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">5<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'i'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">6<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'s'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">7<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'n'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">8<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'o'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">9<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'t'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">10<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'h'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">11<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'i'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">12<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'n'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">13<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'g'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">14<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'f'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">15<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'o'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">16<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'r'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">17<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'y'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">18<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'o'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">19<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'u'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">20<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'h'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">21<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'e'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">22<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'r'<\/span>;\r\nrandgenfilepass[<span style=\"color: #40a070;\">23<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'e'<\/span>;\r\n\r\n\r\n<span style=\"color: #902000;\">char<\/span> dix[<span style=\"color: #40a070;\">4<\/span>];\r\ndix[<span style=\"color: #40a070;\">0<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'y'<\/span>;\r\ndix[<span style=\"color: #40a070;\">1<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'o'<\/span>;\r\ndix[<span style=\"color: #40a070;\">2<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'u'<\/span>;\r\ndix[<span style=\"color: #40a070;\">3<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'\\0'<\/span>;\r\nHANDLE hfile <span style=\"color: #666666;\">=<\/span> CreateFile(file,GENERIC_READ <span style=\"color: #666666;\">|<\/span> GENERIC_WRITE,<span style=\"color: #40a070;\">0<\/span>,<span style=\"color: #007020;\">NULL<\/span>,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,\r\n<span style=\"color: #007020;\">NULL<\/span>);\r\n<span style=\"color: #902000;\">char<\/span> <span style=\"color: #666666;\">*<\/span>thepass <span style=\"color: #666666;\">=<\/span> Pass2File(hfile,randgenfilepass);\r\nprintf(<span style=\"color: #4070a0;\">\"The password is randomly generated locked inside %s. Good luck trying to open it!<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>, file);\r\n<span style=\"color: #007020; font-weight: bold;\">__asm<\/span> {\r\nnop;nop;nop;nop\r\n};\r\n<span style=\"color: #902000;\">char<\/span> pass[<span style=\"color: #40a070;\">128<\/span>];\r\n<span style=\"color: #902000;\">int<\/span> count <span style=\"color: #666666;\">=<\/span> <span style=\"color: #40a070;\">0<\/span>;\r\n<span style=\"color: #007020; font-weight: bold;\">for<\/span>(;count <span style=\"color: #666666;\">&lt;<\/span> <span style=\"color: #40a070;\">5<\/span>;count<span style=\"color: #666666;\">++<\/span>)\r\n{\r\nprintf(<span style=\"color: #4070a0;\">\"What is the password?<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>);\r\nscanf(<span style=\"color: #4070a0;\">\"%s\"<\/span>,<span style=\"color: #666666;\">&amp;<\/span>pass);\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(strcmp(pass,thepass) <span style=\"color: #666666;\">==<\/span> <span style=\"color: #40a070;\">0<\/span>)\r\n{\r\n<span style=\"color: #902000;\">int<\/span> ghe <span style=\"color: #666666;\">=<\/span> <span style=\"color: #40a070;\">126387<\/span>;\r\nghe <span style=\"color: #666666;\">^<\/span> <span style=\"color: #40a070;\">3<\/span>;\r\nprintf(<span style=\"color: #4070a0;\">\"great fuckin job man! Email me with '%08x &gt; %s' in the subject line<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>,<span style=\"color: #007020; font-weight: bold;\">sizeof<\/span>(hfile) <span style=\"color: #666666;\">+<\/span> ghe,dix);\r\n<span style=\"color: #007020; font-weight: bold;\">break<\/span>;\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">else<\/span>\r\n{\r\n\r\nprintf(<span style=\"color: #4070a0;\">\"WRONG! Attempt %d of 5<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>,count<span style=\"color: #666666;\">+<\/span><span style=\"color: #40a070;\">1<\/span>);\r\n}\r\n\r\n}\r\nClosingFile(hfile);\r\nsystem(<span style=\"color: #4070a0;\">\"PAUSE\"<\/span>);\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> <span style=\"color: #40a070;\">0<\/span>;\r\n}\r\n\r\n<span style=\"color: #902000;\">void<\/span> <span style=\"color: #06287e;\">ClosingFile<\/span>(HANDLE hfile)\r\n{\r\nOVERLAPPED ol;\r\nmemset(<span style=\"color: #666666;\">&amp;<\/span>ol, <span style=\"color: #40a070;\">0<\/span>, <span style=\"color: #007020; font-weight: bold;\">sizeof<\/span>(ol));\r\nol.Offset <span style=\"color: #666666;\">=<\/span> FILE_WRITE_TO_END_OF_FILE;\r\nol.OffsetHigh <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">-<\/span><span style=\"color: #40a070;\">1<\/span>;\r\nDWORD dwBytesWritten;\r\n\r\nWriteFile(hfile, <span style=\"color: #4070a0;\">\"naw\"<\/span>, <span style=\"color: #40a070;\">3<\/span>, <span style=\"color: #666666;\">&amp;<\/span>dwBytesWritten, <span style=\"color: #666666;\">&amp;<\/span>ol);\r\n<span style=\"color: #902000;\">unsigned<\/span> <span style=\"color: #902000;\">int<\/span> sloop <span style=\"color: #666666;\">=<\/span> <span style=\"color: #40a070;\">2000<\/span>;\r\nSleep(sloop);\r\n\r\nCloseHandle(hfile);\r\nprintf(<span style=\"color: #4070a0;\">\"file: %s unlocked and cleared, better luck next time :)<\/span><span style=\"color: #4070a0; font-weight: bold;\">\\r\\n\\n<\/span><span style=\"color: #4070a0;\">\"<\/span>,file);\r\n}\r\n\r\n<span style=\"color: #902000;\">char<\/span><span style=\"color: #666666;\">*<\/span> <span style=\"color: #06287e;\">Pass2File<\/span>(HANDLE hfile, <span style=\"color: #902000;\">char<\/span> randgenfilepass[])\r\n{\r\nOVERLAPPED ol;\r\nmemset(<span style=\"color: #666666;\">&amp;<\/span>ol, <span style=\"color: #40a070;\">0<\/span>, <span style=\"color: #007020; font-weight: bold;\">sizeof<\/span>(ol));\r\nol.Offset <span style=\"color: #666666;\">=<\/span> FILE_WRITE_TO_END_OF_FILE;\r\nol.OffsetHigh <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">-<\/span><span style=\"color: #40a070;\">1<\/span>;\r\nDWORD dwBytesWritten;\r\n<span style=\"color: #60a0b0; font-style: italic;\">\/\/ mutate string, store string in file, with writefile<\/span>\r\n<span style=\"color: #902000;\">char<\/span> <span style=\"color: #666666;\">*<\/span>string <span style=\"color: #666666;\">=<\/span> Mutate(randgenfilepass);\r\nWriteFile(hfile, string,<span style=\"color: #40a070;\">29<\/span>, <span style=\"color: #666666;\">&amp;<\/span>dwBytesWritten, <span style=\"color: #666666;\">&amp;<\/span>ol);\r\n\r\n\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> string;\r\n}\r\n\r\n<span style=\"color: #902000;\">char<\/span><span style=\"color: #666666;\">*<\/span> <span style=\"color: #06287e;\">Mutate<\/span>(<span style=\"color: #902000;\">char<\/span><span style=\"color: #666666;\">*<\/span> strString)\r\n{\r\n<span style=\"color: #902000;\">int<\/span> x;\r\n<span style=\"color: #007020; font-weight: bold;\">for<\/span>(x<span style=\"color: #666666;\">=<\/span><span style=\"color: #40a070;\">0<\/span>;x<span style=\"color: #666666;\">&gt;<\/span><span style=\"color: #007020; font-weight: bold;\">sizeof<\/span>(strString);x<span style=\"color: #666666;\">++<\/span>)\r\n{\r\nstrString[x] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'f'<\/span>;\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> strString;\r\n}\r\n<span style=\"color: #902000;\">void<\/span> <span style=\"color: #06287e;\">naw<\/span>()\r\n{\r\n<span style=\"color: #902000;\">unsigned<\/span> <span style=\"color: #902000;\">int<\/span> sloop <span style=\"color: #666666;\">=<\/span> <span style=\"color: #40a070;\">5000<\/span>;\r\nSleep(sloop);\r\nHANDLE hproc <span style=\"color: #666666;\">=<\/span> GetCurrentProcess();\r\nTerminateProcess(hproc,<span style=\"color: #40a070;\">1<\/span>);\r\nCloseHandle(hproc);\r\n}\r\n\r\n\r\nBOOL <span style=\"color: #06287e;\">FirstInit<\/span>()\r\n{\r\nBOOL res <span style=\"color: #666666;\">=<\/span> FALSE;\r\n<span style=\"color: #902000;\">char<\/span> gfej[<span style=\"color: #40a070;\">13<\/span>];\r\ngfej[<span style=\"color: #40a070;\">1<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'K'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">2<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'e'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">3<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'r'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">4<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'n'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">5<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'e'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">6<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'l'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">7<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'3'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">8<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'2'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">9<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'.'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">10<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'d'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">11<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'l'<\/span>;\r\ngfej[<span style=\"color: #40a070;\">12<\/span>] <span style=\"color: #666666;\">=<\/span> <span style=\"color: #4070a0;\">'l'<\/span>;\r\n\r\nHMODULE   lol  <span style=\"color: #666666;\">=<\/span> LoadLibrary(gfej);\r\nFARPROC ruthar <span style=\"color: #666666;\">=<\/span>  GetProcAddress(lol,MAKEINTRESOURCE(<span style=\"color: #40a070;\">558<\/span>));\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(ruthar())\r\n{\r\nres <span style=\"color: #666666;\">=<\/span> TRUE;\r\n}\r\nFreeLibrary(lol);\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> res;\r\n\r\n}\r\n\r\n<span style=\"color: #902000;\">int<\/span> <span style=\"color: #06287e;\">SecondInit<\/span>()\r\n{\r\n<span style=\"color: #902000;\">char<\/span> whatupcuz <span style=\"color: #666666;\">=<\/span> <span style=\"color: #40a070;\">0<\/span>;\r\n<span style=\"color: #007020; font-weight: bold;\">__asm<\/span> {\r\nmov eax, fs<span style=\"color: #666666;\">:<\/span>[<span style=\"color: #40a070;\">30<\/span>h]\r\nmov al, [eax <span style=\"color: #666666;\">+<\/span> <span style=\"color: #40a070;\">2<\/span>h]\r\nmov whatupcuz,al\r\n}\r\n\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(whatupcuz)\r\n{\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> <span style=\"color: #40a070;\">1<\/span>;\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> <span style=\"color: #40a070;\">0<\/span>;\r\n\r\n}\r\n\r\n<span style=\"color: #902000;\">int<\/span> <span style=\"color: #06287e;\">ThirdInit<\/span>()\r\n{\r\n<span style=\"color: #902000;\">unsigned<\/span> <span style=\"color: #902000;\">long<\/span> specialflag <span style=\"color: #666666;\">=<\/span> <span style=\"color: #40a070;\">0<\/span>;\r\n\r\n<span style=\"color: #007020; font-weight: bold;\">__asm<\/span> {\r\n\r\nmov eax, fs<span style=\"color: #666666;\">:<\/span>[<span style=\"color: #40a070;\">30<\/span>h]\r\nmov eax, [eax <span style=\"color: #666666;\">+<\/span> <span style=\"color: #40a070;\">68<\/span>h]\r\nmov specialflag, eax\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">if<\/span>(specialflag <span style=\"color: #666666;\">&amp;<\/span> <span style=\"color: #40a070;\">0x70<\/span>)\r\n{\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> <span style=\"color: #40a070;\">2<\/span>;\r\n}\r\n<span style=\"color: #007020; font-weight: bold;\">return<\/span> <span style=\"color: #40a070;\">4<\/span>;\r\n\r\n}\r\n<\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Below is a proof of concept I wrote that that implements several techniques that makes cracking a pain in the ass. I use the classic isdebuggerpresent api as well as use the assembly implementation of it (that I grabbed by stepping through it in a debugger). I use loadlibrary, check for the trap flag, and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts\/47"}],"collection":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":4,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts\/47\/revisions"}],"predecessor-version":[{"id":1139,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts\/47\/revisions\/1139"}],"wp:attachment":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/media?parent=47"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/categories?post=47"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/tags?post=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}