From c1bdd21d1fd3fc1a1ac71e23f7cbbe92930b9f95 Mon Sep 17 00:00:00 2001 From: oureveryday Date: Sat, 22 Jun 2024 13:28:09 +0800 Subject: [PATCH] Switch to NtCreateFile and NtOpenFile hook Disable memory protections made by protectors such as VMProtect --- Release_dlls/SteamAPICheckBypass.dll | Bin 82944 -> 100864 bytes Release_dlls/SteamAPICheckBypass_x32.dll | Bin 68096 -> 81920 bytes SteamAPICheckBypass/dllmain.cpp | 358 +++++++++++++--------- SteamAPICheckBypass_x32/dllmain.cpp | 364 ++++++++++++++--------- 4 files changed, 453 insertions(+), 269 deletions(-) diff --git a/Release_dlls/SteamAPICheckBypass.dll b/Release_dlls/SteamAPICheckBypass.dll index 9ad5121cb01aa4caa143d9c82d2b74942b2350ff..c916ca050224d00316ae94c8027f2cc161b3a869 100644 GIT binary patch literal 100864 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 z zFp|zPvjhej0b+n$Pdy-OZteaQ*H!WT4!-i8tv2<*6We8PCP%bxH*e)5h`qzV+-h2f z#3I8=g~XL8Oxz)8AP9}~b;FsFtvJ!F4rOjbtul7APZa0$O7-Q+nb!)c&Q79gP~y5g zrWbS-)=T}y&HS&??d^l!>E2tckYL+>DfY^F{YV$tKw*5O)yEV<*{r7A+9HvL*OJ6o zkq)wuz0H&_(%Yx$|4Vy!#^53~>jrS>fv`9$Wb|+=D_y0q9VS^#fq5q{%S#sw2|Xsm zYD7{Y<@66Z@9q1bD#i8Ue?u89u-lLBChZT86$4f5t$Wq$-Y4UvbUD>pt zk}8ET|HMDobw0Z?N30JZD*3EbC9y#&aCJYz__1B#pcI6Ctb}#BpvwL!mVnMu*}% z&6@?ai#@$i{Gg^+-eTe(v@x5Zzy8Lap>Bz@K5xMtqy5)b&Q zja;|Nd`vPoCt$NS%U9b;*5jPne)kT7JeV6O*Pn6%j&h6#`YKEBv3VI35z2ei34M-3cm$fw*UA#5V9~-?j z5M7Fgr-d1=uQn)~%Qbn5rjwaDA7XwRueJ!`X&b8znovM)2)wkEeB;^dHK9NX6l;Sf z7n7UQKF62BS>l{~h&O1e=%;e^D&5qzd%Hs0Cb_uZ4YB0^vbi8f(p-(C1!5C)(WCDm zDPU~H`R&K+SJhWC2xes-1!U;x=6 zYB;Y}ZGl1ByST%qH-XvBU%&>f78@Lb(nH8CS$kuM^~psIKT2%fHz7$Nb~j==_q}aj zTF7DqG$Cu*Lt8P-<^?~;vAAD=7drj!quL4%C4of-Sd0+;b76ywSr}pf2a4H`z3~OD zReW)cAXiOg>Bb&>acx-m;u3}Xy~4Z;sfE>p%eMw%58u=EHOwXw}yvYF9~ zN2EZHT~lDr<;f!Pc$>tSA>^)xnDLi{fJ}_J`{d63h8&{z7xPh}Bz09QjmY%^@5EvZ zle{uuY!9OMK=1ik(srDu)|p{ST#F@sO-Sh6$)1TMeZ@awEkKlZ`ND(pX<$q_93#86 z73T~7lmRaORofMgu)3oVP4lgP)AhYquxlCLpMAaY{VSUm8>RPRd_O7)-902fS3Hh~ zp}c<*Ll%=;Jl~M5-5jD& zF0O5{3rC2Lqgb5W;zbo7hj_I)SF=XAAx3Z<=VQ-HA=vUii9}@@lJy2A5&2sx5TJ8Q zn#Y50<0?c~CXqb5ho=KKAI_(q>kNc8cUxyjb3XOrP~8LOdUL4W=~So<;mcl#FZ-Q? zs3PLao-FASc*J=YYSjaWHfsuC84pZ0=+x#1@j99B-GB!}Hgp-gIi|^cmB(&jVPCbd zunu;WZyP1<7aaa11&MS0wwvD(NXpM7=x5@>lb!TcjKEi+Tud&(xH=}PGsxk&n-yU779|n#*Stl@MQgoEJ&W8N30~@m`R39UIr_s z!X+(lhtjQ+n6b+%e+K3Ryyxh+n0mXR<3$U9Os{=xJ$TSp<4@Xy8H8&{DSpcHTEM#U z;LYOTlEX4&&yFlg*Gu1!kHsAO{6#zWGzf?aKTL}3%>-l4j^!9K;3%1Kw=iu8HW;qqo1=;@83@Kl>&-GYz0I) zZnT9Mn8HdVS7H`B{a&rUAW9dnX0c^PubM9tMR76KK<|B|z#(L>3zgv(0iI z*i|S+rA*0Y^CDORJNXF1zU=9X#bR@IHH1(g-AdkeBA$>kJu$o0`6o(e zn16%A%r|*q_j$1SiuG_37~0Bh{M}RsEgIL3SxiZXu`hflhej^A+q}gzG>lI$=%Wsj@Kn1N(wyzL8Tn~z-sSr}$~0Xnx6 zacqW2kh*lOe7AVKts!ZR4N=bYBYV$iIE^N?(e}5DHcocaLUZ{#Zv4ljKD^(km z_A-~XdfH*fV}9+aPCb*YhYOj6Tl55{!l9(gP#&VQ(T;hp64B}x9nzI|H_h7>-@_sL z1v1K5aZ%@zcFmp2>Pp6pal{hg=9pZBx*Qdoh3QIypN9C05(2o|0?fM4U0^NI5`Q($ zv_W7KP8$^1nqu2&qb&W7rJpJxC*uSE!l=l*8KDvKb1KK$hx%D($4k%6ai8&(2d8-o z7x|#Hq{*gA8ABSh;22HqiDvc42RPtDHJHNU1S4l5pxkX&e7XoVN zTwtDMWiQ};KkNPO*}VTT@7tVjA;87o#?ezS&BLE35^{Lc)#eBR$Z}nT^YjbF1+ZH+ zGsIwNRcAw~&;{0-a&HBgH?cF}{5zl&j;y0|Z?U{<2%oM6qxCWmnX51wQt^Kx-HJVr z95tLjqde!2=F0S%no&7#+xaLj%;Cpu%oIe%TqcbUmzX8=%oH2ce3qZcxu=sZy#G9H zE!pLHWV^XfQE0EitI-nwxz&Kvqya01fA#1z#lNsGCxqnK9E|Vj5N8}1A2Cd|QLX`i zT`C8J{~hqLaR~yT7I@GhhSGDmIPByTk8yUlU4JLyY%jzv79H+)WCmHr9&vI%31WFw z&MQd$o%C00f0TU1dGz5cfOnaa=~CKgJ9%G+;u%YcXVJuF6sJdNLwI=o0zTu=S zhm0e2M4fW`i*H4Q$$FOC$@fe0(d}&Yb@G>39L+tm5xPIgOF4_G6iM%dOtM>`6kUnw z)A`}%~`^ojI1{282e7`bJp)^lF>9$O15QX$S~01<6G5$>jXrPNZNKm^BmNKuoDp(QQ;b3#_v*;W{E~IL0440a}ufW&G6E z^}ov-`Z`LF+`*?PB)oRE+P01kseJd)P7-mRpoNww-(W$)^)ST}ZIMKu#lIKI*{3;o zY|@nurbljL=_=-2GfUdXwnNTCQnxf(mdijjiag4&xl06nOzju35{3$dF8QmRpqy+Q zc`vVo4^3)6DL0zSja}YlAKx`+mfySV(45e$d&@cV%{WxDS;+(KC%*nWqP|1kWgktL zH76XM{tsXOozY;YaWp#hGtPRBz;TTk5KYLYYd>w4)6bj-kdWR;dq#QG`4?{EY({Zz<%XT^Y)j&d zJ2~wx@X^>_R=7lqiuNeq?-N!=>w2&Q|ZHE z2`hVJA@!HL4=p~$!o=?MmoQ%jeR+lvf|7FZi#F$Bgo4Frhqx1lf*W7uR@?B-;F>eY z^kJKGXVUxGvs!p7)JSd-zaH}Kj}9BgEx8ABiQ@}%I=Rs{ynPyn0BRc! zp&~dx`7L#W;ZtfRra*bT#uhKSMsr8rxd}%Wr^IDPohQpsUbcAz*wT;e)X&LXPf5(n zKX8E{^ZVFrXmys)YLnBZJWI7S!G_olVX(nfDDW>FF z(lpAsihQW#F!G2wFE#+~s$LJK|i#9m$^_ZaC3*ZZOg={>s~*wyCvtV{A>WwW)2*`#m%B>^?i$fZG1w|9k0^&*aRRIdkUBnKRdC z=Gg>_K?|R+weamdJeCthTRA?Axjjq~)Xs?~d2G~)KIA24Te~O{jn?hj#;cqJ;eolG zEtD(o2e&qnoHyo0Q(zeK;_iYQM`E0Sg=CR~Y0KBpIDqa1T__l03W96N$PyRA@Vj4# zq@0|CY3=Z0kV?VoBWT&~N(dk4Bh$l~-Ovo zXMX2G_;AW2=xX#)m$b}^@4nrDu;zTL3(W_=-wg~)=h@`X5&rGV(gof@cz!z9#_=AT zYYzN#Am*Io+PA{M>0BUlqFG@&d)&3nJd;F#MYvsm?FM=ip;)y;*6k^eJq=`V`pw{u zzHocWPT;*4FGk>Y^IrJ*S}%OgjWCHuOJ?{z>LVL1Mx>{C@OJY?j1j_i_z>yZK8fBR zyS6Xz0?@lnyk^1ILI%?u9?JDaoDlhS0I!BDa`G2aH!Rhn(|M~p?o&0|j{%i7(xzZS3uO0dlR@L}iW&`A6btz=Z`>!Km z$l5TBJ5!%w3uq}89P{jPkPN1U5sjJGZLm>J;3{#>r`;E)D*@X$s8%W$O#n9M&=L*l zp6BU0M7kw1T~6vV&atrCG0%p0^fyH`-@d2R6isY#B{q`QGZ7_r| z8_x-}iTM7kEw%AwL{lUt3U*5El0t1yn@!b>S#v=yHI~$^-&H9aHyM&~GbbiB!mO;$ z*tb3=v^md^tdzKjZ!Z!$wfCLdn*oECs#%X<99~G3=sJOtiPWRd)IXwrH-A7K3{~+Cf@u9XHVn}m zxt$IKP@e?Ngx^{SRi=>`UcIWKgfsziQIrF}b9gN{Z4GTO_dWs^o3XV`KO<9j4pLWQ zl;DFvFok0@p2Dt;eS3(vgL3B8WYbKk4nJywux8lJ<;Z*k*Ahpevs!a+1+`_O&`iq~ z-?UPyvcihKf*d?@DgY=~(~eLBxzeB^D7D{l3E&-;kY61i) z3FwlFmIL0mstFLJB(Uic;E0Ku06|KE51|Mx2YQ2|lmS6X0&G1-5}1c3K#-DPyDmZE z&;$sINl@q2#KG)G6$e4F#B-u%$$JtT^(5hRswryB+YHoC_zHy)+AyC;@0%xD6KV(C zqjr_k`y(tkf5(9Cx*EmNRFx{#Qr!hb)}2719c{5_g}@y3kiU}M1x=q(%i zhe8@DkahST*Qv05N_BNjFk(DF``YkNI_=BMc{d*zA-k#Ee0U-Q! zYS73-V=-Q2Wkn`7%ETVd0H?kb$#9LrP~XxanVdH9_LBoeE@(pW@j-G#is3m4IM-_#GuQh7fDDT6C&J(%qc#TAZLR^zEA~b-@KVRxsW-y(0SSB2ILjA z5HWZP;%29bUTYi}E$iixBaChlt8!iPFQrzDyGF!iWR?(0eAU+azU4Cb8|REVl4OE=zEw zMn+YXgKydSQTEteY~hVsF6ioror7NT*rQ6Y4W>=Pel`?FZJza!>bOs@51#0vXd>Kk z3A-ajsRn zRCuWA2X0?4)6Z1XTVQNM((Bt>I?skG4s@8Dfw+Vc3|MOCa36HQ#}jAf2yD?}g@;2#4^3R{2#umd?rv38cbz@?4%^X4b$z6W^Y>M=&%dng@ zTknEqFrC6oa*!GzD$_>c_*F3YQtx~nm4L<7i;n_ONC2_sA86PHtUD+HcreWL;q7}t zKPhvBzcLpKaz0I?ei7?5C~Yup({iwbMH%~osAyQTfz{!v4$Vs74J^ui)(MWeoy>t# zenLK;j$R*7Hd=Qod*s;>Da6Fk)`tOxIs(?{4MNh#L!aMBKDb zpZ?rVF4=`(0^uzrE&dTZAsYf?*+t~RWjnrGP)Kvff=q9CF$ziRC)fu(jSKGB4~XX1 zxWG?7ngW~G!H3mnIf2FnUJ6g$(n9pj=9N6K9-sZ+a;FH%r4aDWab4!J27;iuScW($ zWW!p7OyVK1y9*eQg z%7W(u+dx>PB;yg{lOduc=HA(;_r9G%lOv}x#_O3zTBtT!wO&%N9l3!w&423b)Iz<$ zo$I+_d3n2cx@c^I;=+&036*S}b+h>AuAInhkaXj%m8qziAQhiyb%pC=XIaDNf*-)3 zZpx+5pCK16n>TD!WP>epekAvMc=4laPIWvE0+ONqGB#c6mJ_58RGA%BlCqcl=0t## ztTY%{0pxFc5O&gO1sTP?PiS+>e-pr}7$K*)*ZgBnmq$GwCp=DgW5~;Gi>3-~un4&` z&_ykSW{!s2F!WF>xdnuf50*ts+HHjfml7UnQLet{kZB2VM*?n!y|Xcq=6zsMyzy6? z-tz?b=@xh`|Hjd%Aj#zx|X~PB)!M+Pos(|sd3=EU~RnM zS-~~&g69VF;{{(4oE0y)G$?;r{FabDOJCik8nv##ydaac2)-`mnxKM=;KB3)6?H#! zKfy&-;toIYiD(iqFhWZunxpaLGPt>I@XX4z2rdPWpvy~NxNcQ@C%%W+d$?|;cA|HErM{GX! z@bfYNWv0C^915qt~Z*w%ZL(!$jFM(@Wqef^RfzrRkutQB+5KN#NF~P9QQHaWbkBM`V z#t`l+N{fLq_=F=qe^^$8zub6>@aLK0W%a+1X^eib3#Zv0su&n=6FZ=4{D3C98P>Zc zF@A4RR(GzJl3Q&|O7#7#_sU^Xrp9aZI51sj(-=mZJSN#m{MW^L|6z_VM{3=2Em>3! z;uh&yqTH~b8O?-mUva5DMpOIkz&LM94Q7?f3m@G1GG>v#tl=9ved07b+YPp zj_S~tFj@>Wg4hy93$h@#gfV4_lrW|&krKv~B~rqevP4RV(MMlG^!cne8-0VOS$##J zgzpSfLZ$Hf5-Np{mT*Ynqh(YIA5+Xo;bV#!DSS*ZBZZGCW~A^VV+)VNl&qIN&_7J! zKOMgCzt%U9cDq4J@mpViG z(ZD1vG)b?Q5uKwTOW!mtGHMYE_`Er0x);0OQ6JrxangQ#0~iga(eFm>pz#q)1#N<$ zz32*#$im_lWE5}L-e&3E@$jjWL%t}bL#OrH$tC_a$kDvT(8QBt<4P|2FWbUj!336^ ziSk)$-*{^SPS{9lzB}n|!V`|WB!^lP4!BzSC|7aBwI1)y<$fY&NLXZV&Y?A0kXGpY z^C1*Qg|t$vHTqtWPgL;MTr9>cL-qkT&(A!7Mp(Oy@4LyR80LnX3@#R&8yg5&F>S*7 zERZoIB3(q#MeY%OyF?8(((C@ngZUtiMtnw_-jEa8HQ)E3@Y}^q4h5sl0jdqYMi0*6 z_YHD8ZBR~R=gdBsb{}|PYDhan5DCdJyTyI*%V9guL}#@z^C=gxbc@%7d(iF(En-2w z*-_-8-c)Iey7hohvq#?1M%Dw7nFeo#an=J6OiJetUyW5NHcznw&1am5;#%NyZT_~< zt!2WEUgS{sZDfhb-KUG9B(S~j|Z@O90FT7)dbkadlY3zfzltx9e~d_B=@z7gimjbs?3IbRx$ z6Kc~N&5d}mjG@&snD%}6u&aDL=53deEz7lT&7XXmsJ+S`CxBYwZ}QpPSb zFaH*DN$PytituuTH!fI+5EdNOY`zqp-a>>?rX7+2pX4p1KnO;Gbe6g90+O7fP#?~1 z=6_#PQBm4gp{kd4f8-=zHn!+Sd-&bA<0sgqDk4i ziZ&)AQgF3|cqVeO4@O87a*E$1BF%S&H%ubF@aqd2vZwxTFmIVEWlBz_`sZKwAy)I*^m(M#!a*Y^7}8z=^9bcI(>gb&fk zUL>U8a=BzKp<}xV(UU@;Bn37;)9WU^V&dh90QnNvbNm@Dx#1xZdYNa{*`IyN1#=O>!zt!N&-H47N&t&BLJ5&l*mT>-+G z8gp+S4)=kEE2VZ3momHuh5{jjsIefOSGtgPH?b#A#Z2guuO3i*ss|p(-$zif`kvHy z;Z}^ydHp1+a+*9hE+{5D4UXt7!Qg_-R{)R}8xTsn8?N;RzO8{lCQ@Yb<}~Hvqg|+M zuCgZA74SQF1YSVndS8gt;ST%G;T7ya3h%MW#Ph<}>7xAQ$JeKj47|tq6$S(?xm$ZJ z!%Z%i*A(&=EgaiIC?3z$iQI`KQg}((7=ovp3mg9MkHXLqqPLbDEf@mSLnN|52X*+E z|2YZe$=&#Ve-`iUaku_8_@GQ@?;P4|2Yt~=-mba17Lj-zNXU1sC{l=qdpewyF!U;} zbdCY3-{!K*n3M#}oTf%s-GwzVC5_OK@o(1BiZZMB@j> zxAMWXM2LHtc?WoDy|*}ZXMO-d)KKK)NL-7cyusRucel{wtYoi>y~q>w|rQ^Y`k9NBxJ3d1hC^9a69E?I9e zbwVf2@6l`)Pk1Elb~c;e08Rv$hHgSf63nF}us9b6>W(5yn4m~f4 zd{7riiCNxB^G2Bo_5-Ca@+OqD$@Q7jxFDY*gCqDr*jF@|whtW{c+jDi3lW7c*WmO@ zf9hkS(Sjva7Py})dBSUrdjHu>#X`aSsKRaLKLTwwhw(q&d;s-H_Z_LfyaHVETrjtU@ck{kAIELCVdGV@c2l3tpHGOz7nZ-t+nptFH#B5w}GeTI< z8h##aA9EvMz2_hT%>(5m7Cel!X6xf;YiyAz8|uP_SB9@}GQ^W<1oKJ#pb-{D$_Ii= z>y5HwKo7vQ;mhL03FcPZlI@*H=7;w~cahRy?4rbI0s7Y%9*S!jhv!L`tf z)HL-$6eI?v)TblLu!Y-x#pl~Xg$elVA*_XyDl(@-=H4w@O``g+9Fy69HIfhY5m8Q> z9M@>^=;LDL2t}*K7H)qVx^2;t+lCY5-kA{OO^kxQoAGZjEfqM`1uD?|Gt3LPB~nF@ z={>I#IMRbTc^=Uo3|2xt*rOLAv8FL92_L7p2HlVx0~~%2m@*?8Zps%6a^B0GE0dy^ zOT*_D1txnrYAevb#+{2;Bq$)bJJQ>^!`Htck{0n&^j;!*yMb>YF&@#koz=MDClpX; z4*wnJ-ouH1;x_qHgmIe`Mku;KX>eD`qG^U&PMO<@+8gNtz2UcUVVoi`!y?nBE^xif z`J{P`^u_N*uH>0pn#~KygIeYt&YV}n6~uG%3F?ue`wMs*KbF|hQXv_h-X8-QOuOVl zq{Xbl&5zpR6g(5>LF{+Ao4aEpiVg?)p?-H{e;Z<6$dK#6cqk+GM;LVG~7|Qy*p#VVGKr zNjuRci!d*;bT;?`x&ftVtT$oYLWCF0i~2|^QhX6$5umHDG)jp<=wiXb0v1WI zj5Qe0#F0bX*Wfm?25QMm=xV0pdagc9XJj^5ooTt0Msg_yw^AYmB=gMH3q4i{Js)xN z!8H3q!L$&KxqzkKNn-$_pbxQDqZeX0PUxTmf(}d}y1tDa8WA>|!e)aVv5~T6%P=dA zC)J^-5+=W6y}j0dw67&U|_Z+D&q@(LE^N@y%O+;QJPR(EIvdrFiP5+8GfZJ%Fw>e zAP5a0RN0`nr=4!2=?!3=dfU4zHzJ1Mx z*1Z2Z6Mvzr=qfT@oTVkppgukIhkU@rZ=RtGM2mB-TRO#O-(%(9-)~Oq=8B442c)-^x~O5mw42UBjTO8exQ0f z06{~}ndP0sYjfzs41+8R=Z_=4*-ZoEe+ zZ#Ef_1#S<}KN19esW|;+Z(Q)~55X@u3roEae6(1w(=AK$!3c)E4c5pPN+?X+( zvZY;f+4VLaH;U1jz7Y*O3)3`K-zJX!K5{6A1HA!*T2Od5QI8hYb2DOYj&bv4IGzQ6qV)M}s@9d5zh_Aoh z@`gbZd91bZohjN>1tVnm8hW9juAhc3op}FiJ4t!-%xx!~G#qLE$f%BRt1g^g&}lTu z+>hBTuDs!w6=0FBZMb(Mx564jIfPQU&DETY;17%HrahUaC^i3led5NtnI>1>GR=&-Yi7N|+;8^@O1}EdcDQL%k zOK^4{HgxE9zntu(_u&LR$Dik2K{~CC2rrQ+*C-l{L`Tx(D4oOvRT1T_?cpczWic-q zZ=NKTn8<)AT{ove!g46d1g)725Dvf?%p+h5ewBbl+*9anMJ`+zdh1|m!W4B=rlnz% zfVba<7or$zqf?^3T0#5_h|4fx+6-#eFgUnr6!#8d_cSIAEk*hk@-$R4S_<5{(o*0{ zsWB;#0GAbc3R#)FW}UEQ+$}&`4se5Uy37rrBs$oJZp}Z`Uin)&+(qW+QUxEV27LlQ zdXV~T3iu4Bmc?myT_R_F=RDAS5)f1owkzWCu0e|TCKj?$@$7vQkj@=RM{}bU z8m5gM*uB8iNDRdZV4n$%z@WzvFb2~JBm}4QoiEJQDJDN)EJWus15COE7MXXPX{r^~ zhi-po^9P;0GR@1&Q3|pB-ii=fa`y0;`!i1w+>U-OT!EPp#dOP6-e>q;b4NiZX`+v&+ zXYddap2q!yy6{)H|1}-`>)ih{{{IpF{~Jh!xhB1fSk{~iV|W?AjuR$B6m>%r4a7TF z<~O5n_+@V6ZwCsRf1LXXGvP;Og7`H-r)3$wcKg>;1qrXaO1cWpeSK-ki&r*}MIW-* zitTa$%O`n;gw)_D7?&ZTv8TTvp{rmHvib21y(5p{i&h;5{_Q*Q{fu&K)cdjFRxiKn zwzT;=2=x)Z1CCEMLNt693*T-m*uK~lF2}InoNvl3`{WdtHUFFtep5RyA(Xduu_=fz zIpP!5FX1;nT+OeAx6$H}e;y?I0Y}}3)CQ;j9=#mu1^>0_w}jE}a}M?>Q5@C9Pu~TV zMrmBz@3KLUy<4h~xAa@^3IcxE7VE7r;TP?2!B2C$rC(zc)bX3q40}z`Py{;ppK_Y z(DM@fLn#4dXyg0^eG~a};MZhEJkLK<#1~O~dTcx|^B$ppH^sN;@<4hgwB2jMr7idy zD863Ma!nr=;jI*I&DGUabG}3DjHNgF9KXg_g-BJnIK2augK1mSfM`|5V;YaA<6}5= z6yAJS4v2uI5+;@WTal5MGWx41Oo;q_@J9@UXNrA7^oBmihiazQVKQYgnLdP>kCth* zF4H?irZ&>Xdg1RO0j|e)Of>pO(cCouedHHK>D`AK6g7faC#AYy)G7C;3l7}BNf*v^ z;ibB8+Cb9y6zIacb>Z2%@J?O$L|u5R2)C0wCK1l-^wc`epWD*i_&zW4;^83?&gp|9 zyqwaO!>_Y9H-%;I<>?&cPe(qwcy5E)G7U831Px}q*520fNE5+ry;jO2f;)S?_-sm~ zs*mwx&C6Wjk<`GsEg_Rgd~-gwDrpBYt8Abnz{*@phz#w2P<|XdJ{X@mm@PE#%GJTy`GYvp_exWyO56JE~k zFdU;5!C>0$qv@n?C;a@0C{+^<5d10s-m%2LS@hjqunUa@VLbjxvK1vybm7bV;g`Qb z(*gd4Fvw9K{@ShdH8Z^9w-4Z}g{VLJ#TR@8WOI(0u~6#$$D5Di18R|aZMfCO>c$l` zFRL$T&i8{uIkIo*F z%(qcN@fEkeY2ioyN+kjTZ7dRbktKXDg>6d@?*-feb=YsD&qZr$ybH|9jCx;$1?q!s z;l~g{3Ai{Ky&#^pUn52yRMcjS=2)~tSvCxCe?CC!$@gmoE7>PF;hSNk<4EQxix+aj zv1Ya{-`$+=UO)<~8+kIHI#hfQ4<1oGhm=G~??ieyp8lfd{EH&#X@ukHsVbo!d;IkJ z{GDJGN&h+X$DAb}j_04*oSzv9;!fAgw zB9nd);MXu(`hxQ>a9oZ)*L)HQUov;#KlKN8d_Fz}EkHA64rP8nqAVIe9kKoreApHjf*SO(LULUtTT#LG|m`Ex58INw9S_umj9-xa?S{%`6G znkN-dN__SD2~zD1FOr`BEl*Pc*$!imN_bepV-j{t_@0FSkkGnJq?;yTwuE^S7D@Qa z8wK5fgvmDv+$Q0C3EdLjEMbF$4@uY|VMxMm340{$myme`|FIIL4z2|FcZ z^xYji%O$)=!nY(GbFGLkkg#0B`z3rq!U;u^zl0A<_=bd*>qPu42}@=K6EB7UEQ z*Grfz;mcQx_$CQUC3Hym*>Vy8UlP6~;XVnsNO-e^b0z#t+Rqyjc1ZZ3gkO`8D+&L$ z$a=g-!uPKi`C28MCgD5@3njcs!u1l~E#W~4LlV9$p_bpLQePT=;s%l5n-Xf__BA4W zqJ&1p&N^jyw}iivFf8H65;jPfCE-mHPLTOMEb;Rso+t4n2{m~NWPG6}r;L9`;?GI= zxP)yIJ}lvV5;jSAn}lm5)ba^PJV}>Ti>TH%oZEgzXZ(AmM`&YW&^HSOaNR zgX~j*+Z3qLZyXTu8op+X#H|AQC2W<@t;K5zz9ejzYT$A#tbt3)F%~em%*ya%0uf>WW}Rab?BVd;(wT3tsJ~TxtdW6$LM-DK1@BQ(9N) zo10DP5iiiC)nzpZVpB!BC4ri%<;7LR6`#XrE7@XpHCw^*@i&X*u>$-t=2=`5$glS; zE3QDH@XRXp1#9X8Y;gB4W?eRC`;`rA-fT%*_`T*-&ls)tC6VaGaVku9rZd zc%!Y_x4~BFt6mqxNQ#q)!9YdzI$N-&##UKVy^hnB6xRkR?gF@~V*kapzF?GqBJivX z`iiS^-Afmj`$}$Ew9#K&TRW?=W*u7t`Ge4EF{@&^%*~dfG^FJcb_-j?HbU3MtQLQ> z@Y~ZCVyv8F*^0^^S!EUrMRvj#@ ztegcW={Dd4-kx>7pl7|X5*f@^_=-zOq3+^f`8)(_xE6oW3ZK8SxCA7#X5rW-yBHdy zM+EyywS+5!#etxx8C!Wx%`LVi6_q|46kaRRRYPCGW@GiVJh(XED-QaIocOws7F^X} zrVp?Yk!?val9bM}4LF|^J&G@P{>2&hN z2J7hJOBdx6H(r%S;~pam$+N1ucr6qQv1=fgt)jZZRt7zASt*{|H`T+{fr@n%)y0)I zZXh1igne%I`J7l*36Y~Vhg#Y!rdio=@mfu;h3(%mEFTZ}#MX9ve!}vjc@8I+zJ<&} zf2iesI(k)xB{g-`rM6n?4LrsE3Th#<))wCq(O*1m3@t5VDxaFbI?h80_tfwl;`Ily zk}2utW-F2nl`FnBhVl`T4GE7(#;Y%m6%hYe8HsXbT}cVrMp<2Dbp19|yN$*>bRdF~#+#Cw>PYWcQN12RCs_&~Z~Qg27)&uhuZPezf!N`t11!2O z5aWJ-m6$K|OT0tkfu}`yrG!qez#S6WG*}|S-NgbrC3MU99T$pxa^$?EQ{p|9f_{fb zK)-|?HwrwoM!-cff49W_*NJdjk$~=N1$3?!(7Q^)LIJH3hE@ukw6_DUN6L{W<+8|m z3??aj9yM3yJ6}R}jRO*mw8sXOS;>Qu?aB(?EW2Z}r zaHrt!fIHpeMSOak{F}ZYpU<188*;V6)su{Ip5fxU6#9PP@#I#+oG4p4Ts$39_QS=g z^gYAaYp0?+?^*-Hb~%6acHOPewStZxmjb1pj{hj9Oi$nx=+LD3qo-r%$Lh~sB5(^R z^>hw}j)9K)7kcz`=?b03Po-1&70G;6I+wz)%PW50NTu^Cbm`D@Jo)Msy8dDK?NI0% zAYVK^w<&bppwl#}*GovDW4`$OaxTzPQwcFgD2>(!;Ut3-&Z5wjgHE4Pqw81l?F5~s z7qH>{+<-QPpAB^J?B&#H`02~5^3#_?Pj|X<=;_pQX#A)QdODR~2lTAzMNe0*l-CP7 z?a|Y@6}s|a?5ahfbAnFesOQ(9(6tQHA9N^mnry^#V5-Jhgc6nrXPGuMoca)FoN%%a zf1Gft^A;r>LA)%T!-RLm2`3vn6(^kd_s0n*dh5Bd@*{}%f%Z7zL|+sqoXXW2C!FZR zal(0ynM3m>IlJP}lRo`%!ij@D4j*2wVZw{zgj2pbal(neUl*>In8p+uKf2=BjGm6h z6dFIU#sat4M;}6cEcK^Y3&auu(}z$WOZ_R<2B)Q?K9>4ZtQF$Y(K?Xojrv&XPq9{u zOQ!`=A4~ly)^J)-1X2jCtB4=C@6t zA3^;A_M}fsM{S?lIrhF|=+c2DG$b@Uhwwu9t(b>90ROpV7=~}Sm5Ai2QZ37>(VP9EXSb!`2%#X%3E9k2a zW|r~|WnV20*&~K59K0(tDyo+#A zhgtBl&aa?fi-ygiux^Cu>N=ak=$wF+@)K$Cn-F-slAmDDsGmeL!8;l@vI$)60*64Y$LdA8CfYTGk6Zm zESSvW&}8nZ14%%PhZ`*|Kj&U*~0G`mH@@bti|C{3E>o0K4m2AH%9yKOvX*7 zn-VWEo0ca|O0aA(Z5)xf#PnmM^}#V)tdAs`-Wxm948{D;IBtvSDI;5pd^4t5&?QY` zBl}16nEfVig4^hzIyePUcpdx(o_;tJuY;XNF4t6J($9_TJmW>CsYat2rpYoUC$eP2 zc&6tuagKrEFh8?ThbIe8@aX3?*pXCaWH#e@rZ(dwwDZxEN3qGMi^-^q$*2pit5C9^ zY+@a;663yw>^Lw5$v8n|Q`6*gw!5X5-&Qj;Ap|9CIQV zl|y2LxFHx4eqgLa{M>yJqK_zcv*i*KneFC;MO2f=O`E97{C`Ni8ijJch5liAqSx|R zLel)?va<@UOUB$W_SG>P6JSW==BJlUSdEZ}CVns`XX1AfEbmXg+2)?S5AN}4b0=SE z*=kD6FlVl38M-z{y4r!_lz#{Rz6WPKi*hnvW;8Nk{}!@;?^LsqnS&!374sO}9+0BD zh{1&(`wcTnKQzq9{-a@rA#70F2)hJTi}Bq)5}t8zqK+GQTWvV+PBt^exW@Do_9*_p z!7fSQU>E*(vDXRd;xSz;!!eRg33jk4rAOJ6>~=QAaF}WBuoP@pV1jI~g69FaWNwRY z-ZqXKdE1zZ8YBG*%+2ehJAH2gYcNh=ze_N=SXrXWl9yDLY)g79fxSxaYctMi4DrrYEuV(iE0nn9S0%N3rx3WBbSSSp6CJMDvI{61=rg5n8qfQj%5?F z&t?-ovbw3SFkOmf2^s7u@Qj5sCXwlPn0{_D=Aw-W-iZwFI9MYbjk!}9G#QKy%a~|l zDcNZ(<)cJD$zKoBsTL!%AV0h}VN-6xZ;ydJ*{L4SkYf+o{@sZ8ev@Q4$TDV--p_{K z(YI$?S^DEb@5H+ZJPZ?)*~FlQO)MS3CKe{LiO|Qy{s}$l-Qz-rNu$`LQVW|@ID$>W zcs8m3oSuyC@u4)->*&#mY;<-K8=aNnPxg*-Q@*Ag^iL`HHv=w-x4F5F&(LW&>7Sea zdGRmFX>77&CgoVBqWFen^qJt3oMrKk@FuzqV=Qb;;V3o+VPmq+>Ot@4HKZo8RLGYK z8B()G`PH_*3EAKlJ}&Hn$|!W7${d)r`rw*CCUmccVNBN1@V)}&r*WL~ z$R5FLHH*hRI3{L%jYW6sm`jIFL*~P@m@C#Ou!9E?H%i%0%HIO3O>0b!{F6hAx zgwR8?bd(egrKCTtn?mVvP(rGHe<$nFs#KBhQ~+}8YHvx|6cgy$P@CT?r8 z6E<2Z5=?u|#(%KY7?cE`jJSL{k@Ruma~z(Zaz4~C=Zf*ICuye9GE6P6 zzK(UuCR{b+JTMQ|;f6E|OGEokL;FrcJ*8!h?h*1PGB48H54TCn8*NS>mT}C&j+I*3 zuEJC{@;>wh=o_egxKQTNW0Tm}?6GX@eb#uoSYEob8ZaI7TJABvXPSq_7c*Efw?SL7W+nG0^~g4sWM)Z=68ptW zN7gI)^3a`(y$9C@c2h0rUxS!TtKrBqhK_avK*K<*4>zQmBJI^M%FISBf=%>@etzl{ z3!Cz$iJg5Sg`E{lW@fZ^M-#+`OP??LwpiT480Z=3@x^IOj$`Q!BTb?Y_Zz)a&#|y` zJ|^BMBXnkl&O+N5dmpY|@{Yy98}tnH4D?K)H)y(|k;V;OjZ0+XP~M~yg15VwvD@L^ zl)PhcEKW!_pe4TgI0NZ7i;rLKsb?p$vp*iilHN^%ydzoYZXEiCyJ&&XMJx`Upk<(C z3N6?3TIe|>^$goN7x|BS(+oW)LeFP0+dVix1lJ&W$Kuch$qRZKmzY8?`S+N+(L%h? zh1B&p=q{xY{Ikzu9rt2?1g=N&kHz)627iU#Fd+$J>qv~P7-KQ!Ovp}T6SBtj7!T}XM`qG;Lm{Z@GHf-@!23ecTRJ-9Qm)i}|F8iM@PHnMo1=H|BhaS}^HKWWakF!y&E zdj;-(nP)6cb_N>*EmLSS#-dMJ5mOfqKK?tQ^U?S>0q%UbL%<2c+7&KDEi7@W#a`Jm5HXfxzmp2|Fcw0!Pi$VKty z8uf8w5#-I_;f#+@?_zv{ZOiegUmKrxpyGZAHxZ;{LwYQj`}YH)g5FQi}p1Z?F((nKRVsa($|jd z8RH-AwK{N~PxAQIK`bWVia1B)k#50U5_8DxRF;09m`7@~{h%9v2xsR(OVBU^^ZG@! zlExTFV>8-y8s>0m$dkrqN=L$nKzs3F#(pdFxDWnEbogk#t`p^_G^i2w3&ei{_o+~;9h_G)EV1)8jOdM%Ij93bB_Sz&Y= zMjF`2wZN&*4u~~}m~Y6s9K+|SZbOSHo`nq}Z-OJSE<5|3XkEO7u+7h*Uqw7Y!&%r8BAKY(38olW${k2Yvg*>c zW2t@xczcnKAg6x;^NPuo{~^BSa-u2mG9ta<93wl&kS6#q0-lcjGSG9l7W^sSccOBg z`WgCn^o zr~gK{fqb-Y>~-oN3TJV`DVX*x>CxUxro-Qg8NT{x`G(`bhk>HQ8pdOi(fcu>qgE&c__PboCl3H&*@5FGA(uwMekKao%8)#JQ)0X6My zYft4e_^k#Oc16Pqu7iz^#u+H=cWX~S!s^Fj8F*DR?BnY(Zo;lxu8f9RZoq!{7|5ri z8;kod{h)K}!m<(8fG~$HY&F8X2(#<*U5~IL{qH=z4aKaiOP3Tx0Y2=*E&rdR=ajJAY9grA-9|-CS_eWxz_Gh+mxR&d*&<94o5) z&e>T`&vK$&1lr}k4O+Mcho+pJHOHBozi2fcHyp$Fw#S6Q=GTslNPLlbH2kR2p% zCdqL#zqq|CZ9)qw(9tl8jM?Ds3>CWUpFDZ12y7sSOS z<%}JHd`l|mW|Ni=ioeQJQM0zL%;|)tJlDD?-H#I%R+KsyW|q{H`byRZoq2hyJj>SB z262%r=yZy-S*sngXj#r&_KK3ibL|wbeNM zQ4(PxI8c$#$i#(eV2_DfEh!G3K_x45Jy$`Y(BtZ|;u5GTq96*&&LR_Gp@fC&d_lx~ zad{TyF3epW;R(?mK-t#TRr$XJuiRW-wx5Cn#QD+;vds%OppU7J6sDpEb#eN-S(KZ{ zTjUJ$!n*3(@`|!E>GhiYMY*nAvec*%LeF`#5k?Sdy_k9p%|X-Kn zUm|@G(trG~r04dMo96&@IUKXeLOw-XB88r=^~G1oBB_!^d8C#(QT4DnriJK9{=H0p z1l#cid9UzAsy{ck$i*JfBnuD1Hog+D|=z4=epuR zwbsK>-vY(1MqSCFWgDnwe}3M4Oj{*w&yN1B0ApQ5fuGZMDLvWV?MT0>8hyf-=J0dW zVtLJms^aR6U$_@o1}QvOLJW2e+HzTC&4w>p4&p!^(PHz$dg_Rx9m(fZgb;zu-E$=x z&l2K;dCr&Svq$j5^bT+U&r`|>PDz3&iQwXQDiw1HGg z{d6v9(Z`>bmd_PESD~1fsy$v@-ox~xo@>R}f(a4TqP{2nOzEA!2wQ#k?73EQ^;`>S zA2BX0uG~<(vDQ;vL-%BzvXt?3b|1zYOv5q7aB5RYS--q%LFYuX-ds5c!OWEF<58r_ z^OXdAWzLw%Nu)cXB%UQSZxNZ!A)SB3$F|d?qD}}0K&XaGwfRnD*6z8AVwbI4z1TfF z+ac!nZy1&b-F20p!sPiwWtLCiptAoVl>O{my z&a0~NtzdR9hLOm;gf zL(g1-Gv;+z%)rBTl17lXrxtHYxF7R>_&2b!vdX$ztXNtY3b7vjFl%CE@ZzF4=6W7@ zeYaHLqbVCXZwkGOm2C)Apki1fE8`2xOy;TML!*bTz%w?Ed1#=N7-WYKs8m``c#uOG zWcNdMl!3kmP*y^VYC84qS?j~69>lW5SC9KM%!3tVB|e-|&NA>t6#BdjPSP+>t*@Mz zlM-ktn-02~>avP;uu4yLF;=A;JjH=^>+$_G(wp}67%j?Iy}lw)Q(eVd1-=cSqo~0G zrUEM?`ZfjCm?r><@R5apN5+&%3n%OI)%!~7f<7%uB$^Ca0<^s1%PMH1M69poihRJT zid`D@dwh@{T10MlGN`De%8z5J{)(AZwKLIRW`fsDG>3|snU%9=&Ymfnwh|wxs}5FF z`A$Po?ko1|qle}|9|t%c1^>3eMrfichUz`@s%p`wN+WFo8yqMlPWqTv`p|z26P=~o zpOE`4I8IThwR$axwPCMAA~k^}_`(Y6*p086Q028Ej_cKv$hcj)EzmwaBk(e_5!n?{wAk+%%)$-=Z8p(ni`XmSY2wn!2CUy#icd#-Q!!M-=d0V~;u#MoA9~B; zjUIHd991s4@ zp6m2no9S4T>&D~EbmYqIFweCh=A|pf2TVZY%%bGckURuL1&k-(=g%yD`6B6&dz{_3 zVfC#QF*-eu&wuE&F)rOI&ti-;RCT4ew-uB#eqm;D^{$_E@~Pu6^{1`GD$2y5efoVS znc->j)%ejMa>m`jSaxyCq4E1%Ta>4fD|V?Q2;9^p$WL+oxf9_08Sb!{5HTWIO6XFY=g^$ zzXOoYv`|`tDRd47emW1cO!^xD=^PH{5BRnWr_=YTxZXlMt$@>{pRT+tk$yMei1C;O z6Aj=c6L9weekWkc3>^Ew)i5jIBj@7|B>b&_-=%rX9QXmBxfthT;12=5aXId1z)u&g z9-WUf>9}*GzkfvckUoLyKsdn^T(UX=Ki$Ea2S??ii&x*3{#L+Wd<92#LDK`cx&V3M z>W&xiN}OwXlKg;oFK6rn`0=eOHpvY>xZ8s7TCs=V#=?(pU$MWffF8)d5;DV4UihXK z!}qm#9T6;oqj3FQ9J-^ka23wWBQ3#IaBJYlce>b|)i|>VKfc|?mf&4x1N``&7aL!M zbt?S&yESy@=5e?X!U?Xu4&{O$-veWLYjBj7(gJGtX9zw5HxXA|2tEbpfFIu#W4mq? zGVAZi(A}A(9+Uwz1lPe;!ruXy;YD4*?*_cA7-!nZ4|q0KsZYXh1AGKi>2CPxlGT`6;7#jmeejDIlZ%6wD4QpWR`Ei%Z-5WN3BCjOD*Ob)aPPuT@Q-jG!`}}$ zwTZE0+#hfNdg15}1i{C)K_~DNd$@om@x9Mz*6@GUrM3q63FzJo;`X!Pgu>Ae2=51~E~PH;9H!x?yjIdE3^_2=*D zT>gV_*$5~2D4YxaR=~yIg$(fP&(71C`us;Q-XNUdRdCP2Pw*PJSK;>pUiLl60Kfjs zI-PU>Ml1L`akUHZ9=KBY3EmIa06)QpWOyrJHyoW|Cz!Yk`NB^y8SXjw366n#6@I$@ zkOvor-wpUF9Q8|dc_0gp^hOsYw!oQkVe^36*>r;E?m-`maDrRm@`wg7uow0Kzjq&+ z6EWH`Z*IKNJECIc>!eixtzj`({4UxDjH+E)Q*9zuHf za{!y*h=$;!haul0*ao2O2y_BJL03EGEASKC3P*i=6X0`jlrO=1kD|W=%??0A2l&H( z5nurv&07eLdjew(!m|N4J&Cl74IJ8^g5APj0Jsj08<-w*h}bI2S1R=}hmppS*$3U~utkmv!oJP$eG-vPKN1be`FW;fuS za3=V70KO#s-GEug(YGVq3Aju8I{<(90>&_ehX7xGQTV$7Q%(pzR=_pV?*)9}B;+Le zA2arsmr-8$*(IpRLclhNMxaZ*S2h4sCeHr{tz*pejgue&y^7oN1}{E6n-n<3hDO(?vnlvKwH0{A-F^O z3I6O)um_R{u;L>@<0trMkyitt_hZy0Xb9Rr5#bKNXW>do2Ef<;3fqFe8<6hV6u?h+ zGXDlgdiw|9wSU9B7U6U+=D*?YhaZqaPqhcVCE}Al+w4h8+^5 zdngo6knX6EpCH{cAwR(z;krRj_cR`n;jMsgOMegGB%`3GyB0S}zZdWX+(hu{2E05$ z`01NM&%jX||6lox&J?+Q8EC*`qnkICOHrhZwgMu3sJVC)t zQUJ#vM0)dR5uou)RPYfBZc*@&3ZA6!AEm@6EAc6cd}k^2sdHeIcr^K}3jJsWAEV%B zEBIIiPgC%53O-)J(-k~J!6zvAISM{e!6zyBWCfq1;5G%Hs^HTU{9FZ>O^0dqKV7Mh z^AvoBg4-2-=PURH3Vxx2U!>qO6?~S0U##HtTT}FC_Apz)vlM)ef@drEB?>-Qu#f2H zQYAiTjxi?x%M|)~dBzxfy&Vn5p!EU{%%z0zoxWTY%TFe>u)zH^tUSbZ3=$7 zf;X(Pa(-I>w^_mOQ1C_t-=g4K75q*G|AvA$Dfl)8ze~ZJ75r`m->%^IDEPe!zC+Q+ zHx>Lo1^={gDENa4{%r+sQSk35_(KZ*T?Kzw!5>lZM-}{g3f`*N<4y(NrQo}j z^m~-{uvdxSr{Mb)yiMVMK*0|x_#q|zVI}_~N_@M5A64)U1%FJzA6M`v6#PjAe@elh zR`6#Oyi>uSRoeG4rF`F4=$}*YA1L?_75sSx4=MO@1%E-w|3xMKgcAQF1%FAwPb%rV zl=}U#g1@ZbuPFGd3jUgc|3txms^HyC{>@Lwxk6}(TuKTz;L zDEJ>0{6hurSMWb6_(ux!LcR8 zA8r01(I`;p4GL~l@B{@nO%trN`GonBSUgeYq~$+C!7U2EkqVxq;G-0rzQaL}mVb(p z|5+kBvK~v7xLeM@tO~!;3O+``&sOlUO8#j|{^OMV$18Zc!Y@O?Cn)$i3O-TEf0B~_ zWF@~T3T{*QO;zw|3VyDFXDazmSMt~P1F-kY=ez&@{QyxQt^Q{!`OlK&)$+esDZfK0 z&uj(HQt&wno~@Ms5+#3aKS0a>QYHT!h2LcgK2O0fSMd2t{tJ}+wfz7s{~`MUnmm1? zesUFjk%BK)@H_?2SMVhY{uKpxDfm(azf!@kQt$!=U#8&875r)icPsOQYZQEig0EEY zLIq!?;Hwq4aY`zw|4ntk~c zyiDSFf5Y4VI*H>Q4#&$Cd#zYv;9JaEd%jt*?^~4lWu;P{Dh01r@EQg8OL_1Pip%p= z1rI2At%3&?yiUQ_EBFQl*Y*Rn{5LA`+J1l*uk8nD_$Gz^Rt3LJ!Eaaa21TEn75(2K z>9z5@QK8?W*uz!@zf-}#q2NslzD>dJQt)O4zgxk#EBHMMey@V>Q0(EG3Vxr0e@nsd zSMUcE{6Pi(wt}}P_;(ciAw~b+RpK93@JAH~Pe zalBjS_>lborGM$l6A3i?8?qlThkv>)VxQO#;2W44J@x})@Yklr;y;n{X#E%V17hg^ z<^2GK|IZctzZCozivIrp-w&`lNkmPbznK<`zoX#4Rq%Hed;Xn*zo+28SMad1KijL| zI5NT?t^ROSgg@H&_kp6%KPdPg75qa5@0a|Xa((hA#XfK>gg-cE!tEJHL->QUCLI4* z;rAB>|3uQ`JPN1BQ4#*&ObW*b6#Bm@_@@f~cLo24g8x&&huaUpIT)V56ej}emGQA& zX`i1c{lk#`4yApo`yYb}e|7ycPvNiiFIxRa1pOC1+WotKk>(a1F7= zz;{^@;D{5BPgV18?$d8CeKR%@$L24rud1}kpF>|TWA-e^44bbSH}P;&X~B$Dg-d4U z%&_6pI@P7cmAK=*V8%vY?Tm$2q$JHRuC4V|t;MgygF$uef*H7CKd%;7ZmWuGXI52| z1Zrw)%7QaXYO3ZH*H+D1KYNA^*NrR6aOZzDF1F(X3nDjSb+N_^NE{jepAN$JPdlK1 z&OM<$U3a(Y(srcdNavBzk**`%M@}8-ITAk7e`MeYYqzvp+tb@^?e=y@drrHv-PP`HFKYL; zm$&=d>)RXJceJ;(x3;&nceHo5huXW^yW3B-_q2!G``ZWF*-^_;>(TV1wxjl=j-xq8 zokv|q-A9X#dXEkqg`hTJqt@2+*4Ea})=+C#Yj^9ZRvg0PzeCg2+TWVK)48*JXUope z&Yqp#U9G!L?P9y_yNh-=?C#!e+f%-0$DU4<(2MebUjxqef5 z7HHePH)pSFZxM7}53RRAHF;aa`w6Q740kESHG`mU(3F>eVzNd z_MO@n-Z!w%vOj&leSgk=*Z!jY<@@XRH|=lP-?qPVf7kv~`@{PO_FLN0+w5&QZLYSW zw(_?6wx+h0wzjs;wyw5QZQ-_oHp_wZ1NH+s2V4h=4wN6LKhSib)@$_;e!JQEr-$%*$?F$avdr=+;X_>aOdH!!>1014-Xu+ z97#W7Kaz9Ab)@J>`H}h~O|Y*v*j5+pDh!*lz@F@|B^T_d95&Ph3u=S)bis1Muo??2 z#tv(7!BWbP)*o#;+H$n*Xy?(cqo~9Y literal 82944 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 diff --git a/Release_dlls/SteamAPICheckBypass_x32.dll b/Release_dlls/SteamAPICheckBypass_x32.dll index b67c1369ad456fe648a16845d586f0780b948b2c..025d1b7e7bb7c0523c899c73e60ae1846d636be1 100644 GIT binary patch literal 81920 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�oqEoTSuv?fzD*_sb&f0(JO=`g@(Cs!t3OQHIfv*eUOK4MHXpFA;NAqoJl zBrt0^OVg`0m%c^}gH@*eA=%6yx;MV&?2pA%)a_ca4WC^wHKkE8`aIatev}U?E|QM8qQ`Qroo%%(htV# zU{Wd^I;?!5xoHmzh@W^0$a-;j$47|6#L^d?0#X2^aSF)7WPyB1HY?Afb+Bysy^1b! zl1PDo@t-D)U`eJ4Axl_&*i_BRT`OTgOmeEpMEBUm*USGD8xn9n27n=FRq(X4ArH!@N4Z zw5+}K4t@^g!G1`@IRcCP&MTauXP1W3k4BMm(Y*C7I~He6PA)| z;iC*=j*fdDG{7(oOrro%KZX-$u=;E5L=UI!L?Wzl&%wY|i1aLUhWlys#7d4h6h_Ca z{vg8jd=4_ZE_jXI6Q%HH0^f0Fo*Bhx$qebEGzv=fq)||-+}bSiI|Y>zg2iq;Qp|91 zD&5F#n>-@{YqdqRC%%}Dpb8d=EWsk{uoq+~PS=aG_2OLFU4*UD#p#qkoAPJtMcKh3 z>v$Qwd$B05y%@(&70qccj>N_akFV-n&gbSzQq(MqN;u(*&DS_WW?gD>rJoI8kvv^{ zJT)1b&g+Exa)w^zWb53l$c^b7t*f;H@0=jU(5bbSci$-$RvWHj)(x+FPT%3Pfy?EW zE|q6CQw!_nyRn?qnV=2X)RQY|eL^U2CoOM`urus`Fq*^Q&G|TzpSdot^GsDQ)4CJ1 zzuMHl+rLWwL{4*VJgr#uY(pUUZ;C|r@69GB+kNVY^dOSZ-Nx|k+W}KU^dn}w825WY%Fwr z$5hl3IYa`Ivkbnh2%xIPDq;^oYRv}CR zycQ+Es{BtP04+coB^MH4evANL1^^PRJ8gQh5UW~<)!J0fzfI|`_?G|fztQqMTw*OZ z@6f*>VqE=GIBcCLx1^f?bS?py^h7x`KP%bhH#TgG52H@Db}lWM^DF|Yc@_Z1g;ARk z-J*u+Vsnt67h08oKXGaj@Ub4^J|0~UnQWlMk#1yeNi+fdoYN@U1s$12Sq;9sn(xL& z1JU4#BMoNA<0(e%Hy+!H30Zf)MY8E)18p^bGy-HodxS|tLu)wgIEF*3)_K+Z)=3Ij z{P;UgzpyeQFfDD8j22qRuMKC%&)+b)q|+LHOucQxBHTTVJC@{+E?+caK8`aLV0c(_ za53+8(zp&!(oC9nUrqDwax60Jq7`y6?bq@E1yfDTp5Y@JxcC(Na;mi!rl3{u4y$18 z+(=4+l>)%KY_x!Iot1z#VMshH)&v$;!{<+4yoLRV|Sc@Dz<|2n>Ug*mTb^j8}aH@^19TAC5d3-D; zk8o{AsXc-@Xq^3qCC_6Rs*Lhgx;hZq)tuxMoR2PiZlJ|85?((od>$hUd(wqZvCl#* zd^R1Yebuz^iKQ#C@OdbhOumEhP1`P(Z&GOSCep6bLadco?V_bpA}pqRsIsB3!B!bg zn@1+y0CYv$QMt7f>4ILi7`+Syi?}o~p`|4RL~-jja%iUyK*Z8g)i9jH@C(AfxExDY z6+S|CD<~d^7A@Z>gFuNL^69lpEyTiU>4Zfe8J^t0Dh(STf4H?qH^s^onugsauU9HgAiu;7B0G<;U;}fSDx*laTi+}_vlqy^s3!@6HZlut9K73n}YE;`As;L z1zB~K_rkA?#$%67Ve{iJAna5~YJh7=kfrwIh)=?F=dhXfX?>sIrIlZ3l~l zdF**xZhaKig*GbV2m?de1;_3l_=ykLafs1VIDSRhji=}R%fsq6kS3fq48Blb|2p+` zL?9uI1ZVAGvW_DK<<=9ZV)G@SaeGyV=ir(zkQe*B43Dto#coe^_AYVaY(BWKJ9?F8 z;KF`JxUfgCbp|k)%3(~R<({|Imxgu#8f)6cyia)!t+}059nU$-dULw{6*ydJw&7SX z4zw{3r(WINNT$TCVhB@tsJ2(xisM3#gw?Hno`T&zfFHU84q@%ATh=Hzid7+Ch9Wzi zt7jTTh^PUw2f!4Z-T)8t9+1mH7(0P64DVj$Sz!DuFy6yATuR98B&5N~?i^*y;ZeP4 zDO37~{vC!Oh}OLBcBoJ~Xqh!Vr**m^*POO>&^EGM<~>rvx~!0bREB^I1c_Jy8Sw}n5U8p>2snyFILl95Ith5P#ZB=1d;bA*<)Z!b@8kOCs?X3r zvGj}MCzNONfirc^cD<@YS9hUPfp+Me{pN%juavRZ>7KeN#2&NqI$b#;x@eKvMU`!; z9Hdebq73N=Jyh8ygzGs7*K5a5!{aOr%BHON)s>Az3AoYD?=S<29C1voLF-o_0oeZc=#+rJ-tuq zRa-rMYv&mb>`4~Dt+gq~6s)cS?`j|a>1vc!p29$4SGJnRp8<5}s}H$Hs3NZO=Kofn;V7dfxG(6vnJFl)LbY@dnY(h7cD;BhsM7XB z>bu^ZLON~M1fRqblYC;9Ji``|&LWIi=$FazlT`wjJrj;~lAjPKB8@wD7H6X(uhj>< z&o@7Q2Q&n2OJeFyqbS=4+pq-tYCx>Ux#)k!!X}#eK~IE5;Fi!6!8kqf2HyHBc;0of zo(O#Us0=#Hglz#AXbdd=lE(PxT2XrFdsHlf)X(T4iqwCNm`L3?2~t8e#E@FM00{lq z1Zfhe(K87$nRQg^{p(QAXHG@QcA9XsDw*wgUXBE%Bz24xg$3K@yeTi2iWYr=nQ!6E$p!HF&zFdryD&A8zZKA#60&- z8`j6@oEODv!aU4}DW38fKnSH!&$K4aowIzr04<43oF9!%oTpUqtMLXCLVsjNyuq!n zOy%!<6ZvaIXn=C6*Wn>Mq49ds#7R+#jT7*-R|tQ?kFx}=YW1se&a>qYvQ+bv&tW?G z{tmDV^m@qang@bi1eROCsx)EMbUUq%V@+QU)DI#KA1AuO1QbaV=QG3x_Aa8*@ZWDV zooze%chG8JCf^Xss@wYM zIfbEc_5!C877Md1R|@Ne|HyKt(9B-Uht|vz;@e}?oXvU9baBX=_JC8uB~a+X|A(d?GV?F$0 zKPW{ZJL*^^zlN~I;f%dGU3fdkPSaJ#G#{Tr=`{#t%L=7dFR$nYL`*hRXEi@`CEn0s zsN^KH2N%0RHYvE+RQhxrsvUY?9EZ9Xb0qU^^f*-0XA`$n8j(l%BX0gv)E_Z!zsUvj zKe*JfaU`5}FXY)W_qVrWM#fU|kU~)v!fDQ`9c;i@_#?v4^A*<`7rVpB=E-fRRhqS) zZvGZFP9O%g3}rlbyAaS+h}X$@eH)@C@KX?0hv~2bgoGgr6dFaZ+<|v+>SM?qv+?aT zrA~qFF^d52FAl3^kC|}M##V@J%*-{0_>5Cd!T3O z)X7#9+b(?hBY~^gfbc&;`wsz^i1s&+`h^!bhS2zJd=GWbGyR2^uyVMrXXTvGddIZ$ zGuPhBPQa7$#!R8pf{C;-5Y*+3R*84v&{(p!m0|>r@ z@U+}~5uL`aqC|6edV|n{7gEqh5Qc`3uEr%8(yqqTpU;{Gx`+a3n--+O4U=aq?Vif% zVuwVnm8_rVPF5YpI{QI5|Dh(XB3N(33vEKtzBy*Ya*TiruRS~Ac>~K<2l-F8#c1dq ztzD_75UQ3^=l=>VWp#Ms_wmt|VHenD+SGgX)-25SFjKB^Lk(bjCTGD^q!7;%@LNye zCH?-Cr={R)-AS>J|h8N~yM{M~Dko7X$slDgh=NN)WuSfmXlgpMPBn8SX5p6?==Z>pP(Z@03 z6W-|7o18<3&$6y@g&wh90SujvDZ)l5UbNaukNDf8Q5Be4fNw45VW7f;yq{WfK6&kR z`YN~mbajOR-8>^m;jT@2i1NPiGNa2}4s>Pp!{EB}wW$}#q zkr`tZ$xFXN-(Y>>otLRyh(xJ$W1OghA!n1HxE?gFW@}RY#k<%Z4v}lgoCE}58!mDFZ`4@w3sd!+Q7TN;E7-XTKfhMgEfNVG|OF3QSJ+E~jxAZzN^s7KJ)PBHf`c?R_lI%XSDtDl9YzrBJ`j;E>HqA5uF(pMwhO~8lu zLO|}R)$>im*Ddjr&w!-g`Tj%+kIL&S)R$OyHM(}K1@I_=W-vmmsExwCo0fY*O6T;~r zAOFU`#L-aD5B-MX&9NV792F_{ylTwTD?gD1IvS3-k$z5;H2e8DV!nrIhNUa_{+|+) zmWe|yS@3ayF$EBbh<(3_XpgXrGq>G0N$EpNO>koJaJGQU!>iwHvwpNS_i4B`~w zQ$@WL@g+DmIeGsE-|$7d_>q+nz<%C`dlM``jwkRho(6%PxJ1SzL0{S|ji4xt#56F) z6zLec-V>#QzL&+(_fzyJx!WuFBLZU~y@$pT{4)$rRKOaXphvSzNTf$i8jlf;$v>Qm zy^`4NSYa%bFoPn+sy7Y8*$ARHeofH)>Sh~~%58&oGR^!C`yZ;R8f9a_h^@Tk^!3yLS@_ZavMxh?;4NNVkF^m>#Q$4+F zbMz)BdmCmHR_HHB@Qg7}!u+!u4k%gh*+~N>eUTw4`ief$ZyK#j%eICBrjg?cF* zhxG%nn-#j*VaVf_ho+xhs~KLJ!7AX4Mzot?_WXQDojzs%*xH|;l&QJ8T}4Vzj_(A zxUX~Q>zpjuTk5ja3iI6scd|=TQ}k~+Jw7LX*EvH@eSycVCSYUYG6xGbKkmY+UlSy* z8t3g{GKh%M>7K)K+kZfWSh-WYZzb)=u=%@Jy#=2->DDnJH4o{t>)32~heI!SuxXwm zhnlEA<_Jwk3eKQ)=yNcEf6S>T>8l)ATIwxw(a~@?7a4aF-Bmc)T-1RWLaGQ``s_NA zBH$_<>NJ4UtDQp!sD1#ga8ie{ML z{n`sVFZRbKuvN2W{4>4Mwl9@%ZDtiTH1lf~A@ zWTL(m8FcTpOYG`O!*QvP|L`lM2(ZCT9GH0_IZ|onymWFot#%TYyUJbQA0{2)6_Ufe~vicMhz-`On z`~KRZow}H%PirW|c6L#@ zbG(Ns@;=wczdYId`cdH@jsLzOe66Go#TPc$KKjteJUE0d$?p_LBV*@VsnZOov6dxo zGIu(c`nUx65x?;jQNOV$W{(v!CxO-cw^+T>lR+$O=Z$;KL&ms9LSMl@rpEinvfvf7 zmg8c<5&DB8>?64Lljk1Ahdyx#GT1G(*M!g|^rn8cv;bQ~0*SPu?`W{GLzeFh9~gnJ zs+~UZCXQL5Es}pBfkQ9@d1WCH;1lipPGCtG%;gsq?1~;_6pX}{&PTX_n|xjUI934~ zyf{IuMtiCT)hk)@uWVF(Bws4><#!HgfXB++=FE6?vWR{UJ;qk1wpR^%-dF>&*+dtC zlb5QDE`?u$0kjwA*oW0)6>zuw`6L#gCe)CL8ipQ&G-GwG!PeklB1~bw8K%(jqbKqG zL#7OD22MmDv$;prWcUL+wY~(nRz$1p2&UXI~m+_Ew0 znyAo;@dc|JVqF6kv16Z%WrnQ~x>Pbc*03JR|}i+V_2fx$oP;$J+P39jiCA?>iY#g|>2vt>3?k zdf_bp0p#(8czLw8>e9z~$NOvFg@H^)yyBvWibzO{PF_@wtuK}g!j+^LkLOwOvPNk? zRw8JP@2kHGvn@w_?N*f_7fByaPwH`~kUo3wZ<0h$)FslS=r<(fl& zz!-x-4;=18`(Kn{)87ip;3H&ywul^&Ifvj?6uvt+7IO|+pWMaVQsj+4&&>P)ulRhA z=`1zww&fhsYeuY`!Xq2=PO`(6cXr0hh-<@1T&KuIi$Ki~_Jom_cJY8-b1LH0Jq6Kw zsArxy4Lk9-P8(*&ypTcI1lQY<2c z7RR_c7~yIWAcL!V%`q_6oe#ziBKARV0_Tr~5JE?jONcnr_df{{p;K>QFdSfq`MD3_ z?%eCZ$PiWs_yL@~Ob4Lw9G~#Hi~jDU`Mc=nqyZz|;bG8+-I=N#Oh$k3o2hGWz*-7T zK&>_8tBH+PsIXX5lsD}nvI_o%iiCaj8s(38M`v05+l*Wl{4Ycc!N0XJCo!gzzcbUx z1MJk-q+-^N=??;}$NZcv16JNq3`+2D!Us&7bZ%hwPu`C z3@2Kxm0M|{HrC?Bh;<=f@Y%-X*9bbCZ9$W&<)*VJ9Lk*FEcz(`kbmRnCQQ>;jwz{< z4tgDm{FAg+U?PYAGo1MgdAlf#2=HefJnHT%` z%k}Xef60jd_={|P{3ZTtHENpYB`PC1GOt7Pvf{N+8f0bE(BytYB=d8FncY+x@ zS4>WTBJx;ZL#egL4m<29x=Nl=l#X3;dJ%Td6=U~Y5$&EUrrmQ$#IIhQ9xN6+=;RlR z^V*9rlo!uwFPg);hzL2ij}86cAdYFp??1f>TFxd?hi7MtYc8&yl)^llTebBJT@Skg z*pff)3fPJ(YI^WQdnTZQaNHQ!6`0!Ks^$X#vtotysd{7yrBIRnG86%a@QolR-)BAi zxu!>Ja^f_Pq>bV5&>$)pdd;kb=G?4op}kLjsVLQ`NVoUnCh4J(Z2L#}6!jI@j_$d` zwR$QmcG`v0h031T;{0DgU@#`&I?bylBzleujwjP)h{eaop zxk7##sm~%6o3=!bt>%3)--MgcUyzwM;f}Av1rMMHFA?>qSHO>GQxVgRkVx~~oU}3! zF%JtGsKx~@%7|5C18OlSTfSyA5>M5h*Iwr1^QBQG* zs}tAWM5@mQ`q%U{B=TEO$AJcCef@O6t3b202gjriFMM2e^D!z*Znb9nLj1Ilk>U0! zI2LE=%d}`!H@_WRcB{8SaLBWTH9?%O@~eN4C<5v0@WC%>{WTbBVVi|46MLl&_7FY z3T9C0KA>YJ50rsKuKIQ&&CQ@wukr!HvJlq=zqS0!Ab4dTp;P%lF&12=H<6Z2%Q=Z8 z$QNRpAX|t{s!9#LzsuIHd|)+|UyU|SXf3vBkS`ptRp(~q14zv@tP#;#I4BKaORs;P zkoYgqBmXou`_tEK)ngvj9k?~8$wkWp(FzZt!jjPYpf0Wrh3N46$&~OOr^6Hm*(wM3<5|z+0sN3lqh{!zvFQ;v7~5&11qhJk~YLy3GTeh>^3nkml7a&l4+D?<1V9JX{n-HA8&DlQtjf`+*UcYPnV z^*2uVLL|N&MOTnhjAq;X8PwUX{E-}69}wBKMVy2{Zu<@11{3Ll2*%$;J{*7N#zePxBJ*qC| z-vCH#G`|&F%Bp#Xi73uwQC$rQ5F~ap?ZOiZ=B;p|3tf+BB5$twAgun8Uqu}S$LUR= zd{09%e-4v~10Vw@GQ5_IC?zV41GXrB_8Vn81gLN+oQy;Q-io<;J2o9*AG4rFg8C5m zph^6Ppddeki#A(ON#vdnaLFgfH8 zP&<1NZpY7}V#4 zM7;vNvZ5065GQXyQS1s&)WUYP%!E-K10A@@OoC(siBJ|?;S6V?<<&p@3py`z zW}j9TI+Ht(>;pPqt`#@+Qyfw!_O{^`_FMseg!XC~&VohX0KddSBtaP^HYBWg^ZFg` zn`sDe(KXFU*Q*?Ky-A|$qA@V3ZcAD=9_qHFWQd=uMnz)cDe*IVMEu+^jGt$}o0y3# zOp$h^ieJZ$bo}CD^gFWXx$PL_Bbay}vf2>mww+$?$iP!D(Tyu19!yLXZ>h&-T6YbO zyC3S5g3VcYrVeL5GhqtpOA|-&+%*WNP%}&;dai$py6GUuv~^$4&<%wUulunXyGy&@ zi9KVE-FO?c?ZlPF5&FQZ_Y{8@ioHG;LW=V!eB#_A5j!+H4+b{QP|wy!313%!r_nT!zpqmM2|IbuR@#Q`(3jyO=(-XPe0GEJIbK2HtiK0dED96fTFrk9HA?xn> z%Gmm=^7nx@R#tjr5r;_Abc|J<+D=4eDebtz$<0l!UzPWNO69%m^6+rCUu?JMv)^>3$!%z9TF{D)Zp zx=-3cX}ZYkc~>n*ZLbU>8CA~eo^{aEt>$6-QLZRy%2=T`c+`Y#0zu!82ZEiT0+=Xq zMuC^CSqivkLwwJhwTKGO&{kEa6uAGw`pQw?9W0o?uj_9pCgGgz50ZD}g5E8MvT6qI@{|V*Qt%ZD96IwnLQ8NM(oRSNjHTV!s{!@NMhxY7EIUMyM;AA> zuz`cSO*IVb0pG~A1)ONE17%mN+}EScE+BOh=ToWw-FCR5!Z#rU9jWQoAI@?c_{$lL zc+uw|809xU{XsZiDInDvhN*64Yp6Z!IfSF~531L41hRx#pXZR8{PHrq3{6Ms)RY;RmUIoe zr}gPVf1f#As|&@wvZuZf#KDO_sKvbJ>A-nKPe&Qjd-(Q80j|uUIkRvsKL3D#(^CST zdOC(FOJ((I&n4U3zov`l{blyQ)w%<7*^lbu>I%c>LG|M<=shn>GElLvE2N) z1Iv%Auz+D%?uWu}u~7iOgvnU1ofDsqpx$bHrvzI(KAOshGfFFZPhw2!Zj?J76zcsC%LP zkF_kIDIW4b`LHVJDCLQdufCiDlMzQr2}M>)vr$_YN(htX0Tb zjPvo18F$&z^(w5KAE#_M3tTy_bs`M)INr%GRV2-?IxcJff>-s=;LxUrl;hcU<%o|b z0yMl;=)LP6@*dB|5ue)nsV)q#lmj~lwe{%0YC@>?p(;Gn`JDsyrEZt*?POJ*dKFEo zw1UFbIJ|DK<#ET7z-lRw5SojDSo;>HsaORb#2cJ)GqtSoVW8I)f!ZFSRu7#%R;2Vs}YD=s+j2E94Xb{C=`ZO?bBn zc(gGav-@=FPeNFH$-C!Q-7da63t3ihvCShxoC5p4~%(aWmi_KJmi)c`E4mI5J+(D>s0 z&{wJ3N<0O~&`j4$F&MBYF_Ih!c_Tm;v8rJNGB|Z_e@jz;gaP7I3!>^VftPYDZZbVI z6)+-o&_0NXv%K+SH|gDe0loV!PH(GPnm^+^3QFW-2VQ3dKaZK8=*t7J5i#>3QwO*R zEUO0eDslx_(tA82y;ko`#1LgkRFn|?Lmv{|MKL>~gp~skn!5C=K6HAlw4%3pynSn` z(J@8uaQVO|tqaJI9}p_<%L369^bnSyaYVYhbsOmZ^gMz*sCA8=~1dLw8yC*lZo)(4Lm2JrNEaiFA=8R1Pd94guIq0c>J_yLkT? z|FI%;67UNicT{e|9rN-1nDRio!}^x6`0jO4c;j*mH_R2C)&h+V>)j?A!~c#K=&+XhKZ+;Ik7O|cy=!O*DBjYv%j(O@Zdjgx zhSS|~3g_;Y_eEc}0Q^7z5S)nuI5I?A{aMv>rjW`nVZUwsm{TXp2!$6d(?4_wbwtE- zA$h!@l;_8fIbRmV4iKrL#SRQTBZ>{uK!S1LDpPejMAiwzQ)m@L^}{)+g;YemoW|+s zhyZrBG<8MRWfB&A>SZ~H zTE(~siMt*(3W@76IRoC7pFNiV7ph2TX9W^K_;FA}Sc8E!A*51^iY+QCw%9M#crRLN(Hm?k@iwh!qotbGfT_-y zT${GBjW){nU;CUhb7m4A(*Evuzu)c5Z=ZekW39dR+H0@9_T!vmX~Og)m_{FqNwnps zub(9j@qgn9BHYIG#}G6cRN9E>!I+^C6Ikh64D=wz#!ODQoY3T=i%+zFTL500Me#sHW7E<8&it9TBre>ogr%#iSuI zDOtp#@`OhIfR!Io7b=ur9C{b(9AXPpP+_d2(~+{6ALIe=3r?Lgiaf%!SMu?Z-(+05 z?L{YBi$23kO1GSllRjrjpL5&uKX1*SnE8CsXE>60^~~o>C-A_{rL>YeIP>rzKD?5S z?us@(A5UYa58sFkpCQ9FID3fq{0o<{bi#Q!oXqgEy#Lu&gw>FAC?mz>N7R?aTd;tS zS!^TTs+x-aF@87H8z=;&lh!(bCC-fWiBnhO*HhV8-aRIc$ zge_$sZZ}*&G8jfGhQf*AqfAYg4lE1(W*(DxGN=YfPK!gOKn_KgI9#{oF02{?C|XZoY98djME!YWnjiXykmUK(}APqWJ-j7i)AUcQo$5Ki=zw^ zNW5mh#j%oZgtW)Ve}ZDAG(l*e!GasHKvdN}o9?l5Ys()E+%BfH7pK}v$2Jr`#*zw1 zz(@p3NAV;8&LpU1Dr`lgfr}L6j$w*$JJ>(`Z(#D43l>^4>fjC7F< zE!_oZW$5!AXap!2JP#L6z;QJw>4dLewyt!%0M*ANt*ubyrVzA1Tj|K~Z$#{fFGvkP zC{6-I*&z9m^b3vF!HdxHs7ZQp=nW`)OiWRnlu)X|@PK~w6bwu;fy#;#G2mlw@LtzT zyqWoYa++fp)C&RjZtHcggAs^L$BA#!B*Ir-KudA!UPcQdIwN7rr-Kxo7mtJ1QiTPR zaQuv-FPVgcL?Sqo;Rw$`0pTlgiAPCGg26cq<>BKIVhN)RN|TN7d$>$0mu$)4wXEF3 zC*&%%d@@Id>>|jgaET+W<N<7k}X(91Yt$#m^l9AR5NrKSwJ z8K%R7)RgTR2|&?NsA6wtr=FbJI1AF^32lyG8D@rI=zDSmln=@sZ^PS<@s!9I-lI;U zMe+$$b7-LtqPVtzCLf??^>t!rr>;j9TH6vgnLb!L%8gNbtUj0@jZ?>Bnn@C9yuO2! z#t3#a#S@v=!$xJelH1bcX%3A~_n@RBDWsTCOSZ0qL0#m^IK4f3Vz^7u2~Zx0z|fBR z7Nx$D(1%{o@^S)H#PA15h_go6{Eh0@(wzdj7(_S%fl>M<7KzUr5|(78VwO}o%8Qc; z$4+XEG!`4CHJVBCQ5n2?l6*)&w6PJs8$fYwjCcG6c|`+LUv2sHs$dq2dwmd;Qxxp7 zH1-*Zunjok2*YcTf_aRXXn$)NzbeSHxYv(M`l4mr9lS!K8Jkl~TVN$FjeWE&{2rFJ zr=ab&DQH_5OIypQc~TYD^(IMW(QHeiC@~t9b`ZpK;U*L%(Gl(9mBDp!yu;bc;B72U z(Xp-y=1Ej0Nvw$$e|QigF0<&>^@Y zjtVr8$d(u)#Fkyxs~|#dfoaMXKwsg)<)BN#Dr;>>$INZtLE;pxaCdAgZ25F6@&&7< zYAYII#pH%qDAgZ}6|xxcQqj{Uvv9hSg*2vypNBY4VqxXXZO)=l$a)uUo4)g z$Kn-z3bmtE28kPTziRp9Dn<1UpTHY47^Am*BDRvmYNkIK{VtPmVKoC)PELcinSKz5+PGo0gi_WkTRveX zOZ;Fg&i}A~(mQGW>@@4KG!Z)p8xEsn-&Jg#2}Odlcm?Mm7BizuSr^d}G8lif%8YYf z;h(W=lqV?{t5*Ynk=R10V6#O#I5U1 z$NDQF%1dkd35$81GA8BC+HAqth_7D!fj+q*mi&j|Lg{`uC$f6lzvZresA0Cja10W{ zmN7^qz%zDO>=kUZL{JP3%j@j%XZI9iGYy%{9-!00Tg+sF&%in`2;VPi(nsq5~?hQNONq0@n6;%Vw1u-z!~Lgb*xBHw z8y13z0wO%2lUIO6uPRY93qh=}cpel}s9bQ8o?oYh`gGDCkv<35MdrF^$U5d*zzgO2WD=24p+tv z(PEtWl58?2ijzOsI#TzMm4bs2b_?q|N|i7tXku|p9keH>;WI!u>>$onUlivmIMj!w zA}nBxF^dgm9=!_BFsT3(b{0d^CQ^0{F-t#0;!mWt%l~TLl`7^y-f>CoE0J3UM+%7r(8DVxdQ|t%!C+ z;xu}{fC;fN+%8Fo@(|gcFHB9Pd^6>I^6*!v5?hIdk*`FRYWvTb+dhz+NV4x_bQDCc zyo6NS(V5#0M`cJExo8cZVL=wrKOHmlyQU#LBGS2FE$`EkC2ruzD6SL;BB}K z{}~D;H2pG;v!qmEq9LRm{2gW+;dc<-;;5mi2bNXH5BE|O9Y9WFUz!V(wN1(jA3DVG z<`7wqcq@F{49X12ZJXUdH~FFPy<$e%IvkUfn)JD1)D0h)3*CbZ=sIFeLjnsyXQ$hW z#%OV86{BL>aPjc1klWm0H>+JLzBP=sk2W0DLggT~*fvdXo3%DGlz3E{F7~j`TaLEe zHHu!}3i?21s*+5m;jUq8ffxLl0ZH^tV&^C=>623FUW;R=^iO zipJOuFxFTwbsTT$zLFhOV9Pbw6{T6kk^Dhi(Iz7{90O>1lI}}~+DeZe!CUC@!#mzR zz*{s_+);W=)Z{k+IXgBmbW_pMq@w<$qH(5chi<~GxO8ND{zx{2dLpT4kS!&TryT`Z zN%@1V9y8X1ZYr8+K7LjAarC{3q|!mQ2AqZu3{w8q95dVE#B_A9<*vchK;rNv*sk}4 z7JbCH03De)oD#kjbr%V4ya~iE3q44$SEfZ`d|0%P4kMt=hmvT!6^9!@CAcs${7Veo zw$gzBKA1L`x;_hxB;!>Uoay1&80>*O1s-^1%RjarlVe6NC~aMWhe0Q{7mc(Q7=Z_j zp!GD2xa#6i+r^C8FVIQ#n@R^Pr6cR9nb;)h#~65!H;F#|KGBxr1}b#aw%j}fXFgwi zC0qXzr}b`(2-t*b$9@r8y+Z6Ulrdf$Du_fK$?s*2QrgS5enyZ!Rvdc2k16dLp>?1H zt9s!aDz$XlsMuZ7aajl%tO|p$F0G#%S9N zx@DUGW%dzgS=qpcK8a`=H(MG>jVc>49bd!#=tS^eoz_z zh0n=@m#8HcFNWKWq)@$xC80TZA%6P|fojYaCpm#9s~|Vo6UqbWU^@-OAqWCaeXd0x z8^QapC2XZ3bf@9}Jd#4-gzX4ZigXu0T8j3ZgLEcNjWVS%k%R-IVb!H}Rw-}j}gM*`# zuj76q8jPO{4<`iinz0LEQfyS>vgM`+sv^j!A4ZT^7?Sv+VWRX#S_1v?$@j#b#^_1P zQJt#jzs!Q!@FB!2d_OLsrx9%1mPLdqL@OdnuYpG$+ftDnscA-3f@0(e8v^eh0UEi9 zXFgwGj1UORsDlbA4sAq%Vjd=(2Dt^$J#UEAe_7}{@fm$F^@v;S<*XZ!r6grUi)Ikz ztP$I`W#S%sr-S_BPyob`>S0;LrVnRB)S~^nNI_{p=` zeQJB+;ZQ0L6=29gCEI5m{!rC&VkR4gQrlBoj^l+?Sju48l3BJv`tbVkMByroc1)fz z)D6Pu8OFq8Ks@`06Q9F4zA^>_oXlUG2t0;VI(v2u_60s;f+L*FdShtmNCTS~!%Tx2 zd$a}H<1@cOGo$uWRT6Bw#MXQ~n^tsk`?onyf~vLjbDVPc96(7lP>v(z^OoZ(VV#sa z7Z37%hRDxaj!$p-Bqg{6XCqE-InfP#bn+7hDP&`OSVtJQ9H;1(Puxf;9cNn-8+VNQLtkL>QKCKqsAp zLnBS#IpC9TuvaNZ%8^YlDo;@y6M7Vr+PWkQOb2{AGuJ0V6-2L+QV|1_w+wVSd2J&p zUj=!SyIj%8%$H#JU0;Ae)zaE+YhDHlHd}#`sfm`B&UU= z$g#_eZKL#?@P6XMF!{%5H=5bIm^3hhG&lPQ2O|SkDtM7NTpL~U04CMUXpr#^onXtW zBnnZUrnjc6SgzNPCl%q`F?QzDZz@$`I||g(HwCagh`4byDb*qSNCH{KVsVohB=J{l znaRm)zwaE{yWk&aZ#<9%{UEax?ZGy;PMBLh<=F~BW^saw9S>6Bh75eFv8>+EIlynM zE9EAiJUVrK7=BDkU~6Y^L2L_7v{=y9NCYIz_WRmYDUKZCPJIBfEFoSoPSXNKyC0P zrl|mKi3L#Lchf7|Clzq{sq<$}m46t=5)=eU_$Rj>4sc7Xtl~wk;1NaQ)5S7ts?2h{ zoo>Xwd^Y&pGF)CPz5+SEFa{sKU_lKcQ{!Q|#!t>J!3_q3XitNlQMDF9|CgR@`E<5$ z9x3OR@j1ae(TFg{vbMcJ>JqmFSuLL|2o^F(T8>q*<=C+nN9rn?2xUVL*k*IM4`37+ zv!x`{Eml9r+l$pl5=qkz<1E`a6b|X>#I^){9z>a#%}O5RTgFuaEYYHqEywwmPt-vy z>SGS4K0+t#psYs~?V!+~IFF1TJRa91;;^*k({9LspoY*k5g#JbPOI2ZWaCUV4|^Ce z&X7dZ;S}mVS^yggGA?eVC1lcaqQ*}w#*;F5v)M-IqlmIc`<^9z4X2^+Yv)QIgL{2Y z(x=d*G>9cnYfVl=$Abn(U&X5|l9om5CTXLqmQhunh9-|xg|S?$Pb|B)XC$fx12~qYono(#fDbN~051WrQ-!+yhT#M^@f*#j2AwN=)ol-?U{uqQUl*O%TuN3`zik=ry2)m`|BNUBu zh7!Z}OVM43j#8!=@7bsbjfi@Zg2S2#4S_I%CXR@QyO_F!?IfkL`3_6PLIL7PnP$=* znAK92CXst)i|?}Om1d^jmj0E`6i7JFcrwyMkkZUzm*cA)tHB)lgap3 zNzu0;T5O@6zj=pKod+7!aNW{9h2^n^e8vwUx)_HS!l5-X@cqLbp;csBNT(JltfHl7 zHtD|Z$8sSj=TzZQ#glVt*mX0zHnZyvcHPOYt?Y^~wIb&(b{%5ZPIleTt^@3Pj9vTK z^(edcvTF~!_Ot6jc0I(d-R#=MuGx5i;^Z89kHX10^g!&%IVJ46l3mN#brrk%*tLpX zYuL4cT?KY+V%N>=+Kj9C-l5_a2alpgVs;cCx?U^pGt*JLnMw*x?*JA@5)W8qA^-DIN25B7(zK~&Y=*_>)^;#z&jHp=D+osSPJ{H&vB zFsy%^at(#|JWFjj5FY!w^p?GyJKIaL@vhkTb_4q28=;Le4+gI##wmTf*T zD%$TD?YJd1JR6z>4+e&3Fuy;X0-vQv(Jko$hR+TVu5sM`1$PJ2Q-SMMEcQfd)KQcg zt^zF`MaROcnBN-Szlp-F;l1Q{_&`s?5P3H$$?NMV>JInbMTH*=cf*fEv}8YEGb30oAS@xmGK9WEc?rH% zf^VJzo|ts(-(`mX3U>#y&IA0u2z-BdKdaNB@Lu@wi zVAjuKEU0DHu8kNR-|fDZQFXAEnY=@uiczj)eFB2qi)| z@JikIx-1z1s<{jm^_nXQRo?kPHHO2^R0oV%ErSU&w~~q0;vfASJ5w!(SDl=540`lu zERcC}&Hw^1Do)Pn!VRmrqFIN4_mwW-Z6dsTB)lvaE~Lwv9wYh&!wvA`p^pK&m7ot0 z^jG7c3BEtP63mT z8-)5v0pPK89p1ZPGW-DG$I+ie9)5(ogZ+f52WB8)!S;5zY6`d>z;#pZRJ=DV{D73Z zuTRnbRG)__i>Uv^EOF^~Q96^)<&)B>E8l^1k+kKJoHs-YBl>1^!swy*7ESw%9z@einfb@MaCiFm zGT*>TdA^gCg7kJ7;U0kNgnJq87~BZl=Wr^#+*}Q(hnt4yb+X~iaD{MHaGT*Cfa`>N z1#SRt1a1N@?Yac+GPoPztZ+-=R>N(A+Ya{#+=uizF8n$#1st6DvIK4`Tm$Zp!dG3M zz%7F7g6oG63z*i2GO>pn)-@zp}M{fTd#^Vef{Gv-gD@Nf=7J9 zyyV_n_xiZi+!{R1>gQ^>25tf8gI|L(7T1=q@mJL}@f-C7k90A(xURAuQ53f*P+z;Wyw=ZM z4ID+>a&94aE4Pfx$A1Br#}(p_@2)Sb59Bxbi^{9(xCK7HP#+8+cJi;ZZe3mdhB~#s zslv|)Ll(x9K%ji1y3W5rUE{A?BUBM&qY$XBTcZ~0>(w>&b!%9@it!CzjR<5|40%3rZAcVk0&W8;FF`ZZh`=oY}qa;}!k;XK@8)Pgu$!L8$R zxsBj&IoF8)0`{)U?J3M4OBumItk z!4>+6(SDx{v|K0;2qNdzRrU4j)QhTX{Aw_@QG}}lUqo4q@?)v6FyJp2{FIe&761+y zW1^J-HDypQDo1wT0(E{MP#>_W2@t$OU;1RJDn7Ar%0DuZZ%|j9ThocJ}+0Vkl3m7 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 literal 68096 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 b@s0Y%@YS#x_=+9;z(?rEApiKtsDb|m!PbdL diff --git a/SteamAPICheckBypass/dllmain.cpp b/SteamAPICheckBypass/dllmain.cpp index 0ec2429..52c9c16 100644 --- a/SteamAPICheckBypass/dllmain.cpp +++ b/SteamAPICheckBypass/dllmain.cpp @@ -1,25 +1,26 @@ #include "pch.h" -#include #include -#include "detours.h" #include "Console.h" -#include -#include -#include +#include "detours.h" #include +#include #include +#include #include - +#include +#include +#include +#include #pragma comment(lib, "detours.lib") #pragma comment(lib, "ntdll.lib") struct Replace { - std::string origname; - std::string replacename; + std::wstring origname; + std::wstring replacename; bool replaceafterfirsttime; // Replace reading request after reading for first time bool firstime = false; // first time read indicator, should always be false }; @@ -28,9 +29,17 @@ struct Replace bool useinternallist = false; //Use built-in replace list without reading .ini file +bool debugprintpath = false; //Print the path of the file being read + +bool enabledebuglogfile = true; //Enable debug log file + +std::string logfilename = "SteamAPICheckBypass.log"; //Log file name + +std::wstring inifilename = L"\\SteamAPICheckBypass.ini"; //Ini file name + std::vector internalreplaceList = { - {"steam_api.dll", "steam_api.org", false, false}, - {"steam_api64.dll", "steam_api64.org", false, false}, + {L"steam_api.dll", L"steam_api.org", false, false}, + {L"steam_api64.dll", L"steam_api64.org", false, false}, };//internal replace list example //----------Configuration end----------------- @@ -49,34 +58,22 @@ bool isFileExist(const wchar_t* fileName) { void PrintLog(std::string str) { + std::string logstr = "[SteamAPICheckBypass] " + str + "\n"; #ifdef _DEBUG - Console::Print(("[SteamAPICheckBypass] " + str + "\n").c_str()); + Console::Print(logstr.c_str()); + if (enabledebuglogfile) + { + std::ofstream logfile; + logfile.open(logfilename, std::ios_base::app); + logfile << logstr; + } #endif - std::string logstr = "[SteamAPICheckBypass] " + str + "\n"; - int wideStrLength = MultiByteToWideChar(CP_UTF8, 0, logstr.c_str(), -1, nullptr, 0); +int wideStrLength = MultiByteToWideChar(CP_UTF8, 0, logstr.c_str(), -1, nullptr, 0); wchar_t* wideString = new wchar_t[wideStrLength]; MultiByteToWideChar(CP_UTF8, 0, logstr.c_str(), -1, wideString, wideStrLength); OutputDebugString(wideString); delete[] wideString; } -std::string convertWCharToString(const wchar_t* wideString) { - // Get the length of the converted string - int size = WideCharToMultiByte(CP_UTF8, 0, wideString, -1, NULL, 0, NULL, NULL); - - // Allocate a buffer for the converted string - char* buffer = new char[size]; - - // Convert the wchar_t string to a char string - WideCharToMultiByte(CP_UTF8, 0, wideString, -1, buffer, size, NULL, NULL); - - // Create a std::string from the char string - std::string convertedString(buffer); - - // Clean up the allocated buffer - delete[] buffer; - - return convertedString; -} wchar_t const* GetCurrentPath() { @@ -88,54 +85,98 @@ wchar_t const* GetCurrentPath() } return exePath; } + +std::wstring utf8ToUtf16(const std::string& utf8Str) +{ + std::wstring_convert> conv; + return conv.from_bytes(utf8Str); +} + +std::string utf16ToUtf8(const std::wstring& utf16Str) +{ + std::wstring_convert> conv; + return conv.to_bytes(utf16Str); +} + +typedef enum _SECTION_INFORMATION_CLASS { + SectionBasicInformation, + SectionImageInformation +} SECTION_INFORMATION_CLASS, * PSECTION_INFORMATION_CLASS; +EXTERN_C NTSTATUS __stdcall NtQuerySection(HANDLE SectionHandle, SECTION_INFORMATION_CLASS InformationClass, PVOID InformationBuffer, ULONG InformationBufferSize, PULONG ResultLength); +EXTERN_C NTSTATUS __stdcall NtProtectVirtualMemory(HANDLE ProcessHandle, PVOID* BaseAddress, PULONG NumberOfBytesToProtect, ULONG NewAccessProtection, PULONG OldAccessProtection); +EXTERN_C NTSTATUS __stdcall NtPulseEvent(HANDLE EventHandle, PULONG PreviousState); + +void DisableVMP() +{ + // restore hook at NtProtectVirtualMemory + auto ntdll = GetModuleHandleA("ntdll.dll"); + if (ntdll == NULL) return; + + bool linux = GetProcAddress(ntdll, "wine_get_version") != nullptr; + void* routine = linux ? (void*)NtPulseEvent : (void*)NtQuerySection; + DWORD old; + VirtualProtect(NtProtectVirtualMemory, 1, PAGE_EXECUTE_READWRITE, &old); + *(uintptr_t*)NtProtectVirtualMemory = *(uintptr_t*)routine & ~(0xFFui64 << 32) | (uintptr_t)(*(uint32_t*)((uintptr_t)routine + 4) - 1) << 32; + VirtualProtect(NtProtectVirtualMemory, 1, old, &old); +} #pragma endregion std::vector replaceList; -HANDLE(WINAPI* OrigCreateFileW) ( - LPCWSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) = CreateFileW; - -HANDLE(WINAPI* OrigCreateFileA) ( - LPCSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) = CreateFileA; - -std::string GetReplacedPath(std::string path) +typedef NTSTATUS(WINAPI* pNtCreateFile)( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + PLARGE_INTEGER AllocationSize, + ULONG FileAttributes, + ULONG ShareAccess, + ULONG CreateDisposition, + ULONG CreateOptions, + PVOID EaBuffer, + ULONG EaLength); + +pNtCreateFile oNtCreateFile = nullptr; + +typedef NTSTATUS(WINAPI* pNtOpenFile)( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG ShareAccess, + ULONG OpenOptions); + +pNtOpenFile oNtOpenFile = nullptr; + +std::wstring GetReplacedPath(std::wstring path) { // Get the file name from the path size_t lastSlash = path.find_last_of('/'); size_t lastBackslash = path.find_last_of('\\'); size_t lastSeparator = (lastSlash > lastBackslash) ? lastSlash : lastBackslash; - std::string filename = path.substr(lastSeparator + 1); - + std::wstring filename = path.substr(lastSeparator + 1); + if (filename.find(utf8ToUtf16(logfilename)) == std::string::npos && debugprintpath) + { + PrintLog("Reading Path:" + utf16ToUtf8(path)); + } // Check if the file name matches any entry in the replaceList for (Replace& replace : replaceList) { - if (filename.find(replace.origname) != std::string::npos) + if (filename.find(replace.origname) != std::wstring::npos) { replace.firstime = true; if (replace.replaceafterfirsttime && !replace.firstime) { - PrintLog("Reading " + replace.origname + "for first time."); + PrintLog("Reading " + utf16ToUtf8(replace.origname) + "for first time."); break; } - PrintLog("Reading " + replace.origname + ",Replacing..."); + PrintLog("Reading " + utf16ToUtf8(replace.origname) + ",Replacing..."); // Replace the path's filename with replacename - size_t pos = path.find_last_of("/\\"); + size_t pos = path.find_last_of(L"/\\"); path = path.substr(0, pos + 1) + replace.replacename; - PrintLog(path); + PrintLog("Replaced Path:" + utf16ToUtf8(path)); // Set firstime to true if replaceafterfirsttime is true and firstime is false @@ -146,86 +187,136 @@ std::string GetReplacedPath(std::string path) return path; } -HANDLE WINAPI CreateFileAHook( - LPCSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) +NTSTATUS WINAPI NtCreateFileHook( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + PLARGE_INTEGER AllocationSize, + ULONG FileAttributes, + ULONG ShareAccess, + ULONG CreateDisposition, + ULONG CreateOptions, + PVOID EaBuffer, + ULONG EaLength) { - std::string origpath = std::string(lpFileName); - std::string newFileNamestring = GetReplacedPath(origpath); - LPCSTR newFileName = newFileNamestring.c_str(); - - return OrigCreateFileA(newFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + if (ObjectAttributes != nullptr && ObjectAttributes->ObjectName && + ObjectAttributes->ObjectName->Length && + ObjectAttributes->ObjectName->Buffer != nullptr && !IsBadReadPtr(ObjectAttributes->ObjectName->Buffer, sizeof(WCHAR)) && ObjectAttributes->ObjectName->Buffer[0]) { + std::wstring originalPath(ObjectAttributes->ObjectName->Buffer, ObjectAttributes->ObjectName->Length / sizeof(WCHAR)); + std::wstring replacedPathStr = GetReplacedPath(originalPath); + UNICODE_STRING replacedPathUnicode; + RtlInitUnicodeString(&replacedPathUnicode, replacedPathStr.c_str()); + ObjectAttributes->ObjectName = &replacedPathUnicode; + return oNtCreateFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + AllocationSize, + FileAttributes, + ShareAccess, + CreateDisposition, + CreateOptions, + EaBuffer, + EaLength); + } + return oNtCreateFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + AllocationSize, + FileAttributes, + ShareAccess, + CreateDisposition, + CreateOptions, + EaBuffer, + EaLength); } -HANDLE WINAPI CreateFileWHook( - LPCWSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) +NTSTATUS WINAPI NtOpenFileHook( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG ShareAccess, + ULONG OpenOptions) { - size_t len = wcslen(lpFileName) + 1; - size_t convertedChars = 0; - char* mbstr = new char[len]; - wcstombs_s(&convertedChars, mbstr, len, lpFileName, len - 1); - std::string origpath = std::string(mbstr); - std::string newFileName = GetReplacedPath(origpath); - std::wstring newFileNamestring = std::wstring(newFileName.begin(), newFileName.end()); - LPCWSTR newFileNameLPC=newFileNamestring.c_str(); - - return OrigCreateFileW(newFileNameLPC, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + if (ObjectAttributes != nullptr && ObjectAttributes->ObjectName && + ObjectAttributes->ObjectName->Length && + ObjectAttributes->ObjectName->Buffer != nullptr && !IsBadReadPtr(ObjectAttributes->ObjectName->Buffer, sizeof(WCHAR)) && ObjectAttributes->ObjectName->Buffer[0]) { + std::wstring originalPath(ObjectAttributes->ObjectName->Buffer, ObjectAttributes->ObjectName->Length / sizeof(WCHAR)); + std::wstring replacedPathStr = GetReplacedPath(originalPath); + UNICODE_STRING replacedPathUnicode; + RtlInitUnicodeString(&replacedPathUnicode, replacedPathStr.c_str()); + ObjectAttributes->ObjectName = &replacedPathUnicode; + return oNtOpenFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + ShareAccess, + OpenOptions); + } + return oNtOpenFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + ShareAccess, + OpenOptions); } - void LoadHook() { - PrintLog("Starting to hook CreateFile APIs..."); - + PrintLog("Starting to hook File APIs..."); + HMODULE hNtdll = GetModuleHandle(L"ntdll.dll"); DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); - DetourAttach(&(PVOID&)OrigCreateFileA, CreateFileAHook); - auto Error = DetourTransactionCommit(); + if (hNtdll) + { + oNtCreateFile = (pNtCreateFile)GetProcAddress(hNtdll, "NtCreateFile"); + if (oNtCreateFile) + { + DetourAttach(&(PVOID&)oNtCreateFile, NtCreateFileHook); + auto Error = DetourTransactionCommit(); if (Error == NO_ERROR) - PrintLog("Hooked CreateFileA"); + PrintLog("Hooked NtCreateFile"); else - PrintLog("CreateFileA Hook Failed."); - - DetourRestoreAfterWith(); + PrintLog("NtCreateFile Hook Failed. Error: " + std::to_string(Error)); + } + else + { + PrintLog("NtCreateFile Hook Failed. Error: Failed to get NtCreateFile address."); + } + } + DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); - DetourAttach(&(PVOID&)OrigCreateFileW, CreateFileWHook); - Error = DetourTransactionCommit(); + if (hNtdll) + { + oNtOpenFile = (pNtOpenFile)GetProcAddress(hNtdll, "NtOpenFile"); + if (oNtOpenFile) + { + DetourAttach(&(PVOID&)oNtOpenFile, NtOpenFileHook); + auto Error = DetourTransactionCommit(); if (Error == NO_ERROR) - PrintLog("Hooked CreateFileW"); + PrintLog("Hooked NtOpenFile"); else - PrintLog("CreateFileW Hook Failed."); -} - -LPCWSTR ConvertToLPCWSTR(const char* charString) { - int size = MultiByteToWideChar(CP_UTF8, 0, charString, -1, nullptr, 0); - wchar_t* buffer = new wchar_t[size]; - MultiByteToWideChar(CP_UTF8, 0, charString, -1, buffer, size); - return buffer; -} - -LPWSTR ConvertToLPWSTR(const char* charString) { - int size = MultiByteToWideChar(CP_UTF8, 0, charString, -1, nullptr, 0); - wchar_t* buffer = new wchar_t[size]; - MultiByteToWideChar(CP_UTF8, 0, charString, -1, buffer, size); - return buffer; + PrintLog("NtOpenFile Hook Failed. Error: " + std::to_string(Error)); + } + else + { + PrintLog("NtOpenFile Hook Failed. Error: Failed to get NtOpenFile address."); + } + } } -bool readReplacesFromIni(const std::string& filename, std::vector& replaceList) { +bool readReplacesFromIni(const std::wstring& filename, std::vector& replaceList) { std::ifstream iniFile(filename); std::string line; std::map replaceMap; @@ -267,8 +358,8 @@ bool readReplacesFromIni(const std::string& filename, std::vector& repl for (const auto& entry : replaceMap) { Replace replace; - replace.origname = entry.first; - replace.replacename = entry.second; + replace.origname = utf8ToUtf16(entry.first); + replace.replacename = utf8ToUtf16(entry.second); replace.replaceafterfirsttime = afterFirstTimeMap[entry.first]; replaceList.push_back(replace); } @@ -326,29 +417,29 @@ void Checkfile(std::vector& replaceList) if (SteamAPI_BAK) { PrintLog("Found steam_api.dll.bak."); - replaceList.push_back({ "steam_api.dll","steam_api.dll.bak",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api.dll.bak",false }); }else if (SteamAPI_ORG) { PrintLog("Found steam_api.org."); - replaceList.push_back({ "steam_api.dll","steam_api.org",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api.org",false }); }else if (SteamAPI_O) { PrintLog("Found steam_api_o.dll."); - replaceList.push_back({ "steam_api.dll","steam_api_o.dll",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api_o.dll",false }); } if (SteamAPI64_BAK) { PrintLog("Found steam_api64.dll.bak."); - replaceList.push_back({ "steam_api.dll","steam_api64.dll.bak",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api64.dll.bak",false }); }else if (SteamAPI64_ORG) { PrintLog("Found steam_api64.org."); - replaceList.push_back({ "steam_api.dll","steam_api64.org",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api64.org",false }); }else if (SteamAPI64_O) { PrintLog("Found steam_api64_o.dll."); - replaceList.push_back({ "steam_api.dll","steam_api64_o.dll",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api64_o.dll",false }); } } @@ -356,14 +447,14 @@ void GetReplaceList() { wchar_t iniPath[MAX_PATH]; wcscpy_s(iniPath, MAX_PATH, GetCurrentPath()); - wcscat_s(iniPath, MAX_PATH, L"\\SteamAPICheckBypass.ini"); + wcscat_s(iniPath, MAX_PATH, inifilename.c_str()); if(useinternallist) { replaceList = internalreplaceList; } - if(readReplacesFromIni(convertWCharToString(iniPath), replaceList)) + if(readReplacesFromIni(iniPath, replaceList)) { PrintLog("Successfully get ini replace infos."); } @@ -376,7 +467,7 @@ void GetReplaceList() PrintLog("Replace List:"); { for (const auto& replace : replaceList) { - PrintLog(replace.origname + "," + replace.replacename); + PrintLog(utf16ToUtf8(replace.origname) + "," + utf16ToUtf8(replace.replacename)); } } PrintLog("-----------------"); @@ -386,7 +477,10 @@ void Init() { PrintLog("SteamAPICheckBypass Init"); GetReplaceList(); - LoadHook(); + std::thread([]() { + DisableVMP(); + LoadHook(); + }).detach(); } BOOL APIENTRY DllMain(HMODULE hModule, @@ -394,17 +488,15 @@ BOOL APIENTRY DllMain(HMODULE hModule, LPVOID lpReserved ) { - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - #ifdef _DEBUG Console::Attach(); #endif + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: PrintLog("Steam API Check Bypass dll Loaded."); Init(); - case DLL_PROCESS_DETACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: diff --git a/SteamAPICheckBypass_x32/dllmain.cpp b/SteamAPICheckBypass_x32/dllmain.cpp index febcea1..94c903f 100644 --- a/SteamAPICheckBypass_x32/dllmain.cpp +++ b/SteamAPICheckBypass_x32/dllmain.cpp @@ -1,25 +1,26 @@ #include "pch.h" -#include #include -#include "detours.h" #include "Console.h" -#include -#include -#include +#include "detours.h" #include +#include #include +#include #include - +#include +#include +#include +#include #pragma comment(lib, "detours.lib") #pragma comment(lib, "ntdll.lib") struct Replace { - std::string origname; - std::string replacename; + std::wstring origname; + std::wstring replacename; bool replaceafterfirsttime; // Replace reading request after reading for first time bool firstime = false; // first time read indicator, should always be false }; @@ -28,9 +29,17 @@ struct Replace bool useinternallist = false; //Use built-in replace list without reading .ini file +bool debugprintpath = false; //Print the path of the file being read + +bool enabledebuglogfile = true; //Enable debug log file + +std::string logfilename = "SteamAPICheckBypass.log"; //Log file name + +std::wstring inifilename = L"\\SteamAPICheckBypass.ini"; //Ini file name + std::vector internalreplaceList = { - {"steam_api.dll", "steam_api.org", false, false}, - {"steam_api64.dll", "steam_api64.org", false, false}, + {L"steam_api.dll", L"steam_api.org", false, false}, + {L"steam_api64.dll", L"steam_api64.org", false, false}, };//internal replace list example //----------Configuration end----------------- @@ -49,34 +58,22 @@ bool isFileExist(const wchar_t* fileName) { void PrintLog(std::string str) { + std::string logstr = "[SteamAPICheckBypass] " + str + "\n"; #ifdef _DEBUG - Console::Print(("[SteamAPICheckBypass] " + str + "\n").c_str()); + Console::Print(logstr.c_str()); + if (enabledebuglogfile) + { + std::ofstream logfile; + logfile.open(logfilename, std::ios_base::app); + logfile << logstr; + } #endif - std::string logstr = "[SteamAPICheckBypass] " + str + "\n"; int wideStrLength = MultiByteToWideChar(CP_UTF8, 0, logstr.c_str(), -1, nullptr, 0); wchar_t* wideString = new wchar_t[wideStrLength]; MultiByteToWideChar(CP_UTF8, 0, logstr.c_str(), -1, wideString, wideStrLength); OutputDebugString(wideString); delete[] wideString; } -std::string convertWCharToString(const wchar_t* wideString) { - // Get the length of the converted string - int size = WideCharToMultiByte(CP_UTF8, 0, wideString, -1, NULL, 0, NULL, NULL); - - // Allocate a buffer for the converted string - char* buffer = new char[size]; - - // Convert the wchar_t string to a char string - WideCharToMultiByte(CP_UTF8, 0, wideString, -1, buffer, size, NULL, NULL); - - // Create a std::string from the char string - std::string convertedString(buffer); - - // Clean up the allocated buffer - delete[] buffer; - - return convertedString; -} wchar_t const* GetCurrentPath() { @@ -88,54 +85,98 @@ wchar_t const* GetCurrentPath() } return exePath; } + +std::wstring utf8ToUtf16(const std::string& utf8Str) +{ + std::wstring_convert> conv; + return conv.from_bytes(utf8Str); +} + +std::string utf16ToUtf8(const std::wstring& utf16Str) +{ + std::wstring_convert> conv; + return conv.to_bytes(utf16Str); +} + +typedef enum _SECTION_INFORMATION_CLASS { + SectionBasicInformation, + SectionImageInformation +} SECTION_INFORMATION_CLASS, * PSECTION_INFORMATION_CLASS; +EXTERN_C NTSTATUS __stdcall NtQuerySection(HANDLE SectionHandle, SECTION_INFORMATION_CLASS InformationClass, PVOID InformationBuffer, ULONG InformationBufferSize, PULONG ResultLength); +EXTERN_C NTSTATUS __stdcall NtProtectVirtualMemory(HANDLE ProcessHandle, PVOID* BaseAddress, PULONG NumberOfBytesToProtect, ULONG NewAccessProtection, PULONG OldAccessProtection); +EXTERN_C NTSTATUS __stdcall NtPulseEvent(HANDLE EventHandle, PULONG PreviousState); + +void DisableVMP() +{ + // restore hook at NtProtectVirtualMemory + auto ntdll = GetModuleHandleA("ntdll.dll"); + if (ntdll == NULL) return; + + bool linux = GetProcAddress(ntdll, "wine_get_version") != nullptr; + void* routine = linux ? (void*)NtPulseEvent : (void*)NtQuerySection; + DWORD old; + VirtualProtect(NtProtectVirtualMemory, 1, PAGE_EXECUTE_READWRITE, &old); + *(uintptr_t*)NtProtectVirtualMemory = *(uintptr_t*)routine & ~(0xFFui64 << 32) | (uintptr_t)(*(uint32_t*)((uintptr_t)routine + 4) - 1) << 32; + VirtualProtect(NtProtectVirtualMemory, 1, old, &old); +} #pragma endregion std::vector replaceList; -HANDLE(WINAPI* OrigCreateFileW) ( - LPCWSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) = CreateFileW; - -HANDLE(WINAPI* OrigCreateFileA) ( - LPCSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) = CreateFileA; - -std::string GetReplacedPath(std::string path) +typedef NTSTATUS(WINAPI* pNtCreateFile)( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + PLARGE_INTEGER AllocationSize, + ULONG FileAttributes, + ULONG ShareAccess, + ULONG CreateDisposition, + ULONG CreateOptions, + PVOID EaBuffer, + ULONG EaLength); + +pNtCreateFile oNtCreateFile = nullptr; + +typedef NTSTATUS(WINAPI* pNtOpenFile)( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG ShareAccess, + ULONG OpenOptions); + +pNtOpenFile oNtOpenFile = nullptr; + +std::wstring GetReplacedPath(std::wstring path) { // Get the file name from the path size_t lastSlash = path.find_last_of('/'); size_t lastBackslash = path.find_last_of('\\'); size_t lastSeparator = (lastSlash > lastBackslash) ? lastSlash : lastBackslash; - std::string filename = path.substr(lastSeparator + 1); - + std::wstring filename = path.substr(lastSeparator + 1); + if (filename.find(utf8ToUtf16(logfilename)) == std::string::npos && debugprintpath) + { + PrintLog("Reading Path:" + utf16ToUtf8(path)); + } // Check if the file name matches any entry in the replaceList for (Replace& replace : replaceList) { - if (filename.find(replace.origname) != std::string::npos) + if (filename.find(replace.origname) != std::wstring::npos) { replace.firstime = true; if (replace.replaceafterfirsttime && !replace.firstime) { - PrintLog("Reading " + replace.origname + "for first time."); + PrintLog("Reading " + utf16ToUtf8(replace.origname) + "for first time."); break; } - PrintLog("Reading " + replace.origname + ",Replacing..."); + PrintLog("Reading " + utf16ToUtf8(replace.origname) + ",Replacing..."); // Replace the path's filename with replacename - size_t pos = path.find_last_of("/\\"); + size_t pos = path.find_last_of(L"/\\"); path = path.substr(0, pos + 1) + replace.replacename; - PrintLog(path); + PrintLog("Replaced Path:" + utf16ToUtf8(path)); // Set firstime to true if replaceafterfirsttime is true and firstime is false @@ -146,86 +187,136 @@ std::string GetReplacedPath(std::string path) return path; } -HANDLE WINAPI CreateFileAHook( - LPCSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) +NTSTATUS WINAPI NtCreateFileHook( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + PLARGE_INTEGER AllocationSize, + ULONG FileAttributes, + ULONG ShareAccess, + ULONG CreateDisposition, + ULONG CreateOptions, + PVOID EaBuffer, + ULONG EaLength) { - std::string origpath = std::string(lpFileName); - std::string newFileNamestring = GetReplacedPath(origpath); - LPCSTR newFileName = newFileNamestring.c_str(); - - return OrigCreateFileA(newFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + if (ObjectAttributes != nullptr && ObjectAttributes->ObjectName && + ObjectAttributes->ObjectName->Length && + ObjectAttributes->ObjectName->Buffer != nullptr && !IsBadReadPtr(ObjectAttributes->ObjectName->Buffer, sizeof(WCHAR)) && ObjectAttributes->ObjectName->Buffer[0]) { + std::wstring originalPath(ObjectAttributes->ObjectName->Buffer, ObjectAttributes->ObjectName->Length / sizeof(WCHAR)); + std::wstring replacedPathStr = GetReplacedPath(originalPath); + UNICODE_STRING replacedPathUnicode; + RtlInitUnicodeString(&replacedPathUnicode, replacedPathStr.c_str()); + ObjectAttributes->ObjectName = &replacedPathUnicode; + return oNtCreateFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + AllocationSize, + FileAttributes, + ShareAccess, + CreateDisposition, + CreateOptions, + EaBuffer, + EaLength); + } + return oNtCreateFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + AllocationSize, + FileAttributes, + ShareAccess, + CreateDisposition, + CreateOptions, + EaBuffer, + EaLength); } -HANDLE WINAPI CreateFileWHook( - LPCWSTR lpFileName, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) +NTSTATUS WINAPI NtOpenFileHook( + PHANDLE FileHandle, + ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG ShareAccess, + ULONG OpenOptions) { - size_t len = wcslen(lpFileName) + 1; - size_t convertedChars = 0; - char* mbstr = new char[len]; - wcstombs_s(&convertedChars, mbstr, len, lpFileName, len - 1); - std::string origpath = std::string(mbstr); - std::string newFileName = GetReplacedPath(origpath); - std::wstring newFileNamestring = std::wstring(newFileName.begin(), newFileName.end()); - LPCWSTR newFileNameLPC = newFileNamestring.c_str(); - - return OrigCreateFileW(newFileNameLPC, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + if (ObjectAttributes != nullptr && ObjectAttributes->ObjectName && + ObjectAttributes->ObjectName->Length && + ObjectAttributes->ObjectName->Buffer != nullptr && !IsBadReadPtr(ObjectAttributes->ObjectName->Buffer, sizeof(WCHAR)) && ObjectAttributes->ObjectName->Buffer[0]) { + std::wstring originalPath(ObjectAttributes->ObjectName->Buffer, ObjectAttributes->ObjectName->Length / sizeof(WCHAR)); + std::wstring replacedPathStr = GetReplacedPath(originalPath); + UNICODE_STRING replacedPathUnicode; + RtlInitUnicodeString(&replacedPathUnicode, replacedPathStr.c_str()); + ObjectAttributes->ObjectName = &replacedPathUnicode; + return oNtOpenFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + ShareAccess, + OpenOptions); + } + return oNtOpenFile( + FileHandle, + DesiredAccess, + ObjectAttributes, + IoStatusBlock, + ShareAccess, + OpenOptions); } - void LoadHook() { - PrintLog("Starting to hook CreateFile APIs..."); - + PrintLog("Starting to hook File APIs..."); + HMODULE hNtdll = GetModuleHandle(L"ntdll.dll"); DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); - DetourAttach(&(PVOID&)OrigCreateFileA, CreateFileAHook); - auto Error = DetourTransactionCommit(); - if (Error == NO_ERROR) - PrintLog("Hooked CreateFileA"); - else - PrintLog("CreateFileA Hook Failed."); + if (hNtdll) + { + oNtCreateFile = (pNtCreateFile)GetProcAddress(hNtdll, "NtCreateFile"); + if (oNtCreateFile) + { + DetourAttach(&(PVOID&)oNtCreateFile, NtCreateFileHook); + auto Error = DetourTransactionCommit(); + if (Error == NO_ERROR) + PrintLog("Hooked NtCreateFile"); + else + PrintLog("NtCreateFile Hook Failed. Error: " + std::to_string(Error)); + } + else + { + PrintLog("NtCreateFile Hook Failed. Error: Failed to get NtCreateFile address."); + } + } - DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); - DetourAttach(&(PVOID&)OrigCreateFileW, CreateFileWHook); - Error = DetourTransactionCommit(); - - if (Error == NO_ERROR) - PrintLog("Hooked CreateFileW"); - else - PrintLog("CreateFileW Hook Failed."); -} - -LPCWSTR ConvertToLPCWSTR(const char* charString) { - int size = MultiByteToWideChar(CP_UTF8, 0, charString, -1, nullptr, 0); - wchar_t* buffer = new wchar_t[size]; - MultiByteToWideChar(CP_UTF8, 0, charString, -1, buffer, size); - return buffer; -} -LPWSTR ConvertToLPWSTR(const char* charString) { - int size = MultiByteToWideChar(CP_UTF8, 0, charString, -1, nullptr, 0); - wchar_t* buffer = new wchar_t[size]; - MultiByteToWideChar(CP_UTF8, 0, charString, -1, buffer, size); - return buffer; + if (hNtdll) + { + oNtOpenFile = (pNtOpenFile)GetProcAddress(hNtdll, "NtOpenFile"); + if (oNtOpenFile) + { + DetourAttach(&(PVOID&)oNtOpenFile, NtOpenFileHook); + auto Error = DetourTransactionCommit(); + if (Error == NO_ERROR) + PrintLog("Hooked NtOpenFile"); + else + PrintLog("NtOpenFile Hook Failed. Error: " + std::to_string(Error)); + } + else + { + PrintLog("NtOpenFile Hook Failed. Error: Failed to get NtOpenFile address."); + } + } } -bool readReplacesFromIni(const std::string& filename, std::vector& replaceList) { +bool readReplacesFromIni(const std::wstring& filename, std::vector& replaceList) { std::ifstream iniFile(filename); std::string line; std::map replaceMap; @@ -267,8 +358,8 @@ bool readReplacesFromIni(const std::string& filename, std::vector& repl for (const auto& entry : replaceMap) { Replace replace; - replace.origname = entry.first; - replace.replacename = entry.second; + replace.origname = utf8ToUtf16(entry.first); + replace.replacename = utf8ToUtf16(entry.second); replace.replaceafterfirsttime = afterFirstTimeMap[entry.first]; replaceList.push_back(replace); } @@ -326,33 +417,33 @@ void Checkfile(std::vector& replaceList) if (SteamAPI_BAK) { PrintLog("Found steam_api.dll.bak."); - replaceList.push_back({ "steam_api.dll","steam_api.dll.bak",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api.dll.bak",false }); } else if (SteamAPI_ORG) { PrintLog("Found steam_api.org."); - replaceList.push_back({ "steam_api.dll","steam_api.org",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api.org",false }); } else if (SteamAPI_O) { PrintLog("Found steam_api_o.dll."); - replaceList.push_back({ "steam_api.dll","steam_api_o.dll",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api_o.dll",false }); } if (SteamAPI64_BAK) { PrintLog("Found steam_api64.dll.bak."); - replaceList.push_back({ "steam_api.dll","steam_api64.dll.bak",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api64.dll.bak",false }); } else if (SteamAPI64_ORG) { PrintLog("Found steam_api64.org."); - replaceList.push_back({ "steam_api.dll","steam_api64.org",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api64.org",false }); } else if (SteamAPI64_O) { PrintLog("Found steam_api64_o.dll."); - replaceList.push_back({ "steam_api.dll","steam_api64_o.dll",false }); + replaceList.push_back({ L"steam_api.dll",L"steam_api64_o.dll",false }); } } @@ -360,14 +451,14 @@ void GetReplaceList() { wchar_t iniPath[MAX_PATH]; wcscpy_s(iniPath, MAX_PATH, GetCurrentPath()); - wcscat_s(iniPath, MAX_PATH, L"\\SteamAPICheckBypass.ini"); + wcscat_s(iniPath, MAX_PATH, inifilename.c_str()); if (useinternallist) { replaceList = internalreplaceList; } - if (readReplacesFromIni(convertWCharToString(iniPath), replaceList)) + if (readReplacesFromIni(iniPath, replaceList)) { PrintLog("Successfully get ini replace infos."); } @@ -380,7 +471,7 @@ void GetReplaceList() PrintLog("Replace List:"); { for (const auto& replace : replaceList) { - PrintLog(replace.origname + "," + replace.replacename); + PrintLog(utf16ToUtf8(replace.origname) + "," + utf16ToUtf8(replace.replacename)); } } PrintLog("-----------------"); @@ -390,7 +481,10 @@ void Init() { PrintLog("SteamAPICheckBypass Init"); GetReplaceList(); - LoadHook(); + std::thread([]() { + DisableVMP(); + LoadHook(); + }).detach(); } BOOL APIENTRY DllMain(HMODULE hModule, @@ -398,17 +492,15 @@ BOOL APIENTRY DllMain(HMODULE hModule, LPVOID lpReserved ) { - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - #ifdef _DEBUG - Console::Attach(); + Console::Attach(); #endif + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: PrintLog("Steam API Check Bypass dll Loaded."); Init(); - case DLL_PROCESS_DETACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: