From 3e262f2ef18553f7e01b4a14cc7bff6b970ca7ad Mon Sep 17 00:00:00 2001 From: "mr.exodia" Date: Sun, 13 Oct 2013 18:23:46 +0200 Subject: [PATCH] - fixed c++ headers (thanks to cypher) - removed kernelbase.dll ignore --- Release/x32/TitanEngine.dll | Bin 628224 -> 628224 bytes Release/x32/TitanEngine.exp | Bin 57219 -> 57219 bytes Release/x32/TitanEngine.lib | Bin 98584 -> 98584 bytes Release/x64/TitanEngine.dll | Bin 723456 -> 723456 bytes Release/x64/TitanEngine.exp | Bin 56205 -> 56205 bytes Release/x64/TitanEngine.lib | Bin 94948 -> 94948 bytes SDK/C/TitanEngine.h | 6 + SDK/CPP/TitanEngine.h | 1271 +++++++++++++++++------------------ SDK/CPP/TitanEngine.hpp | 2 - TitanEngine/TitanEngine.cpp | 16 +- 10 files changed, 647 insertions(+), 648 deletions(-) diff --git a/Release/x32/TitanEngine.dll b/Release/x32/TitanEngine.dll index 71ef3cce5b7fc24e490e57334c5a6dbbab215df7..296b2a70613e114ef3678a8f5c652543ca9c38d0 100644 GIT binary patch delta 44079 zcmeF4d3a6N|L^x&d+(ftM0UtX5D`QS8Ih1g90{SKK~!i|s^~GbsTxv3qG+QL!p5S8 z#!yrZA*qc9DOy9(P;JvTNK5;Tnqp|H72NmQXRL33_x^LA=l*l^Jg= zk&w65>hQEyXZ}w=>~0&{q%ZKLxOS>~Dl(KNwk!QR zas=@*wf%38i|Y6;p=7hVx=W!!=_o6v%!z8JuJP2PRGr+_*W0I56y{~82~&LvhSm%| zFy@9qsTE7rHC>-GgxS5xAazn#zh=Ysa_97aIQNFFAR%2X?%KzY>X2ipdb68f2ewBP z-1ntsEVwYOYe7;?s=0!>u+GaKAWRJ`NU0fQwoNV#iylVECu)AocAo~V^p2REsUS=c z3JdEVKYco=_JP{3`%BcTmHJWl>9l!(+Ny^ynWuK|(T1E;GkZk%Y;S4KrQo9RT(ysQ zuI1`SJu*qD+8{Qk`MwsqN5Rng!oK`9WvP+ZVod|uyUu_=Wjwbu7(|azXQO(o_39ZQzwR1u{->RmPQ1HvhW4M|_ z3vNz$V#+d)MCs&&;nc9oGAw6}@nnzc+B=XeRzrIy(PUqBdhcM`!dETs9YXG@U-oWA zD%D%P$CF=6hb0arq^NXf(qDwERJZm$Lk_A_lcTvQ`3WIQ)gApSQP}L~#*yLbwddNC z-D;x&%g9=F!+;2KUA+kXt@>(81Z~|&U6T?;CaaYx<)lO{92h|!s}%!V(E+ZdR|l4o zrfnPQV-ituBkYFv1X7rCe^9|t&%w2g8mc9!zAg_MSd!H}MlZvDOTTWV&LKYMo%N&% zu7yb#F_sGQxel&9Qu_AbV1f(t@sMVQ8jJtgA>%Rg)ow$B$w)PG=nt6wJzfY#)5pAU zjy90gs9~voABna>w2Y#2C-Zz=H*B<9-$$ZQxT4}Oey!dpbxnVVk_oChB9Z)}R*eWG zM@t`#*iFe`_2ZF!$!Yce$Y8Re)c++P+Vtgg)+S67uw!w;+1@ z)2FGmZ(6K*@#gth(v8o@k!sD@q2yh)>$veQ2X2bOf(rNfht+N4qMNwSuR+=K4n-li z;J)ApBI=ECfi&)>>i()vZli(~`*9yET*1?COfzL(m6XB-S%0Idr(VuKNy>tXX`@UM z5is?+b&%P=VEzidIR%B~`d#$h4L*?Re_$Y=dKK45$`|ux?k*HA;Ko!-W?PZ2mTIF{ zR6cq7v|s^m!@LTzP#4!-pFVx+zOV3I+(Qdaxi4^a7leWpn-QB=u2(C#&o5o^>M}yS zN`uGyOC-58Y4W#}c$E5Qtt9k^%cW&+h$5L*x_|071ebF0^l(zBR!skm{#;eMW5#7d zHmU`0jU_pyci##k)aR&rVCvA)Nwb_un=EwSl;`fG*jgHH%D3CDp=YL5>gt?;Hk<8M z%P@tT%I!AY^Ne~qCm^@VZnb!JHr3f}x@SF)XEo&Y@_4}lemNE{ScE>`NH95Hd$v^_ zO#ybBUP4D6cPODyFQIVJBX#!d7fH1G{p{8>^;dOJZu`=9b0k6%)sDHX>Emm#+$X7O zQeJC%?J7@J)x2FKL-+sB&$@rn+&_q6n`Pz}&bvuSlhTImCz@C~lHh`4b5Q+8yN=)37Pm5|p;Utbx@f(5qS+I{rta`npETSQUMuA5Dksn4xXA_LT=>)X(_DiZwE^Xo^FU25nD zNyMc7^nstc_ybpJT&A8|=iA`M#2c*&lCGuJwp0&)5J>BnB7<+k8*N}sxi+Zw`=#7V zZC-rcP-(f%-8S?jS!&9LVB(`r-!PucR%eNlI`jN%vf`(SX zqXyo`;axqrcD(vvQ<&fW!hf$OK#kiR9q^wbo~mFC4!Gg}Urjkxr0yJ`;q$DmSx1HG;Qldk*rfIwpY`Ng=*+-zf$ev=^_bLJMXT>!q~9n zRr=d}b!y4ahJeoIb#>&PG}2JryC<0LU9VQ}F%e%iY3~ZG%|Gs)O9XXf=_brBQZ|d$ z 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�F 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 diff --git a/Release/x32/TitanEngine.exp b/Release/x32/TitanEngine.exp index fb3623fea259e51e0a35aa08d6ad92b61873085a..85663b5cdf3086c5e0bc57bc1d7a8d9efcf7e595 100644 GIT binary patch delta 25 fcmZqP&)mG9ncatxnIYzA)I|19W+1h3@`rl>Zz2i~ delta 25 fcmZqP&)mG9ncatxnZajAY|07J diff --git a/Release/x32/TitanEngine.lib b/Release/x32/TitanEngine.lib index f1cbd59a45be3f08ffb66983398c3b30604f8f73..c82de594369c9c5332bb40d50aa56a0880bbcfb2 100644 GIT binary patch delta 8930 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 ZnqD-|0ymO`TDN|q-4u>q>E0-k{|6>mzgz$S delta 8930 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 diff --git a/Release/x64/TitanEngine.exp b/Release/x64/TitanEngine.exp index e8d46e14f43e321f032886e5c3762ace9e4a7d1f..3ff162c8fdeb3485c38468cca81477906923a2e5 100644 GIT binary patch delta 25 fcmeC(&fL45nLVYAiDAWwsEO=}%s^^mw$g0?eESM3 delta 25 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 delta 9120 zcmZ`;dsJ3c7Wanc0~GKBJ{}_A3q=ty-?8k5a_CA-3 zmpWX$)L~H z0GIMUuq|!)V1luo{8d6{6;Qu+?b>w_#Z}>=c5grP+s0G2^fOiIjSW>RUfH7YUR&cz^2>uf~Z3sQUd#6x3#Y(k7exJ~2X$ zUdpG?12ndNitAv>|FbrhR({sT(j^=TSekJFmT*#y6UTvppTiQPeDmifDGoS0A8hUB z%7bu9yf3lH8*VQWjG=B%Kr=KN&juB zm%ez&SZ7m#CtwOqUUC9WTKB81)^Y-_v)ZaJp(f+gU>_*Ko+{RU870C_4zO<#Fi>>T z7!V-0hLeD~WD?!4bH8$38=$yhkhD0yUHf*T+r%E?)>noc90+8eLfybPRi_LU=+4yy zGe8Lo zQy3=>odHQU9`TB<-+Ht}l9ZSxCF%-eMdr7#seIEvE8nu^&#_N>#TDt=VHQztX%XdC zjuz=DGS9Mwbc3AjXHhRy(DNM{iQ9A?j=0R%_(XEE$U5fV3NY5`U6nWM0 zCPhIL&1DD94L5Z%S~j8A4Q(w*br1xjw$vF$m8`7e>Lc%ZRK}G(BvfoXkKBQNE}w5r zNHe|%i|`z*{@&mWOrLnc#q`>@Z5Mzeo)6xOpl$e8auI6a(dLV|9y0lt9RIcDvp8^3 z*bk@$Mnvro&MfMxGOVIrEHgYwOi%ELoXZSg%=R6Z(L0hsbfOZZO1?}~+Mp;g@<${J z>{a?BIvA<*uZQolnY0Bp?h2)a^Gn0Trg{S*fyf%_5j~o3!B6OT*gW+UlFt-A{)%zb ziNE{`;s^W1{R}n&<81jEl*MKAHXvjflx{^uSu0d4ZVihPI~&@7-ueX>fuxFlfy-!v z%PfOp%(`ld;p_?ra3o-8Od}gIyFhuP$&aC;CVSlUZ8DV2gJfqDN+E;Qbft*0SnO_! z7M0h!i`WlCO`kAZZ~IT{{6t+teiQ>}D~bW06>-;kN-N+=_YLdhZ=P3*+KZPrbrPe0 z1wxSVvR_?pY3O#njuY^6$@O&8*ua2w19^~{(I`?ILXLY_`d;+@v1*?GsLh9{90jQbsX1hBsScMjexz|qZ6 z^&xzcNi2TQD>gpmFRGi3-_A zM!hkzsk3Fw@=cr8;RprX)XXPxiPu$+mnOF=_DS=KvCXIz)+xGbStbuA@lt`Vz)2Ni&-ZBW~cBZ54Ez}rvPiY?MxPrYQG-l1&)RtO#SN19}W`bRa&-c>(_k)I!a6iC>X0GIcfG ztA*v4%U{;Db@{buU^f=EcR-tXskEB~<~1XXJb|2Sc|Ws5m12jq5ux-(ApGNXj+z7c zR>PFED#-F-tFmuwwi+QLt)aC+R!{NW$N-8DW@{jFDh@`DoxI=XGhuj^p6-r<0w-6x zv+JnDd=IBi2B@*tTYB(`EOGEi4>fu$v>|p=$_Q}>qgB-G`An*8TNy6Sz1o3(4q;?~ zinW}g;saW)AH5bNY29}<)}=TQdROxYrCQPGXetbYY4xz++YiZ~TUPq~Y{mkmdO6b! zgGw)7A~{P#Oszggsn%ZHcD zc2zAKC#0)uNA;l0NG>gg1Z|JBcuLsBPQg(qBUiSBkDSY_9(S0CFx@aa$F8A4JM8^F#rze93U_0KE4RbIVF$jj=_4FQ}$?pNqJDd8( zTCKj+P-(1%MUYM2iG@jg2ci79wqhsaASR)&>!%3hlB(aaln~16#TfE&;=Nw%gjvoh zt~ac6^c#9}^zOk`FUy+qmvDFg^ITZf2Xg_NFg5f+FFGS-L0^cu-EL5BFOLtQ#=dY{ z7f%C974H{$bJ?T_niFpYI~|2NOSSzN8K~BncvMSCG5nh-EncGFL_AP{b(0eNa}OyR zV%%J_H4gM=4YLAJ?*V)(Cd{h?oLlQ{8;WagP-%h{O34YJ8qifq0;h-p(42tE@>75c z1_I{}&dv;ME0-|{avFQv2iYG9sbY|29+mpMbD}wqNwn~?^nuCxM23lZvrtnaV8UM} zXzpORz@<1in3LijsP|ayMe1L}X<-sG0+W4J604Zyl13y0CcLB3&SZ3{<|JL9!7{n` z((Yur(@af4a@D-o9if)3j+TVhg4ew?&)-eP>~HiCzT8c=ou$9Ekv*t#2>Yv;RRdBz zAiC(^d%8Y$I*yjz2SL7Qz?z z!}(0n94D(gEgLSA6)*zHa$0lY2+q0cY8|TDSVH8@)3ZJF^+@z4cX-A~hA$IA)kv6O zv7}KDV}{v2ilYRVM~nt`9gLTZMt+=LxXE(9SYABl?pQuL23Ypp#ClTsSSv(4^O1Qn zu)A-LWp}X=#oUi0bgtkNpUKxtCM&o&iW0_gf_-q)+x)&c&GNX23@ekB$|S^Zg4L;b z6R0PXey>nVDwZ~WM(KK~4|?(PilXA)wCe$`m&BGvfO>QGr?qKv0qC6uVDrpfmB!>H zJ4h?24oa{U`lMRjT^@sH3m$}${vxZrP~Y(eNiQ0U<0xP}yda-fTcZ3uXiYELFy8Hl zR#$&387zNJSrb8fGgzIQX6^)lLVzz0P5|f#U)SjVi9UEJooG1kjfsp0HW`=>lMc>S zrvs0CO+z}a0Sx9(0x($U#H7|j6DLE+>9&f=kaEyIFauuT`w4B%;66dd1E+Atd1kDi z0!_#N>r>#r?<`G~sVz^Ar1hDcd2sx>Oy+n_P3F|LrYolUnAUsOfGj3bxe99Zs8w(R zC1qJr^l=tmoX+%!nFh<8yA9JgD@-UYe8vk=Q8xR@VrR3VirQr7Anp9z+m{2!6%+Bx zW~v$zannOZpIZ0Ajt{=Hb2_UrTRns$C*vi2#uwgpjwDufR^ntYXcN}V5rywjaeKL)rug*pG2QyBaECQYBq*_2-C z?5Iy`ODJug%EO0Vl|3RNJ|9~SWQI&kg z3-`dsfg-)O=uD~AY6Yb{Zbj4QkApFM_PIZ+R()-^{6@6Mz0WzL@zp0V8hy5}xP{oh zm|M3kL<0E8y9h`8_eI*U2%64%)paq}E1yeVS`1O%Fa4K*7PUo9Ich!@t2mCo9ZS2G zV8W?5btTo*T_aPT+9#X_FYyVJpZBZt*#iuQJNfPw(UuhQ)=5imKkucR1y-Olz|s8m ze*`deCu(HOEr8FQm{SEv47XoaA&&G8LT?pX9v$9jdFcx(yt?uPx>3mC!OyHG*-v@I zBmYI|=lu1NVq9}z+i&4?|5Es5Hl8N?FM>nmWiLz3vi1Gw(o)O7o+rhaWjrZ(SngPc zMs~MOsWftaeTa*{Kq@86IZ%du%W_~`5{kW(Eh}n!)tMq(#Un1`DW}Cu!&E+H4fr1$ CY6DIH diff --git a/SDK/C/TitanEngine.h b/SDK/C/TitanEngine.h index 43b1a75..4e84cb6 100644 --- a/SDK/C/TitanEngine.h +++ b/SDK/C/TitanEngine.h @@ -301,6 +301,12 @@ typedef struct DWORD NumberOfRvaAndSizes; } PE64Struct, *PPE64Struct; +#if defined(_WIN64) +typedef PE64Struct PEStruct; +#else +typedef PE32Struct PEStruct; +#endif + typedef struct { bool NewDll; diff --git a/SDK/CPP/TitanEngine.h b/SDK/CPP/TitanEngine.h index 43b1a75..dd268f4 100644 --- a/SDK/CPP/TitanEngine.h +++ b/SDK/CPP/TitanEngine.h @@ -13,237 +13,237 @@ // Global.Constant.Structure.Declaration: // Engine.External: -#define UE_ACCESS_READ 0 -#define UE_ACCESS_WRITE 1 -#define UE_ACCESS_ALL 2 +const BYTE UE_ACCESS_READ = 0; +const BYTE UE_ACCESS_WRITE = 1; +const BYTE UE_ACCESS_ALL = 2; -#define UE_HIDE_BASIC 1 +const BYTE UE_HIDE_BASIC = 1; -#define UE_PLUGIN_CALL_REASON_PREDEBUG 1 -#define UE_PLUGIN_CALL_REASON_EXCEPTION 2 -#define UE_PLUGIN_CALL_REASON_POSTDEBUG 3 +const BYTE UE_PLUGIN_CALL_REASON_PREDEBUG = 1; +const BYTE UE_PLUGIN_CALL_REASON_EXCEPTION = 2; +const BYTE UE_PLUGIN_CALL_REASON_POSTDEBUG = 3; -#define TEE_HOOK_NRM_JUMP 1 -#define TEE_HOOK_NRM_CALL 3 -#define TEE_HOOK_IAT 5 +const BYTE TEE_HOOK_NRM_JUMP = 1; +const BYTE TEE_HOOK_NRM_CALL = 3; +const BYTE TEE_HOOK_IAT = 5; -#define UE_ENGINE_ALOW_MODULE_LOADING 1 -#define UE_ENGINE_AUTOFIX_FORWARDERS 2 -#define UE_ENGINE_PASS_ALL_EXCEPTIONS 3 -#define UE_ENGINE_NO_CONSOLE_WINDOW 4 -#define UE_ENGINE_BACKUP_FOR_CRITICAL_FUNCTIONS 5 -#define UE_ENGINE_CALL_PLUGIN_CALLBACK 6 -#define UE_ENGINE_RESET_CUSTOM_HANDLER 7 -#define UE_ENGINE_CALL_PLUGIN_DEBUG_CALLBACK 8 +const BYTE UE_ENGINE_ALOW_MODULE_LOADING = 1; +const BYTE UE_ENGINE_AUTOFIX_FORWARDERS = 2; +const BYTE UE_ENGINE_PASS_ALL_EXCEPTIONS = 3; +const BYTE UE_ENGINE_NO_CONSOLE_WINDOW = 4; +const BYTE UE_ENGINE_BACKUP_FOR_CRITICAL_FUNCTIONS = 5; +const BYTE UE_ENGINE_CALL_PLUGIN_CALLBACK = 6; +const BYTE UE_ENGINE_RESET_CUSTOM_HANDLER = 7; +const BYTE UE_ENGINE_CALL_PLUGIN_DEBUG_CALLBACK = 8; -#define UE_OPTION_REMOVEALL 1 -#define UE_OPTION_DISABLEALL 2 -#define UE_OPTION_REMOVEALLDISABLED 3 -#define UE_OPTION_REMOVEALLENABLED 4 +const BYTE UE_OPTION_REMOVEALL = 1; +const BYTE UE_OPTION_DISABLEALL = 2; +const BYTE UE_OPTION_REMOVEALLDISABLED = 3; +const BYTE UE_OPTION_REMOVEALLENABLED = 4; -#define UE_STATIC_DECRYPTOR_XOR 1 -#define UE_STATIC_DECRYPTOR_SUB 2 -#define UE_STATIC_DECRYPTOR_ADD 3 +const BYTE UE_STATIC_DECRYPTOR_XOR = 1; +const BYTE UE_STATIC_DECRYPTOR_SUB = 2; +const BYTE UE_STATIC_DECRYPTOR_ADD = 3; -#define UE_STATIC_DECRYPTOR_FOREWARD 1 -#define UE_STATIC_DECRYPTOR_BACKWARD 2 +const BYTE UE_STATIC_DECRYPTOR_FOREWARD = 1; +const BYTE UE_STATIC_DECRYPTOR_BACKWARD = 2; -#define UE_STATIC_KEY_SIZE_1 1 -#define UE_STATIC_KEY_SIZE_2 2 -#define UE_STATIC_KEY_SIZE_4 4 -#define UE_STATIC_KEY_SIZE_8 8 +const BYTE UE_STATIC_KEY_SIZE_1 = 1; +const BYTE UE_STATIC_KEY_SIZE_2 = 2; +const BYTE UE_STATIC_KEY_SIZE_4 = 4; +const BYTE UE_STATIC_KEY_SIZE_8 = 8; -#define UE_STATIC_APLIB 1 -#define UE_STATIC_APLIB_DEPACK 2 -#define UE_STATIC_LZMA 3 +const BYTE UE_STATIC_APLIB = 1; +const BYTE UE_STATIC_APLIB_DEPACK = 2; +const BYTE UE_STATIC_LZMA = 3; -#define UE_STATIC_HASH_MD5 1 -#define UE_STATIC_HASH_SHA1 2 -#define UE_STATIC_HASH_CRC32 3 +const BYTE UE_STATIC_HASH_MD5 = 1; +const BYTE UE_STATIC_HASH_SHA1 = 2; +const BYTE UE_STATIC_HASH_CRC32 = 3; -#define UE_RESOURCE_LANGUAGE_ANY -1 +const DWORD UE_RESOURCE_LANGUAGE_ANY = -1; -#define UE_PE_OFFSET 0 -#define UE_IMAGEBASE 1 -#define UE_OEP 2 -#define UE_SIZEOFIMAGE 3 -#define UE_SIZEOFHEADERS 4 -#define UE_SIZEOFOPTIONALHEADER 5 -#define UE_SECTIONALIGNMENT 6 -#define UE_IMPORTTABLEADDRESS 7 -#define UE_IMPORTTABLESIZE 8 -#define UE_RESOURCETABLEADDRESS 9 -#define UE_RESOURCETABLESIZE 10 -#define UE_EXPORTTABLEADDRESS 11 -#define UE_EXPORTTABLESIZE 12 -#define UE_TLSTABLEADDRESS 13 -#define UE_TLSTABLESIZE 14 -#define UE_RELOCATIONTABLEADDRESS 15 -#define UE_RELOCATIONTABLESIZE 16 -#define UE_TIMEDATESTAMP 17 -#define UE_SECTIONNUMBER 18 -#define UE_CHECKSUM 19 -#define UE_SUBSYSTEM 20 -#define UE_CHARACTERISTICS 21 -#define UE_NUMBEROFRVAANDSIZES 22 -#define UE_SECTIONNAME 23 -#define UE_SECTIONVIRTUALOFFSET 24 -#define UE_SECTIONVIRTUALSIZE 25 -#define UE_SECTIONRAWOFFSET 26 -#define UE_SECTIONRAWSIZE 27 -#define UE_SECTIONFLAGS 28 +const BYTE UE_PE_OFFSET = 0; +const BYTE UE_IMAGEBASE = 1; +const BYTE UE_OEP = 2; +const BYTE UE_SIZEOFIMAGE = 3; +const BYTE UE_SIZEOFHEADERS = 4; +const BYTE UE_SIZEOFOPTIONALHEADER = 5; +const BYTE UE_SECTIONALIGNMENT = 6; +const BYTE UE_IMPORTTABLEADDRESS = 7; +const BYTE UE_IMPORTTABLESIZE = 8; +const BYTE UE_RESOURCETABLEADDRESS = 9; +const BYTE UE_RESOURCETABLESIZE = 10; +const BYTE UE_EXPORTTABLEADDRESS = 11; +const BYTE UE_EXPORTTABLESIZE = 12; +const BYTE UE_TLSTABLEADDRESS = 13; +const BYTE UE_TLSTABLESIZE = 14; +const BYTE UE_RELOCATIONTABLEADDRESS = 15; +const BYTE UE_RELOCATIONTABLESIZE = 16; +const BYTE UE_TIMEDATESTAMP = 17; +const BYTE UE_SECTIONNUMBER = 18; +const BYTE UE_CHECKSUM = 19; +const BYTE UE_SUBSYSTEM = 20; +const BYTE UE_CHARACTERISTICS = 21; +const BYTE UE_NUMBEROFRVAANDSIZES = 22; +const BYTE UE_SECTIONNAME = 23; +const BYTE UE_SECTIONVIRTUALOFFSET = 24; +const BYTE UE_SECTIONVIRTUALSIZE = 25; +const BYTE UE_SECTIONRAWOFFSET = 26; +const BYTE UE_SECTIONRAWSIZE = 27; +const BYTE UE_SECTIONFLAGS = 28; -#define UE_CH_BREAKPOINT 1 -#define UE_CH_SINGLESTEP 2 -#define UE_CH_ACCESSVIOLATION 3 -#define UE_CH_ILLEGALINSTRUCTION 4 -#define UE_CH_NONCONTINUABLEEXCEPTION 5 -#define UE_CH_ARRAYBOUNDSEXCEPTION 6 -#define UE_CH_FLOATDENORMALOPERAND 7 -#define UE_CH_FLOATDEVIDEBYZERO 8 -#define UE_CH_INTEGERDEVIDEBYZERO 9 -#define UE_CH_INTEGEROVERFLOW 10 -#define UE_CH_PRIVILEGEDINSTRUCTION 11 -#define UE_CH_PAGEGUARD 12 -#define UE_CH_EVERYTHINGELSE 13 -#define UE_CH_CREATETHREAD 14 -#define UE_CH_EXITTHREAD 15 -#define UE_CH_CREATEPROCESS 16 -#define UE_CH_EXITPROCESS 17 -#define UE_CH_LOADDLL 18 -#define UE_CH_UNLOADDLL 19 -#define UE_CH_OUTPUTDEBUGSTRING 20 -#define UE_CH_AFTEREXCEPTIONPROCESSING 21 -#define UE_CH_ALLEVENTS 22 -#define UE_CH_SYSTEMBREAKPOINT 23 -#define UE_CH_UNHANDLEDEXCEPTION 24 +const BYTE UE_CH_BREAKPOINT = 1; +const BYTE UE_CH_SINGLESTEP = 2; +const BYTE UE_CH_ACCESSVIOLATION = 3; +const BYTE UE_CH_ILLEGALINSTRUCTION = 4; +const BYTE UE_CH_NONCONTINUABLEEXCEPTION = 5; +const BYTE UE_CH_ARRAYBOUNDSEXCEPTION = 6; +const BYTE UE_CH_FLOATDENORMALOPERAND = 7; +const BYTE UE_CH_FLOATDEVIDEBYZERO = 8; +const BYTE UE_CH_INTEGERDEVIDEBYZERO = 9; +const BYTE UE_CH_INTEGEROVERFLOW = 10; +const BYTE UE_CH_PRIVILEGEDINSTRUCTION = 11; +const BYTE UE_CH_PAGEGUARD = 12; +const BYTE UE_CH_EVERYTHINGELSE = 13; +const BYTE UE_CH_CREATETHREAD = 14; +const BYTE UE_CH_EXITTHREAD = 15; +const BYTE UE_CH_CREATEPROCESS = 16; +const BYTE UE_CH_EXITPROCESS = 17; +const BYTE UE_CH_LOADDLL = 18; +const BYTE UE_CH_UNLOADDLL = 19; +const BYTE UE_CH_OUTPUTDEBUGSTRING = 20; +const BYTE UE_CH_AFTEREXCEPTIONPROCESSING 21; +const BYTE UE_CH_ALLEVENTS = 22; +const BYTE UE_CH_SYSTEMBREAKPOINT = 23; +const BYTE UE_CH_UNHANDLEDEXCEPTION = 24; -#define UE_OPTION_HANDLER_RETURN_HANDLECOUNT 1 -#define UE_OPTION_HANDLER_RETURN_ACCESS 2 -#define UE_OPTION_HANDLER_RETURN_FLAGS 3 -#define UE_OPTION_HANDLER_RETURN_TYPENAME 4 +const BYTE UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1; +const BYTE UE_OPTION_HANDLER_RETURN_ACCESS = 2; +const BYTE UE_OPTION_HANDLER_RETURN_FLAGS = 3; +const BYTE UE_OPTION_HANDLER_RETURN_TYPENAME = 4; -#define UE_BREAKPOINT_INT3 1 -#define UE_BREAKPOINT_LONG_INT3 2 -#define UE_BREAKPOINT_UD2 3 +const BYTE UE_BREAKPOINT_INT3 = 1; +const BYTE UE_BREAKPOINT_LONG_INT3 = 2; +const BYTE UE_BREAKPOINT_UD2 = 3; -#define UE_BPXREMOVED 0 -#define UE_BPXACTIVE 1 -#define UE_BPXINACTIVE 2 +const BYTE UE_BPXREMOVED = 0; +const BYTE UE_BPXACTIVE = 1; +const BYTE UE_BPXINACTIVE = 2; -#define UE_BREAKPOINT 0 -#define UE_SINGLESHOOT 1 -#define UE_HARDWARE 2 -#define UE_MEMORY 3 -#define UE_MEMORY_READ 4 -#define UE_MEMORY_WRITE 5 -#define UE_MEMORY_EXECUTE 6 -#define UE_BREAKPOINT_TYPE_INT3 0x10000000 -#define UE_BREAKPOINT_TYPE_LONG_INT3 0x20000000 -#define UE_BREAKPOINT_TYPE_UD2 0x30000000 +const BYTE UE_BREAKPOINT = 0; +const BYTE UE_SINGLESHOOT = 1; +const BYTE UE_HARDWARE = 2; +const BYTE UE_MEMORY = 3; +const BYTE UE_MEMORY_READ = 4; +const BYTE UE_MEMORY_WRITE = 5; +const BYTE UE_MEMORY_EXECUTE = 5; +const DWORD UE_BREAKPOINT_TYPE_INT3 = 0x10000000; +const DWORD UE_BREAKPOINT_TYPE_LONG_INT3 = 0x20000000; +const DWORD UE_BREAKPOINT_TYPE_UD2 = 0x30000000; -#define UE_HARDWARE_EXECUTE 4 -#define UE_HARDWARE_WRITE 5 -#define UE_HARDWARE_READWRITE 6 +const BYTE UE_HARDWARE_EXECUTE = 4; +const BYTE UE_HARDWARE_WRITE = 5; +const BYTE UE_HARDWARE_READWRITE = 6; -#define UE_HARDWARE_SIZE_1 7 -#define UE_HARDWARE_SIZE_2 8 -#define UE_HARDWARE_SIZE_4 9 -#define UE_HARDWARE_SIZE_8 10 +const BYTE UE_HARDWARE_SIZE_1 = 7; +const BYTE UE_HARDWARE_SIZE_2 = 8; +const BYTE UE_HARDWARE_SIZE_4 = 9; +const BYTE UE_HARDWARE_SIZE_8 = 10; -#define UE_ON_LIB_LOAD 1 -#define UE_ON_LIB_UNLOAD 2 -#define UE_ON_LIB_ALL 3 +const BYTE UE_ON_LIB_LOAD = 1; +const BYTE UE_ON_LIB_UNLOAD = 2; +const BYTE UE_ON_LIB_ALL = 3; -#define UE_APISTART 0 -#define UE_APIEND 1 +const BYTE UE_APISTART = 0; +const BYTE UE_APIEND = 1; -#define UE_PLATFORM_x86 1 -#define UE_PLATFORM_x64 2 -#define UE_PLATFORM_ALL 3 +const BYTE UE_PLATFORM_x86 = 1; +const BYTE UE_PLATFORM_x64 = 2; +const BYTE UE_PLATFORM_ALL = 3; -#define UE_FUNCTION_STDCALL 1 -#define UE_FUNCTION_CCALL 2 -#define UE_FUNCTION_FASTCALL 3 -#define UE_FUNCTION_STDCALL_RET 4 -#define UE_FUNCTION_CCALL_RET 5 -#define UE_FUNCTION_FASTCALL_RET 6 -#define UE_FUNCTION_STDCALL_CALL 7 -#define UE_FUNCTION_CCALL_CALL 8 -#define UE_FUNCTION_FASTCALL_CALL 9 -#define UE_PARAMETER_BYTE 0 -#define UE_PARAMETER_WORD 1 -#define UE_PARAMETER_DWORD 2 -#define UE_PARAMETER_QWORD 3 -#define UE_PARAMETER_PTR_BYTE 4 -#define UE_PARAMETER_PTR_WORD 5 -#define UE_PARAMETER_PTR_DWORD 6 -#define UE_PARAMETER_PTR_QWORD 7 -#define UE_PARAMETER_STRING 8 -#define UE_PARAMETER_UNICODE 9 +const BYTE UE_FUNCTION_STDCALL = 1; +const BYTE UE_FUNCTION_CCALL = 2; +const BYTE UE_FUNCTION_FASTCALL = 3; +const BYTE UE_FUNCTION_STDCALL_RET = 4; +const BYTE UE_FUNCTION_CCALL_RET = 5; +const BYTE UE_FUNCTION_FASTCALL_RET = 6; +const BYTE UE_FUNCTION_STDCALL_CALL = 7; +const BYTE UE_FUNCTION_CCALL_CALL = 8; +const BYTE UE_FUNCTION_FASTCALL_CALL = 9; +const BYTE UE_PARAMETER_BYTE = 0; +const BYTE UE_PARAMETER_WORD = 1; +const BYTE UE_PARAMETER_DWORD = 2; +const BYTE UE_PARAMETER_QWORD = 3; +const BYTE UE_PARAMETER_PTR_BYTE = 4; +const BYTE UE_PARAMETER_PTR_WORD = 5; +const BYTE UE_PARAMETER_PTR_DWORD = 6; +const BYTE UE_PARAMETER_PTR_QWORD = 7; +const BYTE UE_PARAMETER_STRING = 8; +const BYTE UE_PARAMETER_UNICODE = 9; -#define UE_CMP_NOCONDITION 0 -#define UE_CMP_EQUAL 1 -#define UE_CMP_NOTEQUAL 2 -#define UE_CMP_GREATER 3 -#define UE_CMP_GREATEROREQUAL 4 -#define UE_CMP_LOWER 5 -#define UE_CMP_LOWEROREQUAL 6 -#define UE_CMP_REG_EQUAL 7 -#define UE_CMP_REG_NOTEQUAL 8 -#define UE_CMP_REG_GREATER 9 -#define UE_CMP_REG_GREATEROREQUAL 10 -#define UE_CMP_REG_LOWER 11 -#define UE_CMP_REG_LOWEROREQUAL 12 -#define UE_CMP_ALWAYSFALSE 13 +const BYTE UE_CMP_NOCONDITION = 0; +const BYTE UE_CMP_EQUAL = 1; +const BYTE UE_CMP_NOTEQUAL = 2; +const BYTE UE_CMP_GREATER = 3; +const BYTE UE_CMP_GREATEROREQUAL = 4; +const BYTE UE_CMP_LOWER = 5; +const BYTE UE_CMP_LOWEROREQUAL = 6; +const BYTE UE_CMP_REG_EQUAL = 7; +const BYTE UE_CMP_REG_NOTEQUAL = 8; +const BYTE UE_CMP_REG_GREATER = 9; +const BYTE UE_CMP_REG_GREATEROREQUAL = 10; +const BYTE UE_CMP_REG_LOWER = 11; +const BYTE UE_CMP_REG_LOWEROREQUAL = 12; +const BYTE UE_CMP_ALWAYSFALSE = 13; -#define UE_EAX 1 -#define UE_EBX 2 -#define UE_ECX 3 -#define UE_EDX 4 -#define UE_EDI 5 -#define UE_ESI 6 -#define UE_EBP 7 -#define UE_ESP 8 -#define UE_EIP 9 -#define UE_EFLAGS 10 -#define UE_DR0 11 -#define UE_DR1 12 -#define UE_DR2 13 -#define UE_DR3 14 -#define UE_DR6 15 -#define UE_DR7 16 -#define UE_RAX 17 -#define UE_RBX 18 -#define UE_RCX 19 -#define UE_RDX 20 -#define UE_RDI 21 -#define UE_RSI 22 -#define UE_RBP 23 -#define UE_RSP 24 -#define UE_RIP 25 -#define UE_RFLAGS 26 -#define UE_R8 27 -#define UE_R9 28 -#define UE_R10 29 -#define UE_R11 30 -#define UE_R12 31 -#define UE_R13 32 -#define UE_R14 33 -#define UE_R15 34 -#define UE_CIP 35 -#define UE_CSP 36 +const BYTE UE_EAX = 1; +const BYTE UE_EBX = 2; +const BYTE UE_ECX = 3; +const BYTE UE_EDX = 4; +const BYTE UE_EDI = 5; +const BYTE UE_ESI = 6; +const BYTE UE_EBP = 7; +const BYTE UE_ESP = 8; +const BYTE UE_EIP = 9; +const BYTE UE_EFLAGS = 10; +const BYTE UE_DR0 = 11; +const BYTE UE_DR1 = 12; +const BYTE UE_DR2 = 13; +const BYTE UE_DR3 = 14; +const BYTE UE_DR6 = 15; +const BYTE UE_DR7 = 16; +const BYTE UE_RAX = 17; +const BYTE UE_RBX = 18; +const BYTE UE_RCX = 19; +const BYTE UE_RDX = 20; +const BYTE UE_RDI = 21; +const BYTE UE_RSI = 22; +const BYTE UE_RBP = 23; +const BYTE UE_RSP = 24; +const BYTE UE_RIP = 25; +const BYTE UE_RFLAGS = 26; +const BYTE UE_R8 = 27; +const BYTE UE_R9 = 28; +const BYTE UE_R10 = 29; +const BYTE UE_R11 = 30; +const BYTE UE_R12 = 31; +const BYTE UE_R13 = 32; +const BYTE UE_R14 = 33; +const BYTE UE_R15 = 34; +const BYTE UE_CIP = 35; +const BYTE UE_CSP = 36; #ifdef _WIN64 -#define UE_CFLAGS UE_RFLAGS +const BYTE UE_CFLAGS = UE_RFLAGS; #else -#define UE_CFLAGS UE_EFLAGS +const BYTE UE_CFLAGS = UE_EFLAGS; #endif -#define UE_SEG_GS 37 -#define UE_SEG_FS 38 -#define UE_SEG_ES 39 -#define UE_SEG_DS 40 -#define UE_SEG_CS 41 -#define UE_SEG_SS 42 +const BYTE UE_SEG_GS = 37; +const BYTE UE_SEG_FS = 38; +const BYTE UE_SEG_ES = 39; +const BYTE UE_SEG_DS = 40; +const BYTE UE_SEG_CS = 41; +const BYTE UE_SEG_SS = 42; typedef struct { @@ -301,6 +301,12 @@ typedef struct DWORD NumberOfRvaAndSizes; } PE64Struct, *PPE64Struct; +#if defined(_WIN64) +typedef PE64Struct PEStruct; +#else +typedef PE32Struct PEStruct; +#endif + typedef struct { bool NewDll; @@ -371,12 +377,12 @@ typedef struct bool PluginDisabled; } PluginInformation, *PPluginInformation; -#define TEE_MAXIMUM_HOOK_SIZE 14 -#define TEE_MAXIMUM_HOOK_RELOCS 7 +const size_t TEE_MAXIMUM_HOOK_SIZE = 14; +const size_t TEE_MAXIMUM_HOOK_RELOCS = 7; #if defined(_WIN64) -#define TEE_MAXIMUM_HOOK_INSERT_SIZE 14 +const size_t TEE_MAXIMUM_HOOK_INSERT_SIZE = 14; #else -#define TEE_MAXIMUM_HOOK_INSERT_SIZE 5 +const size_t TEE_MAXIMUM_HOOK_INSERT_SIZE = 5; #endif typedef struct HOOK_ENTRY @@ -397,31 +403,31 @@ typedef struct HOOK_ENTRY int RelocationCount; } HOOK_ENTRY, *PHOOK_ENTRY; -#define UE_DEPTH_SURFACE 0 -#define UE_DEPTH_DEEP 1 +const BYTE UE_DEPTH_SURFACE = 0; +const BYTE UE_DEPTH_DEEP = 1; -#define UE_UNPACKER_CONDITION_SEARCH_FROM_EP 1 +const BYTE UE_UNPACKER_CONDITION_SEARCH_FROM_EP = 1; -#define UE_UNPACKER_CONDITION_LOADLIBRARY 1 -#define UE_UNPACKER_CONDITION_GETPROCADDRESS 2 -#define UE_UNPACKER_CONDITION_ENTRYPOINTBREAK 3 -#define UE_UNPACKER_CONDITION_RELOCSNAPSHOT1 4 -#define UE_UNPACKER_CONDITION_RELOCSNAPSHOT2 5 +const BYTE UE_UNPACKER_CONDITION_LOADLIBRARY = 1; +const BYTE UE_UNPACKER_CONDITION_GETPROCADDRESS = 2; +const BYTE UE_UNPACKER_CONDITION_ENTRYPOINTBREAK = 3; +const BYTE UE_UNPACKER_CONDITION_RELOCSNAPSHOT1 = 4; +const BYTE UE_UNPACKER_CONDITION_RELOCSNAPSHOT2 = 5; -#define UE_FIELD_OK 0 -#define UE_FIELD_BROKEN_NON_FIXABLE 1 -#define UE_FIELD_BROKEN_NON_CRITICAL 2 -#define UE_FIELD_BROKEN_FIXABLE_FOR_STATIC_USE 3 -#define UE_FIELD_BROKEN_BUT_CAN_BE_EMULATED 4 -#define UE_FILED_FIXABLE_NON_CRITICAL 5 -#define UE_FILED_FIXABLE_CRITICAL 6 -#define UE_FIELD_NOT_PRESET 7 -#define UE_FIELD_NOT_PRESET_WARNING 8 +const BYTE UE_FIELD_OK = 0; +const BYTE UE_FIELD_BROKEN_NON_FIXABLE = 1; +const BYTE UE_FIELD_BROKEN_NON_CRITICAL = 2; +const BYTE UE_FIELD_BROKEN_FIXABLE_FOR_STATIC_USE = 3; +const BYTE UE_FIELD_BROKEN_BUT_CAN_BE_EMULATED = 4; +const BYTE UE_FILED_FIXABLE_NON_CRITICAL = 5; +const BYTE UE_FILED_FIXABLE_CRITICAL = 6; +const BYTE UE_FIELD_NOT_PRESET = 7; +const BYTE UE_FIELD_NOT_PRESET_WARNING = 8; -#define UE_RESULT_FILE_OK 10 -#define UE_RESULT_FILE_INVALID_BUT_FIXABLE 11 -#define UE_RESULT_FILE_INVALID_AND_NON_FIXABLE 12 -#define UE_RESULT_FILE_INVALID_FORMAT 13 +const BYTE UE_RESULT_FILE_OK = 10; +const BYTE UE_RESULT_FILE_INVALID_BUT_FIXABLE = 11; +const BYTE UE_RESULT_FILE_INVALID_AND_NON_FIXABLE = 12; +const BYTE UE_RESULT_FILE_INVALID_FORMAT = 13; typedef struct { @@ -494,443 +500,432 @@ typedef struct } FILE_FIX_INFO, *PFILE_FIX_INFO; #ifdef __cplusplus -extern "C" -{ -#endif +extern "C" { +#endif /*__cplusplus*/ // Global.Function.Declaration: // TitanEngine.Dumper.functions: -__declspec(dllexport) bool TITCALL DumpProcess(HANDLE hProcess, LPVOID ImageBase, char* szDumpFileName, ULONG_PTR EntryPoint); -__declspec(dllexport) bool TITCALL DumpProcessW(HANDLE hProcess, LPVOID ImageBase, wchar_t* szDumpFileName, ULONG_PTR EntryPoint); -__declspec(dllexport) bool TITCALL DumpProcessEx(DWORD ProcessId, LPVOID ImageBase, char* szDumpFileName, ULONG_PTR EntryPoint); -__declspec(dllexport) bool TITCALL DumpProcessExW(DWORD ProcessId, LPVOID ImageBase, wchar_t* szDumpFileName, ULONG_PTR EntryPoint); -__declspec(dllexport) bool TITCALL DumpMemory(HANDLE hProcess, LPVOID MemoryStart, ULONG_PTR MemorySize, char* szDumpFileName); -__declspec(dllexport) bool TITCALL DumpMemoryW(HANDLE hProcess, LPVOID MemoryStart, ULONG_PTR MemorySize, wchar_t* szDumpFileName); -__declspec(dllexport) bool TITCALL DumpMemoryEx(DWORD ProcessId, LPVOID MemoryStart, ULONG_PTR MemorySize, char* szDumpFileName); -__declspec(dllexport) bool TITCALL DumpMemoryExW(DWORD ProcessId, LPVOID MemoryStart, ULONG_PTR MemorySize, wchar_t* szDumpFileName); -__declspec(dllexport) bool TITCALL DumpRegions(HANDLE hProcess, char* szDumpFolder, bool DumpAboveImageBaseOnly); -__declspec(dllexport) bool TITCALL DumpRegionsW(HANDLE hProcess, wchar_t* szDumpFolder, bool DumpAboveImageBaseOnly); -__declspec(dllexport) bool TITCALL DumpRegionsEx(DWORD ProcessId, char* szDumpFolder, bool DumpAboveImageBaseOnly); -__declspec(dllexport) bool TITCALL DumpRegionsExW(DWORD ProcessId, wchar_t* szDumpFolder, bool DumpAboveImageBaseOnly); -__declspec(dllexport) bool TITCALL DumpModule(HANDLE hProcess, LPVOID ModuleBase, char* szDumpFileName); -__declspec(dllexport) bool TITCALL DumpModuleW(HANDLE hProcess, LPVOID ModuleBase, wchar_t* szDumpFileName); -__declspec(dllexport) bool TITCALL DumpModuleEx(DWORD ProcessId, LPVOID ModuleBase, char* szDumpFileName); -__declspec(dllexport) bool TITCALL DumpModuleExW(DWORD ProcessId, LPVOID ModuleBase, wchar_t* szDumpFileName); -__declspec(dllexport) bool TITCALL PastePEHeader(HANDLE hProcess, LPVOID ImageBase, char* szDebuggedFileName); -__declspec(dllexport) bool TITCALL PastePEHeaderW(HANDLE hProcess, LPVOID ImageBase, wchar_t* szDebuggedFileName); -__declspec(dllexport) bool TITCALL ExtractSection(char* szFileName, char* szDumpFileName, DWORD SectionNumber); -__declspec(dllexport) bool TITCALL ExtractSectionW(wchar_t* szFileName, wchar_t* szDumpFileName, DWORD SectionNumber); -__declspec(dllexport) bool TITCALL ResortFileSections(char* szFileName); -__declspec(dllexport) bool TITCALL ResortFileSectionsW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL FindOverlay(char* szFileName, LPDWORD OverlayStart, LPDWORD OverlaySize); -__declspec(dllexport) bool TITCALL FindOverlayW(wchar_t* szFileName, LPDWORD OverlayStart, LPDWORD OverlaySize); -__declspec(dllexport) bool TITCALL ExtractOverlay(char* szFileName, char* szExtactedFileName); -__declspec(dllexport) bool TITCALL ExtractOverlayW(wchar_t* szFileName, wchar_t* szExtactedFileName); -__declspec(dllexport) bool TITCALL AddOverlay(char* szFileName, char* szOverlayFileName); -__declspec(dllexport) bool TITCALL AddOverlayW(wchar_t* szFileName, wchar_t* szOverlayFileName); -__declspec(dllexport) bool TITCALL CopyOverlay(char* szInFileName, char* szOutFileName); -__declspec(dllexport) bool TITCALL CopyOverlayW(wchar_t* szInFileName, wchar_t* szOutFileName); -__declspec(dllexport) bool TITCALL RemoveOverlay(char* szFileName); -__declspec(dllexport) bool TITCALL RemoveOverlayW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL MakeAllSectionsRWE(char* szFileName); -__declspec(dllexport) bool TITCALL MakeAllSectionsRWEW(wchar_t* szFileName); -__declspec(dllexport) long TITCALL AddNewSectionEx(char* szFileName, char* szSectionName, DWORD SectionSize, DWORD SectionAttributes, LPVOID SectionContent, DWORD ContentSize); -__declspec(dllexport) long TITCALL AddNewSectionExW(wchar_t* szFileName, char* szSectionName, DWORD SectionSize, DWORD SectionAttributes, LPVOID SectionContent, DWORD ContentSize); -__declspec(dllexport) long TITCALL AddNewSection(char* szFileName, char* szSectionName, DWORD SectionSize); -__declspec(dllexport) long TITCALL AddNewSectionW(wchar_t* szFileName, char* szSectionName, DWORD SectionSize); -__declspec(dllexport) bool TITCALL ResizeLastSection(char* szFileName, DWORD NumberOfExpandBytes, bool AlignResizeData); -__declspec(dllexport) bool TITCALL ResizeLastSectionW(wchar_t* szFileName, DWORD NumberOfExpandBytes, bool AlignResizeData); -__declspec(dllexport) void TITCALL SetSharedOverlay(char* szFileName); -__declspec(dllexport) void TITCALL SetSharedOverlayW(wchar_t* szFileName); -__declspec(dllexport) char* TITCALL GetSharedOverlay(); -__declspec(dllexport) wchar_t* TITCALL GetSharedOverlayW(); -__declspec(dllexport) bool TITCALL DeleteLastSection(char* szFileName); -__declspec(dllexport) bool TITCALL DeleteLastSectionW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL DeleteLastSectionEx(char* szFileName, DWORD NumberOfSections); -__declspec(dllexport) bool TITCALL DeleteLastSectionExW(wchar_t* szFileName, DWORD NumberOfSections); -__declspec(dllexport) long long TITCALL GetPE32DataFromMappedFile(ULONG_PTR FileMapVA, DWORD WhichSection, DWORD WhichData); -__declspec(dllexport) long long TITCALL GetPE32Data(char* szFileName, DWORD WhichSection, DWORD WhichData); -__declspec(dllexport) long long TITCALL GetPE32DataW(wchar_t* szFileName, DWORD WhichSection, DWORD WhichData); -__declspec(dllexport) bool TITCALL GetPE32DataFromMappedFileEx(ULONG_PTR FileMapVA, LPVOID DataStorage); -__declspec(dllexport) bool TITCALL GetPE32DataEx(char* szFileName, LPVOID DataStorage); -__declspec(dllexport) bool TITCALL GetPE32DataExW(wchar_t* szFileName, LPVOID DataStorage); -__declspec(dllexport) bool TITCALL SetPE32DataForMappedFile(ULONG_PTR FileMapVA, DWORD WhichSection, DWORD WhichData, ULONG_PTR NewDataValue); -__declspec(dllexport) bool TITCALL SetPE32Data(char* szFileName, DWORD WhichSection, DWORD WhichData, ULONG_PTR NewDataValue); -__declspec(dllexport) bool TITCALL SetPE32DataW(wchar_t* szFileName, DWORD WhichSection, DWORD WhichData, ULONG_PTR NewDataValue); -__declspec(dllexport) bool TITCALL SetPE32DataForMappedFileEx(ULONG_PTR FileMapVA, LPVOID DataStorage); -__declspec(dllexport) bool TITCALL SetPE32DataEx(char* szFileName, LPVOID DataStorage); -__declspec(dllexport) bool TITCALL SetPE32DataExW(wchar_t* szFileName, LPVOID DataStorage); -__declspec(dllexport) long TITCALL GetPE32SectionNumberFromVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert); -__declspec(dllexport) long long TITCALL ConvertVAtoFileOffset(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType); -__declspec(dllexport) long long TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType); -__declspec(dllexport) long long TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType); -__declspec(dllexport) long long TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType); +__declspec(dllimport) bool __stdcall DumpProcess(HANDLE hProcess, LPVOID ImageBase, char* szDumpFileName, ULONG_PTR EntryPoint); +__declspec(dllimport) bool __stdcall DumpProcessW(HANDLE hProcess, LPVOID ImageBase, wchar_t* szDumpFileName, ULONG_PTR EntryPoint); +__declspec(dllimport) bool __stdcall DumpProcessEx(DWORD ProcessId, LPVOID ImageBase, char* szDumpFileName, ULONG_PTR EntryPoint); +__declspec(dllimport) bool __stdcall DumpProcessExW(DWORD ProcessId, LPVOID ImageBase, wchar_t* szDumpFileName, ULONG_PTR EntryPoint); +__declspec(dllimport) bool __stdcall DumpMemory(HANDLE hProcess, LPVOID MemoryStart, ULONG_PTR MemorySize, char* szDumpFileName); +__declspec(dllimport) bool __stdcall DumpMemoryW(HANDLE hProcess, LPVOID MemoryStart, ULONG_PTR MemorySize, wchar_t* szDumpFileName); +__declspec(dllimport) bool __stdcall DumpMemoryEx(DWORD ProcessId, LPVOID MemoryStart, ULONG_PTR MemorySize, char* szDumpFileName); +__declspec(dllimport) bool __stdcall DumpMemoryExW(DWORD ProcessId, LPVOID MemoryStart, ULONG_PTR MemorySize, wchar_t* szDumpFileName); +__declspec(dllimport) bool __stdcall DumpRegions(HANDLE hProcess, char* szDumpFolder, bool DumpAboveImageBaseOnly); +__declspec(dllimport) bool __stdcall DumpRegionsW(HANDLE hProcess, wchar_t* szDumpFolder, bool DumpAboveImageBaseOnly); +__declspec(dllimport) bool __stdcall DumpRegionsEx(DWORD ProcessId, char* szDumpFolder, bool DumpAboveImageBaseOnly); +__declspec(dllimport) bool __stdcall DumpRegionsExW(DWORD ProcessId, wchar_t* szDumpFolder, bool DumpAboveImageBaseOnly); +__declspec(dllimport) bool __stdcall DumpModule(HANDLE hProcess, LPVOID ModuleBase, char* szDumpFileName); +__declspec(dllimport) bool __stdcall DumpModuleW(HANDLE hProcess, LPVOID ModuleBase, wchar_t* szDumpFileName); +__declspec(dllimport) bool __stdcall DumpModuleEx(DWORD ProcessId, LPVOID ModuleBase, char* szDumpFileName); +__declspec(dllimport) bool __stdcall DumpModuleExW(DWORD ProcessId, LPVOID ModuleBase, wchar_t* szDumpFileName); +__declspec(dllimport) bool __stdcall PastePEHeader(HANDLE hProcess, LPVOID ImageBase, char* szDebuggedFileName); +__declspec(dllimport) bool __stdcall PastePEHeaderW(HANDLE hProcess, LPVOID ImageBase, wchar_t* szDebuggedFileName); +__declspec(dllimport) bool __stdcall ExtractSection(char* szFileName, char* szDumpFileName, DWORD SectionNumber); +__declspec(dllimport) bool __stdcall ExtractSectionW(wchar_t* szFileName, wchar_t* szDumpFileName, DWORD SectionNumber); +__declspec(dllimport) bool __stdcall ResortFileSections(char* szFileName); +__declspec(dllimport) bool __stdcall ResortFileSectionsW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall FindOverlay(char* szFileName, LPDWORD OverlayStart, LPDWORD OverlaySize); +__declspec(dllimport) bool __stdcall FindOverlayW(wchar_t* szFileName, LPDWORD OverlayStart, LPDWORD OverlaySize); +__declspec(dllimport) bool __stdcall ExtractOverlay(char* szFileName, char* szExtractedFileName); +__declspec(dllimport) bool __stdcall ExtractOverlayW(wchar_t* szFileName, wchar_t* szExtractedFileName); +__declspec(dllimport) bool __stdcall AddOverlay(char* szFileName, char* szOverlayFileName); +__declspec(dllimport) bool __stdcall AddOverlayW(wchar_t* szFileName, wchar_t* szOverlayFileName); +__declspec(dllimport) bool __stdcall CopyOverlay(char* szInFileName, char* szOutFileName); +__declspec(dllimport) bool __stdcall CopyOverlayW(wchar_t* szInFileName, wchar_t* szOutFileName); +__declspec(dllimport) bool __stdcall RemoveOverlay(char* szFileName); +__declspec(dllimport) bool __stdcall RemoveOverlayW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall MakeAllSectionsRWE(char* szFileName); +__declspec(dllimport) bool __stdcall MakeAllSectionsRWEW(wchar_t* szFileName); +__declspec(dllimport) long __stdcall AddNewSectionEx(char* szFileName, char* szSectionName, DWORD SectionSize, DWORD SectionAttributes, LPVOID SectionContent, DWORD ContentSize); +__declspec(dllimport) long __stdcall AddNewSectionExW(wchar_t* szFileName, char* szSectionName, DWORD SectionSize, DWORD SectionAttributes, LPVOID SectionContent, DWORD ContentSize); +__declspec(dllimport) long __stdcall AddNewSection(char* szFileName, char* szSectionName, DWORD SectionSize); +__declspec(dllimport) long __stdcall AddNewSectionW(wchar_t* szFileName, char* szSectionName, DWORD SectionSize); +__declspec(dllimport) bool __stdcall ResizeLastSection(char* szFileName, DWORD NumberOfExpandBytes, bool AlignResizeData); +__declspec(dllimport) bool __stdcall ResizeLastSectionW(wchar_t* szFileName, DWORD NumberOfExpandBytes, bool AlignResizeData); +__declspec(dllimport) void __stdcall SetSharedOverlay(char* szFileName); +__declspec(dllimport) void __stdcall SetSharedOverlayW(wchar_t* szFileName); +__declspec(dllimport) char* __stdcall GetSharedOverlay(); +__declspec(dllimport) wchar_t* __stdcall GetSharedOverlayW(); +__declspec(dllimport) bool __stdcall DeleteLastSection(char* szFileName); +__declspec(dllimport) bool __stdcall DeleteLastSectionW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall DeleteLastSectionEx(char* szFileName, DWORD NumberOfSections); +__declspec(dllimport) bool __stdcall DeleteLastSectionExW(wchar_t* szFileName, DWORD NumberOfSections); +__declspec(dllimport) long long __stdcall GetPE32DataFromMappedFile(ULONG_PTR FileMapVA, DWORD WhichSection, DWORD WhichData); +__declspec(dllimport) long long __stdcall GetPE32Data(char* szFileName, DWORD WhichSection, DWORD WhichData); +__declspec(dllimport) long long __stdcall GetPE32DataW(wchar_t* szFileName, DWORD WhichSection, DWORD WhichData); +__declspec(dllimport) bool __stdcall GetPE32DataFromMappedFileEx(ULONG_PTR FileMapVA, LPVOID DataStorage); +__declspec(dllimport) bool __stdcall GetPE32DataEx(char* szFileName, LPVOID DataStorage); +__declspec(dllimport) bool __stdcall GetPE32DataExW(wchar_t* szFileName, LPVOID DataStorage); +__declspec(dllimport) bool __stdcall SetPE32DataForMappedFile(ULONG_PTR FileMapVA, DWORD WhichSection, DWORD WhichData, ULONG_PTR NewDataValue); +__declspec(dllimport) bool __stdcall SetPE32Data(char* szFileName, DWORD WhichSection, DWORD WhichData, ULONG_PTR NewDataValue); +__declspec(dllimport) bool __stdcall SetPE32DataW(wchar_t* szFileName, DWORD WhichSection, DWORD WhichData, ULONG_PTR NewDataValue); +__declspec(dllimport) bool __stdcall SetPE32DataForMappedFileEx(ULONG_PTR FileMapVA, LPVOID DataStorage); +__declspec(dllimport) bool __stdcall SetPE32DataEx(char* szFileName, LPVOID DataStorage); +__declspec(dllimport) bool __stdcall SetPE32DataExW(wchar_t* szFileName, LPVOID DataStorage); +__declspec(dllimport) long __stdcall GetPE32SectionNumberFromVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert); +__declspec(dllimport) long long __stdcall ConvertVAtoFileOffset(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType); +__declspec(dllimport) long long __stdcall ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType); +__declspec(dllimport) long long __stdcall ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType); +__declspec(dllimport) long long __stdcall ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType); // TitanEngine.Realigner.functions: -__declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName); -__declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName); -__declspec(dllexport) long TITCALL RealignPE(ULONG_PTR FileMapVA, DWORD FileSize, DWORD RealingMode); -__declspec(dllexport) long TITCALL RealignPEEx(char* szFileName, DWORD RealingFileSize, DWORD ForcedFileAlignment); -__declspec(dllexport) long TITCALL RealignPEExW(wchar_t* szFileName, DWORD RealingFileSize, DWORD ForcedFileAlignment); -__declspec(dllexport) bool TITCALL WipeSection(char* szFileName, int WipeSectionNumber, bool RemovePhysically); -__declspec(dllexport) bool TITCALL WipeSectionW(wchar_t* szFileName, int WipeSectionNumber, bool RemovePhysically); -__declspec(dllexport) bool TITCALL IsPE32FileValidEx(char* szFileName, DWORD CheckDepth, LPVOID FileStatusInfo); -__declspec(dllexport) bool TITCALL IsPE32FileValidExW(wchar_t* szFileName, DWORD CheckDepth, LPVOID FileStatusInfo); -__declspec(dllexport) bool TITCALL FixBrokenPE32FileEx(char* szFileName, LPVOID FileStatusInfo, LPVOID FileFixInfo); -__declspec(dllexport) bool TITCALL FixBrokenPE32FileExW(wchar_t* szFileName, LPVOID FileStatusInfo, LPVOID FileFixInfo); -__declspec(dllexport) bool TITCALL IsFileDLL(char* szFileName, ULONG_PTR FileMapVA); -__declspec(dllexport) bool TITCALL IsFileDLLW(wchar_t* szFileName, ULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall FixHeaderCheckSum(char* szFileName); +__declspec(dllimport) bool __stdcall FixHeaderCheckSumW(wchar_t* szFileName); +__declspec(dllimport) long __stdcall RealignPE(ULONG_PTR FileMapVA, DWORD FileSize, DWORD RealingMode); +__declspec(dllimport) long __stdcall RealignPEEx(char* szFileName, DWORD RealingFileSize, DWORD ForcedFileAlignment); +__declspec(dllimport) long __stdcall RealignPEExW(wchar_t* szFileName, DWORD RealingFileSize, DWORD ForcedFileAlignment); +__declspec(dllimport) bool __stdcall WipeSection(char* szFileName, int WipeSectionNumber, bool RemovePhysically); +__declspec(dllimport) bool __stdcall WipeSectionW(wchar_t* szFileName, int WipeSectionNumber, bool RemovePhysically); +__declspec(dllimport) bool __stdcall IsPE32FileValidEx(char* szFileName, DWORD CheckDepth, LPVOID FileStatusInfo); +__declspec(dllimport) bool __stdcall IsPE32FileValidExW(wchar_t* szFileName, DWORD CheckDepth, LPVOID FileStatusInfo); +__declspec(dllimport) bool __stdcall FixBrokenPE32FileEx(char* szFileName, LPVOID FileStatusInfo, LPVOID FileFixInfo); +__declspec(dllimport) bool __stdcall FixBrokenPE32FileExW(wchar_t* szFileName, LPVOID FileStatusInfo, LPVOID FileFixInfo); +__declspec(dllimport) bool __stdcall IsFileDLL(char* szFileName, ULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall IsFileDLLW(wchar_t* szFileName, ULONG_PTR FileMapVA); // TitanEngine.Hider.functions: -__declspec(dllexport) void* TITCALL GetPEBLocation(HANDLE hProcess); -__declspec(dllexport) bool TITCALL HideDebugger(HANDLE hProcess, DWORD PatchAPILevel); -__declspec(dllexport) bool TITCALL UnHideDebugger(HANDLE hProcess, DWORD PatchAPILevel); +__declspec(dllimport) void* __stdcall GetPEBLocation(HANDLE hProcess); +__declspec(dllimport) bool __stdcall HideDebugger(HANDLE hProcess, DWORD PatchAPILevel); +__declspec(dllimport) bool __stdcall UnHideDebugger(HANDLE hProcess, DWORD PatchAPILevel); // TitanEngine.Relocater.functions: -__declspec(dllexport) void TITCALL RelocaterCleanup(); -__declspec(dllexport) void TITCALL RelocaterInit(DWORD MemorySize, ULONG_PTR OldImageBase, ULONG_PTR NewImageBase); -__declspec(dllexport) void TITCALL RelocaterAddNewRelocation(HANDLE hProcess, ULONG_PTR RelocateAddress, DWORD RelocateState); -__declspec(dllexport) long TITCALL RelocaterEstimatedSize(); -__declspec(dllexport) bool TITCALL RelocaterExportRelocation(ULONG_PTR StorePlace, DWORD StorePlaceRVA, ULONG_PTR FileMapVA); -__declspec(dllexport) bool TITCALL RelocaterExportRelocationEx(char* szFileName, char* szSectionName); -__declspec(dllexport) bool TITCALL RelocaterExportRelocationExW(wchar_t* szFileName, char* szSectionName); -__declspec(dllexport) bool TITCALL RelocaterGrabRelocationTable(HANDLE hProcess, ULONG_PTR MemoryStart, DWORD MemorySize); -__declspec(dllexport) bool TITCALL RelocaterGrabRelocationTableEx(HANDLE hProcess, ULONG_PTR MemoryStart, ULONG_PTR MemorySize, DWORD NtSizeOfImage); -__declspec(dllexport) bool TITCALL RelocaterMakeSnapshot(HANDLE hProcess, char* szSaveFileName, LPVOID MemoryStart, ULONG_PTR MemorySize); -__declspec(dllexport) bool TITCALL RelocaterMakeSnapshotW(HANDLE hProcess, wchar_t* szSaveFileName, LPVOID MemoryStart, ULONG_PTR MemorySize); -__declspec(dllexport) bool TITCALL RelocaterCompareTwoSnapshots(HANDLE hProcess, ULONG_PTR LoadedImageBase, ULONG_PTR NtSizeOfImage, char* szDumpFile1, char* szDumpFile2, ULONG_PTR MemStart); -__declspec(dllexport) bool TITCALL RelocaterCompareTwoSnapshotsW(HANDLE hProcess, ULONG_PTR LoadedImageBase, ULONG_PTR NtSizeOfImage, wchar_t* szDumpFile1, wchar_t* szDumpFile2, ULONG_PTR MemStart); -__declspec(dllexport) bool TITCALL RelocaterChangeFileBase(char* szFileName, ULONG_PTR NewImageBase); -__declspec(dllexport) bool TITCALL RelocaterChangeFileBaseW(wchar_t* szFileName, ULONG_PTR NewImageBase); -__declspec(dllexport) bool TITCALL RelocaterRelocateMemoryBlock(ULONG_PTR FileMapVA, ULONG_PTR MemoryLocation, void* RelocateMemory, DWORD RelocateMemorySize, ULONG_PTR CurrentLoadedBase, ULONG_PTR RelocateBase); -__declspec(dllexport) bool TITCALL RelocaterWipeRelocationTable(char* szFileName); -__declspec(dllexport) bool TITCALL RelocaterWipeRelocationTableW(wchar_t* szFileName); +__declspec(dllimport) void __stdcall RelocaterCleanup(); +__declspec(dllimport) void __stdcall RelocaterInit(DWORD MemorySize, ULONG_PTR OldImageBase, ULONG_PTR NewImageBase); +__declspec(dllimport) void __stdcall RelocaterAddNewRelocation(HANDLE hProcess, ULONG_PTR RelocateAddress, DWORD RelocateState); +__declspec(dllimport) long __stdcall RelocaterEstimatedSize(); +__declspec(dllimport) bool __stdcall RelocaterExportRelocation(ULONG_PTR StorePlace, DWORD StorePlaceRVA, ULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall RelocaterExportRelocationEx(char* szFileName, char* szSectionName); +__declspec(dllimport) bool __stdcall RelocaterExportRelocationExW(wchar_t* szFileName, char* szSectionName); +__declspec(dllimport) bool __stdcall RelocaterGrabRelocationTable(HANDLE hProcess, ULONG_PTR MemoryStart, DWORD MemorySize); +__declspec(dllimport) bool __stdcall RelocaterGrabRelocationTableEx(HANDLE hProcess, ULONG_PTR MemoryStart, ULONG_PTR MemorySize, DWORD NtSizeOfImage); +__declspec(dllimport) bool __stdcall RelocaterMakeSnapshot(HANDLE hProcess, char* szSaveFileName, LPVOID MemoryStart, ULONG_PTR MemorySize); +__declspec(dllimport) bool __stdcall RelocaterMakeSnapshotW(HANDLE hProcess, wchar_t* szSaveFileName, LPVOID MemoryStart, ULONG_PTR MemorySize); +__declspec(dllimport) bool __stdcall RelocaterCompareTwoSnapshots(HANDLE hProcess, ULONG_PTR LoadedImageBase, ULONG_PTR NtSizeOfImage, char* szDumpFile1, char* szDumpFile2, ULONG_PTR MemStart); +__declspec(dllimport) bool __stdcall RelocaterCompareTwoSnapshotsW(HANDLE hProcess, ULONG_PTR LoadedImageBase, ULONG_PTR NtSizeOfImage, wchar_t* szDumpFile1, wchar_t* szDumpFile2, ULONG_PTR MemStart); +__declspec(dllimport) bool __stdcall RelocaterChangeFileBase(char* szFileName, ULONG_PTR NewImageBase); +__declspec(dllimport) bool __stdcall RelocaterChangeFileBaseW(wchar_t* szFileName, ULONG_PTR NewImageBase); +__declspec(dllimport) bool __stdcall RelocaterRelocateMemoryBlock(ULONG_PTR FileMapVA, ULONG_PTR MemoryLocation, void* RelocateMemory, DWORD RelocateMemorySize, ULONG_PTR CurrentLoadedBase, ULONG_PTR RelocateBase); +__declspec(dllimport) bool __stdcall RelocaterWipeRelocationTable(char* szFileName); +__declspec(dllimport) bool __stdcall RelocaterWipeRelocationTableW(wchar_t* szFileName); // TitanEngine.Resourcer.functions: -__declspec(dllexport) long long TITCALL ResourcerLoadFileForResourceUse(char* szFileName); -__declspec(dllexport) long long TITCALL ResourcerLoadFileForResourceUseW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL ResourcerFreeLoadedFile(LPVOID LoadedFileBase); -__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileEx(ULONG_PTR FileMapVA, char* szResourceType, char* szResourceName, char* szExtractedFileName); -__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFile(char* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName); -__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileW(wchar_t* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName); -__declspec(dllexport) bool TITCALL ResourcerFindResource(char* szFileName, char* szResourceType, DWORD ResourceType, char* szResourceName, DWORD ResourceName, DWORD ResourceLanguage, PULONG_PTR pResourceData, LPDWORD pResourceSize); -__declspec(dllexport) bool TITCALL ResourcerFindResourceW(wchar_t* szFileName, wchar_t* szResourceType, DWORD ResourceType, wchar_t* szResourceName, DWORD ResourceName, DWORD ResourceLanguage, PULONG_PTR pResourceData, LPDWORD pResourceSize); -__declspec(dllexport) bool TITCALL ResourcerFindResourceEx(ULONG_PTR FileMapVA, DWORD FileSize, wchar_t* szResourceType, DWORD ResourceType, wchar_t* szResourceName, DWORD ResourceName, DWORD ResourceLanguage, PULONG_PTR pResourceData, LPDWORD pResourceSize); -__declspec(dllexport) void TITCALL ResourcerEnumerateResource(char* szFileName, void* CallBack); -__declspec(dllexport) void TITCALL ResourcerEnumerateResourceW(wchar_t* szFileName, void* CallBack); -__declspec(dllexport) void TITCALL ResourcerEnumerateResourceEx(ULONG_PTR FileMapVA, DWORD FileSize, void* CallBack); +__declspec(dllimport) long long __stdcall ResourcerLoadFileForResourceUse(char* szFileName); +__declspec(dllimport) long long __stdcall ResourcerLoadFileForResourceUseW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall ResourcerFreeLoadedFile(LPVOID LoadedFileBase); +__declspec(dllimport) bool __stdcall ResourcerExtractResourceFromFileEx(ULONG_PTR FileMapVA, char* szResourceType, char* szResourceName, char* szExtractedFileName); +__declspec(dllimport) bool __stdcall ResourcerExtractResourceFromFile(char* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName); +__declspec(dllimport) bool __stdcall ResourcerExtractResourceFromFileW(wchar_t* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName); +__declspec(dllimport) bool __stdcall ResourcerFindResource(char* szFileName, char* szResourceType, DWORD ResourceType, char* szResourceName, DWORD ResourceName, DWORD ResourceLanguage, PULONG_PTR pResourceData, LPDWORD pResourceSize); +__declspec(dllimport) bool __stdcall ResourcerFindResourceW(wchar_t* szFileName, wchar_t* szResourceType, DWORD ResourceType, wchar_t* szResourceName, DWORD ResourceName, DWORD ResourceLanguage, PULONG_PTR pResourceData, LPDWORD pResourceSize); +__declspec(dllimport) bool __stdcall ResourcerFindResourceEx(ULONG_PTR FileMapVA, DWORD FileSize, wchar_t* szResourceType, DWORD ResourceType, wchar_t* szResourceName, DWORD ResourceName, DWORD ResourceLanguage, PULONG_PTR pResourceData, LPDWORD pResourceSize); +__declspec(dllimport) void __stdcall ResourcerEnumerateResource(char* szFileName, void* CallBack); +__declspec(dllimport) void __stdcall ResourcerEnumerateResourceW(wchar_t* szFileName, void* CallBack); +__declspec(dllimport) void __stdcall ResourcerEnumerateResourceEx(ULONG_PTR FileMapVA, DWORD FileSize, void* CallBack); // TitanEngine.Threader.functions: -__declspec(dllexport) bool TITCALL ThreaderImportRunningThreadData(DWORD ProcessId); -__declspec(dllexport) void* TITCALL ThreaderGetThreadInfo(HANDLE hThread, DWORD ThreadId); -__declspec(dllexport) void TITCALL ThreaderEnumThreadInfo(void* EnumCallBack); -__declspec(dllexport) bool TITCALL ThreaderPauseThread(HANDLE hThread); -__declspec(dllexport) bool TITCALL ThreaderResumeThread(HANDLE hThread); -__declspec(dllexport) bool TITCALL ThreaderTerminateThread(HANDLE hThread, DWORD ThreadExitCode); -__declspec(dllexport) bool TITCALL ThreaderPauseAllThreads(bool LeaveMainRunning); -__declspec(dllexport) bool TITCALL ThreaderResumeAllThreads(bool LeaveMainPaused); -__declspec(dllexport) bool TITCALL ThreaderPauseProcess(); -__declspec(dllexport) bool TITCALL ThreaderResumeProcess(); -__declspec(dllexport) long long TITCALL ThreaderCreateRemoteThread(ULONG_PTR ThreadStartAddress, bool AutoCloseTheHandle, LPVOID ThreadPassParameter, LPDWORD ThreadId); -__declspec(dllexport) bool TITCALL ThreaderInjectAndExecuteCode(LPVOID InjectCode, DWORD StartDelta, DWORD InjectSize); -__declspec(dllexport) long long TITCALL ThreaderCreateRemoteThreadEx(HANDLE hProcess, ULONG_PTR ThreadStartAddress, bool AutoCloseTheHandle, LPVOID ThreadPassParameter, LPDWORD ThreadId); -__declspec(dllexport) bool TITCALL ThreaderInjectAndExecuteCodeEx(HANDLE hProcess, LPVOID InjectCode, DWORD StartDelta, DWORD InjectSize); -__declspec(dllexport) void TITCALL ThreaderSetCallBackForNextExitThreadEvent(LPVOID exitThreadCallBack); -__declspec(dllexport) bool TITCALL ThreaderIsThreadStillRunning(HANDLE hThread); -__declspec(dllexport) bool TITCALL ThreaderIsThreadActive(HANDLE hThread); -__declspec(dllexport) bool TITCALL ThreaderIsAnyThreadActive(); -__declspec(dllexport) bool TITCALL ThreaderExecuteOnlyInjectedThreads(); -__declspec(dllexport) long long TITCALL ThreaderGetOpenHandleForThread(DWORD ThreadId); -__declspec(dllexport) void* TITCALL ThreaderGetThreadData(); -__declspec(dllexport) bool TITCALL ThreaderIsExceptionInMainThread(); +__declspec(dllimport) bool __stdcall ThreaderImportRunningThreadData(DWORD ProcessId); +__declspec(dllimport) void* __stdcall ThreaderGetThreadInfo(HANDLE hThread, DWORD ThreadId); +__declspec(dllimport) void __stdcall ThreaderEnumThreadInfo(void* EnumCallBack); +__declspec(dllimport) bool __stdcall ThreaderPauseThread(HANDLE hThread); +__declspec(dllimport) bool __stdcall ThreaderResumeThread(HANDLE hThread); +__declspec(dllimport) bool __stdcall ThreaderTerminateThread(HANDLE hThread, DWORD ThreadExitCode); +__declspec(dllimport) bool __stdcall ThreaderPauseAllThreads(bool LeaveMainRunning); +__declspec(dllimport) bool __stdcall ThreaderResumeAllThreads(bool LeaveMainPaused); +__declspec(dllimport) bool __stdcall ThreaderPauseProcess(); +__declspec(dllimport) bool __stdcall ThreaderResumeProcess(); +__declspec(dllimport) long long __stdcall ThreaderCreateRemoteThread(ULONG_PTR ThreadStartAddress, bool AutoCloseTheHandle, LPVOID ThreadPassParameter, LPDWORD ThreadId); +__declspec(dllimport) bool __stdcall ThreaderInjectAndExecuteCode(LPVOID InjectCode, DWORD StartDelta, DWORD InjectSize); +__declspec(dllimport) long long __stdcall ThreaderCreateRemoteThreadEx(HANDLE hProcess, ULONG_PTR ThreadStartAddress, bool AutoCloseTheHandle, LPVOID ThreadPassParameter, LPDWORD ThreadId); +__declspec(dllimport) bool __stdcall ThreaderInjectAndExecuteCodeEx(HANDLE hProcess, LPVOID InjectCode, DWORD StartDelta, DWORD InjectSize); +__declspec(dllimport) void __stdcall ThreaderSetCallBackForNextExitThreadEvent(LPVOID exitThreadCallBack); +__declspec(dllimport) bool __stdcall ThreaderIsThreadStillRunning(HANDLE hThread); +__declspec(dllimport) bool __stdcall ThreaderIsThreadActive(HANDLE hThread); +__declspec(dllimport) bool __stdcall ThreaderIsAnyThreadActive(); +__declspec(dllimport) bool __stdcall ThreaderExecuteOnlyInjectedThreads(); +__declspec(dllimport) long long __stdcall ThreaderGetOpenHandleForThread(DWORD ThreadId); +__declspec(dllimport) void* __stdcall ThreaderGetThreadData(); +__declspec(dllimport) bool __stdcall ThreaderIsExceptionInMainThread(); // TitanEngine.Debugger.functions: -__declspec(dllexport) void* TITCALL StaticDisassembleEx(ULONG_PTR DisassmStart, LPVOID DisassmAddress); -__declspec(dllexport) void* TITCALL StaticDisassemble(LPVOID DisassmAddress); -__declspec(dllexport) void* TITCALL DisassembleEx(HANDLE hProcess, LPVOID DisassmAddress, bool ReturnInstructionType); -__declspec(dllexport) void* TITCALL Disassemble(LPVOID DisassmAddress); -__declspec(dllexport) long TITCALL StaticLengthDisassemble(LPVOID DisassmAddress); -__declspec(dllexport) long TITCALL LengthDisassembleEx(HANDLE hProcess, LPVOID DisassmAddress); -__declspec(dllexport) long TITCALL LengthDisassemble(LPVOID DisassmAddress); -__declspec(dllexport) void* TITCALL InitDebug(char* szFileName, char* szCommandLine, char* szCurrentFolder); -__declspec(dllexport) void* TITCALL InitDebugW(wchar_t* szFileName, wchar_t* szCommandLine, wchar_t* szCurrentFolder); -__declspec(dllexport) void* TITCALL InitDebugEx(char* szFileName, char* szCommandLine, char* szCurrentFolder, LPVOID EntryCallBack); -__declspec(dllexport) void* TITCALL InitDebugExW(wchar_t* szFileName, wchar_t* szCommandLine, wchar_t* szCurrentFolder, LPVOID EntryCallBack); -__declspec(dllexport) void* TITCALL InitDLLDebug(char* szFileName, bool ReserveModuleBase, char* szCommandLine, char* szCurrentFolder, LPVOID EntryCallBack); -__declspec(dllexport) void* TITCALL InitDLLDebugW(wchar_t* szFileName, bool ReserveModuleBase, wchar_t* szCommandLine, wchar_t* szCurrentFolder, LPVOID EntryCallBack); -__declspec(dllexport) bool TITCALL StopDebug(); -__declspec(dllexport) void TITCALL SetBPXOptions(long DefaultBreakPointType); -__declspec(dllexport) bool TITCALL IsBPXEnabled(ULONG_PTR bpxAddress); -__declspec(dllexport) bool TITCALL EnableBPX(ULONG_PTR bpxAddress); -__declspec(dllexport) bool TITCALL DisableBPX(ULONG_PTR bpxAddress); -__declspec(dllexport) bool TITCALL SetBPX(ULONG_PTR bpxAddress, DWORD bpxType, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL SetBPXEx(ULONG_PTR bpxAddress, DWORD bpxType, DWORD NumberOfExecution, DWORD CmpRegister, DWORD CmpCondition, ULONG_PTR CmpValue, LPVOID bpxCallBack, LPVOID bpxCompareCallBack, LPVOID bpxRemoveCallBack); -__declspec(dllexport) bool TITCALL DeleteBPX(ULONG_PTR bpxAddress); -__declspec(dllexport) bool TITCALL SafeDeleteBPX(ULONG_PTR bpxAddress); -__declspec(dllexport) bool TITCALL SetAPIBreakPoint(char* szDLLName, char* szAPIName, DWORD bpxType, DWORD bpxPlace, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL DeleteAPIBreakPoint(char* szDLLName, char* szAPIName, DWORD bpxPlace); -__declspec(dllexport) bool TITCALL SafeDeleteAPIBreakPoint(char* szDLLName, char* szAPIName, DWORD bpxPlace); -__declspec(dllexport) bool TITCALL SetMemoryBPX(ULONG_PTR MemoryStart, DWORD SizeOfMemory, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL SetMemoryBPXEx(ULONG_PTR MemoryStart, DWORD SizeOfMemory, DWORD BreakPointType, bool RestoreOnHit, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL RemoveMemoryBPX(ULONG_PTR MemoryStart, DWORD SizeOfMemory); -__declspec(dllexport) bool TITCALL GetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea); -__declspec(dllexport) long long TITCALL GetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister); -__declspec(dllexport) long long TITCALL GetContextData(DWORD IndexOfRegister); -__declspec(dllexport) bool TITCALL SetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea); -__declspec(dllexport) bool TITCALL SetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister, ULONG_PTR NewRegisterValue); -__declspec(dllexport) bool TITCALL SetContextData(DWORD IndexOfRegister, ULONG_PTR NewRegisterValue); -__declspec(dllexport) void TITCALL ClearExceptionNumber(); -__declspec(dllexport) long TITCALL CurrentExceptionNumber(); -__declspec(dllexport) bool TITCALL MatchPatternEx(HANDLE hProcess, void* MemoryToCheck, int SizeOfMemoryToCheck, void* PatternToMatch, int SizeOfPatternToMatch, PBYTE WildCard); -__declspec(dllexport) bool TITCALL MatchPattern(void* MemoryToCheck, int SizeOfMemoryToCheck, void* PatternToMatch, int SizeOfPatternToMatch, PBYTE WildCard); -__declspec(dllexport) long long TITCALL FindEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, LPBYTE WildCard); -extern "C" __declspec(dllexport) long long TITCALL Find(LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, LPBYTE WildCard); -__declspec(dllexport) bool TITCALL FillEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, PBYTE FillByte); -__declspec(dllexport) bool TITCALL Fill(LPVOID MemoryStart, DWORD MemorySize, PBYTE FillByte); -__declspec(dllexport) bool TITCALL PatchEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, LPVOID ReplacePattern, DWORD ReplaceSize, bool AppendNOP, bool PrependNOP); -__declspec(dllexport) bool TITCALL Patch(LPVOID MemoryStart, DWORD MemorySize, LPVOID ReplacePattern, DWORD ReplaceSize, bool AppendNOP, bool PrependNOP); -__declspec(dllexport) bool TITCALL ReplaceEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, DWORD NumberOfRepetitions, LPVOID ReplacePattern, DWORD ReplaceSize, PBYTE WildCard); -__declspec(dllexport) bool TITCALL Replace(LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, DWORD NumberOfRepetitions, LPVOID ReplacePattern, DWORD ReplaceSize, PBYTE WildCard); -__declspec(dllexport) void* TITCALL GetDebugData(); -__declspec(dllexport) void* TITCALL GetTerminationData(); -__declspec(dllexport) long TITCALL GetExitCode(); -__declspec(dllexport) long long TITCALL GetDebuggedDLLBaseAddress(); -__declspec(dllexport) unsigned long long TITCALL GetDebuggedFileBaseAddress(); -__declspec(dllexport) bool TITCALL GetRemoteString(HANDLE hProcess, LPVOID StringAddress, LPVOID StringStorage, int MaximumStringSize); -__declspec(dllexport) long long TITCALL GetFunctionParameter(HANDLE hProcess, DWORD FunctionType, DWORD ParameterNumber, DWORD ParameterType); -__declspec(dllexport) long long TITCALL GetJumpDestinationEx(HANDLE hProcess, ULONG_PTR InstructionAddress, bool JustJumps); -__declspec(dllexport) long long TITCALL GetJumpDestination(HANDLE hProcess, ULONG_PTR InstructionAddress); -__declspec(dllexport) bool TITCALL IsJumpGoingToExecuteEx(HANDLE hProcess, HANDLE hThread, ULONG_PTR InstructionAddress, ULONG_PTR RegFlags); -__declspec(dllexport) bool TITCALL IsJumpGoingToExecute(); -__declspec(dllexport) void TITCALL SetCustomHandler(DWORD ExceptionId, LPVOID CallBack); -__declspec(dllexport) void TITCALL ForceClose(); -__declspec(dllexport) void TITCALL StepInto(LPVOID traceCallBack); -__declspec(dllexport) void TITCALL StepOver(LPVOID traceCallBack); -__declspec(dllexport) void TITCALL SingleStep(DWORD StepCount, LPVOID StepCallBack); -__declspec(dllexport) bool TITCALL GetUnusedHardwareBreakPointRegister(LPDWORD RegisterIndex); -__declspec(dllexport) bool TITCALL SetHardwareBreakPointEx(HANDLE hActiveThread, ULONG_PTR bpxAddress, DWORD IndexOfRegister, DWORD bpxType, DWORD bpxSize, LPVOID bpxCallBack, LPDWORD IndexOfSelectedRegister); -__declspec(dllexport) bool TITCALL SetHardwareBreakPoint(ULONG_PTR bpxAddress, DWORD IndexOfRegister, DWORD bpxType, DWORD bpxSize, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL DeleteHardwareBreakPoint(DWORD IndexOfRegister); -__declspec(dllexport) bool TITCALL RemoveAllBreakPoints(DWORD RemoveOption); -__declspec(dllexport) void* TITCALL GetProcessInformation(); -__declspec(dllexport) void* TITCALL GetStartupInformation(); -__declspec(dllexport) void TITCALL DebugLoop(); -__declspec(dllexport) void TITCALL SetDebugLoopTimeOut(DWORD TimeOut); -__declspec(dllexport) void TITCALL SetNextDbgContinueStatus(DWORD SetDbgCode); -__declspec(dllexport) bool TITCALL AttachDebugger(DWORD ProcessId, bool KillOnExit, LPVOID DebugInfo, LPVOID CallBack); -__declspec(dllexport) bool TITCALL DetachDebugger(DWORD ProcessId); -__declspec(dllexport) bool TITCALL DetachDebuggerEx(DWORD ProcessId); -__declspec(dllexport) void TITCALL DebugLoopEx(DWORD TimeOut); -__declspec(dllexport) void TITCALL AutoDebugEx(char* szFileName, bool ReserveModuleBase, char* szCommandLine, char* szCurrentFolder, DWORD TimeOut, LPVOID EntryCallBack); -__declspec(dllexport) void TITCALL AutoDebugExW(wchar_t* szFileName, bool ReserveModuleBase, wchar_t* szCommandLine, wchar_t* szCurrentFolder, DWORD TimeOut, LPVOID EntryCallBack); -__declspec(dllexport) bool TITCALL IsFileBeingDebugged(); -__declspec(dllexport) void TITCALL SetErrorModel(bool DisplayErrorMessages); +__declspec(dllimport) void* __stdcall StaticDisassembleEx(ULONG_PTR DisassmStart, LPVOID DisassmAddress); +__declspec(dllimport) void* __stdcall StaticDisassemble(LPVOID DisassmAddress); +__declspec(dllimport) void* __stdcall DisassembleEx(HANDLE hProcess, LPVOID DisassmAddress, bool ReturnInstructionType); +__declspec(dllimport) void* __stdcall Disassemble(LPVOID DisassmAddress); +__declspec(dllimport) long __stdcall StaticLengthDisassemble(LPVOID DisassmAddress); +__declspec(dllimport) long __stdcall LengthDisassembleEx(HANDLE hProcess, LPVOID DisassmAddress); +__declspec(dllimport) long __stdcall LengthDisassemble(LPVOID DisassmAddress); +__declspec(dllimport) void* __stdcall InitDebug(char* szFileName, char* szCommandLine, char* szCurrentFolder); +__declspec(dllimport) void* __stdcall InitDebugW(wchar_t* szFileName, wchar_t* szCommandLine, wchar_t* szCurrentFolder); +__declspec(dllimport) void* __stdcall InitDebugEx(char* szFileName, char* szCommandLine, char* szCurrentFolder, LPVOID EntryCallBack); +__declspec(dllimport) void* __stdcall InitDebugExW(wchar_t* szFileName, wchar_t* szCommandLine, wchar_t* szCurrentFolder, LPVOID EntryCallBack); +__declspec(dllimport) void* __stdcall InitDLLDebug(char* szFileName, bool ReserveModuleBase, char* szCommandLine, char* szCurrentFolder, LPVOID EntryCallBack); +__declspec(dllimport) void* __stdcall InitDLLDebugW(wchar_t* szFileName, bool ReserveModuleBase, wchar_t* szCommandLine, wchar_t* szCurrentFolder, LPVOID EntryCallBack); +__declspec(dllimport) bool __stdcall StopDebug(); +__declspec(dllimport) void __stdcall SetBPXOptions(long DefaultBreakPointType); +__declspec(dllimport) bool __stdcall IsBPXEnabled(ULONG_PTR bpxAddress); +__declspec(dllimport) bool __stdcall EnableBPX(ULONG_PTR bpxAddress); +__declspec(dllimport) bool __stdcall DisableBPX(ULONG_PTR bpxAddress); +__declspec(dllimport) bool __stdcall SetBPX(ULONG_PTR bpxAddress, DWORD bpxType, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall SetBPXEx(ULONG_PTR bpxAddress, DWORD bpxType, DWORD NumberOfExecution, DWORD CmpRegister, DWORD CmpCondition, ULONG_PTR CmpValue, LPVOID bpxCallBack, LPVOID bpxCompareCallBack, LPVOID bpxRemoveCallBack); +__declspec(dllimport) bool __stdcall DeleteBPX(ULONG_PTR bpxAddress); +__declspec(dllimport) bool __stdcall SafeDeleteBPX(ULONG_PTR bpxAddress); +__declspec(dllimport) bool __stdcall SetAPIBreakPoint(char* szDLLName, char* szAPIName, DWORD bpxType, DWORD bpxPlace, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall DeleteAPIBreakPoint(char* szDLLName, char* szAPIName, DWORD bpxPlace); +__declspec(dllimport) bool __stdcall SafeDeleteAPIBreakPoint(char* szDLLName, char* szAPIName, DWORD bpxPlace); +__declspec(dllimport) bool __stdcall SetMemoryBPX(ULONG_PTR MemoryStart, DWORD SizeOfMemory, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall SetMemoryBPXEx(ULONG_PTR MemoryStart, DWORD SizeOfMemory, DWORD BreakPointType, bool RestoreOnHit, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall RemoveMemoryBPX(ULONG_PTR MemoryStart, DWORD SizeOfMemory); +__declspec(dllimport) bool __stdcall GetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea); +__declspec(dllimport) long long __stdcall GetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister); +__declspec(dllimport) long long __stdcall GetContextData(DWORD IndexOfRegister); +__declspec(dllimport) bool __stdcall SetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea); +__declspec(dllimport) bool __stdcall SetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister, ULONG_PTR NewRegisterValue); +__declspec(dllimport) bool __stdcall SetContextData(DWORD IndexOfRegister, ULONG_PTR NewRegisterValue); +__declspec(dllimport) void __stdcall ClearExceptionNumber(); +__declspec(dllimport) long __stdcall CurrentExceptionNumber(); +__declspec(dllimport) bool __stdcall MatchPatternEx(HANDLE hProcess, void* MemoryToCheck, int SizeOfMemoryToCheck, void* PatternToMatch, int SizeOfPatternToMatch, PBYTE WildCard); +__declspec(dllimport) bool __stdcall MatchPattern(void* MemoryToCheck, int SizeOfMemoryToCheck, void* PatternToMatch, int SizeOfPatternToMatch, PBYTE WildCard); +__declspec(dllimport) long long __stdcall FindEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, LPBYTE WildCard); +__declspec(dllimport) long long __stdcall Find(LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, LPBYTE WildCard); +__declspec(dllimport) bool __stdcall FillEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, PBYTE FillByte); +__declspec(dllimport) bool __stdcall Fill(LPVOID MemoryStart, DWORD MemorySize, PBYTE FillByte); +__declspec(dllimport) bool __stdcall PatchEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, LPVOID ReplacePattern, DWORD ReplaceSize, bool AppendNOP, bool PrependNOP); +__declspec(dllimport) bool __stdcall Patch(LPVOID MemoryStart, DWORD MemorySize, LPVOID ReplacePattern, DWORD ReplaceSize, bool AppendNOP, bool PrependNOP); +__declspec(dllimport) bool __stdcall ReplaceEx(HANDLE hProcess, LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, DWORD NumberOfRepetitions, LPVOID ReplacePattern, DWORD ReplaceSize, PBYTE WildCard); +__declspec(dllimport) bool __stdcall Replace(LPVOID MemoryStart, DWORD MemorySize, LPVOID SearchPattern, DWORD PatternSize, DWORD NumberOfRepetitions, LPVOID ReplacePattern, DWORD ReplaceSize, PBYTE WildCard); +__declspec(dllimport) void* __stdcall GetDebugData(); +__declspec(dllimport) void* __stdcall GetTerminationData(); +__declspec(dllimport) long __stdcall GetExitCode(); +__declspec(dllimport) long long __stdcall GetDebuggedDLLBaseAddress(); +__declspec(dllimport) long long __stdcall GetDebuggedFileBaseAddress(); +__declspec(dllimport) bool __stdcall GetRemoteString(HANDLE hProcess, LPVOID StringAddress, LPVOID StringStorage, int MaximumStringSize); +__declspec(dllimport) long long __stdcall GetFunctionParameter(HANDLE hProcess, DWORD FunctionType, DWORD ParameterNumber, DWORD ParameterType); +__declspec(dllimport) long long __stdcall GetJumpDestinationEx(HANDLE hProcess, ULONG_PTR InstructionAddress, bool JustJumps); +__declspec(dllimport) long long __stdcall GetJumpDestination(HANDLE hProcess, ULONG_PTR InstructionAddress); +__declspec(dllimport) bool __stdcall IsJumpGoingToExecuteEx(HANDLE hProcess, HANDLE hThread, ULONG_PTR InstructionAddress, ULONG_PTR RegFlags); +__declspec(dllimport) bool __stdcall IsJumpGoingToExecute(); +__declspec(dllimport) void __stdcall SetCustomHandler(DWORD ExceptionId, LPVOID CallBack); +__declspec(dllimport) void __stdcall ForceClose(); +__declspec(dllimport) void __stdcall StepInto(LPVOID traceCallBack); +__declspec(dllimport) void __stdcall StepOver(LPVOID traceCallBack); +__declspec(dllimport) void __stdcall SingleStep(DWORD StepCount, LPVOID StepCallBack); +__declspec(dllimport) bool __stdcall GetUnusedHardwareBreakPointRegister(LPDWORD RegisterIndex); +__declspec(dllimport) bool __stdcall SetHardwareBreakPointEx(HANDLE hActiveThread, ULONG_PTR bpxAddress, DWORD IndexOfRegister, DWORD bpxType, DWORD bpxSize, LPVOID bpxCallBack, LPDWORD IndexOfSelectedRegister); +__declspec(dllimport) bool __stdcall SetHardwareBreakPoint(ULONG_PTR bpxAddress, DWORD IndexOfRegister, DWORD bpxType, DWORD bpxSize, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall DeleteHardwareBreakPoint(DWORD IndexOfRegister); +__declspec(dllimport) bool __stdcall RemoveAllBreakPoints(DWORD RemoveOption); +__declspec(dllimport) void* __stdcall GetProcessInformation(); +__declspec(dllimport) void* __stdcall GetStartupInformation(); +__declspec(dllimport) void __stdcall DebugLoop(); +__declspec(dllimport) void __stdcall SetDebugLoopTimeOut(DWORD TimeOut); +__declspec(dllimport) void __stdcall SetNextDbgContinueStatus(DWORD SetDbgCode); +__declspec(dllimport) bool __stdcall AttachDebugger(DWORD ProcessId, bool KillOnExit, LPVOID DebugInfo, LPVOID CallBack); +__declspec(dllimport) bool __stdcall DetachDebugger(DWORD ProcessId); +__declspec(dllimport) bool __stdcall DetachDebuggerEx(DWORD ProcessId); +__declspec(dllimport) void __stdcall DebugLoopEx(DWORD TimeOut); +__declspec(dllimport) void __stdcall AutoDebugEx(char* szFileName, bool ReserveModuleBase, char* szCommandLine, char* szCurrentFolder, DWORD TimeOut, LPVOID EntryCallBack); +__declspec(dllimport) void __stdcall AutoDebugExW(wchar_t* szFileName, bool ReserveModuleBase, wchar_t* szCommandLine, wchar_t* szCurrentFolder, DWORD TimeOut, LPVOID EntryCallBack); +__declspec(dllimport) bool __stdcall IsFileBeingDebugged(); +__declspec(dllimport) void __stdcall SetErrorModel(bool DisplayErrorMessages); // TitanEngine.FindOEP.functions: -__declspec(dllexport) void TITCALL FindOEPInit(); -__declspec(dllexport) bool TITCALL FindOEPGenerically(char* szFileName, LPVOID TraceInitCallBack, LPVOID CallBack); -__declspec(dllexport) bool TITCALL FindOEPGenericallyW(wchar_t* szFileName, LPVOID TraceInitCallBack, LPVOID CallBack); +__declspec(dllimport) void __stdcall FindOEPInit(); +__declspec(dllimport) bool __stdcall FindOEPGenerically(char* szFileName, LPVOID TraceInitCallBack, LPVOID CallBack); +__declspec(dllimport) bool __stdcall FindOEPGenericallyW(wchar_t* szFileName, LPVOID TraceInitCallBack, LPVOID CallBack); // TitanEngine.Importer.functions: -__declspec(dllexport) void TITCALL ImporterCleanup(); -__declspec(dllexport) void TITCALL ImporterSetImageBase(ULONG_PTR ImageBase); -__declspec(dllexport) void TITCALL ImporterSetUnknownDelta(ULONG_PTR DeltaAddress); -__declspec(dllexport) long long TITCALL ImporterGetCurrentDelta(); -__declspec(dllexport) void TITCALL ImporterInit(DWORD MemorySize, ULONG_PTR ImageBase); -__declspec(dllexport) void TITCALL ImporterAddNewDll(char* szDLLName, ULONG_PTR FirstThunk); -__declspec(dllexport) void TITCALL ImporterAddNewAPI(char* szAPIName, ULONG_PTR ThunkValue); -__declspec(dllexport) void TITCALL ImporterAddNewOrdinalAPI(ULONG_PTR OrdinalNumber, ULONG_PTR ThunkValue); -__declspec(dllexport) long TITCALL ImporterGetAddedDllCount(); -__declspec(dllexport) long TITCALL ImporterGetAddedAPICount(); -__declspec(dllexport) void* TITCALL ImporterGetLastAddedDLLName(); -__declspec(dllexport) void TITCALL ImporterMoveIAT(); -__declspec(dllexport) bool TITCALL ImporterExportIAT(ULONG_PTR StorePlace, ULONG_PTR FileMapVA); -__declspec(dllexport) long TITCALL ImporterEstimatedSize(); -__declspec(dllexport) bool TITCALL ImporterExportIATEx(char* szExportFileName, char* szSectionName); -__declspec(dllexport) bool TITCALL ImporterExportIATExW(wchar_t* szExportFileName, char* szSectionName); -__declspec(dllexport) long long TITCALL ImporterFindAPIWriteLocation(char* szAPIName); -__declspec(dllexport) long long TITCALL ImporterFindOrdinalAPIWriteLocation(ULONG_PTR OrdinalNumber); -__declspec(dllexport) long long TITCALL ImporterFindAPIByWriteLocation(ULONG_PTR APIWriteLocation); -__declspec(dllexport) long long TITCALL ImporterFindDLLByWriteLocation(ULONG_PTR APIWriteLocation); -__declspec(dllexport) void* TITCALL ImporterGetDLLName(ULONG_PTR APIAddress); -__declspec(dllexport) void* TITCALL ImporterGetAPIName(ULONG_PTR APIAddress); -__declspec(dllexport) long long TITCALL ImporterGetAPIOrdinalNumber(ULONG_PTR APIAddress); -__declspec(dllexport) void* TITCALL ImporterGetAPINameEx(ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); -__declspec(dllexport) long long TITCALL ImporterGetRemoteAPIAddress(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) long long TITCALL ImporterGetRemoteAPIAddressEx(char* szDLLName, char* szAPIName); -__declspec(dllexport) long long TITCALL ImporterGetLocalAPIAddress(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) void* TITCALL ImporterGetDLLNameFromDebugee(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) void* TITCALL ImporterGetAPINameFromDebugee(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) long long TITCALL ImporterGetAPIOrdinalNumberFromDebugee(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) long TITCALL ImporterGetDLLIndexEx(ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); -__declspec(dllexport) long TITCALL ImporterGetDLLIndex(HANDLE hProcess, ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); -__declspec(dllexport) long long TITCALL ImporterGetRemoteDLLBase(HANDLE hProcess, HMODULE LocalModuleBase); -__declspec(dllexport) long long TITCALL ImporterGetRemoteDLLBaseEx(HANDLE hProcess, char* szModuleName); -__declspec(dllexport) bool TITCALL ImporterRelocateWriteLocation(ULONG_PTR AddValue); -__declspec(dllexport) bool TITCALL ImporterIsForwardedAPI(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) void* TITCALL ImporterGetForwardedAPIName(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) void* TITCALL ImporterGetForwardedDLLName(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) long TITCALL ImporterGetForwardedDLLIndex(HANDLE hProcess, ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); -__declspec(dllexport) long long TITCALL ImporterGetForwardedAPIOrdinalNumber(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) long long TITCALL ImporterGetNearestAPIAddress(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) void* TITCALL ImporterGetNearestAPIName(HANDLE hProcess, ULONG_PTR APIAddress); -__declspec(dllexport) bool TITCALL ImporterCopyOriginalIAT(char* szOriginalFile, char* szDumpFile); -__declspec(dllexport) bool TITCALL ImporterCopyOriginalIATW(wchar_t* szOriginalFile, wchar_t* szDumpFile); -__declspec(dllexport) bool TITCALL ImporterLoadImportTable(char* szFileName); -__declspec(dllexport) bool TITCALL ImporterLoadImportTableW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL ImporterMoveOriginalIAT(char* szOriginalFile, char* szDumpFile, char* szSectionName); -__declspec(dllexport) bool TITCALL ImporterMoveOriginalIATW(wchar_t* szOriginalFile, wchar_t* szDumpFile, char* szSectionName); -__declspec(dllexport) void TITCALL ImporterAutoSearchIAT(HANDLE hProcess, char* szFileName, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, LPVOID pIATStart, LPVOID pIATSize); -__declspec(dllexport) void TITCALL ImporterAutoSearchIATW(HANDLE hProcess, wchar_t* szFileName, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, LPVOID pIATStart, LPVOID pIATSize); -__declspec(dllexport) void TITCALL ImporterAutoSearchIATEx(HANDLE hProcess, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, LPVOID pIATStart, LPVOID pIATSize); -__declspec(dllexport) void TITCALL ImporterEnumAddedData(LPVOID EnumCallBack); -__declspec(dllexport) long TITCALL ImporterAutoFixIATEx(HANDLE hProcess, char* szDumpedFile, char* szSectionName, bool DumpRunningProcess, bool RealignFile, ULONG_PTR EntryPointAddress, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep, bool TryAutoFix, bool FixEliminations, LPVOID UnknownPointerFixCallback); -__declspec(dllexport) long TITCALL ImporterAutoFixIATExW(HANDLE hProcess, wchar_t* szDumpedFile, char* szSectionName, bool DumpRunningProcess, bool RealignFile, ULONG_PTR EntryPointAddress, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep, bool TryAutoFix, bool FixEliminations, LPVOID UnknownPointerFixCallback); -__declspec(dllexport) long TITCALL ImporterAutoFixIAT(HANDLE hProcess, char* szDumpedFile, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep); -__declspec(dllexport) long TITCALL ImporterAutoFixIATW(HANDLE hProcess, wchar_t* szDumpedFile, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep); +__declspec(dllimport) void __stdcall ImporterCleanup(); +__declspec(dllimport) void __stdcall ImporterSetImageBase(ULONG_PTR ImageBase); +__declspec(dllimport) void __stdcall ImporterSetUnknownDelta(ULONG_PTR DeltaAddress); +__declspec(dllimport) long long __stdcall ImporterGetCurrentDelta(); +__declspec(dllimport) void __stdcall ImporterInit(DWORD MemorySize, ULONG_PTR ImageBase); +__declspec(dllimport) void __stdcall ImporterAddNewDll(char* szDLLName, ULONG_PTR FirstThunk); +__declspec(dllimport) void __stdcall ImporterAddNewAPI(char* szAPIName, ULONG_PTR ThunkValue); +__declspec(dllimport) void __stdcall ImporterAddNewOrdinalAPI(ULONG_PTR OrdinalNumber, ULONG_PTR ThunkValue); +__declspec(dllimport) long __stdcall ImporterGetAddedDllCount(); +__declspec(dllimport) long __stdcall ImporterGetAddedAPICount(); +__declspec(dllimport) void* __stdcall ImporterGetLastAddedDLLName(); +__declspec(dllimport) void __stdcall ImporterMoveIAT(); +__declspec(dllimport) bool __stdcall ImporterExportIAT(ULONG_PTR StorePlace, ULONG_PTR FileMapVA); +__declspec(dllimport) long __stdcall ImporterEstimatedSize(); +__declspec(dllimport) bool __stdcall ImporterExportIATEx(char* szExportFileName, char* szSectionName); +__declspec(dllimport) bool __stdcall ImporterExportIATExW(wchar_t* szExportFileName, char* szSectionName); +__declspec(dllimport) long long __stdcall ImporterFindAPIWriteLocation(char* szAPIName); +__declspec(dllimport) long long __stdcall ImporterFindOrdinalAPIWriteLocation(ULONG_PTR OrdinalNumber); +__declspec(dllimport) long long __stdcall ImporterFindAPIByWriteLocation(ULONG_PTR APIWriteLocation); +__declspec(dllimport) long long __stdcall ImporterFindDLLByWriteLocation(ULONG_PTR APIWriteLocation); +__declspec(dllimport) void* __stdcall ImporterGetDLLName(ULONG_PTR APIAddress); +__declspec(dllimport) void* __stdcall ImporterGetAPIName(ULONG_PTR APIAddress); +__declspec(dllimport) long long __stdcall ImporterGetAPIOrdinalNumber(ULONG_PTR APIAddress); +__declspec(dllimport) void* __stdcall ImporterGetAPINameEx(ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); +__declspec(dllimport) long long __stdcall ImporterGetRemoteAPIAddress(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) long long __stdcall ImporterGetRemoteAPIAddressEx(char* szDLLName, char* szAPIName); +__declspec(dllimport) long long __stdcall ImporterGetLocalAPIAddress(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) void* __stdcall ImporterGetDLLNameFromDebugee(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) void* __stdcall ImporterGetAPINameFromDebugee(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) long long __stdcall ImporterGetAPIOrdinalNumberFromDebugee(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) long __stdcall ImporterGetDLLIndexEx(ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); +__declspec(dllimport) long __stdcall ImporterGetDLLIndex(HANDLE hProcess, ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); +__declspec(dllimport) long long __stdcall ImporterGetRemoteDLLBase(HANDLE hProcess, HMODULE LocalModuleBase); +__declspec(dllimport) bool __stdcall ImporterRelocateWriteLocation(ULONG_PTR AddValue); +__declspec(dllimport) bool __stdcall ImporterIsForwardedAPI(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) void* __stdcall ImporterGetForwardedAPIName(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) void* __stdcall ImporterGetForwardedDLLName(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) long __stdcall ImporterGetForwardedDLLIndex(HANDLE hProcess, ULONG_PTR APIAddress, ULONG_PTR DLLBasesList); +__declspec(dllimport) long long __stdcall ImporterGetForwardedAPIOrdinalNumber(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) long long __stdcall ImporterGetNearestAPIAddress(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) void* __stdcall ImporterGetNearestAPIName(HANDLE hProcess, ULONG_PTR APIAddress); +__declspec(dllimport) bool __stdcall ImporterCopyOriginalIAT(char* szOriginalFile, char* szDumpFile); +__declspec(dllimport) bool __stdcall ImporterCopyOriginalIATW(wchar_t* szOriginalFile, wchar_t* szDumpFile); +__declspec(dllimport) bool __stdcall ImporterLoadImportTable(char* szFileName); +__declspec(dllimport) bool __stdcall ImporterLoadImportTableW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall ImporterMoveOriginalIAT(char* szOriginalFile, char* szDumpFile, char* szSectionName); +__declspec(dllimport) bool __stdcall ImporterMoveOriginalIATW(wchar_t* szOriginalFile, wchar_t* szDumpFile, char* szSectionName); +__declspec(dllimport) void __stdcall ImporterAutoSearchIAT(HANDLE hProcess, char* szFileName, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, LPVOID pIATStart, LPVOID pIATSize); +__declspec(dllimport) void __stdcall ImporterAutoSearchIATW(HANDLE hProcess, wchar_t* szFileName, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, LPVOID pIATStart, LPVOID pIATSize); +__declspec(dllimport) void __stdcall ImporterAutoSearchIATEx(HANDLE hProcess, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, LPVOID pIATStart, LPVOID pIATSize); +__declspec(dllimport) void __stdcall ImporterEnumAddedData(LPVOID EnumCallBack); +__declspec(dllimport) long __stdcall ImporterAutoFixIATEx(HANDLE hProcess, char* szDumpedFile, char* szSectionName, bool DumpRunningProcess, bool RealignFile, ULONG_PTR EntryPointAddress, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep, bool TryAutoFix, bool FixEliminations, LPVOID UnknownPointerFixCallback); +__declspec(dllimport) long __stdcall ImporterAutoFixIATExW(HANDLE hProcess, wchar_t* szDumpedFile, char* szSectionName, bool DumpRunningProcess, bool RealignFile, ULONG_PTR EntryPointAddress, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep, bool TryAutoFix, bool FixEliminations, LPVOID UnknownPointerFixCallback); +__declspec(dllimport) long __stdcall ImporterAutoFixIAT(HANDLE hProcess, char* szDumpedFile, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep); +__declspec(dllimport) long __stdcall ImporterAutoFixIATW(HANDLE hProcess, wchar_t* szDumpedFile, ULONG_PTR ImageBase, ULONG_PTR SearchStart, DWORD SearchSize, DWORD SearchStep); // Global.Engine.Hook.functions: -__declspec(dllexport) bool TITCALL HooksSafeTransitionEx(LPVOID HookAddressArray, int NumberOfHooks, bool TransitionStart); -__declspec(dllexport) bool TITCALL HooksSafeTransition(LPVOID HookAddress, bool TransitionStart); -__declspec(dllexport) bool TITCALL HooksIsAddressRedirected(LPVOID HookAddress); -__declspec(dllexport) void* TITCALL HooksGetTrampolineAddress(LPVOID HookAddress); -__declspec(dllexport) void* TITCALL HooksGetHookEntryDetails(LPVOID HookAddress); -__declspec(dllexport) bool TITCALL HooksInsertNewRedirection(LPVOID HookAddress, LPVOID RedirectTo, int HookType); -__declspec(dllexport) bool TITCALL HooksInsertNewIATRedirectionEx(ULONG_PTR FileMapVA, ULONG_PTR LoadedModuleBase, char* szHookFunction, LPVOID RedirectTo); -__declspec(dllexport) bool TITCALL HooksInsertNewIATRedirection(char* szModuleName, char* szHookFunction, LPVOID RedirectTo); -__declspec(dllexport) bool TITCALL HooksRemoveRedirection(LPVOID HookAddress, bool RemoveAll); -__declspec(dllexport) bool TITCALL HooksRemoveRedirectionsForModule(HMODULE ModuleBase); -__declspec(dllexport) bool TITCALL HooksRemoveIATRedirection(char* szModuleName, char* szHookFunction, bool RemoveAll); -__declspec(dllexport) bool TITCALL HooksDisableRedirection(LPVOID HookAddress, bool DisableAll); -__declspec(dllexport) bool TITCALL HooksDisableRedirectionsForModule(HMODULE ModuleBase); -__declspec(dllexport) bool TITCALL HooksDisableIATRedirection(char* szModuleName, char* szHookFunction, bool DisableAll); -__declspec(dllexport) bool TITCALL HooksEnableRedirection(LPVOID HookAddress, bool EnableAll); -__declspec(dllexport) bool TITCALL HooksEnableRedirectionsForModule(HMODULE ModuleBase); -__declspec(dllexport) bool TITCALL HooksEnableIATRedirection(char* szModuleName, char* szHookFunction, bool EnableAll); -__declspec(dllexport) void TITCALL HooksScanModuleMemory(HMODULE ModuleBase, LPVOID CallBack); -__declspec(dllexport) void TITCALL HooksScanEntireProcessMemory(LPVOID CallBack); -__declspec(dllexport) void TITCALL HooksScanEntireProcessMemoryEx(); +__declspec(dllimport) bool __stdcall HooksSafeTransitionEx(LPVOID HookAddressArray, int NumberOfHooks, bool TransitionStart); +__declspec(dllimport) bool __stdcall HooksSafeTransition(LPVOID HookAddress, bool TransitionStart); +__declspec(dllimport) bool __stdcall HooksIsAddressRedirected(LPVOID HookAddress); +__declspec(dllimport) void* __stdcall HooksGetTrampolineAddress(LPVOID HookAddress); +__declspec(dllimport) void* __stdcall HooksGetHookEntryDetails(LPVOID HookAddress); +__declspec(dllimport) bool __stdcall HooksInsertNewRedirection(LPVOID HookAddress, LPVOID RedirectTo, int HookType); +__declspec(dllimport) bool __stdcall HooksInsertNewIATRedirectionEx(ULONG_PTR FileMapVA, ULONG_PTR LoadedModuleBase, char* szHookFunction, LPVOID RedirectTo); +__declspec(dllimport) bool __stdcall HooksInsertNewIATRedirection(char* szModuleName, char* szHookFunction, LPVOID RedirectTo); +__declspec(dllimport) bool __stdcall HooksRemoveRedirection(LPVOID HookAddress, bool RemoveAll); +__declspec(dllimport) bool __stdcall HooksRemoveRedirectionsForModule(HMODULE ModuleBase); +__declspec(dllimport) bool __stdcall HooksRemoveIATRedirection(char* szModuleName, char* szHookFunction, bool RemoveAll); +__declspec(dllimport) bool __stdcall HooksDisableRedirection(LPVOID HookAddress, bool DisableAll); +__declspec(dllimport) bool __stdcall HooksDisableRedirectionsForModule(HMODULE ModuleBase); +__declspec(dllimport) bool __stdcall HooksDisableIATRedirection(char* szModuleName, char* szHookFunction, bool DisableAll); +__declspec(dllimport) bool __stdcall HooksEnableRedirection(LPVOID HookAddress, bool EnableAll); +__declspec(dllimport) bool __stdcall HooksEnableRedirectionsForModule(HMODULE ModuleBase); +__declspec(dllimport) bool __stdcall HooksEnableIATRedirection(char* szModuleName, char* szHookFunction, bool EnableAll); +__declspec(dllimport) void __stdcall HooksScanModuleMemory(HMODULE ModuleBase, LPVOID CallBack); +__declspec(dllimport) void __stdcall HooksScanEntireProcessMemory(LPVOID CallBack); +__declspec(dllimport) void __stdcall HooksScanEntireProcessMemoryEx(); // TitanEngine.Tracer.functions: -__declspec(dllexport) void TITCALL TracerInit(); -__declspec(dllexport) long long TITCALL TracerLevel1(HANDLE hProcess, ULONG_PTR AddressToTrace); -__declspec(dllexport) long long TITCALL HashTracerLevel1(HANDLE hProcess, ULONG_PTR AddressToTrace, DWORD InputNumberOfInstructions); -__declspec(dllexport) long TITCALL TracerDetectRedirection(HANDLE hProcess, ULONG_PTR AddressToTrace); -__declspec(dllexport) long long TITCALL TracerFixKnownRedirection(HANDLE hProcess, ULONG_PTR AddressToTrace, DWORD RedirectionId); -__declspec(dllexport) long long TITCALL TracerFixRedirectionViaModule(HMODULE hModuleHandle, HANDLE hProcess, ULONG_PTR AddressToTrace, DWORD IdParameter); -__declspec(dllexport) long TITCALL TracerFixRedirectionViaImpRecPlugin(HANDLE hProcess, char* szPluginName, ULONG_PTR AddressToTrace); +__declspec(dllimport) void __stdcall TracerInit(); +__declspec(dllimport) long long __stdcall TracerLevel1(HANDLE hProcess, ULONG_PTR AddressToTrace); +__declspec(dllimport) long long __stdcall HashTracerLevel1(HANDLE hProcess, ULONG_PTR AddressToTrace, DWORD InputNumberOfInstructions); +__declspec(dllimport) long __stdcall TracerDetectRedirection(HANDLE hProcess, ULONG_PTR AddressToTrace); +__declspec(dllimport) long long __stdcall TracerFixKnownRedirection(HANDLE hProcess, ULONG_PTR AddressToTrace, DWORD RedirectionId); +__declspec(dllimport) long long __stdcall TracerFixRedirectionViaModule(HMODULE hModuleHandle, HANDLE hProcess, ULONG_PTR AddressToTrace, DWORD IdParameter); +__declspec(dllimport) long long __stdcall TracerDetectRedirectionViaModule(HMODULE hModuleHandle, HANDLE hProcess, ULONG_PTR AddressToTrace, PDWORD ReturnedId); +__declspec(dllimport) long __stdcall TracerFixRedirectionViaImpRecPlugin(HANDLE hProcess, char* szPluginName, ULONG_PTR AddressToTrace); // TitanEngine.Exporter.functions: -__declspec(dllexport) void TITCALL ExporterCleanup(); -__declspec(dllexport) void TITCALL ExporterSetImageBase(ULONG_PTR ImageBase); -__declspec(dllexport) void TITCALL ExporterInit(DWORD MemorySize, ULONG_PTR ImageBase, DWORD ExportOrdinalBase, char* szExportModuleName); -__declspec(dllexport) bool TITCALL ExporterAddNewExport(char* szExportName, DWORD ExportRelativeAddress); -__declspec(dllexport) bool TITCALL ExporterAddNewOrdinalExport(DWORD OrdinalNumber, DWORD ExportRelativeAddress); -__declspec(dllexport) long TITCALL ExporterGetAddedExportCount(); -__declspec(dllexport) long TITCALL ExporterEstimatedSize(); -__declspec(dllexport) bool TITCALL ExporterBuildExportTable(ULONG_PTR StorePlace, ULONG_PTR FileMapVA); -__declspec(dllexport) bool TITCALL ExporterBuildExportTableEx(char* szExportFileName, char* szSectionName); -__declspec(dllexport) bool TITCALL ExporterBuildExportTableExW(wchar_t* szExportFileName, char* szSectionName); -__declspec(dllexport) bool TITCALL ExporterLoadExportTable(char* szFileName); -__declspec(dllexport) bool TITCALL ExporterLoadExportTableW(wchar_t* szFileName); +__declspec(dllimport) void __stdcall ExporterCleanup(); +__declspec(dllimport) void __stdcall ExporterSetImageBase(ULONG_PTR ImageBase); +__declspec(dllimport) void __stdcall ExporterInit(DWORD MemorySize, ULONG_PTR ImageBase, DWORD ExportOrdinalBase, char* szExportModuleName); +__declspec(dllimport) bool __stdcall ExporterAddNewExport(char* szExportName, DWORD ExportRelativeAddress); +__declspec(dllimport) bool __stdcall ExporterAddNewOrdinalExport(DWORD OrdinalNumber, DWORD ExportRelativeAddress); +__declspec(dllimport) long __stdcall ExporterGetAddedExportCount(); +__declspec(dllimport) long __stdcall ExporterEstimatedSize(); +__declspec(dllimport) bool __stdcall ExporterBuildExportTable(ULONG_PTR StorePlace, ULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall ExporterBuildExportTableEx(char* szExportFileName, char* szSectionName); +__declspec(dllimport) bool __stdcall ExporterBuildExportTableExW(wchar_t* szExportFileName, char* szSectionName); +__declspec(dllimport) bool __stdcall ExporterLoadExportTable(char* szFileName); +__declspec(dllimport) bool __stdcall ExporterLoadExportTableW(wchar_t* szFileName); // TitanEngine.Librarian.functions: -__declspec(dllexport) bool TITCALL LibrarianSetBreakPoint(char* szLibraryName, DWORD bpxType, bool SingleShoot, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL LibrarianRemoveBreakPoint(char* szLibraryName, DWORD bpxType); -__declspec(dllexport) void* TITCALL LibrarianGetLibraryInfo(char* szLibraryName); -__declspec(dllexport) void* TITCALL LibrarianGetLibraryInfoW(wchar_t* szLibraryName); -__declspec(dllexport) void* TITCALL LibrarianGetLibraryInfoEx(void* BaseOfDll); -__declspec(dllexport) void* TITCALL LibrarianGetLibraryInfoExW(void* BaseOfDll); -__declspec(dllexport) void TITCALL LibrarianEnumLibraryInfo(void* EnumCallBack); -__declspec(dllexport) void TITCALL LibrarianEnumLibraryInfoW(void* EnumCallBack); +__declspec(dllimport) bool __stdcall LibrarianSetBreakPoint(char* szLibraryName, DWORD bpxType, bool SingleShoot, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall LibrarianRemoveBreakPoint(char* szLibraryName, DWORD bpxType); +__declspec(dllimport) void* __stdcall LibrarianGetLibraryInfo(char* szLibraryName); +__declspec(dllimport) void* __stdcall LibrarianGetLibraryInfoW(wchar_t* szLibraryName); +__declspec(dllimport) void* __stdcall LibrarianGetLibraryInfoEx(void* BaseOfDll); +__declspec(dllimport) void* __stdcall LibrarianGetLibraryInfoExW(void* BaseOfDll); +__declspec(dllimport) void __stdcall LibrarianEnumLibraryInfo(void* EnumCallBack); +__declspec(dllimport) void __stdcall LibrarianEnumLibraryInfoW(void* EnumCallBack); // TitanEngine.Process.functions: -__declspec(dllexport) long TITCALL GetActiveProcessId(char* szImageName); -__declspec(dllexport) long TITCALL GetActiveProcessIdW(wchar_t* szImageName); -__declspec(dllexport) void TITCALL EnumProcessesWithLibrary(char* szLibraryName, void* EnumFunction); +__declspec(dllimport) long __stdcall GetActiveProcessId(char* szImageName); +__declspec(dllimport) long __stdcall GetActiveProcessIdW(wchar_t* szImageName); +__declspec(dllimport) void __stdcall EnumProcessesWithLibrary(char* szLibraryName, void* EnumFunction); // TitanEngine.TLSFixer.functions: -__declspec(dllexport) bool TITCALL TLSBreakOnCallBack(LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL TLSGrabCallBackData(char* szFileName, LPVOID ArrayOfCallBacks, LPDWORD NumberOfCallBacks); -__declspec(dllexport) bool TITCALL TLSGrabCallBackDataW(wchar_t* szFileName, LPVOID ArrayOfCallBacks, LPDWORD NumberOfCallBacks); -__declspec(dllexport) bool TITCALL TLSBreakOnCallBackEx(char* szFileName, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL TLSBreakOnCallBackExW(wchar_t* szFileName, LPVOID bpxCallBack); -__declspec(dllexport) bool TITCALL TLSRemoveCallback(char* szFileName); -__declspec(dllexport) bool TITCALL TLSRemoveCallbackW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL TLSRemoveTable(char* szFileName); -__declspec(dllexport) bool TITCALL TLSRemoveTableW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL TLSBackupData(char* szFileName); -__declspec(dllexport) bool TITCALL TLSBackupDataW(wchar_t* szFileName); -__declspec(dllexport) bool TITCALL TLSRestoreData(); -__declspec(dllexport) bool TITCALL TLSBuildNewTable(ULONG_PTR FileMapVA, ULONG_PTR StorePlace, ULONG_PTR StorePlaceRVA, LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks); -__declspec(dllexport) bool TITCALL TLSBuildNewTableEx(char* szFileName, char* szSectionName, LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks); -__declspec(dllexport) bool TITCALL TLSBuildNewTableExW(wchar_t* szFileName, char* szSectionName, LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks); +__declspec(dllimport) bool __stdcall TLSBreakOnCallBack(LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall TLSGrabCallBackData(char* szFileName, LPVOID ArrayOfCallBacks, LPDWORD NumberOfCallBacks); +__declspec(dllimport) bool __stdcall TLSGrabCallBackDataW(wchar_t* szFileName, LPVOID ArrayOfCallBacks, LPDWORD NumberOfCallBacks); +__declspec(dllimport) bool __stdcall TLSBreakOnCallBackEx(char* szFileName, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall TLSBreakOnCallBackExW(wchar_t* szFileName, LPVOID bpxCallBack); +__declspec(dllimport) bool __stdcall TLSRemoveCallback(char* szFileName); +__declspec(dllimport) bool __stdcall TLSRemoveCallbackW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall TLSRemoveTable(char* szFileName); +__declspec(dllimport) bool __stdcall TLSRemoveTableW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall TLSBackupData(char* szFileName); +__declspec(dllimport) bool __stdcall TLSBackupDataW(wchar_t* szFileName); +__declspec(dllimport) bool __stdcall TLSRestoreData(); +__declspec(dllimport) bool __stdcall TLSBuildNewTable(ULONG_PTR FileMapVA, ULONG_PTR StorePlace, ULONG_PTR StorePlaceRVA, LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks); +__declspec(dllimport) bool __stdcall TLSBuildNewTableEx(char* szFileName, char* szSectionName, LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks); +__declspec(dllimport) bool __stdcall TLSBuildNewTableExW(wchar_t* szFileName, char* szSectionName, LPVOID ArrayOfCallBacks, DWORD NumberOfCallBacks); // TitanEngine.TranslateName.functions: -__declspec(dllexport) void* TITCALL TranslateNativeName(char* szNativeName); -__declspec(dllexport) void* TITCALL TranslateNativeNameW(wchar_t* szNativeName); +__declspec(dllimport) void* __stdcall TranslateNativeName(char* szNativeName); +__declspec(dllimport) void* __stdcall TranslateNativeNameW(wchar_t* szNativeName); // TitanEngine.Handler.functions: -__declspec(dllexport) long TITCALL HandlerGetActiveHandleCount(DWORD ProcessId); -__declspec(dllexport) bool TITCALL HandlerIsHandleOpen(DWORD ProcessId, HANDLE hHandle); -__declspec(dllexport) void* TITCALL HandlerGetHandleName(HANDLE hProcess, DWORD ProcessId, HANDLE hHandle, bool TranslateName); -__declspec(dllexport) void* TITCALL HandlerGetHandleNameW(HANDLE hProcess, DWORD ProcessId, HANDLE hHandle, bool TranslateName); -__declspec(dllexport) long TITCALL HandlerEnumerateOpenHandles(DWORD ProcessId, LPVOID HandleBuffer, DWORD MaxHandleCount); -__declspec(dllexport) long long TITCALL HandlerGetHandleDetails(HANDLE hProcess, DWORD ProcessId, HANDLE hHandle, DWORD InformationReturn); -__declspec(dllexport) bool TITCALL HandlerCloseRemoteHandle(HANDLE hProcess, HANDLE hHandle); -__declspec(dllexport) long TITCALL HandlerEnumerateLockHandles(char* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated, LPVOID HandleDataBuffer, DWORD MaxHandleCount); -__declspec(dllexport) long TITCALL HandlerEnumerateLockHandlesW(wchar_t* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated, LPVOID HandleDataBuffer, DWORD MaxHandleCount); -__declspec(dllexport) bool TITCALL HandlerCloseAllLockHandles(char* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); -__declspec(dllexport) bool TITCALL HandlerCloseAllLockHandlesW(wchar_t* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); -__declspec(dllexport) bool TITCALL HandlerIsFileLocked(char* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); -__declspec(dllexport) bool TITCALL HandlerIsFileLockedW(wchar_t* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); +__declspec(dllimport) long __stdcall HandlerGetActiveHandleCount(DWORD ProcessId); +__declspec(dllimport) bool __stdcall HandlerIsHandleOpen(DWORD ProcessId, HANDLE hHandle); +__declspec(dllimport) void* __stdcall HandlerGetHandleName(HANDLE hProcess, DWORD ProcessId, HANDLE hHandle, bool TranslateName); +__declspec(dllimport) void* __stdcall HandlerGetHandleNameW(HANDLE hProcess, DWORD ProcessId, HANDLE hHandle, bool TranslateName); +__declspec(dllimport) long __stdcall HandlerEnumerateOpenHandles(DWORD ProcessId, LPVOID HandleBuffer, DWORD MaxHandleCount); +__declspec(dllimport) long long __stdcall HandlerGetHandleDetails(HANDLE hProcess, DWORD ProcessId, HANDLE hHandle, DWORD InformationReturn); +__declspec(dllimport) bool __stdcall HandlerCloseRemoteHandle(HANDLE hProcess, HANDLE hHandle); +__declspec(dllimport) long __stdcall HandlerEnumerateLockHandles(char* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated, LPVOID HandleDataBuffer, DWORD MaxHandleCount); +__declspec(dllimport) long __stdcall HandlerEnumerateLockHandlesW(wchar_t* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated, LPVOID HandleDataBuffer, DWORD MaxHandleCount); +__declspec(dllimport) bool __stdcall HandlerCloseAllLockHandles(char* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); +__declspec(dllimport) bool __stdcall HandlerCloseAllLockHandlesW(wchar_t* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); +__declspec(dllimport) bool __stdcall HandlerIsFileLocked(char* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); +__declspec(dllimport) bool __stdcall HandlerIsFileLockedW(wchar_t* szFileOrFolderName, bool NameIsFolder, bool NameIsTranslated); // TitanEngine.Handler[Mutex].functions: -__declspec(dllexport) long TITCALL HandlerEnumerateOpenMutexes(HANDLE hProcess, DWORD ProcessId, LPVOID HandleBuffer, DWORD MaxHandleCount); -__declspec(dllexport) long long TITCALL HandlerGetOpenMutexHandle(HANDLE hProcess, DWORD ProcessId, char* szMutexString); -__declspec(dllexport) long long TITCALL HandlerGetOpenMutexHandleW(HANDLE hProcess, DWORD ProcessId, wchar_t* szMutexString); -__declspec(dllexport) long TITCALL HandlerGetProcessIdWhichCreatedMutex(char* szMutexString); -__declspec(dllexport) long TITCALL HandlerGetProcessIdWhichCreatedMutexW(wchar_t* szMutexString); +__declspec(dllimport) long __stdcall HandlerEnumerateOpenMutexes(HANDLE hProcess, DWORD ProcessId, LPVOID HandleBuffer, DWORD MaxHandleCount); +__declspec(dllimport) long long __stdcall HandlerGetOpenMutexHandle(HANDLE hProcess, DWORD ProcessId, char* szMutexString); +__declspec(dllimport) long long __stdcall HandlerGetOpenMutexHandleW(HANDLE hProcess, DWORD ProcessId, wchar_t* szMutexString); +__declspec(dllimport) long __stdcall HandlerGetProcessIdWhichCreatedMutex(char* szMutexString); +__declspec(dllimport) long __stdcall HandlerGetProcessIdWhichCreatedMutexW(wchar_t* szMutexString); // TitanEngine.Injector.functions: -__declspec(dllexport) bool TITCALL RemoteLoadLibrary(HANDLE hProcess, char* szLibraryFile, bool WaitForThreadExit); -__declspec(dllexport) bool TITCALL RemoteLoadLibraryW(HANDLE hProcess, wchar_t* szLibraryFile, bool WaitForThreadExit); -__declspec(dllexport) bool TITCALL RemoteFreeLibrary(HANDLE hProcess, HMODULE hModule, char* szLibraryFile, bool WaitForThreadExit); -__declspec(dllexport) bool TITCALL RemoteFreeLibraryW(HANDLE hProcess, HMODULE hModule, wchar_t* szLibraryFile, bool WaitForThreadExit); -__declspec(dllexport) bool TITCALL RemoteExitProcess(HANDLE hProcess, DWORD ExitCode); +__declspec(dllimport) bool __stdcall RemoteLoadLibrary(HANDLE hProcess, char* szLibraryFile, bool WaitForThreadExit); +__declspec(dllimport) bool __stdcall RemoteLoadLibraryW(HANDLE hProcess, wchar_t* szLibraryFile, bool WaitForThreadExit); +__declspec(dllimport) bool __stdcall RemoteFreeLibrary(HANDLE hProcess, HMODULE hModule, char* szLibraryFile, bool WaitForThreadExit); +__declspec(dllimport) bool __stdcall RemoteFreeLibraryW(HANDLE hProcess, HMODULE hModule, wchar_t* szLibraryFile, bool WaitForThreadExit); +__declspec(dllimport) bool __stdcall RemoteExitProcess(HANDLE hProcess, DWORD ExitCode); // TitanEngine.StaticUnpacker.functions: -__declspec(dllexport) bool TITCALL StaticFileLoad(char* szFileName, DWORD DesiredAccess, bool SimulateLoad, LPHANDLE FileHandle, LPDWORD LoadedSize, LPHANDLE FileMap, PULONG_PTR FileMapVA); -__declspec(dllexport) bool TITCALL StaticFileLoadW(wchar_t* szFileName, DWORD DesiredAccess, bool SimulateLoad, LPHANDLE FileHandle, LPDWORD LoadedSize, LPHANDLE FileMap, PULONG_PTR FileMapVA); -__declspec(dllexport) bool TITCALL StaticFileUnload(char* szFileName, bool CommitChanges, HANDLE FileHandle, DWORD LoadedSize, HANDLE FileMap, ULONG_PTR FileMapVA); -__declspec(dllexport) bool TITCALL StaticFileUnloadW(wchar_t* szFileName, bool CommitChanges, HANDLE FileHandle, DWORD LoadedSize, HANDLE FileMap, ULONG_PTR FileMapVA); -__declspec(dllexport) bool TITCALL StaticFileOpen(char* szFileName, DWORD DesiredAccess, LPHANDLE FileHandle, LPDWORD FileSizeLow, LPDWORD FileSizeHigh); -__declspec(dllexport) bool TITCALL StaticFileOpenW(wchar_t* szFileName, DWORD DesiredAccess, LPHANDLE FileHandle, LPDWORD FileSizeLow, LPDWORD FileSizeHigh); -__declspec(dllexport) bool TITCALL StaticFileGetContent(HANDLE FileHandle, DWORD FilePositionLow, LPDWORD FilePositionHigh, void* Buffer, DWORD Size); -__declspec(dllexport) void TITCALL StaticFileClose(HANDLE FileHandle); -__declspec(dllexport) void TITCALL StaticMemoryDecrypt(LPVOID MemoryStart, DWORD MemorySize, DWORD DecryptionType, DWORD DecryptionKeySize, ULONG_PTR DecryptionKey); -__declspec(dllexport) void TITCALL StaticMemoryDecryptEx(LPVOID MemoryStart, DWORD MemorySize, DWORD DecryptionKeySize, void* DecryptionCallBack); -__declspec(dllexport) void TITCALL StaticMemoryDecryptSpecial(LPVOID MemoryStart, DWORD MemorySize, DWORD DecryptionKeySize, DWORD SpecDecryptionType, void* DecryptionCallBack); -__declspec(dllexport) void TITCALL StaticSectionDecrypt(ULONG_PTR FileMapVA, DWORD SectionNumber, bool SimulateLoad, DWORD DecryptionType, DWORD DecryptionKeySize, ULONG_PTR DecryptionKey); -__declspec(dllexport) bool TITCALL StaticMemoryDecompress(void* Source, DWORD SourceSize, void* Destination, DWORD DestinationSize, int Algorithm); -__declspec(dllexport) bool TITCALL StaticRawMemoryCopy(HANDLE hFile, ULONG_PTR FileMapVA, ULONG_PTR VitualAddressToCopy, DWORD Size, bool AddressIsRVA, char* szDumpFileName); -__declspec(dllexport) bool TITCALL StaticRawMemoryCopyW(HANDLE hFile, ULONG_PTR FileMapVA, ULONG_PTR VitualAddressToCopy, DWORD Size, bool AddressIsRVA, wchar_t* szDumpFileName); -__declspec(dllexport) bool TITCALL StaticRawMemoryCopyEx(HANDLE hFile, DWORD RawAddressToCopy, DWORD Size, char* szDumpFileName); -__declspec(dllexport) bool TITCALL StaticRawMemoryCopyExW(HANDLE hFile, DWORD RawAddressToCopy, DWORD Size, wchar_t* szDumpFileName); -__declspec(dllexport) bool TITCALL StaticRawMemoryCopyEx64(HANDLE hFile, DWORD64 RawAddressToCopy, DWORD64 Size, char* szDumpFileName); -__declspec(dllexport) bool TITCALL StaticRawMemoryCopyEx64W(HANDLE hFile, DWORD64 RawAddressToCopy, DWORD64 Size, wchar_t* szDumpFileName); -__declspec(dllexport) bool TITCALL StaticHashMemory(void* MemoryToHash, DWORD SizeOfMemory, void* HashDigest, bool OutputString, int Algorithm); -__declspec(dllexport) bool TITCALL StaticHashFileW(wchar_t* szFileName, char* HashDigest, bool OutputString, int Algorithm); -__declspec(dllexport) bool TITCALL StaticHashFile(char* szFileName, char* HashDigest, bool OutputString, int Algorithm); +__declspec(dllimport) bool __stdcall StaticFileLoad(char* szFileName, DWORD DesiredAccess, bool SimulateLoad, LPHANDLE FileHandle, LPDWORD LoadedSize, LPHANDLE FileMap, PULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall StaticFileLoadW(wchar_t* szFileName, DWORD DesiredAccess, bool SimulateLoad, LPHANDLE FileHandle, LPDWORD LoadedSize, LPHANDLE FileMap, PULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall StaticFileUnload(char* szFileName, bool CommitChanges, HANDLE FileHandle, DWORD LoadedSize, HANDLE FileMap, ULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall StaticFileUnloadW(wchar_t* szFileName, bool CommitChanges, HANDLE FileHandle, DWORD LoadedSize, HANDLE FileMap, ULONG_PTR FileMapVA); +__declspec(dllimport) bool __stdcall StaticFileOpen(char* szFileName, DWORD DesiredAccess, LPHANDLE FileHandle, LPDWORD FileSizeLow, LPDWORD FileSizeHigh); +__declspec(dllimport) bool __stdcall StaticFileOpenW(wchar_t* szFileName, DWORD DesiredAccess, LPHANDLE FileHandle, LPDWORD FileSizeLow, LPDWORD FileSizeHigh); +__declspec(dllimport) bool __stdcall StaticFileGetContent(HANDLE FileHandle, DWORD FilePositionLow, LPDWORD FilePositionHigh, void* Buffer, DWORD Size); +__declspec(dllimport) void __stdcall StaticFileClose(HANDLE FileHandle); +__declspec(dllimport) void __stdcall StaticMemoryDecrypt(LPVOID MemoryStart, DWORD MemorySize, DWORD DecryptionType, DWORD DecryptionKeySize, ULONG_PTR DecryptionKey); +__declspec(dllimport) void __stdcall StaticMemoryDecryptEx(LPVOID MemoryStart, DWORD MemorySize, DWORD DecryptionKeySize, void* DecryptionCallBack); +__declspec(dllimport) void __stdcall StaticMemoryDecryptSpecial(LPVOID MemoryStart, DWORD MemorySize, DWORD DecryptionKeySize, DWORD SpecDecryptionType, void* DecryptionCallBack); +__declspec(dllimport) void __stdcall StaticSectionDecrypt(ULONG_PTR FileMapVA, DWORD SectionNumber, bool SimulateLoad, DWORD DecryptionType, DWORD DecryptionKeySize, ULONG_PTR DecryptionKey); +__declspec(dllimport) bool __stdcall StaticMemoryDecompress(void* Source, DWORD SourceSize, void* Destination, DWORD DestinationSize, int Algorithm); +__declspec(dllimport) bool __stdcall StaticRawMemoryCopy(HANDLE hFile, ULONG_PTR FileMapVA, ULONG_PTR VitualAddressToCopy, DWORD Size, bool AddressIsRVA, char* szDumpFileName); +__declspec(dllimport) bool __stdcall StaticRawMemoryCopyW(HANDLE hFile, ULONG_PTR FileMapVA, ULONG_PTR VitualAddressToCopy, DWORD Size, bool AddressIsRVA, wchar_t* szDumpFileName); +__declspec(dllimport) bool __stdcall StaticHashMemory(void* MemoryToHash, DWORD SizeOfMemory, void* HashDigest, bool OutputString, int Algorithm); +__declspec(dllimport) bool __stdcall StaticHashFile(char* szFileName, char* HashDigest, bool OutputString, int Algorithm); +__declspec(dllimport) bool __stdcall StaticHashFileW(wchar_t* szFileName, char* HashDigest, bool OutputString, int Algorithm); // TitanEngine.Engine.functions: -__declspec(dllexport) void TITCALL EngineUnpackerInitialize(char* szFileName, char* szUnpackedFileName, bool DoLogData, bool DoRealignFile, bool DoMoveOverlay, void* EntryCallBack); -__declspec(dllexport) void TITCALL EngineUnpackerInitializeW(wchar_t* szFileName, wchar_t* szUnpackedFileName, bool DoLogData, bool DoRealignFile, bool DoMoveOverlay, void* EntryCallBack); -__declspec(dllexport) bool TITCALL EngineUnpackerSetBreakCondition(void* SearchStart, DWORD SearchSize, void* SearchPattern, DWORD PatternSize, DWORD PatternDelta, ULONG_PTR BreakType, bool SingleBreak, DWORD Parameter1, DWORD Parameter2); -__declspec(dllexport) void TITCALL EngineUnpackerSetEntryPointAddress(ULONG_PTR UnpackedEntryPointAddress); -__declspec(dllexport) void TITCALL EngineUnpackerFinalizeUnpacking(); -// TitanEngine.Engine.functions: -__declspec(dllexport) void TITCALL SetEngineVariable(DWORD VariableId, bool VariableSet); -__declspec(dllexport) bool TITCALL EngineCreateMissingDependencies(char* szFileName, char* szOutputFolder, bool LogCreatedFiles); -__declspec(dllexport) bool TITCALL EngineCreateMissingDependenciesW(wchar_t* szFileName, wchar_t* szOutputFolder, bool LogCreatedFiles); -__declspec(dllexport) bool TITCALL EngineFakeMissingDependencies(HANDLE hProcess); -__declspec(dllexport) bool TITCALL EngineDeleteCreatedDependencies(); -__declspec(dllexport) bool TITCALL EngineCreateUnpackerWindow(char* WindowUnpackerTitle, char* WindowUnpackerLongTitle, char* WindowUnpackerName, char* WindowUnpackerAuthor, void* StartUnpackingCallBack); -__declspec(dllexport) void TITCALL EngineAddUnpackerWindowLogMessage(char* szLogMessage); +__declspec(dllimport) void __stdcall SetEngineVariable(DWORD VariableId, bool VariableSet); +__declspec(dllimport) bool __stdcall EngineCreateMissingDependencies(char* szFileName, char* szOutputFolder, bool LogCreatedFiles); +__declspec(dllimport) bool __stdcall EngineCreateMissingDependenciesW(wchar_t* szFileName, wchar_t* szOutputFolder, bool LogCreatedFiles); +__declspec(dllimport) bool __stdcall EngineFakeMissingDependencies(HANDLE hProcess); +__declspec(dllimport) bool __stdcall EngineDeleteCreatedDependencies(); +__declspec(dllimport) bool __stdcall EngineCreateUnpackerWindow(char* WindowUnpackerTitle, char* WindowUnpackerLongTitle, char* WindowUnpackerName, char* WindowUnpackerAuthor, void* StartUnpackingCallBack); +__declspec(dllimport) void __stdcall EngineAddUnpackerWindowLogMessage(char* szLogMessage); // Global.Engine.Extension.Functions: -__declspec(dllexport) bool TITCALL ExtensionManagerIsPluginLoaded(char* szPluginName); -__declspec(dllexport) bool TITCALL ExtensionManagerIsPluginEnabled(char* szPluginName); -__declspec(dllexport) bool TITCALL ExtensionManagerDisableAllPlugins(); -__declspec(dllexport) bool TITCALL ExtensionManagerDisablePlugin(char* szPluginName); -__declspec(dllexport) bool TITCALL ExtensionManagerEnableAllPlugins(); -__declspec(dllexport) bool TITCALL ExtensionManagerEnablePlugin(char* szPluginName); -__declspec(dllexport) bool TITCALL ExtensionManagerUnloadAllPlugins(); -__declspec(dllexport) bool TITCALL ExtensionManagerUnloadPlugin(char* szPluginName); -__declspec(dllexport) void* TITCALL ExtensionManagerGetPluginInfo(char* szPluginName); +__declspec(dllimport) bool __stdcall ExtensionManagerIsPluginLoaded(char* szPluginName); +__declspec(dllimport) bool __stdcall ExtensionManagerIsPluginEnabled(char* szPluginName); +__declspec(dllimport) bool __stdcall ExtensionManagerDisableAllPlugins(); +__declspec(dllimport) bool __stdcall ExtensionManagerDisablePlugin(char* szPluginName); +__declspec(dllimport) bool __stdcall ExtensionManagerEnableAllPlugins(); +__declspec(dllimport) bool __stdcall ExtensionManagerEnablePlugin(char* szPluginName); +__declspec(dllimport) bool __stdcall ExtensionManagerUnloadAllPlugins(); +__declspec(dllimport) bool __stdcall ExtensionManagerUnloadPlugin(char* szPluginName); +__declspec(dllimport) void* __stdcall ExtensionManagerGetPluginInfo(char* szPluginName); #ifdef __cplusplus } -#endif +#endif /*__cplusplus*/ #pragma pack(pop) diff --git a/SDK/CPP/TitanEngine.hpp b/SDK/CPP/TitanEngine.hpp index 5f3e4d6..1db362c 100644 --- a/SDK/CPP/TitanEngine.hpp +++ b/SDK/CPP/TitanEngine.hpp @@ -138,8 +138,6 @@ enum ePE32Data : DWORD UE_SECTIONFLAGS = UE::UE_SECTIONFLAGS }; -const long UE_VANOTFOUND = UE::UE_VANOTFOUND; - enum eCustomException : DWORD { UE_CH_BREAKPOINT = UE::UE_CH_BREAKPOINT, diff --git a/TitanEngine/TitanEngine.cpp b/TitanEngine/TitanEngine.cpp index 172d417..7e7c757 100644 --- a/TitanEngine/TitanEngine.cpp +++ b/TitanEngine/TitanEngine.cpp @@ -1765,7 +1765,7 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa ULONG_PTR ForwarderData = NULL; unsigned int ClosestAPI = 0x1000; int Vista64UserForwarderFix = 0; - int Windows7KernelBase = -1; + unsigned int Windows7KernelBase = 0xFFFFFFFF; RtlZeroMemory(&engineFoundDLLName, 512); RtlZeroMemory(&EnumeratedModules, 0x2000 * sizeof ULONG_PTR); @@ -1804,11 +1804,10 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa if(Vista64UserForwarderFix == NULL) { GetModuleBaseNameA(hProcess, (HMODULE)EnumeratedModules[y], (LPSTR)RemoteDLLName, MAX_PATH); - if(lstrcmpiA(RemoteDLLName, "user32.dll") == NULL) - { + if(!lstrcmpiA(RemoteDLLName, "user32.dll")) Vista64UserForwarderFix = y; - } - /*else if(lstrcmpiA(RemoteDLLName, "kernelbase.dll") == NULL) + //NOTE: this code is used to ignore all APIs inside kernelbase.dll + else if(!lstrcmpiA(RemoteDLLName, "kernelbase.dll")) { GetModuleFileNameExA(hProcess, (HMODULE)EnumeratedModules[y], (LPSTR)RemoteDLLName, MAX_PATH); RemoteDLLName[lstrlenA(szWindowsKernelBase)] = 0x00; @@ -1816,20 +1815,21 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa { Windows7KernelBase = y; } - }*/ + } } y++; } while(APINameFound == false && EnumeratedModules[i] != NULL) { - if(i == Windows7KernelBase) + //NOTE: un-comment when kernelbase should be ignored + /*if(i == Windows7KernelBase) { i++; if(EnumeratedModules[i] == NULL) { break; } - } + }*/ ValidateHeader = false; RtlZeroMemory(&RemoteDLLName, MAX_PATH); GetModuleFileNameExA(hProcess, (HMODULE)EnumeratedModules[i], (LPSTR)RemoteDLLName, MAX_PATH);