From 88d60769a245e2b951687fc3c265e37f047b8e98 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 20 Nov 2014 15:02:46 +0300 Subject: [PATCH 001/208] Building info Added information for building the binaries --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 840e121..490d9fe 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,10 @@ Porting to other platforms:
ARM for Windows RT (see links below)
IA-64 for Itanium-based Windows Server? Well, I have no idea :)

+Building the binaries:
+• x86 Delphi version can be built with Embarcadero RAD Studio 2010
+• x86/x64 C++ version can be built with Microsoft Visual Studio 2013
+
Links:
• Official GitHub repository:
https://github.com/binarymaster/rdpwrap/
From 6b4dadcde5293837a71f5f29492a4ae06823d67d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 20 Nov 2014 15:21:23 +0300 Subject: [PATCH 002/208] License changed to Apache 2.0 --- LICENSE | 217 ++++++++++++++++++++++++--- src-installer/RDPWInst.dpr | 16 ++ src-rdpcheck/MainUnit.pas | 16 ++ src-rdpcheck/RDPCheck.dpr | 16 ++ src-rdpconfig/MainUnit.pas | 16 ++ src-rdpconfig/RDPConf.dpr | 16 ++ src-x86-binarymaster/src/rdpwrap.dpr | 18 +++ src-x86-x64-Fusix/src/RDPWrap.cpp | 16 ++ 8 files changed, 311 insertions(+), 20 deletions(-) diff --git a/LICENSE b/LICENSE index a84c395..34720ea 100644 --- a/LICENSE +++ b/LICENSE @@ -1,25 +1,202 @@ -This is free and unencumbered software released into the public domain. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. +1. Definitions. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -For more information, please refer to + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 5ddda70..4ae678c 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1,3 +1,19 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + program RDPWInst; {$APPTYPE CONSOLE} diff --git a/src-rdpcheck/MainUnit.pas b/src-rdpcheck/MainUnit.pas index af750f1..1f0e201 100644 --- a/src-rdpcheck/MainUnit.pas +++ b/src-rdpcheck/MainUnit.pas @@ -1,3 +1,19 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + unit MainUnit; interface diff --git a/src-rdpcheck/RDPCheck.dpr b/src-rdpcheck/RDPCheck.dpr index 3e05407..5f4c5ad 100644 --- a/src-rdpcheck/RDPCheck.dpr +++ b/src-rdpcheck/RDPCheck.dpr @@ -1,3 +1,19 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + program RDPCheck; uses diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index 5d7a033..f7e282f 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -1,3 +1,19 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + unit MainUnit; interface diff --git a/src-rdpconfig/RDPConf.dpr b/src-rdpconfig/RDPConf.dpr index 2076e60..708def3 100644 --- a/src-rdpconfig/RDPConf.dpr +++ b/src-rdpconfig/RDPConf.dpr @@ -1,3 +1,19 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + program RDPConf; uses diff --git a/src-x86-binarymaster/src/rdpwrap.dpr b/src-x86-binarymaster/src/rdpwrap.dpr index d968cb7..e3dfa91 100644 --- a/src-x86-binarymaster/src/rdpwrap.dpr +++ b/src-x86-binarymaster/src/rdpwrap.dpr @@ -1,3 +1,19 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + library rdpwrap; // RDP Wrapper Library project by Stas'M @@ -37,8 +53,10 @@ library rdpwrap; // 6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] // 6.3.9600.16384 (Windows 8.1) [init hook + extended patch] // 6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] +// 6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] // 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] // 6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] +// 6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] // Known failures // 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) diff --git a/src-x86-x64-Fusix/src/RDPWrap.cpp b/src-x86-x64-Fusix/src/RDPWrap.cpp index 1626726..375ae50 100644 --- a/src-x86-x64-Fusix/src/RDPWrap.cpp +++ b/src-x86-x64-Fusix/src/RDPWrap.cpp @@ -1,3 +1,19 @@ +/* + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + // RDPWrap C++ port by Fusix (Nikita Parshin) // assisted by binarymaster (Stas'M) From 64b3bf8bc1f8bbb7787354c77d12240a9501fb90 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 20 Nov 2014 16:36:04 +0300 Subject: [PATCH 003/208] Added license info Now license can be viewed in applications --- src-installer/RDPWInst.dpr | 36 ++++++++++++++++++++-- src-installer/RDPWInst.dproj.local | 8 ----- src-installer/RDPWInst.identcache | Bin 114 -> 0 bytes src-installer/resource.res | Bin 342528 -> 353628 bytes src-rdpconfig/LicenseUnit.dcu | Bin 0 -> 4169 bytes src-rdpconfig/LicenseUnit.dfm | 47 +++++++++++++++++++++++++++++ src-rdpconfig/LicenseUnit.pas | 43 ++++++++++++++++++++++++++ src-rdpconfig/MainUnit.dcu | Bin 11088 -> 12506 bytes src-rdpconfig/MainUnit.dfm | 15 +++++++-- src-rdpconfig/MainUnit.pas | 31 ++++++++++++++++++- src-rdpconfig/RDPConf.dpr | 4 ++- src-rdpconfig/RDPConf.dproj | 3 ++ src-rdpconfig/manifest.res | Bin 1836 -> 0 bytes src-rdpconfig/resource.res | Bin 0 -> 12936 bytes 14 files changed, 172 insertions(+), 15 deletions(-) delete mode 100644 src-installer/RDPWInst.dproj.local delete mode 100644 src-installer/RDPWInst.identcache create mode 100644 src-rdpconfig/LicenseUnit.dcu create mode 100644 src-rdpconfig/LicenseUnit.dfm create mode 100644 src-rdpconfig/LicenseUnit.pas delete mode 100644 src-rdpconfig/manifest.res create mode 100644 src-rdpconfig/resource.res diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 4ae678c..3d4527c 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -573,6 +573,23 @@ begin ResStream.Free; end; +function ExtractResText(ResName: String): String; +var + ResStream: TResourceStream; + Str: TStringList; +begin + ResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA); + Str := TStringList.Create; + try + Str.LoadFromStream(ResStream); + except + + end; + ResStream.Free; + Result := Str.Text; + Str.Free; +end; + procedure ExtractFiles; begin if not DirectoryExists(ExtractFilePath(ExpandPath(WrapPath))) then @@ -904,14 +921,16 @@ begin if (ParamCount < 1) or ( - (ParamStr(1) <> '-i') + (ParamStr(1) <> '-l') + and (ParamStr(1) <> '-i') and (ParamStr(1) <> '-u') and (ParamStr(1) <> '-r') ) then begin Writeln('USAGE:'); - Writeln('RDPWInst.exe [-i[-s]|-u|-r]'); + Writeln('RDPWInst.exe [-l|-i[-s]|-u|-r]'); Writeln(''); + Writeln('-l display the license agreement'); Writeln('-i install wrapper to Program Files folder (default)'); Writeln('-i -s install wrapper to System32 folder'); Writeln('-u uninstall wrapper'); @@ -919,6 +938,12 @@ begin Exit; end; + if ParamStr(1) = '-l' then + begin + Writeln(ExtractResText('LICENSE')); + Exit; + end; + if not SupportedArchitecture then begin Writeln('[-] Unsupported processor architecture.'); @@ -934,6 +959,13 @@ begin Writeln('[*] RDP Wrapper Library is already installed.'); Halt(ERROR_INVALID_FUNCTION); end; + Writeln('[*] Notice to user:'); + Writeln(' - By using all or any portion of this software, you are agreeing'); + Writeln(' to be bound by all the terms and conditions of the license agreement.'); + Writeln(' - To read the license agreement, run the installer with -l parameter.'); + Writeln(' - If you do not agree to any terms of the license agreement,'); + Writeln(' do not use the software.'); + Writeln('[*] Installing...'); if ParamStr(2) = '-s' then WrapPath := '%SystemRoot%\system32\rdpwrap.dll' diff --git a/src-installer/RDPWInst.dproj.local b/src-installer/RDPWInst.dproj.local deleted file mode 100644 index 673bb99..0000000 --- a/src-installer/RDPWInst.dproj.local +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2013.12.07 17:17:05.152.dproj,C:\Users\user\Documents\RAD Studio\Projects\Project1.dproj=C:\Users\user\Documents\Delphi Projects (local)\RDPWrapInst\RDPInstall.dproj - 2013.12.07 19:48:57.905.dproj,C:\Users\user\Documents\Delphi Projects (local)\RDPWrapInst\RDPInstall.dproj=C:\Users\user\Documents\Delphi Projects (local)\RDPWrapInst\RDPWInst.dproj - 2013.12.08 01:45:08.501.dproj,C:\Users\user\Documents\Delphi Projects (local)\RDPWrapInst\RDPWInst.dproj=C:\Users\user\Documents\Delphi Projects (local)\RDPWrap\devel\installer2.0-binarymaster\RDPWInst.dproj - - diff --git a/src-installer/RDPWInst.identcache b/src-installer/RDPWInst.identcache deleted file mode 100644 index 2ed9853aae7263541ce1747962a39f8114c51ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmZQ%U|>jewu%WYPAw{qDFu=-F8Rr&xv6<2#W60aIRzP+3IRp=S*gh-#R?iZ`N@en znlV8x0pUf71u-e9WvMwanR&$}i8(o`MY>6ud5J}pxrxOkKx06PJb_YrDFsD9OW*(i D_Yfs& diff --git a/src-installer/resource.res b/src-installer/resource.res index f0f95debf3febcc1f6f4979b8f955939d9a5a0f6..5f44448f08ac935e35955525cde9df0acb4edaca 100644 GIT binary patch delta 11144 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 GC;taUxbD*c delta 33 kcmca}O0?mN$OMJv8twKPZAKtw0%B$$X4zh&&HBI+0OjNiTmS$7 diff --git a/src-rdpconfig/LicenseUnit.dcu b/src-rdpconfig/LicenseUnit.dcu new file mode 100644 index 0000000000000000000000000000000000000000..f860bf3a997e668703a1b02dbd7e9b62fe90ba05 GIT binary patch literal 4169 zcmeHJYit}>6~3OF*hj|LmXkP+n}?mYRxn{zsyd{o(Av9pvLtrg-HlUPD`Y%#cRk7M z%w}dbi6aD2TaZDen9@e5vicG)Rc&ahHdF|qgrqGJK^1?H5dA~CEU$(bpqeCHu={N_s6(?a>sUPF_XEB9N5ckL^8pBAlm zIb9K1LeCc$iLI1k(vs>v@t`*@^w#Wx>&c=JqR^S!H+NWSUSj-cSvB4FX1gvF*3@LX zq_n4anJ9&oQjRKVs69;g(cSoBwA_$&@^vwp>rOH2H4^*4C6vI8xS- z{}7_-ZDd!P?nH*s;(%f4_Hox=;G}e2wIIV4@%DR$8Lnnj$51UVShXch)pdPhVM8uy z7fZG!EibXZq^q9H$b#W|&ceTb^Ojav7l98rh9|QgQC1k*7=f~CUM5x396zDSl4sb~ zhPR2aKEeoek7^9|GuV@xmX1p&@yVmEYZR>R<=_2E({Y!hmgWsDv^;5Bo@4v>AivOs zLqWJFXZO5k|B{Z1AW794Eqiv>I4RdNxb8YIBVB^}7}^wrYzl&-8kW=pNY`jiK zN*<$XVxm0Z-N}sDZL-pvRvp?srfNqDj$O9&&oU|In>s0Fm*-45R?g?8BlY{47>izZ z-aa1MG|S*eqs9bj6vDx!R5Li7!+nr9#GIJ6j;W@>d3~C(HBn{cKnk|E%s?zh$ks8w zh5Ix^J<&aZ0nf4gCQ5HVHxo%eD{^*Oo1auIszK-M*Pq=(8*2n|bCCM4vwTfdK5nVx z4*lm03`T(o(^frdARON;Ri0n8zhK(hI*kmiW%_TMkd&hqCaEu7iJwV(!ZY7tpgXE; zN-fGtlcF&rWw4^(Gtyh<)1~-`bdj6RyNq$c2Oi-TWsuW@TMsWiyGPSkPuNb8t2)0r z$DjGGo^#xP{Gwq&!mpfAg`3{;G@B%_;~(V!y+1vR^on0u5AA z`xv4Q)__tnPlZ42*d?l4L%R1eBW7J#kAdzC!&~ACf^zj+azM&5iJ}!b#STo^&q&O) zlpX4yX*#%G#Tj~q9$=Up-Ox#JEmvk4q_k^*du>&h`XQFbd^u%%M&8gU!)!}!QaR0a z5x7!gFlK2+s=EIS$R@2Bd9+Mj%a3E8(M?fX>Mfv_Q1eZ?>y*O`#oQl#LEIw@_eYh_ zgk_$Q7A0|!ajLV1BPi$;T+L=6781YJQ=OHXRNh;b&O(}+o|C6O>oFelZ4k;ASsrsx zAg4$D3_~$1!WjR60ji{ic}dfDrGMaA#$s2a)KtqR%^CdaI4?6Ey8$_E!q&>}c}A}H zxQ|FZtf~u4i5bi7mWo?7FESL%kpna_BOH04=ZX1ndDMK~wLO8%=Jw53; z{s2RbZ&DWRf%m_6G~bpRD|?=8y_r1qXWq`hs>@%xSinSxJiq?nr?ipiAbU!P&%O5O zTZ%T)7*9bPiOhsOv_xrU33mEbqeh%Wm|1C5B&uCf8B$~;I&-> zg=oLfHZhB&_u)lFsGXG!EnmC#_Ry_&i|wn6Iht)myMV#Y<(9v+34!e^+uP3exqWBvcH|IGudM3p?c=zBDX?IZNvB5Dy`@>lgZt`a_z`2kxA1iY!XB^2?_`aVU( z(pae*&GBuEVYLjfL^Mr#gCbT|^Z$zveT@ILTr6G|q9UL&09AxaA5^;G#|W(mh|rF( z72yoRO9&kZ-$v*}=tg)3VLQSxgdv275x$J@RfIW&%?OVp3?Mv-u#9jE!fgl%gxe8v z2(Kah2w?`{(+H;!#t`m9co5-!ghvo&5e_08LRdn06hTKgjgUu}N7#!ng)ohfL3kO# zLbwB=gy0}}2s;pVBAh@tiSS8;yAbX{SVTx6Od#w=_zc2#5ne$!hwv?g&m(*R;W31# z5S~N$KEm?|FLXfV5d3s2TpEH)DR=|nXDF%ys<%J|!Msge1^83DQ0TX#MOjjIJb~X( zl%3)+rCo^L&Tn>hD&$(FNiXwWepoqR|t0MaUK(gVh^t0n}ygI;6SNvb~zce== AMgRZ+ literal 0 HcmV?d00001 diff --git a/src-rdpconfig/LicenseUnit.dfm b/src-rdpconfig/LicenseUnit.dfm new file mode 100644 index 0000000..fae5719 --- /dev/null +++ b/src-rdpconfig/LicenseUnit.dfm @@ -0,0 +1,47 @@ +object LicenseForm: TLicenseForm + Left = 0 + Top = 0 + BorderIcons = [] + BorderStyle = bsDialog + Caption = 'License Agreement' + ClientHeight = 344 + ClientWidth = 386 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poOwnerFormCenter + PixelsPerInch = 96 + TextHeight = 13 + object mText: TMemo + Left = 8 + Top = 8 + Width = 370 + Height = 297 + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + object bAccept: TButton + Left = 115 + Top = 311 + Width = 75 + Height = 25 + Caption = '&Accept' + ModalResult = 1 + TabOrder = 1 + end + object bDecline: TButton + Left = 196 + Top = 311 + Width = 75 + Height = 25 + Caption = '&Decline' + ModalResult = 2 + TabOrder = 2 + end +end diff --git a/src-rdpconfig/LicenseUnit.pas b/src-rdpconfig/LicenseUnit.pas new file mode 100644 index 0000000..a44a2ad --- /dev/null +++ b/src-rdpconfig/LicenseUnit.pas @@ -0,0 +1,43 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + +unit LicenseUnit; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls; + +type + TLicenseForm = class(TForm) + mText: TMemo; + bAccept: TButton; + bDecline: TButton; + private + { Private declarations } + public + { Public declarations } + end; + +var + LicenseForm: TLicenseForm; + +implementation + +{$R *.dfm} + +end. diff --git a/src-rdpconfig/MainUnit.dcu b/src-rdpconfig/MainUnit.dcu index 2e2f289c831068ce89b2b0f3fda82e8a06649c68..d82d48208264085a2109171f6ad6ca53be21ca9a 100644 GIT binary patch delta 4768 zcma)93s79u89w)%b2o=&Sr%jwD8U5@0!g;yu`zLylnpEb0YYGxuu)=`-Mh=iWg+{} z&_*}d#0erQS?y?=WRgy-)@o}cI@)TRMB`}3XU5cSd^E}UNUCvSC$(q;^gnm+Bb znYsV}fB*Nt&Vzg5owif1R2xFZQxyn3`pd|0YOWCLRMq7Q zeSR+Solj?9)454Vgr;CxucT@gDP0dnhX1_WJHoAFXu-A_#tbA|wSO zFPU%uvscSUNY3=h{=MJ1J+oT-!ga7R9+y&E7Ys*SLASJS$^TXZx6U8T_VnBymdO_T zEiF~mR=f4iUGEQ#91}8ym^a88`cTcDC9ae{!&zo>2GJ@$Ij~UrgOG<+XYIk?m;trz2L~F=3IE+TeFf!LY<{2j3)&OjCh5W8y zgu_}$tqQopVL7%Q$Qwhh-Y&nJlU{(z8aeE8TSVTM+fPGYwci!!@r6+gp$yEsL_AfI zkle)xn6~!%gAi)roNY@)zpgp>PDMN*`z|-XFmb?hD(Q7q;qJanp7fmSuk~a#l;hc#804wvfyEL1R z7_Uh;F8XQv$qneJ;o*hmLfR??ybxd>H4#`RSfv+DX|0kw8uCZ_8eDx6PuHD`3x=$8 zZk=}T5d<;|nwjH=(q}KM;I)JwTPqtX>@wsybQ&mQOqQ7_y?S!<%$>@esS5brx5DuTg z_K?q7zM|&ND*j#zs2e($m(k5A^S%9ys%4B*qsIT6p`TmMlNZiN{@x7z%FGp+dBVc@ z>df3t3z2)@_>G9c(LIz~)65bWq3t_!&{6$KoGT2Ce^@f-XJ{VjT(cT!QGTI*k1(tZ zFmIMJJtr0b@sLVrI<39Efj;iHg8vbv>06okB?W82u~!WgL%ya4E5wz!zS8b#rr1C<0XRFi=ma6bno-rUSqnnq<`L z3_1CSfO%G7%vyebu1;PcAkQ@tVdoyckpERfYW%{^E>!#lX&PQebb(Lpu0F$}?m`uK@l6v{R2YSNN+NcDtLP&SY5$~!I zY3f=hYm~_WC)EI53%vW_^Amx;6v7Cja{>__-XkPbK5ZSmawIjNg-00Wh>w&AcQwC5 z73uIE+?GBuF%jEe2__1Nwsx+k{ZO!b1%$qVo5p{>A_yHOBVT9L3L=8pN8`)0cN?Ar zFTBUpxwY~4vyU5PA7>{07_s=?tA{sc@n|%2nOdZWUY+RDM6IHS75$E)Q=uW}Z&Y+l z(QhkSr$J~H@Jlr#p`6c!^c6F^#4qHSAQ!B0D09{C`zg2fzzUv84;^Gx;`a$J6XDig&C z7~RC^i;UVC{TriiF!~Oo`x$Lu^c15_jGkunETb)q1{n=7+RNxJM#mWyp!9=`ZjCYe zDx=#N{S~9HG5Rp0Cm7w$=pIJ*G5U8#-(&PQjDE=IK}LVe=sk?y%jkWKKEUWGqlXy{ zG5Q>%&olZbMk9>g#^_%dJ;LY~Mt{!eos7Q4=v|C%XY_7HcQX1Vqu()lnbD6KJ;q}6 z6-NKT=qHSxWArOVFEaXX9jyLYOmlGoJSFfH)7iM1HsT`Cm7q)MGF(mzLFZyKZ6rn1 zLMo}1%%lCJm_|tn^^*eXB;~Y>lumA^x~WU*>S$r9D{6SHbM$qh-!gwiv(99b3JNU$gn9r$#}Nh;v#Y2nd}PwK>#myn;7i$+o^rU4s;$TX}){X_@8 zlDTLIN_+|q%#}{S4}5GCmgV7kyaX5Ee9dC4#Ri;>4Z7O+yVnh-Xc|CU4b)P1}|`V*Vj14)qgnH{w$x$n~EF-zNNC&k@Bk3a#k-g+yVw34QF0Ev(3>;iKNrwzv zTy7>(QgzF|&4lm&5YzyL?%?te*&%}gE{~HTu0A3Uc3r?G6Y32KgsW9Xa>M|tkQ}F| zkesCBh2%W9zU5Y$2v(U0mPJH!h*i`;oH#y*tk8^?5fg)d7~zEvUsSY=+{VScacdI8 z8juZOV-mtD&|0D$can|#zt|3<(?~?eI!M>J1dpFb8BjOTXu8Sz@n|v$)`I#VsXxi? S0Cop4j}H+Of*&kP*Z%o5KiRNd^F=&0 zAx*onWzxk&i)l^;t`F_hp1pkRev@^Rzfr4?g#5wgTPIIEXtLDFLS>6L^jZJa2foG$ z_3hzRJg*Rf!6tvOvGutygRWw5n!5g`TvNLGCS)GOTP3 zMnbK6Ypt(Tt!WMIkkog%ugdQYv^IxDRES%0l1O7^B%~`p^_60Mn?K0Hd(2etiWp3i z;X19^AC83Dnau!Sk=3(a?zVK^BgB7RoH9ROxGf{K4k5DMe(V#MiwxDLLKHaGe&SmB zsJc$`HnvaZ!obb_`>;CaG4L#?VOk{SIHqk}^}E&2iHr6lg|3-cuLYW#gmB$=DLg-C z)9<)4>NVfakU!GC+S{&$xMuEmIX8s0Q2EYCix!Odecp(_H7JSezT>7iOb~)xiQ|qL z8*8Pt>FZi&vxE3w){-!@b!Xaovvc;GN@?xsFc!@cmzZg;*Mf~&hyeiWyVLqp&PSqE zUqj!M(myQD8rfHm-0;ef=8b5)?G@4_@BdHQYnbGWHA&P?o|Lsxw#Q*ye`3dESG3RQ zagO#hJo&B4fZz9Ro_2-o+d8hz{N;BYG%T{mSX6q0J}qF_)JPlKIGfa#ImhhTP|7Ef zpEa$fS~e^g*YK5jRYm{Y4~uOz{-8JDe_lTfyy$^#Z9O7$=E1^5G%Gh+D15IcR|w+I z)H$`Lj$$Ch%N=%cF>^QMnhqpCE}HdCQKIlm3#)L>%sg(Ik~S`x(2#l!Nz7*=*C5Od z@_4k6QWdDvhPAajHNKTt(x)rd8VZ}dX6m&_g!euy zK=jAKbmX{cgTZHP;!A|T$*7=H7d({~_^RabD3~OK*fZ(j!}$-RC(Ae&fuUuaWgPQE z&f82v{E1JI{QXoB;*8Seow~wgW@r)JiMMl(nJkG7xjm){iEre^t1RLVENT$<9$L6t z#&zi!PsjJuk<=7lmW~HGRGpC|ko;R}Q>67C^9L-=#TmkEDK zxR2r~neaH_>x54eZXw)8c#5!*u!*pRa6939 zgdY)JBRofVlJNUc!gmNS5&o9&eZmh2KeX|?w*&U)V}B9$7vk+IG(iF0F5^&)pS$rN z9_-~pHWkGcQgBJSK$7jIGPo}!x zrp~)32Ena%La}<&CWcse(<)TO#+4%BP!JE;!7AA20N6}$@WQrLIf)Y`uPWrFMCshp z=v+k{0+$fkC5evPz;_bxcLb3Y1O9&5F+dPGF)#z)>Odf-$G{3AKL$1st{7y3D2Ra_ zL}3h^Ac}fHn9*I_$tGDKin}E&aqnc94Z__cp{L{k!yFJLsv^u$oab>UF~|eq8ItsZ zdBaRk2QhC@!i5X2GRz0Dpija@3(qrjfmj%qux$C}7!-h5-YHQ<*|``Lf+%}MzQM|U za;*KH9K}&NZaE>xt#9a~1NP&v(inZ$0kxbo?YV8IVP$*dgO42i$00KZxViGend=&S z-eewDUfSF5fX!Umd-%0eCYYW%tekxFty6ba!CEjQx4h$rAL_IHSdJG?%kk1#eRRM| z7QA=M0c{-R9J|=4e?CM@x%<4{by1Exp})X3%o}nPdf)~OzzpTG&i-DG2jGehuFA2K zc@E<5ay-vcJ>1o6|CZxb7}kMFVK5998AOI09g0JS*~;PQwm7(4qOGD6F4#Goh8`5B z;R+^C!+^|&WR{_FHe2PaR265TTs5;!O`e5i<|N-y{Qra(AfJ+CPYUv)#bt)QDagwf zSHPO=gKa|06F0zS9snENfby2)0JJ0rrOYnwg4ui*o=y&>x_J4#ZfjCibk?Gn%@)Oz ObSN&tKY40}@ctJpwm)+K diff --git a/src-rdpconfig/MainUnit.dfm b/src-rdpconfig/MainUnit.dfm index 887995d..7e06d8a 100644 --- a/src-rdpconfig/MainUnit.dfm +++ b/src-rdpconfig/MainUnit.dfm @@ -2,7 +2,7 @@ object MainForm: TMainForm Left = 0 Top = 0 BorderStyle = bsDialog - Caption = 'Remote Desktop Protocol Configuration' + Caption = 'RDP Wrapper Configuration' ClientHeight = 245 ClientWidth = 326 Color = clBtnFace @@ -19,7 +19,7 @@ object MainForm: TMainForm TextHeight = 13 object lRDPPort: TLabel Left = 203 - Top = 22 + Top = 33 Width = 47 Height = 13 Caption = 'RDP Port:' @@ -100,7 +100,7 @@ object MainForm: TMainForm end object seRDPPort: TSpinEdit Left = 256 - Top = 19 + Top = 30 Width = 62 Height = 22 MaxValue = 65535 @@ -109,4 +109,13 @@ object MainForm: TMainForm Value = 0 OnChange = seRDPPortChange end + object bLicense: TButton + Left = 224 + Top = 6 + Width = 94 + Height = 21 + Caption = 'View license...' + TabOrder = 8 + OnClick = bLicenseClick + end end diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index f7e282f..a236689 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -33,6 +33,7 @@ type rgShadow: TRadioGroup; seRDPPort: TSpinEdit; lRDPPort: TLabel; + bLicense: TButton; procedure FormCreate(Sender: TObject); procedure cbAllowTSConnectionsClick(Sender: TObject); procedure seRDPPortChange(Sender: TObject); @@ -40,6 +41,7 @@ type procedure bCancelClick(Sender: TObject); procedure bOKClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure bLicenseClick(Sender: TObject); private { Private declarations } public @@ -55,7 +57,27 @@ var implementation {$R *.dfm} -{$R manifest.res} +{$R resource.res} + +uses + LicenseUnit; + +function ExtractResText(ResName: String): String; +var + ResStream: TResourceStream; + Str: TStringList; +begin + ResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA); + Str := TStringList.Create; + try + Str.LoadFromStream(ResStream); + except + + end; + ResStream.Free; + Result := Str.Text; + Str.Free; +end; procedure TMainForm.ReadSettings; var @@ -170,6 +192,13 @@ begin Reg.Free; end; +procedure TMainForm.bLicenseClick(Sender: TObject); +begin + LicenseForm.mText.Text := ExtractResText('LICENSE'); + if LicenseForm.ShowModal <> mrOk then + Halt(0); +end; + procedure TMainForm.cbAllowTSConnectionsClick(Sender: TObject); begin if Ready then diff --git a/src-rdpconfig/RDPConf.dpr b/src-rdpconfig/RDPConf.dpr index 708def3..3fd645f 100644 --- a/src-rdpconfig/RDPConf.dpr +++ b/src-rdpconfig/RDPConf.dpr @@ -18,7 +18,8 @@ program RDPConf; uses Forms, - MainUnit in 'MainUnit.pas' {MainForm}; + MainUnit in 'MainUnit.pas' {MainForm}, + LicenseUnit in 'LicenseUnit.pas' {LicenseForm}; {$R *.res} @@ -27,5 +28,6 @@ begin Application.MainFormOnTaskbar := True; Application.Title := 'Remote Desktop Protocol Configuration'; Application.CreateForm(TMainForm, MainForm); + Application.CreateForm(TLicenseForm, LicenseForm); Application.Run; end. diff --git a/src-rdpconfig/RDPConf.dproj b/src-rdpconfig/RDPConf.dproj index e333e60..ffc33d8 100644 --- a/src-rdpconfig/RDPConf.dproj +++ b/src-rdpconfig/RDPConf.dproj @@ -41,6 +41,9 @@
MainForm
+ +
LicenseForm
+
Base diff --git a/src-rdpconfig/manifest.res b/src-rdpconfig/manifest.res deleted file mode 100644 index 82e8f478dd1fe48fcc871f6d088aba87437caaf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcma)5U2hyU6ur=WpomH!@qloO5j=B7yPxbv-cMddfR({C(uS)x_=& z+NAPMjOhiP(T{jPrc=yL=sA6Z?-RVAV9w8PgFpWw;`$n6(EJ~UC=mm;=*<%S{x;9f z$de^SnpQwll#>LqrX?9fe+@ZfifK&uF=B9FMhA2cct^-7sH6n>Yp_Z1B^flJCgkWd zdPXATS>z2v><9W7we4QVsBn}94kfrKVCs-}O2_n~sb)S33@hX%U6w%HB7YTD3sjBi zogVfDur1Ixm=kaqccaZ`y*}h>pyxd$H3!zo42XWBPk{dvxvP-LkrLY3!4+Krg@W4c zH9@~X2RnV6CxUjtX%c*W6nx#_p9f_b_A5|p=_SeOUPujbLW=TCONh=lWr&XU|{Igi%T zMTZaWy*o>slf`Ae768z09#vK!xb#XEiQ6euYK=2XzmuBcAaTX;dJ>5u(P}B3zv%A< zC?PtqlT2!_{F)bq@aqygzEXN`H>y{3QefrCWb#XySaG^I7H7W7lxgA{A@OiL+?!7J zhr83gcsCMteQ8Z9oilb}(<|j=>MIMt&!bVzBa@}n;E=AvH<-06e$nV{0&gUJJ8@pE z$v#mb&Wzp}A zsaF16;f%=ag;m!omn-SIAUJj5$2TbTIJ8gYwahoNgvfbe9&x6!a*-8EE9Y(EjqRBt pM5PufABK6fOmZiiBf!?M_HLtp@tBRaSkFeCd=Q5k~;tZ diff --git a/src-rdpconfig/resource.res b/src-rdpconfig/resource.res new file mode 100644 index 0000000000000000000000000000000000000000..883012d4552a667bc99ecb17ced65686f59fde37 GIT binary patch literal 12936 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 literal 0 HcmV?d00001 From dd92b47812a796caf3bdcf9ae83e3c7a3da6c16b Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 20 Nov 2014 16:45:16 +0300 Subject: [PATCH 004/208] Small cleanup Deleted unnecessary files and added .gitignore file --- .gitignore | 6 ++++++ src-rdpcheck/MainUnit.dcu | Bin 13046 -> 0 bytes src-rdpcheck/RDPCheck.dproj.local | 8 -------- src-rdpcheck/RDPCheck.identcache | Bin 222 -> 0 bytes src-rdpconfig/LicenseUnit.dcu | Bin 4169 -> 0 bytes src-rdpconfig/MainUnit.dcu | Bin 12506 -> 0 bytes src-x86-binarymaster/src/rdpwrap.dproj.local | 2 -- src-x86-binarymaster/src/rdpwrap.identcache | Bin 115 -> 0 bytes src-x86-x64-Fusix/src/version.bin | Bin 896 -> 0 bytes 9 files changed, 6 insertions(+), 10 deletions(-) create mode 100644 .gitignore delete mode 100644 src-rdpcheck/MainUnit.dcu delete mode 100644 src-rdpcheck/RDPCheck.dproj.local delete mode 100644 src-rdpcheck/RDPCheck.identcache delete mode 100644 src-rdpconfig/LicenseUnit.dcu delete mode 100644 src-rdpconfig/MainUnit.dcu delete mode 100644 src-x86-binarymaster/src/rdpwrap.dproj.local delete mode 100644 src-x86-binarymaster/src/rdpwrap.identcache delete mode 100644 src-x86-x64-Fusix/src/version.bin diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4081324 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Unnecessary files + +*.~pas +*.dproj.local +*.identcache +*.dcu diff --git a/src-rdpcheck/MainUnit.dcu b/src-rdpcheck/MainUnit.dcu deleted file mode 100644 index 97137d34981247ce34fbc858eb1f5d4ba41a6405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13046 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 diff --git a/src-rdpcheck/RDPCheck.dproj.local b/src-rdpcheck/RDPCheck.dproj.local deleted file mode 100644 index 51a53c6..0000000 --- a/src-rdpcheck/RDPCheck.dproj.local +++ /dev/null @@ -1,8 +0,0 @@ - - - - 2013.12.08 02:49:59.064.pas,C:\Users\user\Documents\RAD Studio\Projects\Unit2.pas=C:\Users\user\Documents\Delphi Projects (local)\RDPWrap\devel\rdpcheck-binarymaster\MainUnit.pas - 2013.12.08 02:49:59.064.dfm,C:\Users\user\Documents\RAD Studio\Projects\Unit2.dfm=C:\Users\user\Documents\Delphi Projects (local)\RDPWrap\devel\rdpcheck-binarymaster\MainUnit.dfm - 2013.12.08 02:50:08.464.dproj,C:\Users\user\Documents\RAD Studio\Projects\Project1.dproj=C:\Users\user\Documents\Delphi Projects (local)\RDPWrap\devel\rdpcheck-binarymaster\RDPCheck.dproj - - diff --git a/src-rdpcheck/RDPCheck.identcache b/src-rdpcheck/RDPCheck.identcache deleted file mode 100644 index d2f5d395c907bd209fffbdd929b4a7c78b182469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmZQ#U|>jawu%WYPAw{qDFu=-F8Rr&xv6<2#W60aIRzP+3IRp=S*gh-#R?iZ`N@en znlV8x0pUf71u-e9WvMwaMJWZz8L7$Hx=ERNiA9yUiNz&AQ+yLM^Fs47OY{m7i-C5) V0Zl9eI>;I11ih4kBDhUJ1^{EpN$vmu diff --git a/src-rdpconfig/LicenseUnit.dcu b/src-rdpconfig/LicenseUnit.dcu deleted file mode 100644 index f860bf3a997e668703a1b02dbd7e9b62fe90ba05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4169 zcmeHJYit}>6~3OF*hj|LmXkP+n}?mYRxn{zsyd{o(Av9pvLtrg-HlUPD`Y%#cRk7M z%w}dbi6aD2TaZDen9@e5vicG)Rc&ahHdF|qgrqGJK^1?H5dA~CEU$(bpqeCHu={N_s6(?a>sUPF_XEB9N5ckL^8pBAlm zIb9K1LeCc$iLI1k(vs>v@t`*@^w#Wx>&c=JqR^S!H+NWSUSj-cSvB4FX1gvF*3@LX zq_n4anJ9&oQjRKVs69;g(cSoBwA_$&@^vwp>rOH2H4^*4C6vI8xS- z{}7_-ZDd!P?nH*s;(%f4_Hox=;G}e2wIIV4@%DR$8Lnnj$51UVShXch)pdPhVM8uy z7fZG!EibXZq^q9H$b#W|&ceTb^Ojav7l98rh9|QgQC1k*7=f~CUM5x396zDSl4sb~ zhPR2aKEeoek7^9|GuV@xmX1p&@yVmEYZR>R<=_2E({Y!hmgWsDv^;5Bo@4v>AivOs zLqWJFXZO5k|B{Z1AW794Eqiv>I4RdNxb8YIBVB^}7}^wrYzl&-8kW=pNY`jiK zN*<$XVxm0Z-N}sDZL-pvRvp?srfNqDj$O9&&oU|In>s0Fm*-45R?g?8BlY{47>izZ z-aa1MG|S*eqs9bj6vDx!R5Li7!+nr9#GIJ6j;W@>d3~C(HBn{cKnk|E%s?zh$ks8w zh5Ix^J<&aZ0nf4gCQ5HVHxo%eD{^*Oo1auIszK-M*Pq=(8*2n|bCCM4vwTfdK5nVx z4*lm03`T(o(^frdARON;Ri0n8zhK(hI*kmiW%_TMkd&hqCaEu7iJwV(!ZY7tpgXE; zN-fGtlcF&rWw4^(Gtyh<)1~-`bdj6RyNq$c2Oi-TWsuW@TMsWiyGPSkPuNb8t2)0r z$DjGGo^#xP{Gwq&!mpfAg`3{;G@B%_;~(V!y+1vR^on0u5AA z`xv4Q)__tnPlZ42*d?l4L%R1eBW7J#kAdzC!&~ACf^zj+azM&5iJ}!b#STo^&q&O) zlpX4yX*#%G#Tj~q9$=Up-Ox#JEmvk4q_k^*du>&h`XQFbd^u%%M&8gU!)!}!QaR0a z5x7!gFlK2+s=EIS$R@2Bd9+Mj%a3E8(M?fX>Mfv_Q1eZ?>y*O`#oQl#LEIw@_eYh_ zgk_$Q7A0|!ajLV1BPi$;T+L=6781YJQ=OHXRNh;b&O(}+o|C6O>oFelZ4k;ASsrsx zAg4$D3_~$1!WjR60ji{ic}dfDrGMaA#$s2a)KtqR%^CdaI4?6Ey8$_E!q&>}c}A}H zxQ|FZtf~u4i5bi7mWo?7FESL%kpna_BOH04=ZX1ndDMK~wLO8%=Jw53; z{s2RbZ&DWRf%m_6G~bpRD|?=8y_r1qXWq`hs>@%xSinSxJiq?nr?ipiAbU!P&%O5O zTZ%T)7*9bPiOhsOv_xrU33mEbqeh%Wm|1C5B&uCf8B$~;I&-> zg=oLfHZhB&_u)lFsGXG!EnmC#_Ry_&i|wn6Iht)myMV#Y<(9v+34!e^+uP3exqWBvcH|IGudM3p?c=zBDX?IZNvB5Dy`@>lgZt`a_z`2kxA1iY!XB^2?_`aVU( z(pae*&GBuEVYLjfL^Mr#gCbT|^Z$zveT@ILTr6G|q9UL&09AxaA5^;G#|W(mh|rF( z72yoRO9&kZ-$v*}=tg)3VLQSxgdv275x$J@RfIW&%?OVp3?Mv-u#9jE!fgl%gxe8v z2(Kah2w?`{(+H;!#t`m9co5-!ghvo&5e_08LRdn06hTKgjgUu}N7#!ng)ohfL3kO# zLbwB=gy0}}2s;pVBAh@tiSS8;yAbX{SVTx6Od#w=_zc2#5ne$!hwv?g&m(*R;W31# z5S~N$KEm?|FLXfV5d3s2TpEH)DR=|nXDF%ys<%J|!Msge1^83DQ0TX#MOjjIJb~X( zl%3)+rCo^L&Tn>hD&$(FNiXwWepoqR|t0MaUK(gVh^t0n}ygI;6SNvb~zce== AMgRZ+ diff --git a/src-rdpconfig/MainUnit.dcu b/src-rdpconfig/MainUnit.dcu deleted file mode 100644 index d82d48208264085a2109171f6ad6ca53be21ca9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12506 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 diff --git a/src-x86-binarymaster/src/rdpwrap.dproj.local b/src-x86-binarymaster/src/rdpwrap.dproj.local deleted file mode 100644 index b3811b7..0000000 --- a/src-x86-binarymaster/src/rdpwrap.dproj.local +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src-x86-binarymaster/src/rdpwrap.identcache b/src-x86-binarymaster/src/rdpwrap.identcache deleted file mode 100644 index 89a10bb6fbe3df8d302f06c64d3e091f08571a8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmZQ%U|>jcwu%WYPAw{qDFu=-F8Rr&xv6<2#W60aIRzP+3IRp=S*gh-#R?iZ`N@en znlV8x0pUf71u-e9WvMwa#YM@w6&7Z?Ntt)q=Q&r9bgr5%c^|0C?pS4=aX#jK$lji}nU7CtN;#H2*}orn&9G8W zW|7{fZC}$svD)gXMYXm%x}kDUx9a14^_aX0%4>&}{-mN7sJBl{SCK;EpI{Smx^V!j z8Y^H@{t2-y=V*#V zAe*8s-BCr}{iH3>i+A(4MuE2Avx(-?p6fiSU-#ac;B~=^b&q!T{HOP>=HXcW=9H2DpTQ;XGv`=cY+teR-vaSn^*SFrc74bgruG3!*5Ku7o!d^V?{&!kU|DIj{WIZW30 zJ&oV9*wqp_=^ZnMHWTaCR2@*is11IGXg93^dV0rf*CnoGz Date: Thu, 20 Nov 2014 17:54:20 +0300 Subject: [PATCH 005/208] Improved comments --- src-x86-binarymaster/src/rdpwrap.dpr | 1080 ++++++++------- src-x86-x64-Fusix/src/RDPWrap.cpp | 1923 ++++++++++++++------------ 2 files changed, 1566 insertions(+), 1437 deletions(-) diff --git a/src-x86-binarymaster/src/rdpwrap.dpr b/src-x86-binarymaster/src/rdpwrap.dpr index e3dfa91..d1b698d 100644 --- a/src-x86-binarymaster/src/rdpwrap.dpr +++ b/src-x86-binarymaster/src/rdpwrap.dpr @@ -16,124 +16,125 @@ library rdpwrap; -// RDP Wrapper Library project by Stas'M +{ RDP Wrapper Library project by Stas'M -// Terminal Services supported versions -// 6.0.X.X (Windows Vista, any) [policy hook only] -// 6.0.6000.16386 (Windows Vista) [policy hook + extended patch] -// 6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] -// 6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] -// 6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] -// 6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] -// 6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] -// 6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] -// 6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] -// 6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] -// 6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] -// 6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] -// 6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] -// 6.1.X.X (Windows 7, any) [policy hook only] -// 6.1.7600.16385 (Windows 7) [policy hook + extended patch] -// 6.1.7600.20890 (Windows 7 with KB2479710) [todo] -// 6.1.7600.21316 (Windows 7 with KB2750090) [todo] -// 6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] -// 6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] -// 6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] -// 6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] -// 6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] -// 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] -// 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] -// 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] -// 6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] -// 6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] -// 6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] -// 6.2.9200.16384 (Windows 8) [policy hook + extended patch] -// 6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] -// 6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] -// 6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] -// 6.3.9600.16384 (Windows 8.1) [init hook + extended patch] -// 6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] -// 6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] -// 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] -// 6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] -// 6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] +Terminal Services supported versions +6.0.X.X (Windows Vista, any) [policy hook only] +6.0.6000.16386 (Windows Vista) [policy hook + extended patch] +6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] +6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] +6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] +6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] +6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] +6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] +6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] +6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] +6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] +6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] +6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] +6.1.X.X (Windows 7, any) [policy hook only] +6.1.7600.16385 (Windows 7) [policy hook + extended patch] +6.1.7600.20890 (Windows 7 with KB2479710) [todo] +6.1.7600.21316 (Windows 7 with KB2750090) [todo] +6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] +6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] +6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] +6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] +6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] +6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] +6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] +6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] +6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] +6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] +6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] +6.2.9200.16384 (Windows 8) [policy hook + extended patch] +6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] +6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] +6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] +6.3.9600.16384 (Windows 8.1) [init hook + extended patch] +6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] +6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] +6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] +6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] +6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] -// Known failures -// 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) +Known failures +6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) -// Internal changelog: +Internal changelog: -// 2014.11.13 : -// - researching KB3003743 -// - added support for version 6.0.6002.19214 -// - added support for version 6.0.6002.23521 -// - added support for version 6.1.7601.18637 -// - added support for version 6.1.7601.22843 +2014.11.13 : +- researching KB3003743 +- added support for version 6.0.6002.19214 +- added support for version 6.0.6002.23521 +- added support for version 6.1.7601.18637 +- added support for version 6.1.7601.22843 -// 2014.11.02 : -// - researching termsrv.dll 6.4.9860.0 -// - done +2014.11.02 : +- researching termsrv.dll 6.4.9860.0 +- done -// 2014.10.19 : -// - added support for version 6.0.6000.16386 (x64) -// - added support for version 6.0.6001.18000 (x64) -// - added support for version 6.1.7600.16385 +2014.10.19 : +- added support for version 6.0.6000.16386 (x64) +- added support for version 6.0.6001.18000 (x64) +- added support for version 6.1.7600.16385 -// 2014.10.18 : -// - corrected some typos in source -// - simplified signature constants -// - added support for version 6.0.6000.16386 (x86) -// - added support for version 6.0.6001.18000 (x86) -// - added support for version 6.0.6002.18005 -// - added support for version 6.1.7601.17514 -// - added support for version 6.1.7601.18540 -// - added support for version 6.1.7601.22750 -// - added support for version 6.2.9200.17048 -// - added support for version 6.2.9200.21166 +2014.10.18 : +- corrected some typos in source +- simplified signature constants +- added support for version 6.0.6000.16386 (x86) +- added support for version 6.0.6001.18000 (x86) +- added support for version 6.0.6002.18005 +- added support for version 6.1.7601.17514 +- added support for version 6.1.7601.18540 +- added support for version 6.1.7601.22750 +- added support for version 6.2.9200.17048 +- added support for version 6.2.9200.21166 -// 2014.10.17 : -// - collecting information about all versions of Terminal Services beginning from Vista -// - added [todo] to the versions list +2014.10.17 : +- collecting information about all versions of Terminal Services beginning from Vista +- added [todo] to the versions list -// 2014.10.16 : -// - got new updates: KB2984972 for Win 7 (still works with 2 concurrent users) and KB2973501 for Win 8 (doesn't work) +2014.10.16 : +- got new updates: KB2984972 for Win 7 (still works with 2 concurrent users) and KB2973501 for Win 8 (doesn't work) -// 2014.10.02 : -// - researching Windows 10 TP Remote Desktop -// - done! even without debugging symbols ^^) +2014.10.02 : +- researching Windows 10 TP Remote Desktop +- done! even without debugging symbols ^^) -// 2014.07.20 : -// - added support for Windows 8 Release Preview -// - added support for Windows 8 Consumer Preview -// - added support for Windows 8 Developer Preview +2014.07.20 : +- added support for Windows 8 Release Preview +- added support for Windows 8 Consumer Preview +- added support for Windows 8 Developer Preview -// 2014.07.19 : -// - improved patching of Windows 8 -// - added policy patches -// - will patch CDefPolicy::Query -// - will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +2014.07.19 : +- improved patching of Windows 8 +- added policy patches +- will patch CDefPolicy::Query +- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -// 2014.07.18 : -// - researched patched files from MDL forum -// - CSLQuery::GetMaxSessions requires no patching -// - it's better to change the default policy, so... -// - will patch CDefPolicy::Query -// - will patch CEnforcementCore::GetInstanceOfTSLicense -// - will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -// - the function CSLQuery::Initialize is hooked correctly +2014.07.18 : +- researched patched files from MDL forum +- CSLQuery::GetMaxSessions requires no patching +- it's better to change the default policy, so... +- will patch CDefPolicy::Query +- will patch CEnforcementCore::GetInstanceOfTSLicense +- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +- the function CSLQuery::Initialize is hooked correctly -// 2014.07.17 : -// - will hook only CSLQuery::Initialize function -// - CSLQuery::GetMaxSessions will be patched -// - added x86 signatures for 6.3.9431.0 (Windows 8.1 Preview) +2014.07.17 : +- will hook only CSLQuery::Initialize function +- CSLQuery::GetMaxSessions will be patched +- added x86 signatures for 6.3.9431.0 (Windows 8.1 Preview) -// 2014.07.16 : -// - changing asm opcodes is bad, will hook CSL functions +2014.07.16 : +- changing asm opcodes is bad, will hook CSL functions -// 2014.07.15 : -// - added x86 signatures for 6.3.9600.16384 (Windows 8.1) -// 2014.07.15 : -// - added x86 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) +2014.07.15 : +- added x86 signatures for 6.3.9600.16384 (Windows 8.1) +2014.07.15 : +- added x86 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) +} uses SysUtils, @@ -229,301 +230,303 @@ const CDefPolicy_Query_eax_ecx: Array[0..11] of Byte = ($B8,$00,$01,$00,$00,$89,$81,$20,$03,$00,$00,$90); -// ------------------- TermService build 6.0.6000.16386 +{ +termsrv.dll 6.0.6000.16386 -// Original -// .text:6F335CD8 cmp edx, [ecx+320h] -// .text:6F335CDE pop esi -// .text:6F335CDF jz loc_6F3426F1 -//_______________ -// -// Changed -// .text:6F335CD8 mov edx, 100h -// .text:6F335CDD mov [ecx+320h], edx -// .text:6F335CE3 pop esi -// .text:6F335CE4 nop -// CDefPolicy_Query_edx_ecx +Original +.text:6F335CD8 cmp edx, [ecx+320h] +.text:6F335CDE pop esi +.text:6F335CDF jz loc_6F3426F1 +_______________ -// ------------------- TermService build 6.0.6001.18000 +Changed +.text:6F335CD8 mov edx, 100h +.text:6F335CDD mov [ecx+320h], edx +.text:6F335CE3 pop esi +.text:6F335CE4 nop +CDefPolicy_Query_edx_ecx -// Original -// .text:6E817FD8 cmp edx, [ecx+320h] -// .text:6E817FDE pop esi -// .text:6E817FDF jz loc_6E826F16 -//_______________ -// -// Changed -// .text:6E817FD8 mov edx, 100h -// .text:6E817FDD mov [ecx+320h], edx -// .text:6E817FE3 pop esi -// .text:6E817FE4 nop -// CDefPolicy_Query_edx_ecx +termsrv.dll 6.0.6001.18000 -// ------------------- TermService build 6.0.6002.18005 +Original +.text:6E817FD8 cmp edx, [ecx+320h] +.text:6E817FDE pop esi +.text:6E817FDF jz loc_6E826F16 +_______________ -// Original -// .text:6F5979C0 cmp edx, [ecx+320h] -// .text:6F5979C6 pop esi -// .text:6F5979C7 jz loc_6F5A6F26 -//_______________ -// -// Changed -// .text:6F5979C0 mov edx, 100h -// .text:6F5979C5 mov [ecx+320h], edx -// .text:6F5979CB pop esi -// .text:6F5979CC nop -// CDefPolicy_Query_edx_ecx +Changed +.text:6E817FD8 mov edx, 100h +.text:6E817FDD mov [ecx+320h], edx +.text:6E817FE3 pop esi +.text:6E817FE4 nop +CDefPolicy_Query_edx_ecx -// ------------------- TermService build 6.0.6002.19214 +termsrv.dll 6.0.6002.18005 -// Original -// .text:6F5979B8 cmp edx, [ecx+320h] -// .text:6F5979BE pop esi -// .text:6F5979BF jz loc_6F5A6F3E -//_______________ -// -// Changed -// .text:6F5979B8 mov edx, 100h -// .text:6F5979BD mov [ecx+320h], edx -// .text:6F5979C3 pop esi -// .text:6F5979C4 nop -// CDefPolicy_Query_edx_ecx +Original +.text:6F5979C0 cmp edx, [ecx+320h] +.text:6F5979C6 pop esi +.text:6F5979C7 jz loc_6F5A6F26 +_______________ -// ------------------- TermService build 6.0.6002.23521 +Changed +.text:6F5979C0 mov edx, 100h +.text:6F5979C5 mov [ecx+320h], edx +.text:6F5979CB pop esi +.text:6F5979CC nop +CDefPolicy_Query_edx_ecx -// Original -// .text:6F5979CC cmp edx, [ecx+320h] -// .text:6F5979D2 pop esi -// .text:6F5979D3 jz loc_6F5A6F2E -//_______________ -// -// Changed -// .text:6F5979CC mov edx, 100h -// .text:6F5979D1 mov [ecx+320h], edx -// .text:6F5979D7 pop esi -// .text:6F5979D8 nop -// CDefPolicy_Query_edx_ecx +termsrv.dll 6.0.6002.19214 -// ------------------- TermService build 6.1.7600.16385 +Original +.text:6F5979B8 cmp edx, [ecx+320h] +.text:6F5979BE pop esi +.text:6F5979BF jz loc_6F5A6F3E +_______________ -// Original -// .text:6F2F96F3 cmp eax, [esi+320h] -// .text:6F2F96F9 jz loc_6F30E256 -//_______________ -// -// Changed -// .text:6F2F96F3 mov eax, 100h -// .text:6F2F96F8 mov [esi+320h], eax -// .text:6F2F96FE nop -// CDefPolicy_Query_eax_esi +Changed +.text:6F5979B8 mov edx, 100h +.text:6F5979BD mov [ecx+320h], edx +.text:6F5979C3 pop esi +.text:6F5979C4 nop +CDefPolicy_Query_edx_ecx -// ------------------- TermService build 6.1.7601.17514 +termsrv.dll 6.0.6002.23521 -// Original -// .text:6F2F9D53 cmp eax, [esi+320h] -// .text:6F2F9D59 jz loc_6F30B25E -//_______________ -// -// Changed -// .text:6F2F9D53 mov eax, 100h -// .text:6F2F9D58 mov [esi+320h], eax -// .text:6F2F9D5E nop -// CDefPolicy_Query_eax_esi +Original +.text:6F5979CC cmp edx, [ecx+320h] +.text:6F5979D2 pop esi +.text:6F5979D3 jz loc_6F5A6F2E +_______________ -// ------------------- TermService build 6.1.7601.18540 +Changed +.text:6F5979CC mov edx, 100h +.text:6F5979D1 mov [ecx+320h], edx +.text:6F5979D7 pop esi +.text:6F5979D8 nop +CDefPolicy_Query_edx_ecx -// Original -// .text:6F2F9D9F cmp eax, [esi+320h] -// .text:6F2F9DA5 jz loc_6F30B2AE -//_______________ -// -// Changed -// .text:6F2F9D9F mov eax, 100h -// .text:6F2F9DA4 mov [esi+320h], eax -// .text:6F2F9DAA nop -// CDefPolicy_Query_eax_esi +termsrv.dll 6.1.7600.16385 -// ------------------- TermService build 6.1.7601.22750 +Original +.text:6F2F96F3 cmp eax, [esi+320h] +.text:6F2F96F9 jz loc_6F30E256 +_______________ -// Original -// .text:6F2F9E21 cmp eax, [esi+320h] -// .text:6F2F9E27 jz loc_6F30B6CE -//_______________ -// -// Changed -// .text:6F2F9E21 mov eax, 100h -// .text:6F2F9E26 mov [esi+320h], eax -// .text:6F2F9E2C nop -// CDefPolicy_Query_eax_esi +Changed +.text:6F2F96F3 mov eax, 100h +.text:6F2F96F8 mov [esi+320h], eax +.text:6F2F96FE nop +CDefPolicy_Query_eax_esi -// ------------------- TermService build 6.1.7601.18637 +termsrv.dll 6.1.7601.17514 -// Original -// .text:6F2F9DBB cmp eax, [esi+320h] -// .text:6F2F9DC1 jz loc_6F30B2A6 -//_______________ -// -// Changed -// .text:6F2F9DBB mov eax, 100h -// .text:6F2F9DC0 mov [esi+320h], eax -// .text:6F2F9DC6 nop -// CDefPolicy_Query_eax_esi +Original +.text:6F2F9D53 cmp eax, [esi+320h] +.text:6F2F9D59 jz loc_6F30B25E +_______________ -// ------------------- TermService build 6.1.7601.22843 +Changed +.text:6F2F9D53 mov eax, 100h +.text:6F2F9D58 mov [esi+320h], eax +.text:6F2F9D5E nop +CDefPolicy_Query_eax_esi -// Original -// .text:6F2F9E25 cmp eax, [esi+320h] -// .text:6F2F9E2B jz loc_6F30B6D6 -//_______________ -// -// Changed -// .text:6F2F9E25 mov eax, 100h -// .text:6F2F9E2A mov [esi+320h], eax -// .text:6F2F9E30 nop -// CDefPolicy_Query_eax_esi +termsrv.dll 6.1.7601.18540 -// ------------------- TermService build 6.2.8102.0 +Original +.text:6F2F9D9F cmp eax, [esi+320h] +.text:6F2F9DA5 jz loc_6F30B2AE +_______________ -// Original -// .text:1000E47C cmp eax, [esi+320h] -// .text:1000E482 jz loc_1002D775 -//_______________ -// -// Changed -// .text:1000E47C mov eax, 100h -// .text:1000E481 mov [esi+320h], eax -// .text:1000E487 nop -// CDefPolicy_Query_eax_esi +Changed +.text:6F2F9D9F mov eax, 100h +.text:6F2F9DA4 mov [esi+320h], eax +.text:6F2F9DAA nop +CDefPolicy_Query_eax_esi -// ------------------- TermService build 6.2.8250.0 +termsrv.dll 6.1.7601.22750 -// Original -// .text:10013520 cmp eax, [esi+320h] -// .text:10013526 jz loc_1002DB85 -//_______________ -// -// Changed -// .text:10013520 mov eax, 100h -// .text:10013525 mov [esi+320h], eax -// .text:1001352B nop -// CDefPolicy_Query_eax_esi +Original +.text:6F2F9E21 cmp eax, [esi+320h] +.text:6F2F9E27 jz loc_6F30B6CE +_______________ -// ------------------- TermService build 6.2.8400.0 +Changed +.text:6F2F9E21 mov eax, 100h +.text:6F2F9E26 mov [esi+320h], eax +.text:6F2F9E2C nop +CDefPolicy_Query_eax_esi -// Original -// .text:10013E48 cmp eax, [esi+320h] -// .text:10013E4E jz loc_1002E079 -//_______________ -// -// Changed -// .text:10013E48 mov eax, 100h -// .text:10013E4D mov [esi+320h], eax -// .text:10013E53 nop -// CDefPolicy_Query_eax_esi +termsrv.dll 6.1.7601.18637 -// ------------------- TermService build 6.2.9200.16384 +Original +.text:6F2F9DBB cmp eax, [esi+320h] +.text:6F2F9DC1 jz loc_6F30B2A6 +_______________ -// Original -// .text:10013F08 cmp eax, [esi+320h] -// .text:10013F0E jz loc_1002E161 -//_______________ -// -// Changed -// .text:10013F08 mov eax, 100h -// .text:10013F0D mov [esi+320h], eax -// .text:10013F13 nop -// CDefPolicy_Query_eax_esi +Changed +.text:6F2F9DBB mov eax, 100h +.text:6F2F9DC0 mov [esi+320h], eax +.text:6F2F9DC6 nop +CDefPolicy_Query_eax_esi -// ------------------- TermService build 6.2.9200.17048 +termsrv.dll 6.1.7601.22843 -// Original -// .text:1001F408 cmp eax, [esi+320h] -// .text:1001F40E jz loc_1002E201 -//_______________ -// -// Changed -// .text:1001F408 mov eax, 100h -// .text:1001F40D mov [esi+320h], eax -// .text:1001F413 nop -// CDefPolicy_Query_eax_esi +Original +.text:6F2F9E25 cmp eax, [esi+320h] +.text:6F2F9E2B jz loc_6F30B6D6 +_______________ -// ------------------- TermService build 6.2.9200.21166 +Changed +.text:6F2F9E25 mov eax, 100h +.text:6F2F9E2A mov [esi+320h], eax +.text:6F2F9E30 nop +CDefPolicy_Query_eax_esi -// Original -// .text:10013F30 cmp eax, [esi+320h] -// .text:10013F36 jz loc_1002E189 -//_______________ -// -// Changed -// .text:10013F30 mov eax, 100h -// .text:10013F35 mov [esi+320h], eax -// .text:10013F3B nop -// CDefPolicy_Query_eax_esi +termsrv.dll 6.2.8102.0 -// ------------------- TermService build 6.3.9431.0 +Original +.text:1000E47C cmp eax, [esi+320h] +.text:1000E482 jz loc_1002D775 +_______________ -// Original -// .text:1002EA25 cmp eax, [ecx+320h] -// .text:1002EA2B jz loc_100348C1 -//_______________ -// -// Changed -// .text:1002EA25 mov eax, 100h -// .text:1002EA2A mov [ecx+320h], eax -// .text:1002EA30 nop -// CDefPolicy_Query_eax_ecx +Changed +.text:1000E47C mov eax, 100h +.text:1000E481 mov [esi+320h], eax +.text:1000E487 nop +CDefPolicy_Query_eax_esi -// ------------------- TermService build 6.3.9600.16384 +termsrv.dll 6.2.8250.0 -// Original -// .text:10016115 cmp eax, [ecx+320h] -// .text:1001611B jz loc_10034DE1 -//_______________ -// -// Changed -// .text:10016115 mov eax, 100h -// .text:1001611A mov [ecx+320h], eax -// .text:10016120 nop -// CDefPolicy_Query_eax_ecx +Original +.text:10013520 cmp eax, [esi+320h] +.text:10013526 jz loc_1002DB85 +_______________ -// ------------------- TermService build 6.3.9600.17095 +Changed +.text:10013520 mov eax, 100h +.text:10013525 mov [esi+320h], eax +.text:1001352B nop +CDefPolicy_Query_eax_esi -// Original -// .text:10037529 cmp eax, [ecx+320h] -// .text:1003752F jz loc_10043662 -//_______________ -// -// Changed -// .text:10037529 mov eax, 100h -// .text:1003752E mov [ecx+320h], eax -// .text:10037534 nop -// CDefPolicy_Query_eax_ecx +termsrv.dll 6.2.8400.0 -// ------------------- TermService build 6.4.9841.0 +Original +.text:10013E48 cmp eax, [esi+320h] +.text:10013E4E jz loc_1002E079 +_______________ -// Original -// .text:1003B989 cmp eax, [ecx+320h] -// .text:1003B98F jz loc_1005E809 -//_______________ -// -// Changed -// .text:1003B989 mov eax, 100h -// .text:1003B98E mov [ecx+320h], eax -// .text:1003B994 nop -// CDefPolicy_Query_eax_ecx +Changed +.text:10013E48 mov eax, 100h +.text:10013E4D mov [esi+320h], eax +.text:10013E53 nop +CDefPolicy_Query_eax_esi -// ------------------- TermService build 6.4.9860.0 +termsrv.dll 6.2.9200.16384 -// Original -// .text:1003BEC9 cmp eax, [ecx+320h] -// .text:1003BECF jz loc_1005EE1A -//_______________ -// -// Changed -// .text:1003BEC9 mov eax, 100h -// .text:1003BECE mov [ecx+320h], eax -// .text:1003BED4 nop -// CDefPolicy_Query_eax_ecx +Original +.text:10013F08 cmp eax, [esi+320h] +.text:10013F0E jz loc_1002E161 +_______________ + +Changed +.text:10013F08 mov eax, 100h +.text:10013F0D mov [esi+320h], eax +.text:10013F13 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.9200.17048 + +Original +.text:1001F408 cmp eax, [esi+320h] +.text:1001F40E jz loc_1002E201 +_______________ + +Changed +.text:1001F408 mov eax, 100h +.text:1001F40D mov [esi+320h], eax +.text:1001F413 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.9200.21166 + +Original +.text:10013F30 cmp eax, [esi+320h] +.text:10013F36 jz loc_1002E189 +_______________ + +Changed +.text:10013F30 mov eax, 100h +.text:10013F35 mov [esi+320h], eax +.text:10013F3B nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.3.9431.0 + +Original +.text:1002EA25 cmp eax, [ecx+320h] +.text:1002EA2B jz loc_100348C1 +_______________ + +Changed +.text:1002EA25 mov eax, 100h +.text:1002EA2A mov [ecx+320h], eax +.text:1002EA30 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.3.9600.16384 + +Original +.text:10016115 cmp eax, [ecx+320h] +.text:1001611B jz loc_10034DE1 +_______________ + +Changed +.text:10016115 mov eax, 100h +.text:1001611A mov [ecx+320h], eax +.text:10016120 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.3.9600.17095 + +Original +.text:10037529 cmp eax, [ecx+320h] +.text:1003752F jz loc_10043662 +_______________ + +Changed +.text:10037529 mov eax, 100h +.text:1003752E mov [ecx+320h], eax +.text:10037534 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.4.9841.0 + +Original +.text:1003B989 cmp eax, [ecx+320h] +.text:1003B98F jz loc_1005E809 +_______________ + +Changed +.text:1003B989 mov eax, 100h +.text:1003B98E mov [ecx+320h], eax +.text:1003B994 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.4.9860.0 + +Original +.text:1003BEC9 cmp eax, [ecx+320h] +.text:1003BECF jz loc_1005EE1A +_______________ + +Changed +.text:1003BEC9 mov eax, 100h +.text:1003BECE mov [ecx+320h], eax +.text:1003BED4 nop +CDefPolicy_Query_eax_ecx +} var Stub_SLGetWindowsInformationDWORD: far_jmp; @@ -1074,13 +1077,14 @@ begin if (FV.Release = 6000) and (FV.Build = 16386) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F320000 - // .text:6F3360B9 lea eax, [ebp+VersionInformation] - // .text:6F3360BF inc ebx <- nop - // .text:6F3360C0 push eax ; lpVersionInformation - // .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F3360CB mov [esi], ebx - // .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F320000 + .text:6F3360B9 lea eax, [ebp+VersionInformation] + .text:6F3360BF inc ebx <- nop + .text:6F3360C0 push eax ; lpVersionInformation + .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F3360CB mov [esi], ebx + .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $160BF); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1092,13 +1096,14 @@ begin end; if (FV.Release = 6001) and (FV.Build = 18000) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6E800000 - // .text:6E8185DE lea eax, [ebp+VersionInformation] - // .text:6E8185E4 inc ebx <- nop - // .text:6E8185E5 push eax ; lpVersionInformation - // .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6E8185F0 mov [esi], ebx - // .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6E800000 + .text:6E8185DE lea eax, [ebp+VersionInformation] + .text:6E8185E4 inc ebx <- nop + .text:6E8185E5 push eax ; lpVersionInformation + .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6E8185F0 mov [esi], ebx + .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $185E4); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1110,13 +1115,14 @@ begin end; if (FV.Release = 6002) and (FV.Build = 18005) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F580000 - // .text:6F597FA2 lea eax, [ebp+VersionInformation] - // .text:6F597FA8 inc ebx <- nop - // .text:6F597FA9 push eax ; lpVersionInformation - // .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F597FB4 mov [esi], ebx - // .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F580000 + .text:6F597FA2 lea eax, [ebp+VersionInformation] + .text:6F597FA8 inc ebx <- nop + .text:6F597FA9 push eax ; lpVersionInformation + .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FB4 mov [esi], ebx + .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $17FA8); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1128,13 +1134,14 @@ begin end; if (FV.Release = 6002) and (FV.Build = 19214) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F580000 - // .text:6F597FBE lea eax, [ebp+VersionInformation] - // .text:6F597FC4 inc ebx <- nop - // .text:6F597FC5 push eax ; lpVersionInformation - // .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F597FD0 mov [esi], ebx - // .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F580000 + .text:6F597FBE lea eax, [ebp+VersionInformation] + .text:6F597FC4 inc ebx <- nop + .text:6F597FC5 push eax ; lpVersionInformation + .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FD0 mov [esi], ebx + .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $17FC4); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1146,13 +1153,14 @@ begin end; if (FV.Release = 6002) and (FV.Build = 23521) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F580000 - // .text:6F597FAE lea eax, [ebp+VersionInformation] - // .text:6F597FB4 inc ebx <- nop - // .text:6F597FB5 push eax ; lpVersionInformation - // .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F597FC0 mov [esi], ebx - // .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F580000 + .text:6F597FAE lea eax, [ebp+VersionInformation] + .text:6F597FB4 inc ebx <- nop + .text:6F597FB5 push eax ; lpVersionInformation + .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FC0 mov [esi], ebx + .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $17FB4); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1193,13 +1201,14 @@ begin if (FV.Release = 7600) and (FV.Build = 16385) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F2E0000 - // .text:6F2F9E1F lea eax, [ebp+VersionInformation] - // .text:6F2F9E25 inc ebx <- nop - // .text:6F2F9E26 push eax ; lpVersionInformation - // .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2F9E31 mov [esi], ebx - // .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F2E0000 + .text:6F2F9E1F lea eax, [ebp+VersionInformation] + .text:6F2F9E25 inc ebx <- nop + .text:6F2F9E26 push eax ; lpVersionInformation + .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2F9E31 mov [esi], ebx + .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $19E25); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1211,13 +1220,14 @@ begin end; if (FV.Release = 7601) and (FV.Build = 17514) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F2E0000 - // .text:6F2FA497 lea eax, [ebp+VersionInformation] - // .text:6F2FA49D inc ebx <- nop - // .text:6F2FA49E push eax ; lpVersionInformation - // .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA4A9 mov [esi], ebx - // .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F2E0000 + .text:6F2FA497 lea eax, [ebp+VersionInformation] + .text:6F2FA49D inc ebx <- nop + .text:6F2FA49E push eax ; lpVersionInformation + .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4A9 mov [esi], ebx + .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $1A49D); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1229,13 +1239,14 @@ begin end; if (FV.Release = 7601) and (FV.Build = 18540) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F2E0000 - // .text:6F2FA4DF lea eax, [ebp+VersionInformation] - // .text:6F2FA4E5 inc ebx <- nop - // .text:6F2FA4E6 push eax ; lpVersionInformation - // .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA4F1 mov [esi], ebx - // .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F2E0000 + .text:6F2FA4DF lea eax, [ebp+VersionInformation] + .text:6F2FA4E5 inc ebx <- nop + .text:6F2FA4E6 push eax ; lpVersionInformation + .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4F1 mov [esi], ebx + .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4E5); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1247,13 +1258,14 @@ begin end; if (FV.Release = 7601) and (FV.Build = 22750) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F2E0000 - // .text:6F2FA64F lea eax, [ebp+VersionInformation] - // .text:6F2FA655 inc ebx <- nop - // .text:6F2FA656 push eax ; lpVersionInformation - // .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA661 mov [esi], ebx - // .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1265,13 +1277,14 @@ begin end; if (FV.Release = 7601) and (FV.Build = 18637) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F2E0000 - // .text:6F2FA4D7 lea eax, [ebp+VersionInformation] - // .text:6F2FA4DD inc ebx <- nop - // .text:6F2FA4DE push eax ; lpVersionInformation - // .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA4E9 mov [esi], ebx - // .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F2E0000 + .text:6F2FA4D7 lea eax, [ebp+VersionInformation] + .text:6F2FA4DD inc ebx <- nop + .text:6F2FA4DE push eax ; lpVersionInformation + .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4E9 mov [esi], ebx + .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4DD); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1283,13 +1296,14 @@ begin end; if (FV.Release = 7601) and (FV.Build = 22843) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // Imagebase: 6F2E0000 - // .text:6F2FA64F lea eax, [ebp+VersionInformation] - // .text:6F2FA655 inc ebx <- nop - // .text:6F2FA656 push eax ; lpVersionInformation - // .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA661 mov [esi], ebx - // .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1319,12 +1333,14 @@ begin if (FV.Release = 8102) and (FV.Build = 0) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:1000F7E5 lea eax, [esp+150h+VersionInformation] - // .text:1000F7E9 inc esi <- nop - // .text:1000F7EA push eax ; lpVersionInformation - // .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1000F7F3 mov [edi], esi - // .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:1000F7E5 lea eax, [esp+150h+VersionInformation] + .text:1000F7E9 inc esi <- nop + .text:1000F7EA push eax ; lpVersionInformation + .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1000F7F3 mov [edi], esi + .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $F7E9); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1346,12 +1362,14 @@ begin end; if (FV.Release = 8250) and (FV.Build = 0) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:100159C5 lea eax, [esp+150h+VersionInformation] - // .text:100159C9 inc esi <- nop - // .text:100159CA push eax ; lpVersionInformation - // .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:100159D3 mov [edi], esi - // .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:100159C5 lea eax, [esp+150h+VersionInformation] + .text:100159C9 inc esi <- nop + .text:100159CA push eax ; lpVersionInformation + .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:100159D3 mov [edi], esi + .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $159C9); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1373,12 +1391,14 @@ begin end; if (FV.Release = 8400) and (FV.Build = 0) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:1001547E lea eax, [esp+150h+VersionInformation] - // .text:10015482 inc esi <- nop - // .text:10015483 push eax ; lpVersionInformation - // .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1001548C mov [edi], esi - // .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:1001547E lea eax, [esp+150h+VersionInformation] + .text:10015482 inc esi <- nop + .text:10015483 push eax ; lpVersionInformation + .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001548C mov [edi], esi + .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $15482); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1400,12 +1420,14 @@ begin end; if (FV.Release = 9200) and (FV.Build = 16384) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:1001554E lea eax, [esp+150h+VersionInformation] - // .text:10015552 inc esi <- nop - // .text:10015553 push eax ; lpVersionInformation - // .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1001555C mov [edi], esi - // .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:1001554E lea eax, [esp+150h+VersionInformation] + .text:10015552 inc esi <- nop + .text:10015553 push eax ; lpVersionInformation + .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001555C mov [edi], esi + .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $15552); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1427,12 +1449,14 @@ begin end; if (FV.Release = 9200) and (FV.Build = 17048) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:1002058E lea eax, [esp+150h+VersionInformation] - // .text:10020592 inc esi <- nop - // .text:10020593 push eax ; lpVersionInformation - // .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1002059C mov [edi], esi - // .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:1002058E lea eax, [esp+150h+VersionInformation] + .text:10020592 inc esi <- nop + .text:10020593 push eax ; lpVersionInformation + .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1002059C mov [edi], esi + .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $20592); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1454,12 +1478,14 @@ begin end; if (FV.Release = 9200) and (FV.Build = 21166) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:10015576 lea eax, [esp+150h+VersionInformation] - // .text:1001557A inc esi <- nop - // .text:1001557B push eax ; lpVersionInformation - // .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:10015584 mov [edi], esi - // .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:10015576 lea eax, [esp+150h+VersionInformation] + .text:1001557A inc esi <- nop + .text:1001557B push eax ; lpVersionInformation + .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:10015584 mov [edi], esi + .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $1557A); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1495,21 +1521,25 @@ begin if (FV.Release = 9431) and (FV.Build = 0) then begin WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - // .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:1008A609 test eax, eax - // .text:1008A60B js short loc_1008A628 - // .text:1008A60D cmp [ebp+var_8], 0 - // .text:1008A611 jz short loc_1008A628 <- jmp + { + .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:1008A609 test eax, eax + .text:1008A60B js short loc_1008A628 + .text:1008A60D cmp [ebp+var_8], 0 + .text:1008A611 jz short loc_1008A628 <- jmp + } SignPtr := Pointer(Cardinal(TermSrvBase) + $8A611); b := $EB; WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:100306A4 lea eax, [esp+150h+VersionInformation] - // .text:100306A8 inc ebx <- nop - // .text:100306A9 mov [edi], ebx - // .text:100306AB push eax ; lpVersionInformation - // .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:100306A4 lea eax, [esp+150h+VersionInformation] + .text:100306A8 inc ebx <- nop + .text:100306A9 mov [edi], ebx + .text:100306AB push eax ; lpVersionInformation + .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $306A8); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1529,21 +1559,25 @@ begin end; if (FV.Release = 9600) and (FV.Build = 16384) then begin WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - // .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:100A2721 test eax, eax - // .text:100A2723 js short loc_100A2740 - // .text:100A2725 cmp [ebp+var_8], 0 - // .text:100A2729 jz short loc_100A2740 <- jmp + { + .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A2721 test eax, eax + .text:100A2723 js short loc_100A2740 + .text:100A2725 cmp [ebp+var_8], 0 + .text:100A2729 jz short loc_100A2740 <- jmp + } SignPtr := Pointer(Cardinal(TermSrvBase) + $A2729); b := $EB; WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:10018024 lea eax, [esp+150h+VersionInformation] - // .text:10018028 inc ebx <- nop - // .text:10018029 mov [edi], ebx - // .text:1001802B push eax ; lpVersionInformation - // .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:10018024 lea eax, [esp+150h+VersionInformation] + .text:10018028 inc ebx <- nop + .text:10018029 mov [edi], ebx + .text:1001802B push eax ; lpVersionInformation + .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $18028); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1563,21 +1597,25 @@ begin end; if (FV.Release = 9600) and (FV.Build = 17095) then begin WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - // .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:100A36C9 test eax, eax - // .text:100A36CB js short loc_100A36E8 - // .text:100A36CD cmp [ebp+var_8], 0 - // .text:100A36D1 jz short loc_100A36E8 <- jmp + { + .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A36C9 test eax, eax + .text:100A36CB js short loc_100A36E8 + .text:100A36CD cmp [ebp+var_8], 0 + .text:100A36D1 jz short loc_100A36E8 <- jmp + } SignPtr := Pointer(Cardinal(TermSrvBase) + $A36D1); b := $EB; WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:10036BA5 lea eax, [esp+150h+VersionInformation] - // .text:10036BA9 inc ebx <- nop - // .text:10036BAA mov [edi], ebx - // .text:10036BAC push eax ; lpVersionInformation - // .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:10036BA5 lea eax, [esp+150h+VersionInformation] + .text:10036BA9 inc ebx <- nop + .text:10036BAA mov [edi], ebx + .text:10036BAC push eax ; lpVersionInformation + .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $36BA9); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1612,21 +1650,25 @@ begin if (FV.Release = 9841) and (FV.Build = 0) then begin WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - // .text:1009569B call sub_100B7EE5 - // .text:100956A0 test eax, eax - // .text:100956A2 js short loc_100956BF - // .text:100956A4 cmp [ebp+var_C], 0 - // .text:100956A8 jz short loc_100956BF <- jmp + { + .text:1009569B call sub_100B7EE5 + .text:100956A0 test eax, eax + .text:100956A2 js short loc_100956BF + .text:100956A4 cmp [ebp+var_C], 0 + .text:100956A8 jz short loc_100956BF <- jmp + } SignPtr := Pointer(Cardinal(TermSrvBase) + $956A8); b := $EB; WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:10030121 lea eax, [esp+150h+VersionInformation] - // .text:10030125 inc ebx <- nop - // .text:10030126 mov [edi], ebx - // .text:10030128 push eax ; lpVersionInformation - // .text:10030129 call ds:GetVersionExW + { + .text:10030121 lea eax, [esp+150h+VersionInformation] + .text:10030125 inc ebx <- nop + .text:10030126 mov [edi], ebx + .text:10030128 push eax ; lpVersionInformation + .text:10030129 call ds:GetVersionExW + } SignPtr := Pointer(Cardinal(TermSrvBase) + $30125); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); @@ -1647,21 +1689,25 @@ begin if (FV.Release = 9860) and (FV.Build = 0) then begin WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - // .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:100962C0 test eax, eax - // .text:100962C2 js short loc_100962DF - // .text:100962C4 cmp [ebp+var_C], 0 - // .text:100962C8 jz short loc_100962DF <- jmp + { + .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100962C0 test eax, eax + .text:100962C2 js short loc_100962DF + .text:100962C4 cmp [ebp+var_C], 0 + .text:100962C8 jz short loc_100962DF <- jmp + } SignPtr := Pointer(Cardinal(TermSrvBase) + $962C8); b := $EB; WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - // .text:10030841 lea eax, [esp+150h+VersionInformation] - // .text:10030845 inc ebx <- nop - // .text:10030846 mov [edi], ebx - // .text:10030848 push eax ; lpVersionInformation - // .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + { + .text:10030841 lea eax, [esp+150h+VersionInformation] + .text:10030845 inc ebx <- nop + .text:10030846 mov [edi], ebx + .text:10030848 push eax ; lpVersionInformation + .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } SignPtr := Pointer(Cardinal(TermSrvBase) + $30845); WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); diff --git a/src-x86-x64-Fusix/src/RDPWrap.cpp b/src-x86-x64-Fusix/src/RDPWrap.cpp index 375ae50..5b37c27 100644 --- a/src-x86-x64-Fusix/src/RDPWrap.cpp +++ b/src-x86-x64-Fusix/src/RDPWrap.cpp @@ -14,132 +14,125 @@ limitations under the License. */ -// RDPWrap C++ port by Fusix (Nikita Parshin) -// assisted by binarymaster (Stas'M) +/* RDP Wrapper Library project by Stas'M -// Terminal Services supported versions -// 6.0.X.X (Windows Vista, any) [policy hook only] -// 6.0.6000.16386 (Windows Vista) [policy hook + extended patch] -// 6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] -// 6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] -// 6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] -// 6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] -// 6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] -// 6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] -// 6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] -// 6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] -// 6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] -// 6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] -// 6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] -// 6.1.X.X (Windows 7, any) [policy hook only] -// 6.1.7600.16385 (Windows 7) [policy hook + extended patch] -// 6.1.7600.20890 (Windows 7 with KB2479710) [todo] -// 6.1.7600.21316 (Windows 7 with KB2750090) [todo] -// 6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] -// 6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] -// 6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] -// 6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] -// 6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] -// 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] -// 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] -// 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] -// 6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] -// 6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] -// 6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] -// 6.2.9200.16384 (Windows 8) [policy hook + extended patch] -// 6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] -// 6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] -// 6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] -// 6.3.9600.16384 (Windows 8.1) [init hook + extended patch] -// 6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] -// 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] -// 6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] +Terminal Services supported versions +6.0.X.X (Windows Vista, any) [policy hook only] +6.0.6000.16386 (Windows Vista) [policy hook + extended patch] +6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] +6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] +6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] +6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] +6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] +6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] +6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] +6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] +6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] +6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] +6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] +6.1.X.X (Windows 7, any) [policy hook only] +6.1.7600.16385 (Windows 7) [policy hook + extended patch] +6.1.7600.20890 (Windows 7 with KB2479710) [todo] +6.1.7600.21316 (Windows 7 with KB2750090) [todo] +6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] +6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] +6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] +6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] +6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] +6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] +6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] +6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] +6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] +6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] +6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] +6.2.9200.16384 (Windows 8) [policy hook + extended patch] +6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] +6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] +6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] +6.3.9600.16384 (Windows 8.1) [init hook + extended patch] +6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] +6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] +6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] +6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] +6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] -// Known failures -// 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) +Known failures +6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) -// Internal changelog: +Internal changelog: -// 2014.11.13 : -// - researching KB3003743 -// - added support for version 6.0.6002.19214 -// - added support for version 6.0.6002.23521 -// - added support for version 6.1.7601.18637 -// - added support for version 6.1.7601.22843 +2014.11.13 : +- researching KB3003743 +- added support for version 6.0.6002.19214 +- added support for version 6.0.6002.23521 +- added support for version 6.1.7601.18637 +- added support for version 6.1.7601.22843 -// 2014.11.02 : -// - researching termsrv.dll 6.4.9860.0 -// - done +2014.11.02 : +- researching termsrv.dll 6.4.9860.0 +- done -// 2014.10.19 : -// - added support for version 6.0.6000.16386 (x64) -// - added support for version 6.0.6001.18000 (x64) -// - added support for version 6.1.7600.16385 +2014.10.19 : +- added support for version 6.0.6000.16386 (x64) +- added support for version 6.0.6001.18000 (x64) +- added support for version 6.1.7600.16385 -// 2014.10.18 : -// - corrected some typos in source -// - simplified signature constants -// - added support for version 6.0.6000.16386 (x86) -// - added support for version 6.0.6001.18000 (x86) -// - added support for version 6.0.6002.18005 -// - added support for version 6.1.7601.17514 -// - added support for version 6.1.7601.18540 -// - added support for version 6.1.7601.22750 -// - added support for version 6.2.9200.17048 -// - added support for version 6.2.9200.21166 +2014.10.18 : +- corrected some typos in source +- simplified signature constants +- added support for version 6.0.6000.16386 (x86) +- added support for version 6.0.6001.18000 (x86) +- added support for version 6.0.6002.18005 +- added support for version 6.1.7601.17514 +- added support for version 6.1.7601.18540 +- added support for version 6.1.7601.22750 +- added support for version 6.2.9200.17048 +- added support for version 6.2.9200.21166 -// 2014.10.17 : -// - collecting information about all versions of Terminal Services beginning from Vista -// - added [todo] to the versions list +2014.10.17 : +- collecting information about all versions of Terminal Services beginning from Vista +- added [todo] to the versions list -// 2014.10.16 : -// - got new updates: KB2984972 for Win 7 (still works with 2 concurrent users) and KB2973501 for Win 8 (doesn't work) +2014.10.16 : +- got new updates: KB2984972 for Win 7 (still works with 2 concurrent users) and KB2973501 for Win 8 (doesn't work) -// 2014.10.02 : -// - researching Windows 10 TP Remote Desktop -// - done! even without debugging symbols ^^) +2014.10.02 : +- researching Windows 10 TP Remote Desktop +- done! even without debugging symbols ^^) -// 2014.07.25 : -// - added few comments about ARM platform for developers +2014.07.20 : +- added support for Windows 8 Release Preview +- added support for Windows 8 Consumer Preview +- added support for Windows 8 Developer Preview -// 2014.07.22 : -// - fixed bug in x64 signatures +2014.07.19 : +- improved patching of Windows 8 +- added policy patches +- will patch CDefPolicy::Query +- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -// 2014.07.20 : -// - added support for Windows 8 Release Preview -// - added support for Windows 8 Consumer Preview -// - added support for Windows 8 Developer Preview +2014.07.18 : +- researched patched files from MDL forum +- CSLQuery::GetMaxSessions requires no patching +- it's better to change the default policy, so... +- will patch CDefPolicy::Query +- will patch CEnforcementCore::GetInstanceOfTSLicense +- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +- the function CSLQuery::Initialize is hooked correctly -// 2014.07.19 : -// - improved patching of Windows 8 -// - added policy patches -// - will patch CDefPolicy::Query -// - will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +2014.07.17 : +- will hook only CSLQuery::Initialize function +- CSLQuery::GetMaxSessions will be patched +- added x86 signatures for 6.3.9431.0 (Windows 8.1 Preview) -// 2014.07.18 : -// - researched patched files from MDL forum -// - CSLQuery::GetMaxSessions requires no patching -// - it's better to change the default policy, so... -// - will patch CDefPolicy::Query -// - will patch CEnforcementCore::GetInstanceOfTSLicense -// - will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -// - the function CSLQuery::Initialize is hooked correctly +2014.07.16 : +- changing asm opcodes is bad, will hook CSL functions -// 2014.07.17 : -// - will hook only CSLQuery::Initialize function -// - CSLQuery::GetMaxSessions will be patched -// - added x86 signatures for 6.3.9431.0 (Windows 8.1 Preview) -// - added x64 signatures for 6.3.9431.0 (Windows 8.1 Preview) -// - just for check ^^) - -// 2014.07.16 : -// - changing asm opcodes is bad, will hook CSL functions - -// 2014.07.15 : -// - added x86 signatures for 6.3.9600.16384 (Windows 8.1) -// - added x64 signatures for 6.3.9600.16384 (Windows 8.1) -// - added x86 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) -// - added x64 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) +2014.07.15 : +- added x86 signatures for 6.3.9600.16384 (Windows 8.1) +2014.07.15 : +- added x86 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) +*/ #include "stdafx.h" @@ -173,301 +166,303 @@ char CDefPolicy_Query_eax_rcx_jmp[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, char CDefPolicy_Query_eax_rdi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x87, 0x38, 0x06, 0x00, 0x00, 0x90}; char CDefPolicy_Query_eax_rcx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x38, 0x06, 0x00, 0x00, 0x90}; -// termsrv.dll build 6.0.6000.16386 +/* +termsrv.dll 6.0.6000.16386 -// Original -// .text:000007FF7573C88F mov eax, [rcx+638h] -// .text:000007FF7573C895 cmp [rcx+63Ch], eax -// .text:000007FF7573C89B jnz short loc_7FF7573C8B3 -//_______________ -// -// Changed -// .text:000007FF7573C88F mov eax, 100h -// .text:000007FF7573C894 mov [rcx+638h], eax -// .text:000007FF7573C89A nop -// .text:000007FF7573C89B jmp short loc_7FF7573C8B3 -// char CDefPolicy_Query_eax_rcx_jmp[] +Original +.text:000007FF7573C88F mov eax, [rcx+638h] +.text:000007FF7573C895 cmp [rcx+63Ch], eax +.text:000007FF7573C89B jnz short loc_7FF7573C8B3 +_______________ -// termsrv.dll build 6.0.6001.18000 +Changed +.text:000007FF7573C88F mov eax, 100h +.text:000007FF7573C894 mov [rcx+638h], eax +.text:000007FF7573C89A nop +.text:000007FF7573C89B jmp short loc_7FF7573C8B3 +char CDefPolicy_Query_eax_rcx_jmp[] -// Original -// .text:000007FF76285BD7 mov eax, [rcx+638h] -// .text:000007FF76285BDD cmp [rcx+63Ch], eax -// .text:000007FF76285BE3 jnz short loc_7FF76285BFB -//_______________ -// -// Changed -// .text:000007FF76285BD7 mov eax, 100h -// .text:000007FF76285BDC mov [rcx+638h], eax -// .text:000007FF76285BE2 nop -// .text:000007FF76285BE3 jmp short loc_7FF76285BFB -// char CDefPolicy_Query_eax_rcx_jmp[] +termsrv.dll 6.0.6001.18000 -// termsrv.dll build 6.0.6002.18005 +Original +.text:000007FF76285BD7 mov eax, [rcx+638h] +.text:000007FF76285BDD cmp [rcx+63Ch], eax +.text:000007FF76285BE3 jnz short loc_7FF76285BFB +_______________ -// Original -// .text:000007FF76725E83 mov eax, [rcx+638h] -// .text:000007FF76725E89 cmp [rcx+63Ch], eax -// .text:000007FF76725E8F jz short loc_7FF76725EA7 -//_______________ -// -// Changed -// .text:000007FF76725E83 mov eax, 100h -// .text:000007FF76725E88 mov [rcx+638h], eax -// .text:000007FF76725E8E nop -// .text:000007FF76725E8F jmp short loc_7FF76725EA7 -// char CDefPolicy_Query_eax_rcx_jmp[] +Changed +.text:000007FF76285BD7 mov eax, 100h +.text:000007FF76285BDC mov [rcx+638h], eax +.text:000007FF76285BE2 nop +.text:000007FF76285BE3 jmp short loc_7FF76285BFB +char CDefPolicy_Query_eax_rcx_jmp[] -// termsrv.dll build 6.0.6002.19214 +termsrv.dll 6.0.6002.18005 -// Original -// .text:000007FF75B25FF7 mov eax, [rcx+638h] -// .text:000007FF75B25FFD cmp [rcx+63Ch], eax -// .text:000007FF75B26003 jnz short loc_7FF75B2601B -//_______________ -// -// Changed -// .text:000007FF75B25FF7 mov eax, 100h -// .text:000007FF75B25FFC mov [rcx+638h], eax -// .text:000007FF75B26002 nop -// .text:000007FF75B26003 jmp short loc_7FF75B2601B -// char CDefPolicy_Query_eax_rcx_jmp[] +Original +.text:000007FF76725E83 mov eax, [rcx+638h] +.text:000007FF76725E89 cmp [rcx+63Ch], eax +.text:000007FF76725E8F jz short loc_7FF76725EA7 +_______________ -// termsrv.dll build 6.0.6002.23521 +Changed +.text:000007FF76725E83 mov eax, 100h +.text:000007FF76725E88 mov [rcx+638h], eax +.text:000007FF76725E8E nop +.text:000007FF76725E8F jmp short loc_7FF76725EA7 +char CDefPolicy_Query_eax_rcx_jmp[] -// Original -// .text:000007FF75B269CB mov eax, [rcx+638h] -// .text:000007FF75B269D1 cmp [rcx+63Ch], eax -// .text:000007FF75B269D7 jnz short loc_7FF75B269EF -//_______________ -// -// Changed -// .text:000007FF75B269CB mov eax, 100h -// .text:000007FF75B269D0 mov [rcx+638h], eax -// .text:000007FF75B269D6 nop -// .text:000007FF75B269D7 jmp short loc_7FF75B269EF -// char CDefPolicy_Query_eax_rcx_jmp[] +termsrv.dll 6.0.6002.19214 -// termsrv.dll build 6.1.7600.16385 +Original +.text:000007FF75B25FF7 mov eax, [rcx+638h] +.text:000007FF75B25FFD cmp [rcx+63Ch], eax +.text:000007FF75B26003 jnz short loc_7FF75B2601B +_______________ -// Original -// .text:000007FF75A97AD2 cmp [rdi+63Ch], eax -// .text:000007FF75A97AD8 jz loc_7FF75AA4978 -//_______________ -// -// Changed -// .text:000007FF75A97AD2 mov eax, 100h -// .text:000007FF75A97AD7 mov [rdi+638h], eax -// .text:000007FF75A97ADD nop -// char CDefPolicy_Query_eax_rdi[] +Changed +.text:000007FF75B25FF7 mov eax, 100h +.text:000007FF75B25FFC mov [rcx+638h], eax +.text:000007FF75B26002 nop +.text:000007FF75B26003 jmp short loc_7FF75B2601B +char CDefPolicy_Query_eax_rcx_jmp[] -// termsrv.dll build 6.1.7601.17514 +termsrv.dll 6.0.6002.23521 -// Original -// .text:000007FF75A97D8A cmp [rdi+63Ch], eax -// .text:000007FF75A97D90 jz loc_7FF75AA40F4 -//_______________ -// -// Changed -// .text:000007FF75A97D8A mov eax, 100h -// .text:000007FF75A97D8F mov [rdi+638h], eax -// .text:000007FF75A97D95 nop -// char CDefPolicy_Query_eax_rdi[] +Original +.text:000007FF75B269CB mov eax, [rcx+638h] +.text:000007FF75B269D1 cmp [rcx+63Ch], eax +.text:000007FF75B269D7 jnz short loc_7FF75B269EF +_______________ -// termsrv.dll build 6.1.7601.18540 +Changed +.text:000007FF75B269CB mov eax, 100h +.text:000007FF75B269D0 mov [rcx+638h], eax +.text:000007FF75B269D6 nop +.text:000007FF75B269D7 jmp short loc_7FF75B269EF +char CDefPolicy_Query_eax_rcx_jmp[] -// Original -// .text:000007FF75A97C82 cmp [rdi+63Ch], eax -// .text:000007FF75A97C88 jz loc_7FF75AA3FBD -//_______________ -// -// Changed -// .text:000007FF75A97C82 mov eax, 100h -// .text:000007FF75A97C87 mov [rdi+638h], eax -// .text:000007FF75A97C8D nop -// char CDefPolicy_Query_eax_rdi[] +termsrv.dll 6.1.7600.16385 -// termsrv.dll build 6.1.7601.22750 +Original +.text:000007FF75A97AD2 cmp [rdi+63Ch], eax +.text:000007FF75A97AD8 jz loc_7FF75AA4978 +_______________ -// Original -// .text:000007FF75A97C92 cmp [rdi+63Ch], eax -// .text:000007FF75A97C98 jz loc_7FF75AA40A2 -//_______________ -// -// Changed -// .text:000007FF75A97C92 mov eax, 100h -// .text:000007FF75A97C97 mov [rdi+638h], eax -// .text:000007FF75A97C9D nop -// char CDefPolicy_Query_eax_rdi[] +Changed +.text:000007FF75A97AD2 mov eax, 100h +.text:000007FF75A97AD7 mov [rdi+638h], eax +.text:000007FF75A97ADD nop +char CDefPolicy_Query_eax_rdi[] -// termsrv.dll build 6.1.7601.18637 +termsrv.dll 6.1.7601.17514 -// Original -// .text:000007FF75A97DC6 cmp [rdi+63Ch], eax -// .text:000007FF75A97DCC jz loc_7FF75AA40BD -//_______________ -// -// Changed -// .text:000007FF75A97DC6 mov eax, 100h -// .text:000007FF75A97DCB mov [rdi+638h], eax -// .text:000007FF75A97DD1 nop -// char CDefPolicy_Query_eax_rdi[] +Original +.text:000007FF75A97D8A cmp [rdi+63Ch], eax +.text:000007FF75A97D90 jz loc_7FF75AA40F4 +_______________ -// termsrv.dll build 6.1.7601.22843 +Changed +.text:000007FF75A97D8A mov eax, 100h +.text:000007FF75A97D8F mov [rdi+638h], eax +.text:000007FF75A97D95 nop +char CDefPolicy_Query_eax_rdi[] -// Original -// .text:000007FF75A97D6E cmp [rdi+63Ch], eax -// .text:000007FF75A97D74 jz loc_7FF75AA4182 -//_______________ -// -// Changed -// .text:000007FF75A97D6E mov eax, 100h -// .text:000007FF75A97D73 mov [rdi+638h], eax -// .text:000007FF75A97D79 nop -// char CDefPolicy_Query_eax_rdi[] +termsrv.dll 6.1.7601.18540 -// termsrv.dll build 6.2.8102.0 +Original +.text:000007FF75A97C82 cmp [rdi+63Ch], eax +.text:000007FF75A97C88 jz loc_7FF75AA3FBD +_______________ -// Original -// .text:000000018000D3E6 cmp [rdi+63Ch], eax -// .text:000000018000D3EC jz loc_180027792 -//_______________ -// -// Changed -// .text:000000018000D3E6 mov eax, 100h -// .text:000000018000D3EB mov [rdi+638h], eax -// .text:000000018000D3F1 nop -// char CDefPolicy_Query_eax_rdi[] +Changed +.text:000007FF75A97C82 mov eax, 100h +.text:000007FF75A97C87 mov [rdi+638h], eax +.text:000007FF75A97C8D nop +char CDefPolicy_Query_eax_rdi[] -// termsrv.dll build 6.2.8250.0 +termsrv.dll 6.1.7601.22750 -// Original -// .text:000000018001187A cmp [rdi+63Ch], eax -// .text:0000000180011880 jz loc_1800273A2 -//_______________ -// -// Changed -// .text:000000018001187A mov eax, 100h -// .text:000000018001187F mov [rdi+638h], eax -// .text:0000000180011885 nop -// char CDefPolicy_Query_eax_rdi[] +Original +.text:000007FF75A97C92 cmp [rdi+63Ch], eax +.text:000007FF75A97C98 jz loc_7FF75AA40A2 +_______________ -// termsrv.dll build 6.2.8400.0 +Changed +.text:000007FF75A97C92 mov eax, 100h +.text:000007FF75A97C97 mov [rdi+638h], eax +.text:000007FF75A97C9D nop +char CDefPolicy_Query_eax_rdi[] -// Original -// .text:000000018001F102 cmp [rdi+63Ch], eax -// .text:000000018001F108 jz loc_18003A02E -//_______________ -// -// Changed -// .text:000000018001F102 mov eax, 100h -// .text:000000018001F107 mov [rdi+638h], eax -// .text:000000018001F10D nop -// char CDefPolicy_Query_eax_rdi[] +termsrv.dll 6.1.7601.18637 -// termsrv.dll build 6.2.9200.16384 +Original +.text:000007FF75A97DC6 cmp [rdi+63Ch], eax +.text:000007FF75A97DCC jz loc_7FF75AA40BD +_______________ -// Original -// .text:000000018002A31A cmp [rdi+63Ch], eax -// .text:000000018002A320 jz loc_18003A0F9 -//_______________ -// -// Changed -// .text:000000018002A31A mov eax, 100h -// .text:000000018002A31F mov [rdi+638h], eax -// .text:000000018002A325 nop -// char CDefPolicy_Query_eax_rdi[] +Changed +.text:000007FF75A97DC6 mov eax, 100h +.text:000007FF75A97DCB mov [rdi+638h], eax +.text:000007FF75A97DD1 nop +char CDefPolicy_Query_eax_rdi[] -// termsrv.dll build 6.2.9200.17048 +termsrv.dll 6.1.7601.22843 -// Original -// .text:000000018001F206 cmp [rdi+63Ch], eax -// .text:000000018001F20C jz loc_18003A1B4 -//_______________ -// -// Changed -// .text:000000018001F206 mov eax, 100h -// .text:000000018001F20B mov [rdi+638h], eax -// .text:000000018001F211 nop -// char CDefPolicy_Query_eax_rdi[] +Original +.text:000007FF75A97D6E cmp [rdi+63Ch], eax +.text:000007FF75A97D74 jz loc_7FF75AA4182 +_______________ -// termsrv.dll build 6.2.9200.21166 +Changed +.text:000007FF75A97D6E mov eax, 100h +.text:000007FF75A97D73 mov [rdi+638h], eax +.text:000007FF75A97D79 nop +char CDefPolicy_Query_eax_rdi[] -// Original -// .text:000000018002A3B6 cmp [rdi+63Ch], eax -// .text:000000018002A3BC jz loc_18003A174 -//_______________ -// -// Changed -// .text:000000018002A3B6 mov eax, 100h -// .text:000000018002A3BB mov [rdi+638h], eax -// .text:000000018002A3C1 nop -// char CDefPolicy_Query_eax_rdi[] +termsrv.dll 6.2.8102.0 -// termsrv.dll build 6.3.9431.0 +Original +.text:000000018000D3E6 cmp [rdi+63Ch], eax +.text:000000018000D3EC jz loc_180027792 +_______________ -// Original -// .text:00000001800350FD cmp [rcx+63Ch], eax -// .text:0000000180035103 jz loc_18004F6AE -//_______________ -// -// Changed -// .text:00000001800350FD mov eax, 100h -// .text:0000000180035102 mov [rcx+638h], eax -// .text:0000000180035108 nop -// char CDefPolicy_Query_eax_rcx[] +Changed +.text:000000018000D3E6 mov eax, 100h +.text:000000018000D3EB mov [rdi+638h], eax +.text:000000018000D3F1 nop +char CDefPolicy_Query_eax_rdi[] -// termsrv.dll build 6.3.9600.16384 +termsrv.dll 6.2.8250.0 -// Original -// .text:0000000180057829 cmp [rcx+63Ch], eax -// .text:000000018005782F jz loc_18005E850 -//_______________ -// -// Changed -// .text:0000000180057829 mov eax, 100h -// .text:000000018005782E mov [rcx+638h], eax -// .text:0000000180057834 nop -// char CDefPolicy_Query_eax_rcx[] +Original +.text:000000018001187A cmp [rdi+63Ch], eax +.text:0000000180011880 jz loc_1800273A2 +_______________ -// termsrv.dll build 6.3.9600.17095 +Changed +.text:000000018001187A mov eax, 100h +.text:000000018001187F mov [rdi+638h], eax +.text:0000000180011885 nop +char CDefPolicy_Query_eax_rdi[] -// Original -// .text:000000018001F6A1 cmp [rcx+63Ch], eax -// .text:000000018001F6A7 jz loc_18007284B -//_______________ -// -// Changed -// .text:000000018001F6A1 mov eax, 100h -// .text:000000018001F6A6 mov [rcx+638h], eax -// .text:000000018001F6AC nop -// char CDefPolicy_Query_eax_rcx[] +termsrv.dll 6.2.8400.0 -// termsrv.dll build 6.4.9841.0 +Original +.text:000000018001F102 cmp [rdi+63Ch], eax +.text:000000018001F108 jz loc_18003A02E +_______________ -// Original -// .text:000000018000C125 cmp [rcx+63Ch], eax -// .text:000000018000C12B jz sub_18003BABC -//_______________ -// -// Changed -// .text:000000018000C125 mov eax, 100h -// .text:000000018000C12A mov [rcx+638h], eax -// .text:000000018000C130 nop -// char CDefPolicy_Query_eax_rcx[] +Changed +.text:000000018001F102 mov eax, 100h +.text:000000018001F107 mov [rdi+638h], eax +.text:000000018001F10D nop +char CDefPolicy_Query_eax_rdi[] -// termsrv.dll build 6.4.9860.0 +termsrv.dll 6.2.9200.16384 -// Original -// .text:000000018000B9F5 cmp [rcx+63Ch], eax -// .text:000000018000B9FB jz sub_18003B9C8 -//_______________ -// -// Changed -// .text:000000018000B9F5 mov eax, 100h -// .text:000000018000B9FA mov [rcx+638h], eax -// .text:000000018000BA00 nop -// char CDefPolicy_Query_eax_rcx[] +Original +.text:000000018002A31A cmp [rdi+63Ch], eax +.text:000000018002A320 jz loc_18003A0F9 +_______________ + +Changed +.text:000000018002A31A mov eax, 100h +.text:000000018002A31F mov [rdi+638h], eax +.text:000000018002A325 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.9200.17048 + +Original +.text:000000018001F206 cmp [rdi+63Ch], eax +.text:000000018001F20C jz loc_18003A1B4 +_______________ + +Changed +.text:000000018001F206 mov eax, 100h +.text:000000018001F20B mov [rdi+638h], eax +.text:000000018001F211 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.9200.21166 + +Original +.text:000000018002A3B6 cmp [rdi+63Ch], eax +.text:000000018002A3BC jz loc_18003A174 +_______________ + +Changed +.text:000000018002A3B6 mov eax, 100h +.text:000000018002A3BB mov [rdi+638h], eax +.text:000000018002A3C1 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.3.9431.0 + +Original +.text:00000001800350FD cmp [rcx+63Ch], eax +.text:0000000180035103 jz loc_18004F6AE +_______________ + +Changed +.text:00000001800350FD mov eax, 100h +.text:0000000180035102 mov [rcx+638h], eax +.text:0000000180035108 nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.3.9600.16384 + +Original +.text:0000000180057829 cmp [rcx+63Ch], eax +.text:000000018005782F jz loc_18005E850 +_______________ + +Changed +.text:0000000180057829 mov eax, 100h +.text:000000018005782E mov [rcx+638h], eax +.text:0000000180057834 nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.3.9600.17095 + +Original +.text:000000018001F6A1 cmp [rcx+63Ch], eax +.text:000000018001F6A7 jz loc_18007284B +_______________ + +Changed +.text:000000018001F6A1 mov eax, 100h +.text:000000018001F6A6 mov [rcx+638h], eax +.text:000000018001F6AC nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.4.9841.0 + +Original +.text:000000018000C125 cmp [rcx+63Ch], eax +.text:000000018000C12B jz sub_18003BABC +_______________ + +Changed +.text:000000018000C125 mov eax, 100h +.text:000000018000C12A mov [rcx+638h], eax +.text:000000018000C130 nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.4.9860.0 + +Original +.text:000000018000B9F5 cmp [rcx+63Ch], eax +.text:000000018000B9FB jz sub_18003B9C8 +_______________ + +Changed +.text:000000018000B9F5 mov eax, 100h +.text:000000018000B9FA mov [rcx+638h], eax +.text:000000018000BA00 nop +char CDefPolicy_Query_eax_rcx[] +*/ #else typedef unsigned long PLATFORM_DWORD; @@ -482,301 +477,303 @@ char CDefPolicy_Query_edx_ecx[] = {0xBA, 0x00, 0x01, 0x00, 0x00, 0x89, 0x91, 0x2 char CDefPolicy_Query_eax_esi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x86, 0x20, 0x03, 0x00, 0x00, 0x90}; char CDefPolicy_Query_eax_ecx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x20, 0x03, 0x00, 0x00, 0x90}; -// termsrv.dll build 6.0.6000.16386 +/* +termsrv.dll 6.0.6000.16386 -// Original -// .text:6F335CD8 cmp edx, [ecx+320h] -// .text:6F335CDE pop esi -// .text:6F335CDF jz loc_6F3426F1 -//_______________ -// -// Changed -// .text:6F335CD8 mov edx, 100h -// .text:6F335CDD mov [ecx+320h], edx -// .text:6F335CE3 pop esi -// .text:6F335CE4 nop -// char CDefPolicy_Query_edx_ecx[] +Original +.text:6F335CD8 cmp edx, [ecx+320h] +.text:6F335CDE pop esi +.text:6F335CDF jz loc_6F3426F1 +_______________ -// termsrv.dll build 6.0.6001.18000 +Changed +.text:6F335CD8 mov edx, 100h +.text:6F335CDD mov [ecx+320h], edx +.text:6F335CE3 pop esi +.text:6F335CE4 nop +char CDefPolicy_Query_edx_ecx[] -// Original -// .text:6E817FD8 cmp edx, [ecx+320h] -// .text:6E817FDE pop esi -// .text:6E817FDF jz loc_6E826F16 -//_______________ -// -// Changed -// .text:6E817FD8 mov edx, 100h -// .text:6E817FDD mov [ecx+320h], edx -// .text:6E817FE3 pop esi -// .text:6E817FE4 nop -// char CDefPolicy_Query_edx_ecx[] +termsrv.dll 6.0.6001.18000 -// termsrv.dll build 6.0.6002.18005 +Original +.text:6E817FD8 cmp edx, [ecx+320h] +.text:6E817FDE pop esi +.text:6E817FDF jz loc_6E826F16 +_______________ -// Original -// .text:6F5979C0 cmp edx, [ecx+320h] -// .text:6F5979C6 pop esi -// .text:6F5979C7 jz loc_6F5A6F26 -//_______________ -// -// Changed -// .text:6F5979C0 mov edx, 100h -// .text:6F5979C5 mov [ecx+320h], edx -// .text:6F5979CB pop esi -// .text:6F5979CC nop -// char CDefPolicy_Query_edx_ecx[] +Changed +.text:6E817FD8 mov edx, 100h +.text:6E817FDD mov [ecx+320h], edx +.text:6E817FE3 pop esi +.text:6E817FE4 nop +char CDefPolicy_Query_edx_ecx[] -// termsrv.dll build 6.0.6002.19214 +termsrv.dll 6.0.6002.18005 -// Original -// .text:6F5979B8 cmp edx, [ecx+320h] -// .text:6F5979BE pop esi -// .text:6F5979BF jz loc_6F5A6F3E -//_______________ -// -// Changed -// .text:6F5979B8 mov edx, 100h -// .text:6F5979BD mov [ecx+320h], edx -// .text:6F5979C3 pop esi -// .text:6F5979C4 nop -// char CDefPolicy_Query_edx_ecx[] +Original +.text:6F5979C0 cmp edx, [ecx+320h] +.text:6F5979C6 pop esi +.text:6F5979C7 jz loc_6F5A6F26 +_______________ -// termsrv.dll build 6.0.6002.23521 +Changed +.text:6F5979C0 mov edx, 100h +.text:6F5979C5 mov [ecx+320h], edx +.text:6F5979CB pop esi +.text:6F5979CC nop +char CDefPolicy_Query_edx_ecx[] -// Original -// .text:6F5979CC cmp edx, [ecx+320h] -// .text:6F5979D2 pop esi -// .text:6F5979D3 jz loc_6F5A6F2E -//_______________ -// -// Changed -// .text:6F5979CC mov edx, 100h -// .text:6F5979D1 mov [ecx+320h], edx -// .text:6F5979D7 pop esi -// .text:6F5979D8 nop -// char CDefPolicy_Query_edx_ecx[] +termsrv.dll 6.0.6002.19214 -// termsrv.dll build 6.1.7600.16385 +Original +.text:6F5979B8 cmp edx, [ecx+320h] +.text:6F5979BE pop esi +.text:6F5979BF jz loc_6F5A6F3E +_______________ -// Original -// .text:6F2F96F3 cmp eax, [esi+320h] -// .text:6F2F96F9 jz loc_6F30E256 -//_______________ -// -// Changed -// .text:6F2F96F3 mov eax, 100h -// .text:6F2F96F8 mov [esi+320h], eax -// .text:6F2F96FE nop -// char CDefPolicy_Query_eax_esi[] +Changed +.text:6F5979B8 mov edx, 100h +.text:6F5979BD mov [ecx+320h], edx +.text:6F5979C3 pop esi +.text:6F5979C4 nop +char CDefPolicy_Query_edx_ecx[] -// termsrv.dll build 6.1.7601.17514 +termsrv.dll 6.0.6002.23521 -// Original -// .text:6F2F9D53 cmp eax, [esi+320h] -// .text:6F2F9D59 jz loc_6F30B25E -//_______________ -// -// Changed -// .text:6F2F9D53 mov eax, 100h -// .text:6F2F9D58 mov [esi+320h], eax -// .text:6F2F9D5E nop -// char CDefPolicy_Query_eax_esi[] +Original +.text:6F5979CC cmp edx, [ecx+320h] +.text:6F5979D2 pop esi +.text:6F5979D3 jz loc_6F5A6F2E +_______________ -// termsrv.dll build 6.1.7601.18540 +Changed +.text:6F5979CC mov edx, 100h +.text:6F5979D1 mov [ecx+320h], edx +.text:6F5979D7 pop esi +.text:6F5979D8 nop +char CDefPolicy_Query_edx_ecx[] -// Original -// .text:6F2F9D9F cmp eax, [esi+320h] -// .text:6F2F9DA5 jz loc_6F30B2AE -//_______________ -// -// Changed -// .text:6F2F9D9F mov eax, 100h -// .text:6F2F9DA4 mov [esi+320h], eax -// .text:6F2F9DAA nop -// char CDefPolicy_Query_eax_esi[] +termsrv.dll 6.1.7600.16385 -// termsrv.dll build 6.1.7601.22750 +Original +.text:6F2F96F3 cmp eax, [esi+320h] +.text:6F2F96F9 jz loc_6F30E256 +_______________ -// Original -// .text:6F2F9E21 cmp eax, [esi+320h] -// .text:6F2F9E27 jz loc_6F30B6CE -//_______________ -// -// Changed -// .text:6F2F9E21 mov eax, 100h -// .text:6F2F9E26 mov [esi+320h], eax -// .text:6F2F9E2C nop -// char CDefPolicy_Query_eax_esi[] +Changed +.text:6F2F96F3 mov eax, 100h +.text:6F2F96F8 mov [esi+320h], eax +.text:6F2F96FE nop +char CDefPolicy_Query_eax_esi[] -// termsrv.dll build 6.1.7601.18637 +termsrv.dll 6.1.7601.17514 -// Original -// .text:6F2F9DBB cmp eax, [esi+320h] -// .text:6F2F9DC1 jz loc_6F30B2A6 -//_______________ -// -// Changed -// .text:6F2F9DBB mov eax, 100h -// .text:6F2F9DC0 mov [esi+320h], eax -// .text:6F2F9DC6 nop -// char CDefPolicy_Query_eax_esi[] +Original +.text:6F2F9D53 cmp eax, [esi+320h] +.text:6F2F9D59 jz loc_6F30B25E +_______________ -// termsrv.dll build 6.1.7601.22843 +Changed +.text:6F2F9D53 mov eax, 100h +.text:6F2F9D58 mov [esi+320h], eax +.text:6F2F9D5E nop +char CDefPolicy_Query_eax_esi[] -// Original -// .text:6F2F9E25 cmp eax, [esi+320h] -// .text:6F2F9E2B jz loc_6F30B6D6 -//_______________ -// -// Changed -// .text:6F2F9E25 mov eax, 100h -// .text:6F2F9E2A mov [esi+320h], eax -// .text:6F2F9E30 nop -// char CDefPolicy_Query_eax_esi[] +termsrv.dll 6.1.7601.18540 -// termsrv.dll build 6.2.8102.0 +Original +.text:6F2F9D9F cmp eax, [esi+320h] +.text:6F2F9DA5 jz loc_6F30B2AE +_______________ -// Original -// .text:1000E47C cmp eax, [esi+320h] -// .text:1000E482 jz loc_1002D775 -//_______________ -// -// Changed -// .text:1000E47C mov eax, 100h -// .text:1000E481 mov [esi+320h], eax -// .text:1000E487 nop -// char CDefPolicy_Query_eax_esi[] +Changed +.text:6F2F9D9F mov eax, 100h +.text:6F2F9DA4 mov [esi+320h], eax +.text:6F2F9DAA nop +char CDefPolicy_Query_eax_esi[] -// termsrv.dll build 6.2.8250.0 +termsrv.dll 6.1.7601.22750 -// Original -// .text:10013520 cmp eax, [esi+320h] -// .text:10013526 jz loc_1002DB85 -//_______________ -// -// Changed -// .text:10013520 mov eax, 100h -// .text:10013525 mov [esi+320h], eax -// .text:1001352B nop -// char CDefPolicy_Query_eax_esi[] +Original +.text:6F2F9E21 cmp eax, [esi+320h] +.text:6F2F9E27 jz loc_6F30B6CE +_______________ -// termsrv.dll build 6.2.8400.0 +Changed +.text:6F2F9E21 mov eax, 100h +.text:6F2F9E26 mov [esi+320h], eax +.text:6F2F9E2C nop +char CDefPolicy_Query_eax_esi[] -// Original -// .text:10013E48 cmp eax, [esi+320h] -// .text:10013E4E jz loc_1002E079 -//_______________ -// -// Changed -// .text:10013E48 mov eax, 100h -// .text:10013E4D mov [esi+320h], eax -// .text:10013E53 nop -// char CDefPolicy_Query_eax_esi[] +termsrv.dll 6.1.7601.18637 -// termsrv.dll build 6.2.9200.16384 +Original +.text:6F2F9DBB cmp eax, [esi+320h] +.text:6F2F9DC1 jz loc_6F30B2A6 +_______________ -// Original -// .text:10013F08 cmp eax, [esi+320h] -// .text:10013F0E jz loc_1002E161 -//_______________ -// -// Changed -// .text:10013F08 mov eax, 100h -// .text:10013F0D mov [esi+320h], eax -// .text:10013F13 nop -// char CDefPolicy_Query_eax_esi[] +Changed +.text:6F2F9DBB mov eax, 100h +.text:6F2F9DC0 mov [esi+320h], eax +.text:6F2F9DC6 nop +char CDefPolicy_Query_eax_esi[] -// termsrv.dll build 6.2.9200.17048 +termsrv.dll 6.1.7601.22843 -// Original -// .text:1001F408 cmp eax, [esi+320h] -// .text:1001F40E jz loc_1002E201 -//_______________ -// -// Changed -// .text:1001F408 mov eax, 100h -// .text:1001F40D mov [esi+320h], eax -// .text:1001F413 nop -// char CDefPolicy_Query_eax_esi[] +Original +.text:6F2F9E25 cmp eax, [esi+320h] +.text:6F2F9E2B jz loc_6F30B6D6 +_______________ -// termsrv.dll build 6.2.9200.21166 +Changed +.text:6F2F9E25 mov eax, 100h +.text:6F2F9E2A mov [esi+320h], eax +.text:6F2F9E30 nop +char CDefPolicy_Query_eax_esi[] -// Original -// .text:10013F30 cmp eax, [esi+320h] -// .text:10013F36 jz loc_1002E189 -//_______________ -// -// Changed -// .text:10013F30 mov eax, 100h -// .text:10013F35 mov [esi+320h], eax -// .text:10013F3B nop -// char CDefPolicy_Query_eax_esi[] +termsrv.dll 6.2.8102.0 -// termsrv.dll build 6.3.9431.0 +Original +.text:1000E47C cmp eax, [esi+320h] +.text:1000E482 jz loc_1002D775 +_______________ -// Original -// .text:1002EA25 cmp eax, [ecx+320h] -// .text:1002EA2B jz loc_100348C1 -//_______________ -// -// Changed -// .text:1002EA25 mov eax, 100h -// .text:1002EA2A mov [ecx+320h], eax -// .text:1002EA30 nop -// char CDefPolicy_Query_eax_ecx[] +Changed +.text:1000E47C mov eax, 100h +.text:1000E481 mov [esi+320h], eax +.text:1000E487 nop +char CDefPolicy_Query_eax_esi[] -// termsrv.dll build 6.3.9600.16384 +termsrv.dll 6.2.8250.0 -// Original -// .text:10016115 cmp eax, [ecx+320h] -// .text:1001611B jz loc_10034DE1 -//_______________ -// -// Changed -// .text:10016115 mov eax, 100h -// .text:1001611A mov [ecx+320h], eax -// .text:10016120 nop -// char CDefPolicy_Query_eax_ecx[] +Original +.text:10013520 cmp eax, [esi+320h] +.text:10013526 jz loc_1002DB85 +_______________ -// termsrv.dll build 6.3.9600.17095 +Changed +.text:10013520 mov eax, 100h +.text:10013525 mov [esi+320h], eax +.text:1001352B nop +char CDefPolicy_Query_eax_esi[] -// Original -// .text:10037529 cmp eax, [ecx+320h] -// .text:1003752F jz loc_10043662 -//_______________ -// -// Changed -// .text:10037529 mov eax, 100h -// .text:1003752E mov [ecx+320h], eax -// .text:10037534 nop -// char CDefPolicy_Query_eax_ecx[] +termsrv.dll 6.2.8400.0 -// termsrv.dll build 6.4.9841.0 +Original +.text:10013E48 cmp eax, [esi+320h] +.text:10013E4E jz loc_1002E079 +_______________ -// Original -// .text:1003B989 cmp eax, [ecx+320h] -// .text:1003B98F jz loc_1005E809 -//_______________ -// -// Changed -// .text:1003B989 mov eax, 100h -// .text:1003B98E mov [ecx+320h], eax -// .text:1003B994 nop -// char CDefPolicy_Query_eax_ecx[] +Changed +.text:10013E48 mov eax, 100h +.text:10013E4D mov [esi+320h], eax +.text:10013E53 nop +char CDefPolicy_Query_eax_esi[] -// termsrv.dll build 6.4.9860.0 +termsrv.dll 6.2.9200.16384 -// Original -// .text:1003BEC9 cmp eax, [ecx+320h] -// .text:1003BECF jz loc_1005EE1A -//_______________ -// -// Changed -// .text:1003BEC9 mov eax, 100h -// .text:1003BECE mov [ecx+320h], eax -// .text:1003BED4 nop -// char CDefPolicy_Query_eax_ecx[] +Original +.text:10013F08 cmp eax, [esi+320h] +.text:10013F0E jz loc_1002E161 +_______________ + +Changed +.text:10013F08 mov eax, 100h +.text:10013F0D mov [esi+320h], eax +.text:10013F13 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.9200.17048 + +Original +.text:1001F408 cmp eax, [esi+320h] +.text:1001F40E jz loc_1002E201 +_______________ + +Changed +.text:1001F408 mov eax, 100h +.text:1001F40D mov [esi+320h], eax +.text:1001F413 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.9200.21166 + +Original +.text:10013F30 cmp eax, [esi+320h] +.text:10013F36 jz loc_1002E189 +_______________ + +Changed +.text:10013F30 mov eax, 100h +.text:10013F35 mov [esi+320h], eax +.text:10013F3B nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.3.9431.0 + +Original +.text:1002EA25 cmp eax, [ecx+320h] +.text:1002EA2B jz loc_100348C1 +_______________ + +Changed +.text:1002EA25 mov eax, 100h +.text:1002EA2A mov [ecx+320h], eax +.text:1002EA30 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.3.9600.16384 + +Original +.text:10016115 cmp eax, [ecx+320h] +.text:1001611B jz loc_10034DE1 +_______________ + +Changed +.text:10016115 mov eax, 100h +.text:1001611A mov [ecx+320h], eax +.text:10016120 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.3.9600.17095 + +Original +.text:10037529 cmp eax, [ecx+320h] +.text:1003752F jz loc_10043662 +_______________ + +Changed +.text:10037529 mov eax, 100h +.text:1003752E mov [ecx+320h], eax +.text:10037534 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.4.9841.0 + +Original +.text:1003B989 cmp eax, [ecx+320h] +.text:1003B98F jz loc_1005E809 +_______________ + +Changed +.text:1003B989 mov eax, 100h +.text:1003B98E mov [ecx+320h], eax +.text:1003B994 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.4.9860.0 + +Original +.text:1003BEC9 cmp eax, [ecx+320h] +.text:1003BECF jz loc_1005EE1A +_______________ + +Changed +.text:1003BEC9 mov eax, 100h +.text:1003BECE mov [ecx+320h], eax +.text:1003BED4 nop +char CDefPolicy_Query_eax_ecx[] +*/ #endif @@ -1446,22 +1443,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF756E0000 - // .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75745E3D mov ebx, 1 <- 0 - // .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75745E4A mov [rdi], ebx - // .text:000007FF75745E4C call cs:__imp_GetVersionExW + /* Imagebase: 7FF756E0000 + .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75745E3D mov ebx, 1 <- 0 + .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75745E4A mov [rdi], ebx + .text:000007FF75745E4C call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65E3E); b = 0; #else - // Imagebase: 6F320000 - // .text:6F3360B9 lea eax, [ebp+VersionInformation] - // .text:6F3360BF inc ebx <- nop - // .text:6F3360C0 push eax ; lpVersionInformation - // .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F3360CB mov [esi], ebx - // .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F320000 + .text:6F3360B9 lea eax, [ebp+VersionInformation] + .text:6F3360BF inc ebx <- nop + .text:6F3360C0 push eax ; lpVersionInformation + .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F3360CB mov [esi], ebx + .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x160BF); b = 0x90; #endif @@ -1480,22 +1479,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF76220000 - // .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF76290DB9 mov ebx, 1 <- 0 - // .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF76290DC6 mov [rdi], ebx - // .text:000007FF76290DC8 call cs:__imp_GetVersionExW + /* Imagebase: 7FF76220000 + .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF76290DB9 mov ebx, 1 <- 0 + .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF76290DC6 mov [rdi], ebx + .text:000007FF76290DC8 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70DBA); b = 0; #else - // Imagebase: 6E800000 - // .text:6E8185DE lea eax, [ebp+VersionInformation] - // .text:6E8185E4 inc ebx <- nop - // .text:6E8185E5 push eax ; lpVersionInformation - // .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6E8185F0 mov [esi], ebx - // .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6E800000 + .text:6E8185DE lea eax, [ebp+VersionInformation] + .text:6E8185E4 inc ebx <- nop + .text:6E8185E5 push eax ; lpVersionInformation + .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6E8185F0 mov [esi], ebx + .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x185E4); b = 0x90; #endif @@ -1514,22 +1515,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF766C0000 - // .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF76730FF5 mov ebx, 1 <- 0 - // .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF76731002 mov [rdi], ebx - // .text:000007FF76731004 call cs:__imp_GetVersionExW + /* Imagebase: 7FF766C0000 + .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF76730FF5 mov ebx, 1 <- 0 + .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF76731002 mov [rdi], ebx + .text:000007FF76731004 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70FF6); b = 0; #else - // Imagebase: 6F580000 - // .text:6F597FA2 lea eax, [ebp+VersionInformation] - // .text:6F597FA8 inc ebx <- nop - // .text:6F597FA9 push eax ; lpVersionInformation - // .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F597FB4 mov [esi], ebx - // .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F580000 + .text:6F597FA2 lea eax, [ebp+VersionInformation] + .text:6F597FA8 inc ebx <- nop + .text:6F597FA9 push eax ; lpVersionInformation + .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FB4 mov [esi], ebx + .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FA8); b = 0x90; #endif @@ -1548,22 +1551,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75AC0000 - // .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75B312A9 mov ebx, 1 <- 0 - // .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75B312B6 mov [rdi], ebx - // .text:000007FF75B312B8 call cs:__imp_GetVersionExW + /* Imagebase: 7FF75AC0000 + .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75B312A9 mov ebx, 1 <- 0 + .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75B312B6 mov [rdi], ebx + .text:000007FF75B312B8 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x712AA); b = 0; #else - // Imagebase: 6F580000 - // .text:6F597FBE lea eax, [ebp+VersionInformation] - // .text:6F597FC4 inc ebx <- nop - // .text:6F597FC5 push eax ; lpVersionInformation - // .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F597FD0 mov [esi], ebx - // .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F580000 + .text:6F597FBE lea eax, [ebp+VersionInformation] + .text:6F597FC4 inc ebx <- nop + .text:6F597FC5 push eax ; lpVersionInformation + .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FD0 mov [esi], ebx + .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FC4); b = 0x90; #endif @@ -1582,22 +1587,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75AC0000 - // .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75B31EA9 mov ebx, 1 <- 0 - // .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75B31EB6 mov [rdi], ebx - // .text:000007FF75B31EB8 call cs:__imp_GetVersionExW + /* Imagebase: 7FF75AC0000 + .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75B31EA9 mov ebx, 1 <- 0 + .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75B31EB6 mov [rdi], ebx + .text:000007FF75B31EB8 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x71EAA); b = 0; #else - // Imagebase: 6F580000 - // .text:6F597FAE lea eax, [ebp+VersionInformation] - // .text:6F597FB4 inc ebx <- nop - // .text:6F597FB5 push eax ; lpVersionInformation - // .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F597FC0 mov [esi], ebx - // .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F580000 + .text:6F597FAE lea eax, [ebp+VersionInformation] + .text:6F597FB4 inc ebx <- nop + .text:6F597FB5 push eax ; lpVersionInformation + .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FC0 mov [esi], ebx + .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FB4); b = 0x90; #endif @@ -1653,22 +1660,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75A80000 - // .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75A97D95 mov ebx, 1 <- 0 - // .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75A97DA2 mov [rdi], ebx - // .text:000007FF75A97DA4 call cs:__imp_GetVersionExW + /* Imagebase: 7FF75A80000 + .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A97D95 mov ebx, 1 <- 0 + .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A97DA2 mov [rdi], ebx + .text:000007FF75A97DA4 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D96); b = 0; #else - // Imagebase: 6F2E0000 - // .text:6F2F9E1F lea eax, [ebp+VersionInformation] - // .text:6F2F9E25 inc ebx <- nop - // .text:6F2F9E26 push eax ; lpVersionInformation - // .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2F9E31 mov [esi], ebx - // .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F2E0000 + .text:6F2F9E1F lea eax, [ebp+VersionInformation] + .text:6F2F9E25 inc ebx <- nop + .text:6F2F9E26 push eax ; lpVersionInformation + .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2F9E31 mov [esi], ebx + .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E25); b = 0x90; #endif @@ -1687,22 +1696,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75A80000 - // .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75A980E1 mov ebx, 1 <- 0 - // .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75A980EE mov [rdi], ebx - // .text:000007FF75A980F0 call cs:__imp_GetVersionExW + /* Imagebase: 7FF75A80000 + .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A980E1 mov ebx, 1 <- 0 + .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A980EE mov [rdi], ebx + .text:000007FF75A980F0 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180E2); b = 0; #else - // Imagebase: 6F2E0000 - // .text:6F2FA497 lea eax, [ebp+VersionInformation] - // .text:6F2FA49D inc ebx <- nop - // .text:6F2FA49E push eax ; lpVersionInformation - // .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA4A9 mov [esi], ebx - // .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F2E0000 + .text:6F2FA497 lea eax, [ebp+VersionInformation] + .text:6F2FA49D inc ebx <- nop + .text:6F2FA49E push eax ; lpVersionInformation + .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4A9 mov [esi], ebx + .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A49D); b = 0x90; #endif @@ -1721,22 +1732,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75A80000 - // .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75A98005 mov ebx, 1 <- 0 - // .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75A98012 mov [rdi], ebx - // .text:000007FF75A98014 call cs:__imp_GetVersionExW + /* Imagebase: 7FF75A80000 + .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A98005 mov ebx, 1 <- 0 + .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A98012 mov [rdi], ebx + .text:000007FF75A98014 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18006); b = 0; #else - // Imagebase: 6F2E0000 - // .text:6F2FA4DF lea eax, [ebp+VersionInformation] - // .text:6F2FA4E5 inc ebx <- nop - // .text:6F2FA4E6 push eax ; lpVersionInformation - // .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA4F1 mov [esi], ebx - // .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F2E0000 + .text:6F2FA4DF lea eax, [ebp+VersionInformation] + .text:6F2FA4E5 inc ebx <- nop + .text:6F2FA4E6 push eax ; lpVersionInformation + .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4F1 mov [esi], ebx + .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4E5); b = 0x90; #endif @@ -1755,22 +1768,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75A80000 - // .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75A97E8D mov ebx, 1 <- 0 - // .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75A97E9A mov [rdi], ebx - // .text:000007FF75A97E9C call cs:__imp_GetVersionExW + /* Imagebase: 7FF75A80000 + .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A97E8D mov ebx, 1 <- 0 + .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A97E9A mov [rdi], ebx + .text:000007FF75A97E9C call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17E8E); b = 0; #else - // Imagebase: 6F2E0000 - // .text:6F2FA64F lea eax, [ebp+VersionInformation] - // .text:6F2FA655 inc ebx <- nop - // .text:6F2FA656 push eax ; lpVersionInformation - // .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA661 mov [esi], ebx - // .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); b = 0x90; #endif @@ -1789,22 +1804,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75A80000 - // .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75A980F9 mov ebx, 1 <- 0 - // .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75A98106 mov [rdi], ebx - // .text:000007FF75A98108 call cs:__imp_GetVersionExW + /* Imagebase: 7FF75A80000 + .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A980F9 mov ebx, 1 <- 0 + .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A98106 mov [rdi], ebx + .text:000007FF75A98108 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180FA); b = 0; #else - // Imagebase: 6F2E0000 - // .text:6F2FA4D7 lea eax, [ebp+VersionInformation] - // .text:6F2FA4DD inc ebx <- nop - // .text:6F2FA4DE push eax ; lpVersionInformation - // .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA4E9 mov [esi], ebx - // .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F2E0000 + .text:6F2FA4D7 lea eax, [ebp+VersionInformation] + .text:6F2FA4DD inc ebx <- nop + .text:6F2FA4DE push eax ; lpVersionInformation + .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4E9 mov [esi], ebx + .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4DD); b = 0x90; #endif @@ -1823,22 +1840,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // Imagebase: 7FF75A80000 - // .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - // .text:000007FF75A97F95 mov ebx, 1 <- 0 - // .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000007FF75A97FA2 mov [rdi], ebx - // .text:000007FF75A97FA4 call cs:__imp_GetVersionExW + /* Imagebase: 7FF75A80000 + .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A97F95 mov ebx, 1 <- 0 + .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A97FA2 mov [rdi], ebx + .text:000007FF75A97FA4 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17F96); b = 0; #else - // Imagebase: 6F2E0000 - // .text:6F2FA64F lea eax, [ebp+VersionInformation] - // .text:6F2FA655 inc ebx <- nop - // .text:6F2FA656 push eax ; lpVersionInformation - // .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:6F2FA661 mov [esi], ebx - // .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); b = 0x90; #endif @@ -1877,20 +1896,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - // .text:000000018000D83F mov ebx, 1 <- 0 - // .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000000018000D84C mov [rdi], ebx - // .text:000000018000D84E call cs:__imp_GetVersionExW + /* + .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:000000018000D83F mov ebx, 1 <- 0 + .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018000D84C mov [rdi], ebx + .text:000000018000D84E call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xD840); b = 0; #else - // .text:1000F7E5 lea eax, [esp+150h+VersionInformation] - // .text:1000F7E9 inc esi <- nop - // .text:1000F7EA push eax ; lpVersionInformation - // .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1000F7F3 mov [edi], esi - // .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:1000F7E5 lea eax, [esp+150h+VersionInformation] + .text:1000F7E9 inc esi <- nop + .text:1000F7EA push eax ; lpVersionInformation + .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1000F7F3 mov [edi], esi + .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xF7E9); b = 0x90; #endif @@ -1925,20 +1948,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - // .text:0000000180011E73 mov ebx, 1 <- 0 - // .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:0000000180011E80 mov [rdi], ebx - // .text:0000000180011E82 call cs:__imp_GetVersionExW + /* + .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:0000000180011E73 mov ebx, 1 <- 0 + .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180011E80 mov [rdi], ebx + .text:0000000180011E82 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11E74); b = 0; #else - // .text:100159C5 lea eax, [esp+150h+VersionInformation] - // .text:100159C9 inc esi <- nop - // .text:100159CA push eax ; lpVersionInformation - // .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:100159D3 mov [edi], esi - // .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:100159C5 lea eax, [esp+150h+VersionInformation] + .text:100159C9 inc esi <- nop + .text:100159CA push eax ; lpVersionInformation + .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:100159D3 mov [edi], esi + .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x159C9); b = 0x90; #endif @@ -1973,20 +2000,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - // .text:0000000180020823 mov ebx, 1 <- 0 - // .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:0000000180020830 mov [rdi], ebx - // .text:0000000180020832 call cs:__imp_GetVersionExW + /* + .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:0000000180020823 mov ebx, 1 <- 0 + .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180020830 mov [rdi], ebx + .text:0000000180020832 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20824); b = 0; #else - // .text:1001547E lea eax, [esp+150h+VersionInformation] - // .text:10015482 inc esi <- nop - // .text:10015483 push eax ; lpVersionInformation - // .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1001548C mov [edi], esi - // .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:1001547E lea eax, [esp+150h+VersionInformation] + .text:10015482 inc esi <- nop + .text:10015483 push eax ; lpVersionInformation + .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001548C mov [edi], esi + .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15482); b = 0x90; #endif @@ -2021,20 +2052,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - // .text:000000018002BAA7 mov ebx, 1 <- 0 - // .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000000018002BAB4 mov [rdi], ebx - // .text:000000018002BAB6 call cs:__imp_GetVersionExW + /* + .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:000000018002BAA7 mov ebx, 1 <- 0 + .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018002BAB4 mov [rdi], ebx + .text:000000018002BAB6 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAA8); b = 0; #else - // .text:1001554E lea eax, [esp+150h+VersionInformation] - // .text:10015552 inc esi <- nop - // .text:10015553 push eax ; lpVersionInformation - // .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1001555C mov [edi], esi - // .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:1001554E lea eax, [esp+150h+VersionInformation] + .text:10015552 inc esi <- nop + .text:10015553 push eax ; lpVersionInformation + .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001555C mov [edi], esi + .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15552); b = 0x90; #endif @@ -2080,20 +2115,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - // .text:0000000180020947 mov ebx, 1 <- 0 - // .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:0000000180020954 mov [rdi], ebx - // .text:0000000180020956 call cs:__imp_GetVersionExW + /* + .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:0000000180020947 mov ebx, 1 <- 0 + .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180020954 mov [rdi], ebx + .text:0000000180020956 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20948); b = 0; #else - // .text:1002058E lea eax, [esp+150h+VersionInformation] - // .text:10020592 inc esi <- nop - // .text:10020593 push eax ; lpVersionInformation - // .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:1002059C mov [edi], esi - // .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:1002058E lea eax, [esp+150h+VersionInformation] + .text:10020592 inc esi <- nop + .text:10020593 push eax ; lpVersionInformation + .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1002059C mov [edi], esi + .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20592); b = 0x90; #endif @@ -2128,20 +2167,24 @@ void Hook() { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - // .text:000000018002BAF7 mov ebx, 1 <- 0 - // .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000000018002BB04 mov [rdi], ebx - // .text:000000018002BB06 call cs:__imp_GetVersionExW + /* + .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:000000018002BAF7 mov ebx, 1 <- 0 + .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018002BB04 mov [rdi], ebx + .text:000000018002BB06 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAF8); b = 0; #else - // .text:10015576 lea eax, [esp+150h+VersionInformation] - // .text:1001557A inc esi <- nop - // .text:1001557B push eax ; lpVersionInformation - // .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:10015584 mov [edi], esi - // .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:10015576 lea eax, [esp+150h+VersionInformation] + .text:1001557A inc esi <- nop + .text:1001557B push eax ; lpVersionInformation + .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:10015584 mov [edi], esi + .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1557A); b = 0x90; #endif @@ -2192,18 +2235,22 @@ void Hook() { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); #ifdef _WIN64 - // .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:000000018009F718 test eax, eax - // .text:000000018009F71A js short loc_18009F73B - // .text:000000018009F71C cmp [rsp+48h+arg_18], 0 - // .text:000000018009F721 jz short loc_18009F73B <- jmp + /* + .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:000000018009F718 test eax, eax + .text:000000018009F71A js short loc_18009F73B + .text:000000018009F71C cmp [rsp+48h+arg_18], 0 + .text:000000018009F721 jz short loc_18009F73B <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x9F721); #else - // .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:1008A609 test eax, eax - // .text:1008A60B js short loc_1008A628 - // .text:1008A60D cmp [ebp+var_8], 0 - // .text:1008A611 jz short loc_1008A628 <- jmp + /* + .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:1008A609 test eax, eax + .text:1008A60B js short loc_1008A628 + .text:1008A60D cmp [ebp+var_8], 0 + .text:1008A611 jz short loc_1008A628 <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x8A611); #endif b = 0xEB; @@ -2211,19 +2258,23 @@ void Hook() WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - // .text:00000001800367F8 mov ebx, 1 <- 0 - // .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:0000000180036805 mov [rdi], ebx - // .text:0000000180036807 call cs:__imp_GetVersionExW + /* + .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:00000001800367F8 mov ebx, 1 <- 0 + .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180036805 mov [rdi], ebx + .text:0000000180036807 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x367F9); b = 0; #else - // .text:100306A4 lea eax, [esp+150h+VersionInformation] - // .text:100306A8 inc ebx <- nop - // .text:100306A9 mov [edi], ebx - // .text:100306AB push eax ; lpVersionInformation - // .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:100306A4 lea eax, [esp+150h+VersionInformation] + .text:100306A8 inc ebx <- nop + .text:100306A9 mov [edi], ebx + .text:100306AB push eax ; lpVersionInformation + .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x306A8); b = 0x90; #endif @@ -2258,8 +2309,10 @@ void Hook() { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); #ifdef _WIN64 - // .text:000000018008181F cmp [rsp+48h+arg_18], 0 - // .text:0000000180081824 jz loc_180031DEF <- nop + jmp + /* + .text:000000018008181F cmp [rsp+48h+arg_18], 0 + .text:0000000180081824 jz loc_180031DEF <- nop + jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81824); b = 0x90; WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); @@ -2267,11 +2320,13 @@ void Hook() b = 0xE9; WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); #else - // .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:100A2721 test eax, eax - // .text:100A2723 js short loc_100A2740 - // .text:100A2725 cmp [ebp+var_8], 0 - // .text:100A2729 jz short loc_100A2740 <- jmp + /* + .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A2721 test eax, eax + .text:100A2723 js short loc_100A2740 + .text:100A2725 cmp [ebp+var_8], 0 + .text:100A2729 jz short loc_100A2740 <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA2729); b = 0xEB; WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); @@ -2279,19 +2334,23 @@ void Hook() WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - // .text:0000000180020240 mov ebx, 1 <- 0 - // .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:000000018002024D mov [rdi], ebx - // .text:000000018002024F call cs:__imp_GetVersionExW + /* + .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180020240 mov ebx, 1 <- 0 + .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018002024D mov [rdi], ebx + .text:000000018002024F call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20241); b = 0; #else - // .text:10018024 lea eax, [esp+150h+VersionInformation] - // .text:10018028 inc ebx <- nop - // .text:10018029 mov [edi], ebx - // .text:1001802B push eax ; lpVersionInformation - // .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:10018024 lea eax, [esp+150h+VersionInformation] + .text:10018028 inc ebx <- nop + .text:10018029 mov [edi], ebx + .text:1001802B push eax ; lpVersionInformation + .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18028); b = 0x90; #endif @@ -2326,18 +2385,22 @@ void Hook() { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); #ifdef _WIN64 - // .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:00000001800B9150 test eax, eax - // .text:00000001800B9152 js short loc_1800B9173 - // .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 - // .text:00000001800B9159 jz short loc_1800B9173 <- jmp + /* + .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:00000001800B9150 test eax, eax + .text:00000001800B9152 js short loc_1800B9173 + .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 + .text:00000001800B9159 jz short loc_1800B9173 <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xB9159); #else - // .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:100A36C9 test eax, eax - // .text:100A36CB js short loc_100A36E8 - // .text:100A36CD cmp [ebp+var_8], 0 - // .text:100A36D1 jz short loc_100A36E8 <- jmp + /* + .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A36C9 test eax, eax + .text:100A36CB js short loc_100A36E8 + .text:100A36CD cmp [ebp+var_8], 0 + .text:100A36D1 jz short loc_100A36E8 <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA36D1); #endif b = 0xEB; @@ -2345,19 +2408,23 @@ void Hook() WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - // .text:0000000180021828 mov ebx, 1 <- 0 - // .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:0000000180021835 mov [rdi], ebx - // .text:0000000180021837 call cs:__imp_GetVersionExW + /* + .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180021828 mov ebx, 1 <- 0 + .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180021835 mov [rdi], ebx + .text:0000000180021837 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21829); b = 0; #else - // .text:10036BA5 lea eax, [esp+150h+VersionInformation] - // .text:10036BA9 inc ebx <- nop - // .text:10036BAA mov [edi], ebx - // .text:10036BAC push eax ; lpVersionInformation - // .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:10036BA5 lea eax, [esp+150h+VersionInformation] + .text:10036BA9 inc ebx <- nop + .text:10036BAA mov [edi], ebx + .text:10036BAC push eax ; lpVersionInformation + .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x36BA9); b = 0x90; #endif @@ -2408,18 +2475,22 @@ void Hook() { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); #ifdef _WIN64 - // .text:0000000180081133 call sub_1800A9048 - // .text:0000000180081138 test eax, eax - // .text:000000018008113A js short loc_18008115B - // .text:000000018008113C cmp [rsp+58h+arg_18], 0 - // .text:0000000180081141 jz short loc_18008115B <- jmp + /* + .text:0000000180081133 call sub_1800A9048 + .text:0000000180081138 test eax, eax + .text:000000018008113A js short loc_18008115B + .text:000000018008113C cmp [rsp+58h+arg_18], 0 + .text:0000000180081141 jz short loc_18008115B <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81141); #else - // .text:1009569B call sub_100B7EE5 - // .text:100956A0 test eax, eax - // .text:100956A2 js short loc_100956BF - // .text:100956A4 cmp [ebp+var_C], 0 - // .text:100956A8 jz short loc_100956BF <- jmp + /* + .text:1009569B call sub_100B7EE5 + .text:100956A0 test eax, eax + .text:100956A2 js short loc_100956BF + .text:100956A4 cmp [ebp+var_C], 0 + .text:100956A8 jz short loc_100956BF <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x956A8); #endif b = 0xEB; @@ -2427,19 +2498,23 @@ void Hook() WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - // .text:0000000180012158 mov ebx, 1 <- 0 - // .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:0000000180012165 mov [rdi], ebx - // .text:0000000180012167 call cs:GetVersionExW + /* + .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180012158 mov ebx, 1 <- 0 + .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180012165 mov [rdi], ebx + .text:0000000180012167 call cs:GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x12159); b = 0; #else - // .text:10030121 lea eax, [esp+150h+VersionInformation] - // .text:10030125 inc ebx <- nop - // .text:10030126 mov [edi], ebx - // .text:10030128 push eax ; lpVersionInformation - // .text:10030129 call ds:GetVersionExW + /* + .text:10030121 lea eax, [esp+150h+VersionInformation] + .text:10030125 inc ebx <- nop + .text:10030126 mov [edi], ebx + .text:10030128 push eax ; lpVersionInformation + .text:10030129 call ds:GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30125); b = 0x90; #endif @@ -2474,18 +2549,22 @@ void Hook() { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); #ifdef _WIN64 - // .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:0000000180081088 test eax, eax - // .text:000000018008108A js short loc_1800810AB - // .text:000000018008108C cmp [rsp+58h+arg_18], 0 - // .text:0000000180081091 jz short loc_1800810AB <- jmp + /* + .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:0000000180081088 test eax, eax + .text:000000018008108A js short loc_1800810AB + .text:000000018008108C cmp [rsp+58h+arg_18], 0 + .text:0000000180081091 jz short loc_1800810AB <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81091); #else - // .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - // .text:100962C0 test eax, eax - // .text:100962C2 js short loc_100962DF - // .text:100962C4 cmp [ebp+var_C], 0 - // .text:100962C8 jz short loc_100962DF <- jmp + /* + .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100962C0 test eax, eax + .text:100962C2 js short loc_100962DF + .text:100962C4 cmp [ebp+var_C], 0 + .text:100962C8 jz short loc_100962DF <- jmp + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x962C8); #endif b = 0xEB; @@ -2493,19 +2572,23 @@ void Hook() WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); #ifdef _WIN64 - // .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - // .text:0000000180011AA8 mov ebx, 1 <- 0 - // .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - // .text:0000000180011AB5 mov [rdi], ebx - // .text:0000000180011AB7 call cs:__imp_GetVersionExW + /* + .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180011AA8 mov ebx, 1 <- 0 + .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180011AB5 mov [rdi], ebx + .text:0000000180011AB7 call cs:__imp_GetVersionExW + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11AA9); b = 0; #else - // .text:10030841 lea eax, [esp+150h+VersionInformation] - // .text:10030845 inc ebx <- nop - // .text:10030846 mov [edi], ebx - // .text:10030848 push eax ; lpVersionInformation - // .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + /* + .text:10030841 lea eax, [esp+150h+VersionInformation] + .text:10030845 inc ebx <- nop + .text:10030846 mov [edi], ebx + .text:10030848 push eax ; lpVersionInformation + .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30845); b = 0x90; #endif From 136f4c7de8bcdb7e77ae5e39c35e3608582efd2a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 20 Nov 2014 18:02:07 +0300 Subject: [PATCH 006/208] Technical info Now it will be in separate file --- src-x86-binarymaster/src/rdpwrap.dpr | 120 -------------------------- src-x86-x64-Fusix/src/RDPWrap.cpp | 120 -------------------------- technical.txt | 122 +++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 240 deletions(-) create mode 100644 technical.txt diff --git a/src-x86-binarymaster/src/rdpwrap.dpr b/src-x86-binarymaster/src/rdpwrap.dpr index d1b698d..b4c8351 100644 --- a/src-x86-binarymaster/src/rdpwrap.dpr +++ b/src-x86-binarymaster/src/rdpwrap.dpr @@ -16,126 +16,6 @@ library rdpwrap; -{ RDP Wrapper Library project by Stas'M - -Terminal Services supported versions -6.0.X.X (Windows Vista, any) [policy hook only] -6.0.6000.16386 (Windows Vista) [policy hook + extended patch] -6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] -6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] -6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] -6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] -6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] -6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] -6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] -6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] -6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] -6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] -6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] -6.1.X.X (Windows 7, any) [policy hook only] -6.1.7600.16385 (Windows 7) [policy hook + extended patch] -6.1.7600.20890 (Windows 7 with KB2479710) [todo] -6.1.7600.21316 (Windows 7 with KB2750090) [todo] -6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] -6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] -6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] -6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] -6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] -6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] -6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] -6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] -6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] -6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] -6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] -6.2.9200.16384 (Windows 8) [policy hook + extended patch] -6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] -6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] -6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] -6.3.9600.16384 (Windows 8.1) [init hook + extended patch] -6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] -6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] -6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] -6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] -6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] - -Known failures -6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) - -Internal changelog: - -2014.11.13 : -- researching KB3003743 -- added support for version 6.0.6002.19214 -- added support for version 6.0.6002.23521 -- added support for version 6.1.7601.18637 -- added support for version 6.1.7601.22843 - -2014.11.02 : -- researching termsrv.dll 6.4.9860.0 -- done - -2014.10.19 : -- added support for version 6.0.6000.16386 (x64) -- added support for version 6.0.6001.18000 (x64) -- added support for version 6.1.7600.16385 - -2014.10.18 : -- corrected some typos in source -- simplified signature constants -- added support for version 6.0.6000.16386 (x86) -- added support for version 6.0.6001.18000 (x86) -- added support for version 6.0.6002.18005 -- added support for version 6.1.7601.17514 -- added support for version 6.1.7601.18540 -- added support for version 6.1.7601.22750 -- added support for version 6.2.9200.17048 -- added support for version 6.2.9200.21166 - -2014.10.17 : -- collecting information about all versions of Terminal Services beginning from Vista -- added [todo] to the versions list - -2014.10.16 : -- got new updates: KB2984972 for Win 7 (still works with 2 concurrent users) and KB2973501 for Win 8 (doesn't work) - -2014.10.02 : -- researching Windows 10 TP Remote Desktop -- done! even without debugging symbols ^^) - -2014.07.20 : -- added support for Windows 8 Release Preview -- added support for Windows 8 Consumer Preview -- added support for Windows 8 Developer Preview - -2014.07.19 : -- improved patching of Windows 8 -- added policy patches -- will patch CDefPolicy::Query -- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - -2014.07.18 : -- researched patched files from MDL forum -- CSLQuery::GetMaxSessions requires no patching -- it's better to change the default policy, so... -- will patch CDefPolicy::Query -- will patch CEnforcementCore::GetInstanceOfTSLicense -- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -- the function CSLQuery::Initialize is hooked correctly - -2014.07.17 : -- will hook only CSLQuery::Initialize function -- CSLQuery::GetMaxSessions will be patched -- added x86 signatures for 6.3.9431.0 (Windows 8.1 Preview) - -2014.07.16 : -- changing asm opcodes is bad, will hook CSL functions - -2014.07.15 : -- added x86 signatures for 6.3.9600.16384 (Windows 8.1) -2014.07.15 : -- added x86 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) -} - uses SysUtils, Windows, diff --git a/src-x86-x64-Fusix/src/RDPWrap.cpp b/src-x86-x64-Fusix/src/RDPWrap.cpp index 5b37c27..477257c 100644 --- a/src-x86-x64-Fusix/src/RDPWrap.cpp +++ b/src-x86-x64-Fusix/src/RDPWrap.cpp @@ -14,126 +14,6 @@ limitations under the License. */ -/* RDP Wrapper Library project by Stas'M - -Terminal Services supported versions -6.0.X.X (Windows Vista, any) [policy hook only] -6.0.6000.16386 (Windows Vista) [policy hook + extended patch] -6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] -6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] -6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] -6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] -6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] -6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] -6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] -6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] -6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] -6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] -6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] -6.1.X.X (Windows 7, any) [policy hook only] -6.1.7600.16385 (Windows 7) [policy hook + extended patch] -6.1.7600.20890 (Windows 7 with KB2479710) [todo] -6.1.7600.21316 (Windows 7 with KB2750090) [todo] -6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] -6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] -6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] -6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] -6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] -6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] -6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] -6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] -6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] -6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] -6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] -6.2.9200.16384 (Windows 8) [policy hook + extended patch] -6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] -6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] -6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] -6.3.9600.16384 (Windows 8.1) [init hook + extended patch] -6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] -6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] -6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] -6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] -6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] - -Known failures -6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) - -Internal changelog: - -2014.11.13 : -- researching KB3003743 -- added support for version 6.0.6002.19214 -- added support for version 6.0.6002.23521 -- added support for version 6.1.7601.18637 -- added support for version 6.1.7601.22843 - -2014.11.02 : -- researching termsrv.dll 6.4.9860.0 -- done - -2014.10.19 : -- added support for version 6.0.6000.16386 (x64) -- added support for version 6.0.6001.18000 (x64) -- added support for version 6.1.7600.16385 - -2014.10.18 : -- corrected some typos in source -- simplified signature constants -- added support for version 6.0.6000.16386 (x86) -- added support for version 6.0.6001.18000 (x86) -- added support for version 6.0.6002.18005 -- added support for version 6.1.7601.17514 -- added support for version 6.1.7601.18540 -- added support for version 6.1.7601.22750 -- added support for version 6.2.9200.17048 -- added support for version 6.2.9200.21166 - -2014.10.17 : -- collecting information about all versions of Terminal Services beginning from Vista -- added [todo] to the versions list - -2014.10.16 : -- got new updates: KB2984972 for Win 7 (still works with 2 concurrent users) and KB2973501 for Win 8 (doesn't work) - -2014.10.02 : -- researching Windows 10 TP Remote Desktop -- done! even without debugging symbols ^^) - -2014.07.20 : -- added support for Windows 8 Release Preview -- added support for Windows 8 Consumer Preview -- added support for Windows 8 Developer Preview - -2014.07.19 : -- improved patching of Windows 8 -- added policy patches -- will patch CDefPolicy::Query -- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - -2014.07.18 : -- researched patched files from MDL forum -- CSLQuery::GetMaxSessions requires no patching -- it's better to change the default policy, so... -- will patch CDefPolicy::Query -- will patch CEnforcementCore::GetInstanceOfTSLicense -- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -- the function CSLQuery::Initialize is hooked correctly - -2014.07.17 : -- will hook only CSLQuery::Initialize function -- CSLQuery::GetMaxSessions will be patched -- added x86 signatures for 6.3.9431.0 (Windows 8.1 Preview) - -2014.07.16 : -- changing asm opcodes is bad, will hook CSL functions - -2014.07.15 : -- added x86 signatures for 6.3.9600.16384 (Windows 8.1) -2014.07.15 : -- added x86 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) -*/ - #include "stdafx.h" typedef struct diff --git a/technical.txt b/technical.txt new file mode 100644 index 0000000..a5ae4f3 --- /dev/null +++ b/technical.txt @@ -0,0 +1,122 @@ +RDP Wrapper Library project by Stas'M + +Terminal Services supported versions +6.0.X.X (Windows Vista, any) [policy hook only] +6.0.6000.16386 (Windows Vista) [policy hook + extended patch] +6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] +6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] +6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] +6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] +6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] +6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] +6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] +6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] +6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] +6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] +6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] +6.1.X.X (Windows 7, any) [policy hook only] +6.1.7600.16385 (Windows 7) [policy hook + extended patch] +6.1.7600.20890 (Windows 7 with KB2479710) [todo] +6.1.7600.21316 (Windows 7 with KB2750090) [todo] +6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] +6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] +6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] +6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] +6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] +6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] +6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] +6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] +6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] +6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] +6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] +6.2.9200.16384 (Windows 8) [policy hook + extended patch] +6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] +6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] +6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] +6.3.9600.16384 (Windows 8.1) [init hook + extended patch] +6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] +6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] +6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] +6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] +6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] + +Known failures +6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) + +Source code changelog (rdpwrap library): + +2014.11.20 : +- improved comments +- researching KB3000850 + +2014.11.13 : +- researching KB3003743 +- added support for version 6.0.6002.19214 +- added support for version 6.0.6002.23521 +- added support for version 6.1.7601.18637 +- added support for version 6.1.7601.22843 + +2014.11.02 : +- researching termsrv.dll 6.4.9860.0 +- done + +2014.10.19 : +- added support for version 6.0.6000.16386 (x64) +- added support for version 6.0.6001.18000 (x64) +- added support for version 6.1.7600.16385 + +2014.10.18 : +- corrected some typos in source +- simplified signature constants +- added support for version 6.0.6000.16386 (x86) +- added support for version 6.0.6001.18000 (x86) +- added support for version 6.0.6002.18005 +- added support for version 6.1.7601.17514 +- added support for version 6.1.7601.18540 +- added support for version 6.1.7601.22750 +- added support for version 6.2.9200.17048 +- added support for version 6.2.9200.21166 + +2014.10.17 : +- collecting information about all versions of Terminal Services beginning from Vista +- added [todo] to the versions list + +2014.10.16 : +- got new updates: KB2984972 for Win 7 (still works with 2 concurrent users) and KB2973501 for Win 8 (doesn't work) + +2014.10.02 : +- researching Windows 10 TP Remote Desktop +- done! even without debugging symbols ^^) + +2014.07.20 : +- added support for Windows 8 Release Preview +- added support for Windows 8 Consumer Preview +- added support for Windows 8 Developer Preview + +2014.07.19 : +- improved patching of Windows 8 +- added policy patches +- will patch CDefPolicy::Query +- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + +2014.07.18 : +- researched patched files from MDL forum +- CSLQuery::GetMaxSessions requires no patching +- it's better to change the default policy, so... +- will patch CDefPolicy::Query +- will patch CEnforcementCore::GetInstanceOfTSLicense +- will patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +- the function CSLQuery::Initialize is hooked correctly + +2014.07.17 : +- will hook only CSLQuery::Initialize function +- CSLQuery::GetMaxSessions will be patched +- added x86 signatures for 6.3.9431.0 (Windows 8.1 Preview) + +2014.07.16 : +- changing asm opcodes is bad, will hook CSL functions + +2014.07.15 : +- added x86 signatures for 6.3.9600.16384 (Windows 8.1) +2014.07.15 : +- added x86 signatures for 6.3.9600.17095 (Windows 8.1 with KB2959626) From 1a9d9e7feaa01ef50adcf3e30ce428f31deabedf Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 20 Nov 2014 22:31:59 +0300 Subject: [PATCH 007/208] Bug fix Wrong offset was specified (typo) Not affected on release, because Delphi version is used for x86 platform --- src-x86-x64-Fusix/src/RDPWrap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-x86-x64-Fusix/src/RDPWrap.cpp b/src-x86-x64-Fusix/src/RDPWrap.cpp index 477257c..e424029 100644 --- a/src-x86-x64-Fusix/src/RDPWrap.cpp +++ b/src-x86-x64-Fusix/src/RDPWrap.cpp @@ -2315,7 +2315,7 @@ void Hook() SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F6A1); WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x16115); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x37529); WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); #endif From 0e322ede13cf45f3623442029fdf7180d04b272a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 20 Nov 2014 23:17:09 +0300 Subject: [PATCH 008/208] Tech updates --- technical.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/technical.txt b/technical.txt index a5ae4f3..5e68c1e 100644 --- a/technical.txt +++ b/technical.txt @@ -48,6 +48,10 @@ Source code changelog (rdpwrap library): 2014.11.20 : - improved comments - researching KB3000850 +- found required files +- improving RDPWrap... +- placing signatures, offsets, values, etc in separate config file +- working with code 2014.11.13 : - researching KB3003743 From 95b6719cbcd44ad6e914a06d2a60800d50ee7d6a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 21 Nov 2014 05:47:25 +0300 Subject: [PATCH 009/208] Great improvements Added support to store patch settings in INI file, so the code is more readable now. Library version support now can be extended without recompilation of the project, but C++ version needs to be updated. --- src-x86-binarymaster/src/LiteINI.pas | 375 +++++ src-x86-binarymaster/src/rdpwrap-old.dpr | 1648 ++++++++++++++++++++++ src-x86-binarymaster/src/rdpwrap.dpr | 1219 +++------------- src-x86-binarymaster/src/rdpwrap.ini | 1250 ++++++++++++++++ 4 files changed, 3433 insertions(+), 1059 deletions(-) create mode 100644 src-x86-binarymaster/src/LiteINI.pas create mode 100644 src-x86-binarymaster/src/rdpwrap-old.dpr create mode 100644 src-x86-binarymaster/src/rdpwrap.ini diff --git a/src-x86-binarymaster/src/LiteINI.pas b/src-x86-binarymaster/src/LiteINI.pas new file mode 100644 index 0000000..08d144d --- /dev/null +++ b/src-x86-binarymaster/src/LiteINI.pas @@ -0,0 +1,375 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + +unit LiteINI; + +interface + +uses + SysUtils; + +type + SList = Array of String; + INIValue = record + Name: String; + Value: String; + end; + INISection = record + Name: String; + Values: Array of INIValue; + end; + INIFile = Array of INISection; + +procedure SListClear(var List: SList); +function SListAppend(var List: SList; S: String): Integer; +function SListFind(List: SList; Value: String): Integer; +function INIFindSection(INI: INIFile; Section: String): Integer; +function INIFindValue(INI: INIFile; Section: Integer; Value: String): Integer; +function INIAddSection(var INI: INIFile; Section: String): Integer; +function INIAddValue(var INI: INIFile; Section: Integer; ValueName, Value: String): Integer; +procedure INIUnload(var INI: INIFile); +procedure INILoad(var INI: INIFile; FileName: String); +function INISectionExists(INI: INIFile; Section: String): Boolean; +function INIValueExists(INI: INIFile; Section: String; Value: String): Boolean; +function INIReadSectionLowAPI(INI: INIFile; Section: Integer; var List: SList): Boolean; +function INIReadSection(INI: INIFile; Section: String): SList; +function INIReadStringLowAPI(INI: INIFile; Section, Value: Integer; var Str: String): Boolean; +function INIReadString(INI: INIFile; Section, Value, Default: String): String; +function INIReadInt(INI: INIFile; Section, Value: String; Default: Integer): Integer; +function INIReadDWord(INI: INIFile; Section, Value: String; Default: Cardinal): Cardinal; +function INIReadIntHex(INI: INIFile; Section, Value: String; Default: Integer): Integer; +function INIReadDWordHex(INI: INIFile; Section, Value: String; Default: Cardinal): Cardinal; +function INIReadBool(INI: INIFile; Section, Value: String; Default: Boolean): Boolean; +function INIReadBytes(INI: INIFile; Section, Value: String): TBytes; +function INIReadBytesDef(INI: INIFile; Section, Value: String; Default: TBytes): TBytes; + +implementation + +procedure SListClear(var List: SList); +begin + SetLength(List, 0); +end; + +function SListAppend(var List: SList; S: String): Integer; +begin + SetLength(List, Length(List) + 1); + List[Length(List) - 1] := S; + Result := Length(List) - 1; +end; + +function SListFind(List: SList; Value: String): Integer; +var + I: Integer; +begin + Result := -1; + for I := 0 to Length(List) - 1 do + if List[I] = Value then begin + Result := I; + Break; + end; +end; + +function INIFindSection(INI: INIFile; Section: String): Integer; +var + I: Integer; +begin + Result := -1; + for I := 0 to Length(INI) - 1 do + if INI[I].Name = Section then begin + Result := I; + Exit; + end; +end; + +function INIFindValue(INI: INIFile; Section: Integer; Value: String): Integer; +var + I: Integer; +begin + Result := -1; + if (Section < 0) or (Section >= Length(INI)) then + Exit; + for I := 0 to Length(INI[Section].Values) - 1 do + if INI[Section].Values[I].Name = Value then begin + Result := I; + Exit; + end; +end; + +function INIAddSection(var INI: INIFile; Section: String): Integer; +begin + Result := INIFindSection(INI, Section); + if Result >= 0 then + Exit; + Result := Length(INI); + SetLength(INI, Result + 1); + INI[Result].Name := Section; + SetLength(INI[Result].Values, 0); +end; + +function INIAddValue(var INI: INIFile; Section: Integer; ValueName, Value: String): Integer; +var + I: Integer; +begin + Result := -1; + if (Section < 0) or (Section >= Length(INI)) then + Exit; + I := INIFindValue(INI, Section, ValueName); + if I = -1 then begin + Result := Length(INI[Section].Values); + SetLength(INI[Section].Values, Result + 1); + INI[Section].Values[Result].Name := ValueName; + INI[Section].Values[Result].Value := Value; + end else begin + INI[Section].Values[I].Value := Value; + Result := I; + end; +end; + +procedure INIUnload(var INI: INIFile); +begin + SetLength(INI, 0); +end; + +procedure INILoad(var INI: INIFile; FileName: String); +var + F: TextFile; + S, ValueName, Value: String; + INIList: SList; + I, Sect: Integer; +begin + INIUnload(INI); + if not FileExists(FileName) then + Exit; + AssignFile(F, FileName); + Reset(F); + // Read and filter lines + while not EOF(F) do begin + Readln(F, S); + if (Pos(';', S) <> 1) + and (Pos('#', S) <> 1) + and ( + ((Pos('[', S) > 0) and (Pos(']', S) > 0)) or + (Pos('=', S) > 0) + ) + then + SListAppend(INIList, S); + end; + CloseFile(F); + // Parse 2 (parse format) + Sect := -1; + for I := 0 to Length(INIList) - 1 do begin + S := Trim(INIList[I]); + if Length(S) >= 2 then + if (S[1] = '[') and (S[Length(S)] = ']') then begin + S := Trim(Copy(S, 2, Length(S) - 2)); + Sect := INIAddSection(INI, S); + Continue; + end; + S := INIList[I]; + if Pos('=', S) > 0 then begin + ValueName := Trim(Copy(S, 1, Pos('=', S) - 1)); + Value := Copy(S, Pos('=', S) + 1, Length(S) - Pos('=', S)); + if Sect = -1 then + Sect := INIAddSection(INI, ''); + INIAddValue(INI, Sect, ValueName, Value); + end; + end; +end; + +function INISectionExists(INI: INIFile; Section: String): Boolean; +begin + Result := INIFindSection(INI, Section) > -1; +end; + +function INIValueExists(INI: INIFile; Section: String; Value: String): Boolean; +var + Sect: Integer; +begin + Sect := INIFindSection(INI, Section); + Result := INIFindValue(INI, Sect, Value) > -1; +end; + +function INIReadSectionLowAPI(INI: INIFile; Section: Integer; var List: SList): Boolean; +var + I: Integer; +begin + Result := False; + SetLength(List, 0); + if (Section < 0) or (Section >= Length(INI)) then + Exit; + for I := 0 to Length(INI[Section].Values) - 1 do + SListAppend(List, INI[Section].Values[I].Name); + Result := True; +end; + +function INIReadSection(INI: INIFile; Section: String): SList; +var + Sect: Integer; +begin + Sect := INIFindSection(INI, Section); + INIReadSectionLowAPI(INI, Sect, Result); +end; + +function INIReadStringLowAPI(INI: INIFile; Section, Value: Integer; var Str: String): Boolean; +begin + Result := False; + if (Section < 0) or (Section >= Length(INI)) then + Exit; + if (Value < 0) or (Value >= Length(INI[Section].Values)) then + Exit; + Str := INI[Section].Values[Value].Value; + Result := True; +end; + +function INIReadString(INI: INIFile; Section, Value, Default: String): String; +var + Sect, Val: Integer; +begin + Sect := INIFindSection(INI, Section); + Val := INIFindValue(INI, Sect, Value); + if not INIReadStringLowAPI(INI, Sect, Val, Result) then + Result := Default; +end; + +function INIReadInt(INI: INIFile; Section, Value: String; Default: Integer): Integer; +var + S: String; + E: Integer; +begin + S := INIReadString(INI, Section, Value, ''); + Val(S, Result, E); + if E <> 0 then + Result := Default; +end; + +function INIReadDWord(INI: INIFile; Section, Value: String; Default: Cardinal): Cardinal; +var + S: String; + E: Integer; +begin + S := INIReadString(INI, Section, Value, ''); + Val(S, Result, E); + if E <> 0 then + Result := Default; +end; + +function INIReadIntHex(INI: INIFile; Section, Value: String; Default: Integer): Integer; +var + S: String; + E: Integer; +begin + S := INIReadString(INI, Section, Value, ''); + Val('$'+S, Result, E); + if E <> 0 then + Result := Default; +end; + +function INIReadDWordHex(INI: INIFile; Section, Value: String; Default: Cardinal): Cardinal; +var + S: String; + E: Integer; +begin + S := INIReadString(INI, Section, Value, ''); + Val('$'+S, Result, E); + if E <> 0 then + Result := Default; +end; + +function INIReadBool(INI: INIFile; Section, Value: String; Default: Boolean): Boolean; +var + S: String; + I: Cardinal; + E: Integer; +begin + S := INIReadString(INI, Section, Value, ''); + Val(S, I, E); + if E <> 0 then + Result := Default + else + Result := I > 0; +end; + +function StringToBytes(S: String; var B: TBytes): Boolean; +var + I: Integer; +begin + Result := False; + if Odd(Length(S)) then + Exit; + SetLength(B, Length(S) div 2); + for I := 0 to Length(B) - 1 do begin + B[I] := 0; + case S[(I*2)+2] of + '0': ; + '1': B[I] := B[I] or $1; + '2': B[I] := B[I] or $2; + '3': B[I] := B[I] or $3; + '4': B[I] := B[I] or $4; + '5': B[I] := B[I] or $5; + '6': B[I] := B[I] or $6; + '7': B[I] := B[I] or $7; + '8': B[I] := B[I] or $8; + '9': B[I] := B[I] or $9; + 'A','a': B[I] := B[I] or $A; + 'B','b': B[I] := B[I] or $B; + 'C','c': B[I] := B[I] or $C; + 'D','d': B[I] := B[I] or $D; + 'E','e': B[I] := B[I] or $E; + 'F','f': B[I] := B[I] or $F; + else Exit; + end; + case S[(I*2)+1] of + '0': ; + '1': B[I] := B[I] or $10; + '2': B[I] := B[I] or $20; + '3': B[I] := B[I] or $30; + '4': B[I] := B[I] or $40; + '5': B[I] := B[I] or $50; + '6': B[I] := B[I] or $60; + '7': B[I] := B[I] or $70; + '8': B[I] := B[I] or $80; + '9': B[I] := B[I] or $90; + 'A','a': B[I] := B[I] or $A0; + 'B','b': B[I] := B[I] or $B0; + 'C','c': B[I] := B[I] or $C0; + 'D','d': B[I] := B[I] or $D0; + 'E','e': B[I] := B[I] or $E0; + 'F','f': B[I] := B[I] or $F0; + else Exit; + end; + end; + Result := True; +end; + +function INIReadBytes(INI: INIFile; Section, Value: String): TBytes; +var + S: String; +begin + S := INIReadString(INI, Section, Value, ''); + if not StringToBytes(S, Result) then + SetLength(Result, 0); +end; + +function INIReadBytesDef(INI: INIFile; Section, Value: String; Default: TBytes): TBytes; +var + S: String; +begin + S := INIReadString(INI, Section, Value, ''); + if not StringToBytes(S, Result) then + Result := Default; +end; + +end. diff --git a/src-x86-binarymaster/src/rdpwrap-old.dpr b/src-x86-binarymaster/src/rdpwrap-old.dpr new file mode 100644 index 0000000..b4c8351 --- /dev/null +++ b/src-x86-binarymaster/src/rdpwrap-old.dpr @@ -0,0 +1,1648 @@ +{ + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +} + +library rdpwrap; + +uses + SysUtils, + Windows, + TlHelp32; + +{$R rdpwrap.res} + +// Hook core definitions + +type + OldCode = packed record + One: DWORD; + two: Word; + end; + + far_jmp = packed record + PushOp: Byte; + PushArg: Pointer; + RetOp: Byte; + end; + + mov_far_jmp = packed record + MovOp: Byte; + MovArg: Byte; + PushOp: Byte; + PushArg: Pointer; + RetOp: Byte; + end; + + TTHREADENTRY32 = packed record + dwSize: DWORD; + cntUsage: DWORD; + th32ThreadID: DWORD; + th32OwnerProcessID: DWORD; + tpBasePri: LongInt; + tpDeltaPri: LongInt; + dwFlags: DWORD; + end; + IntArray = Array of Integer; + FILE_VERSION = record + Version: record case Boolean of + True: (dw: DWORD); + False: (w: record + Minor, Major: Word; + end;) + end; + Release, Build: Word; + bDebug, bPrerelease, bPrivate, bSpecial: Boolean; + end; + +const + THREAD_SUSPEND_RESUME = 2; + TH32CS_SNAPTHREAD = 4; +var + bw: DWORD; + IsHooked: Boolean = False; + FCount: Cardinal = 0; + +// Unhooked import + +function OpenThread(dwDesiredAccess: DWORD; bInheritHandle: BOOL; + dwThreadId: DWORD): DWORD; stdcall; external kernel32; + +function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): DWORD; + stdcall; external kernel32; + +function Thread32First(hSnapshot: THandle; var lpte: TTHREADENTRY32): bool; + stdcall; external kernel32; + +function Thread32Next(hSnapshot: THandle; var lpte: TTHREADENTRY32): bool; + stdcall; external kernel32; + +// Wrapped import + +var + TSMain: function(dwArgc: DWORD; lpszArgv: PWideChar): DWORD; stdcall; + TSGlobals: function(lpGlobalData: Pointer): DWORD; stdcall; + +// Hooked import and vars + +var + SLGetWindowsInformationDWORD: function(pwszValueName: PWideChar; + pdwValue: PDWORD): HRESULT; stdcall; + TermSrvBase: Pointer; + FV: FILE_VERSION; + +const + CDefPolicy_Query_edx_ecx: Array[0..12] of Byte = + ($BA,$00,$01,$00,$00,$89,$91,$20,$03,$00,$00,$5E,$90); + CDefPolicy_Query_eax_esi: Array[0..11] of Byte = + ($B8,$00,$01,$00,$00,$89,$86,$20,$03,$00,$00,$90); + CDefPolicy_Query_eax_ecx: Array[0..11] of Byte = + ($B8,$00,$01,$00,$00,$89,$81,$20,$03,$00,$00,$90); + +{ +termsrv.dll 6.0.6000.16386 + +Original +.text:6F335CD8 cmp edx, [ecx+320h] +.text:6F335CDE pop esi +.text:6F335CDF jz loc_6F3426F1 +_______________ + +Changed +.text:6F335CD8 mov edx, 100h +.text:6F335CDD mov [ecx+320h], edx +.text:6F335CE3 pop esi +.text:6F335CE4 nop +CDefPolicy_Query_edx_ecx + +termsrv.dll 6.0.6001.18000 + +Original +.text:6E817FD8 cmp edx, [ecx+320h] +.text:6E817FDE pop esi +.text:6E817FDF jz loc_6E826F16 +_______________ + +Changed +.text:6E817FD8 mov edx, 100h +.text:6E817FDD mov [ecx+320h], edx +.text:6E817FE3 pop esi +.text:6E817FE4 nop +CDefPolicy_Query_edx_ecx + +termsrv.dll 6.0.6002.18005 + +Original +.text:6F5979C0 cmp edx, [ecx+320h] +.text:6F5979C6 pop esi +.text:6F5979C7 jz loc_6F5A6F26 +_______________ + +Changed +.text:6F5979C0 mov edx, 100h +.text:6F5979C5 mov [ecx+320h], edx +.text:6F5979CB pop esi +.text:6F5979CC nop +CDefPolicy_Query_edx_ecx + +termsrv.dll 6.0.6002.19214 + +Original +.text:6F5979B8 cmp edx, [ecx+320h] +.text:6F5979BE pop esi +.text:6F5979BF jz loc_6F5A6F3E +_______________ + +Changed +.text:6F5979B8 mov edx, 100h +.text:6F5979BD mov [ecx+320h], edx +.text:6F5979C3 pop esi +.text:6F5979C4 nop +CDefPolicy_Query_edx_ecx + +termsrv.dll 6.0.6002.23521 + +Original +.text:6F5979CC cmp edx, [ecx+320h] +.text:6F5979D2 pop esi +.text:6F5979D3 jz loc_6F5A6F2E +_______________ + +Changed +.text:6F5979CC mov edx, 100h +.text:6F5979D1 mov [ecx+320h], edx +.text:6F5979D7 pop esi +.text:6F5979D8 nop +CDefPolicy_Query_edx_ecx + +termsrv.dll 6.1.7600.16385 + +Original +.text:6F2F96F3 cmp eax, [esi+320h] +.text:6F2F96F9 jz loc_6F30E256 +_______________ + +Changed +.text:6F2F96F3 mov eax, 100h +.text:6F2F96F8 mov [esi+320h], eax +.text:6F2F96FE nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.1.7601.17514 + +Original +.text:6F2F9D53 cmp eax, [esi+320h] +.text:6F2F9D59 jz loc_6F30B25E +_______________ + +Changed +.text:6F2F9D53 mov eax, 100h +.text:6F2F9D58 mov [esi+320h], eax +.text:6F2F9D5E nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.1.7601.18540 + +Original +.text:6F2F9D9F cmp eax, [esi+320h] +.text:6F2F9DA5 jz loc_6F30B2AE +_______________ + +Changed +.text:6F2F9D9F mov eax, 100h +.text:6F2F9DA4 mov [esi+320h], eax +.text:6F2F9DAA nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.1.7601.22750 + +Original +.text:6F2F9E21 cmp eax, [esi+320h] +.text:6F2F9E27 jz loc_6F30B6CE +_______________ + +Changed +.text:6F2F9E21 mov eax, 100h +.text:6F2F9E26 mov [esi+320h], eax +.text:6F2F9E2C nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.1.7601.18637 + +Original +.text:6F2F9DBB cmp eax, [esi+320h] +.text:6F2F9DC1 jz loc_6F30B2A6 +_______________ + +Changed +.text:6F2F9DBB mov eax, 100h +.text:6F2F9DC0 mov [esi+320h], eax +.text:6F2F9DC6 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.1.7601.22843 + +Original +.text:6F2F9E25 cmp eax, [esi+320h] +.text:6F2F9E2B jz loc_6F30B6D6 +_______________ + +Changed +.text:6F2F9E25 mov eax, 100h +.text:6F2F9E2A mov [esi+320h], eax +.text:6F2F9E30 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.8102.0 + +Original +.text:1000E47C cmp eax, [esi+320h] +.text:1000E482 jz loc_1002D775 +_______________ + +Changed +.text:1000E47C mov eax, 100h +.text:1000E481 mov [esi+320h], eax +.text:1000E487 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.8250.0 + +Original +.text:10013520 cmp eax, [esi+320h] +.text:10013526 jz loc_1002DB85 +_______________ + +Changed +.text:10013520 mov eax, 100h +.text:10013525 mov [esi+320h], eax +.text:1001352B nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.8400.0 + +Original +.text:10013E48 cmp eax, [esi+320h] +.text:10013E4E jz loc_1002E079 +_______________ + +Changed +.text:10013E48 mov eax, 100h +.text:10013E4D mov [esi+320h], eax +.text:10013E53 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.9200.16384 + +Original +.text:10013F08 cmp eax, [esi+320h] +.text:10013F0E jz loc_1002E161 +_______________ + +Changed +.text:10013F08 mov eax, 100h +.text:10013F0D mov [esi+320h], eax +.text:10013F13 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.9200.17048 + +Original +.text:1001F408 cmp eax, [esi+320h] +.text:1001F40E jz loc_1002E201 +_______________ + +Changed +.text:1001F408 mov eax, 100h +.text:1001F40D mov [esi+320h], eax +.text:1001F413 nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.2.9200.21166 + +Original +.text:10013F30 cmp eax, [esi+320h] +.text:10013F36 jz loc_1002E189 +_______________ + +Changed +.text:10013F30 mov eax, 100h +.text:10013F35 mov [esi+320h], eax +.text:10013F3B nop +CDefPolicy_Query_eax_esi + +termsrv.dll 6.3.9431.0 + +Original +.text:1002EA25 cmp eax, [ecx+320h] +.text:1002EA2B jz loc_100348C1 +_______________ + +Changed +.text:1002EA25 mov eax, 100h +.text:1002EA2A mov [ecx+320h], eax +.text:1002EA30 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.3.9600.16384 + +Original +.text:10016115 cmp eax, [ecx+320h] +.text:1001611B jz loc_10034DE1 +_______________ + +Changed +.text:10016115 mov eax, 100h +.text:1001611A mov [ecx+320h], eax +.text:10016120 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.3.9600.17095 + +Original +.text:10037529 cmp eax, [ecx+320h] +.text:1003752F jz loc_10043662 +_______________ + +Changed +.text:10037529 mov eax, 100h +.text:1003752E mov [ecx+320h], eax +.text:10037534 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.4.9841.0 + +Original +.text:1003B989 cmp eax, [ecx+320h] +.text:1003B98F jz loc_1005E809 +_______________ + +Changed +.text:1003B989 mov eax, 100h +.text:1003B98E mov [ecx+320h], eax +.text:1003B994 nop +CDefPolicy_Query_eax_ecx + +termsrv.dll 6.4.9860.0 + +Original +.text:1003BEC9 cmp eax, [ecx+320h] +.text:1003BECF jz loc_1005EE1A +_______________ + +Changed +.text:1003BEC9 mov eax, 100h +.text:1003BECE mov [ecx+320h], eax +.text:1003BED4 nop +CDefPolicy_Query_eax_ecx +} + +var + Stub_SLGetWindowsInformationDWORD: far_jmp; + Old_SLGetWindowsInformationDWORD: OldCode; + +// Main code + +procedure WriteLog(S: AnsiString); +const + LogFile = '\rdpwrap.txt'; +var + F: TextFile; +begin + if not FileExists(LogFile) then + Exit; + AssignFile(F, LogFile); + Append(F); + Write(F, S+#13#10); + CloseFile(F); +end; + +procedure StopThreads; +var + h, CurrTh, ThrHandle, CurrPr: DWORD; + Thread: TTHREADENTRY32; +begin + CurrTh := GetCurrentThreadId; + CurrPr := GetCurrentProcessId; + h := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); + if h <> INVALID_HANDLE_VALUE then + begin + Thread.dwSize := SizeOf(TTHREADENTRY32); + if Thread32First(h, Thread) then + repeat + if (Thread.th32ThreadID <> CurrTh) and + (Thread.th32OwnerProcessID = CurrPr) then + begin + ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, + Thread.th32ThreadID); + if ThrHandle > 0 then + begin + SuspendThread(ThrHandle); + CloseHandle(ThrHandle); + end; + end; + until not Thread32Next(h, Thread); + CloseHandle(h); + end; +end; + +procedure RunThreads; +var + h, CurrTh, ThrHandle, CurrPr: DWORD; + Thread: TTHREADENTRY32; +begin + CurrTh := GetCurrentThreadId; + CurrPr := GetCurrentProcessId; + h := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); + if h <> INVALID_HANDLE_VALUE then + begin + Thread.dwSize := SizeOf(TTHREADENTRY32); + if Thread32First(h, Thread) then + repeat + if (Thread.th32ThreadID <> CurrTh) and + (Thread.th32OwnerProcessID = CurrPr) then + begin + ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, + Thread.th32ThreadID); + if ThrHandle > 0 then + begin + ResumeThread(ThrHandle); + CloseHandle(ThrHandle); + end; + end; + until not Thread32Next(h, Thread); + CloseHandle(h); + end; +end; + +function GetModuleAddress(ModuleName: String; ProcessId: DWORD; var BaseAddr: Pointer; var BaseSize: DWORD): Boolean; +var + hSnap: THandle; + md: MODULEENTRY32; +begin + Result := False; + hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId); + if hSnap = INVALID_HANDLE_VALUE Then + Exit; + md.dwSize := SizeOf(MODULEENTRY32); + if Module32First(hSnap, md) then + begin + if LowerCase(ExtractFileName(md.szExePath)) = LowerCase(ModuleName) then + begin + Result := True; + BaseAddr := Pointer(md.modBaseAddr); + BaseSize := md.modBaseSize; + CloseHandle(hSnap); + Exit; + end; + while Module32Next(hSnap, md) Do + begin + if LowerCase(ExtractFileName(md.szExePath)) = LowerCase(ModuleName) then + begin + Result := True; + BaseAddr := Pointer(md.modBaseAddr); + BaseSize := md.modBaseSize; + Break; + end; + end; + end; + CloseHandle(hSnap); +end; + +{procedure FindMem(Mem: Pointer; MemSz: DWORD; Buf: Pointer; BufSz: DWORD; + From: DWORD; var A: IntArray); +var + I: Integer; +begin + SetLength(A, 0); + I:=From; + if From>0 then + Inc(PByte(Mem), From); + while I < MemSz - BufSz + 1 do + begin + if (not IsBadReadPtr(Mem, BufSz)) and (CompareMem(Mem, Buf, BufSz)) then + begin + SetLength(A, Length(A)+1); + A[Length(A)-1] := I; + end; + Inc(I); + Inc(PByte(Mem)); + end; +end;} + +function GetModuleVersion(const ModuleName: TFileName; var FileVersion: FILE_VERSION): Boolean; +type + VS_VERSIONINFO = record + wLength, wValueLength, wType: Word; + szKey: Array[1..16] of WideChar; + Padding1: Word; + Value: VS_FIXEDFILEINFO; + Padding2, Children: Word; + end; + PVS_VERSIONINFO = ^VS_VERSIONINFO; +const + VFF_DEBUG = 1; + VFF_PRERELEASE = 2; + VFF_PRIVATE = 8; + VFF_SPECIAL = 32; +var + hMod: HMODULE; + hResourceInfo: HRSRC; + VersionInfo: PVS_VERSIONINFO; +begin + Result := False; + + if ModuleName = '' then + hMod := GetModuleHandle(nil) + else + hMod := GetModuleHandle(PWideChar(ModuleName)); + if hMod = 0 then + Exit; + + hResourceInfo := FindResource(hMod, PWideChar(1), PWideChar($10)); + if hResourceInfo = 0 then + Exit; + + VersionInfo := Pointer(LoadResource(hMod, hResourceInfo)); + if VersionInfo = nil then + Exit; + + FileVersion.Version.dw := VersionInfo.Value.dwFileVersionMS; + FileVersion.Release := Word(VersionInfo.Value.dwFileVersionLS shr 16); + FileVersion.Build := Word(VersionInfo.Value.dwFileVersionLS); + FileVersion.bDebug := (VersionInfo.Value.dwFileFlags and VFF_DEBUG) = VFF_DEBUG; + FileVersion.bPrerelease := (VersionInfo.Value.dwFileFlags and VFF_PRERELEASE) = VFF_PRERELEASE; + FileVersion.bPrivate := (VersionInfo.Value.dwFileFlags and VFF_PRIVATE) = VFF_PRIVATE; + FileVersion.bSpecial := (VersionInfo.Value.dwFileFlags and VFF_SPECIAL) = VFF_SPECIAL; + + Result := True; +end; + +function GetFileVersion(const FileName: TFileName; var FileVersion: FILE_VERSION): Boolean; +type + VS_VERSIONINFO = record + wLength, wValueLength, wType: Word; + szKey: Array[1..16] of WideChar; + Padding1: Word; + Value: VS_FIXEDFILEINFO; + Padding2, Children: Word; + end; + PVS_VERSIONINFO = ^VS_VERSIONINFO; +const + VFF_DEBUG = 1; + VFF_PRERELEASE = 2; + VFF_PRIVATE = 8; + VFF_SPECIAL = 32; +var + hFile: HMODULE; + hResourceInfo: HRSRC; + VersionInfo: PVS_VERSIONINFO; +begin + Result := False; + + hFile := LoadLibraryEx(PWideChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE); + if hFile = 0 then + Exit; + + hResourceInfo := FindResource(hFile, PWideChar(1), PWideChar($10)); + if hResourceInfo = 0 then + Exit; + + VersionInfo := Pointer(LoadResource(hFile, hResourceInfo)); + if VersionInfo = nil then + Exit; + + FileVersion.Version.dw := VersionInfo.Value.dwFileVersionMS; + FileVersion.Release := Word(VersionInfo.Value.dwFileVersionLS shr 16); + FileVersion.Build := Word(VersionInfo.Value.dwFileVersionLS); + FileVersion.bDebug := (VersionInfo.Value.dwFileFlags and VFF_DEBUG) = VFF_DEBUG; + FileVersion.bPrerelease := (VersionInfo.Value.dwFileFlags and VFF_PRERELEASE) = VFF_PRERELEASE; + FileVersion.bPrivate := (VersionInfo.Value.dwFileFlags and VFF_PRIVATE) = VFF_PRIVATE; + FileVersion.bSpecial := (VersionInfo.Value.dwFileFlags and VFF_SPECIAL) = VFF_SPECIAL; + + Result := True; +end; + +function OverrideSL(ValueName: String; var Value: DWORD): Boolean; +begin + Result := True; + // Allow Remote Connections + if ValueName = 'TerminalServices-RemoteConnectionManager-AllowRemoteConnections' then begin + Value := 1; + Exit; + end; + // Allow Multiple Sessions + if ValueName = 'TerminalServices-RemoteConnectionManager-AllowMultipleSessions' then begin + Value := 1; + Exit; + end; + // Allow Multiple Sessions (Application Server Mode) + if ValueName = 'TerminalServices-RemoteConnectionManager-AllowAppServerMode' then begin + Value := 1; + Exit; + end; + // Allow Multiple Monitors + if ValueName = 'TerminalServices-RemoteConnectionManager-AllowMultimon' then begin + Value := 1; + Exit; + end; + // Max User Sessions (0 = unlimited) + if ValueName = 'TerminalServices-RemoteConnectionManager-MaxUserSessions' then begin + Value := 0; + Exit; + end; + // Max Debug Sessions (Win 8, 0 = unlimited) + if ValueName = 'TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions' then begin + Value := 0; + Exit; + end; + // Max Sessions + // 0 - logon not possible even from console + // 1 - only one active user (console or remote) + // 2 - allow concurrent sessions + if ValueName = 'TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions' then begin + Value := 2; + Exit; + end; + // Allow Advanced Compression with RDP 7 Protocol + if ValueName = 'TerminalServices-RDP-7-Advanced-Compression-Allowed' then begin + Value := 1; + Exit; + end; + // IsTerminalTypeLocalOnly = 0 + if ValueName = 'TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly' then begin + Value := 0; + Exit; + end; + // Max Sessions (hard limit) + if ValueName = 'TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions' then begin + Value := 1000; + Exit; + end; + // Allow Easy Print + if ValueName = 'TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed' then begin + Value := 1; + Exit; + end; + Result := False; +end; + +function New_SLGetWindowsInformationDWORD(pwszValueName: PWideChar; + pdwValue: PDWORD): HRESULT; stdcall; +var + dw: DWORD; +begin + // wrapped SLGetWindowsInformationDWORD function + // termsrv.dll will call this function instead of original SLC.dll + + // Override SL Policy + + WriteLog('Policy query: ' + pwszValueName); + if OverrideSL(pwszValueName, dw) then begin + pdwValue^ := dw; + Result := S_OK; + WriteLog('Rewrite: ' + IntToStr(pdwValue^)); + Exit; + end; + + // If the requested value name is not defined above + + // revert to original SL Policy function + WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, + @Old_SLGetWindowsInformationDWORD, SizeOf(OldCode), bw); + + // get result + Result := SLGetWindowsInformationDWORD(pwszValueName, pdwValue); + if Result = S_OK then + WriteLog('Result: ' + IntToStr(pdwValue^)) + else + WriteLog('Failed'); + // wrap it back + WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, + @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); +end; + +function New_Win8SL(pwszValueName: PWideChar; pdwValue: PDWORD): HRESULT; register; +var + dw: DWORD; +begin + // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll + // for Windows 8 support + + // Override SL Policy + + WriteLog('Policy query: ' + pwszValueName); + if OverrideSL(pwszValueName, dw) then begin + pdwValue^ := dw; + Result := S_OK; + WriteLog('Rewrite: ' + IntToStr(pdwValue^)); + Exit; + end; + + // If the requested value name is not defined above + // use function from SLC.dll + + Result := SLGetWindowsInformationDWORD(pwszValueName, pdwValue); + if Result = S_OK then + WriteLog('Result: ' + IntToStr(pdwValue^)) + else + WriteLog('Failed'); +end; + +function New_Win8SL_CP(eax: DWORD; pdwValue: PDWORD; ecx: DWORD; pwszValueName: PWideChar): HRESULT; register; +begin + // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll + // for Windows 8 Consumer Preview support + + Result := New_Win8SL(pwszValueName, pdwValue); +end; + +function New_CSLQuery_Initialize: HRESULT; stdcall; +var + bServerSku, + bRemoteConnAllowed, + bFUSEnabled, + bAppServerAllowed, + bMultimonAllowed, + lMaxUserSessions, + ulMaxDebugSessions, + bInitialized: PDWORD; +begin + bServerSku := nil; + bRemoteConnAllowed := nil; + bFUSEnabled := nil; + bAppServerAllowed := nil; + bMultimonAllowed := nil; + lMaxUserSessions := nil; + ulMaxDebugSessions := nil; + bInitialized := nil; + WriteLog('> CSLQuery::Initialize'); + if (FV.Release = 9431) and (FV.Build = 0) then begin + bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $A22A8); + lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $A22AC); + bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $A22B0); + bInitialized := Pointer(Cardinal(TermSrvBase) + $A22B4); + bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $A22B8); + bServerSku := Pointer(Cardinal(TermSrvBase) + $A22BC); + ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $A22C0); + bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $A22C4); + end; + if (FV.Release = 9600) and (FV.Build = 16384) then begin + bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $C02A8); + lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $C02AC); + bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $C02B0); + bInitialized := Pointer(Cardinal(TermSrvBase) + $C02B4); + bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $C02B8); + bServerSku := Pointer(Cardinal(TermSrvBase) + $C02BC); + ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $C02C0); + bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $C02C4); + end; + if (FV.Release = 9600) and (FV.Build = 17095) then begin + bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $C12A8); + lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $C12AC); + bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $C12B0); + bInitialized := Pointer(Cardinal(TermSrvBase) + $C12B4); + bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $C12B8); + bServerSku := Pointer(Cardinal(TermSrvBase) + $C12BC); + ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $C12C0); + bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $C12C4); + end; + if (FV.Release = 9841) and (FV.Build = 0) then begin + bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $BF9F0); + lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $BF9F4); + bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $BF9F8); + bInitialized := Pointer(Cardinal(TermSrvBase) + $BF9FC); + bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $BFA00); + bServerSku := Pointer(Cardinal(TermSrvBase) + $BFA04); + ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $BFA08); + bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $BFA0C); + end; + if (FV.Release = 9860) and (FV.Build = 0) then begin + bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $BF7E0); + lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $BF7E4); + bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $BF7E8); + bInitialized := Pointer(Cardinal(TermSrvBase) + $BF7EC); + bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $BF7F0); + bServerSku := Pointer(Cardinal(TermSrvBase) + $BF7F4); + ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $BF7F8); + bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $BF7FC); + end; + if bServerSku <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(bServerSku), 1)+'] bServerSku = 1'); + bServerSku^ := 1; + end; + if bRemoteConnAllowed <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(bRemoteConnAllowed), 1)+'] bRemoteConnAllowed = 1'); + bRemoteConnAllowed^ := 1; + end; + if bFUSEnabled <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(bFUSEnabled), 1)+'] bFUSEnabled = 1'); + bFUSEnabled^ := 1; + end; + if bAppServerAllowed <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(bAppServerAllowed), 1)+'] bAppServerAllowed = 1'); + bAppServerAllowed^ := 1; + end; + if bMultimonAllowed <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(bMultimonAllowed), 1)+'] bMultimonAllowed = 1'); + bMultimonAllowed^ := 1; + end; + if lMaxUserSessions <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(lMaxUserSessions), 1)+'] lMaxUserSessions = 0'); + lMaxUserSessions^ := 0; + end; + if ulMaxDebugSessions <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(ulMaxDebugSessions), 1)+'] ulMaxDebugSessions = 0'); + ulMaxDebugSessions^ := 0; + end; + if bInitialized <> nil then begin + WriteLog('[0x'+IntToHex(DWORD(bInitialized), 1)+'] bInitialized = 1'); + bInitialized^ := 1; + end; + Result := S_OK; +end; + +procedure HookFunctions; +var + V: DWORD; + TS_Handle, SLC_Handle: THandle; + TermSrvSize: DWORD; + SignPtr: Pointer; + Results: IntArray; + Jump: far_jmp; + MovJump: mov_far_jmp; + nop: DWORD; + b: Byte; +begin + { hook function ^^ + (called once) } + IsHooked := True; + nop := $90909090; + TSMain := nil; + TSGlobals := nil; + SLGetWindowsInformationDWORD := nil; + WriteLog('init'); + + // load termsrv.dll and get functions + TS_Handle := LoadLibrary('termsrv.dll'); + if TS_Handle = 0 then begin + WriteLog('Error: Failed to load Terminal Services library'); + Exit; + end; + WriteLog('Base addr: 0x'+IntToHex(TS_Handle, 8)); + TSMain := GetProcAddress(TS_Handle, 'ServiceMain'); + WriteLog('SvcMain: termsrv.dll+0x'+IntToHex(Cardinal(@TSMain) - TS_Handle, 1)); + TSGlobals := GetProcAddress(TS_Handle, 'SvchostPushServiceGlobals'); + WriteLog('SvcGlobals: termsrv.dll+0x'+IntToHex(Cardinal(@TSGlobals) - TS_Handle, 1)); + + V := 0; + // check termsrv version + if GetModuleVersion('termsrv.dll', FV) then + V := Byte(FV.Version.w.Minor) or (Byte(FV.Version.w.Major) shl 8) + else begin + // check NT version + // V := GetVersion; // deprecated + // V := ((V and $FF) shl 8) or ((V and $FF00) shr 8); + end; + if V = 0 then begin + WriteLog('Error: Failed to detect Terminal Services version'); + Exit; + end; + + WriteLog('Version: '+IntToStr(FV.Version.w.Major)+'.'+IntToStr(FV.Version.w.Minor)); + WriteLog('Release: '+IntToStr(FV.Release)); + WriteLog('Build: '+IntToStr(FV.Build)); + + // temporarily freeze threads + WriteLog('freeze'); + StopThreads(); + + if (V = $0600) then begin + // Windows Vista + // uses SL Policy API (slc.dll) + + // load slc.dll and hook function + SLC_Handle := LoadLibrary('slc.dll'); + SLGetWindowsInformationDWORD := GetProcAddress(SLC_Handle, 'SLGetWindowsInformationDWORD'); + + if @SLGetWindowsInformationDWORD <> nil then + begin + // rewrite original function to call our function (make hook) + + WriteLog('Hook SLGetWindowsInformationDWORD'); + Stub_SLGetWindowsInformationDWORD.PushOp := $68; + Stub_SLGetWindowsInformationDWORD.PushArg := @New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.RetOp := $C3; + ReadProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, + @Old_SLGetWindowsInformationDWORD, SizeOf(OldCode), bw); + WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, + @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); + end; + + if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin + // Patch functions: + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + + if (FV.Release = 6000) and (FV.Build = 16386) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F320000 + .text:6F3360B9 lea eax, [ebp+VersionInformation] + .text:6F3360BF inc ebx <- nop + .text:6F3360C0 push eax ; lpVersionInformation + .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F3360CB mov [esi], ebx + .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $160BF); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $15CD8); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_edx_ecx[0], + SizeOf(CDefPolicy_Query_edx_ecx), bw); + end; + if (FV.Release = 6001) and (FV.Build = 18000) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6E800000 + .text:6E8185DE lea eax, [ebp+VersionInformation] + .text:6E8185E4 inc ebx <- nop + .text:6E8185E5 push eax ; lpVersionInformation + .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6E8185F0 mov [esi], ebx + .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $185E4); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $17FD8); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_edx_ecx[0], + SizeOf(CDefPolicy_Query_edx_ecx), bw); + end; + if (FV.Release = 6002) and (FV.Build = 18005) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F580000 + .text:6F597FA2 lea eax, [ebp+VersionInformation] + .text:6F597FA8 inc ebx <- nop + .text:6F597FA9 push eax ; lpVersionInformation + .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FB4 mov [esi], ebx + .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $17FA8); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $179C0); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_edx_ecx[0], + SizeOf(CDefPolicy_Query_edx_ecx), bw); + end; + if (FV.Release = 6002) and (FV.Build = 19214) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F580000 + .text:6F597FBE lea eax, [ebp+VersionInformation] + .text:6F597FC4 inc ebx <- nop + .text:6F597FC5 push eax ; lpVersionInformation + .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FD0 mov [esi], ebx + .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $17FC4); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $179B8); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_edx_ecx[0], + SizeOf(CDefPolicy_Query_edx_ecx), bw); + end; + if (FV.Release = 6002) and (FV.Build = 23521) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F580000 + .text:6F597FAE lea eax, [ebp+VersionInformation] + .text:6F597FB4 inc ebx <- nop + .text:6F597FB5 push eax ; lpVersionInformation + .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FC0 mov [esi], ebx + .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $17FB4); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $179CC); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_edx_ecx[0], + SizeOf(CDefPolicy_Query_edx_ecx), bw); + end; + end; + end; + if (V = $0601) then begin + // Windows 7 + // uses SL Policy API (slc.dll) + + // load slc.dll and hook function + SLC_Handle := LoadLibrary('slc.dll'); + SLGetWindowsInformationDWORD := GetProcAddress(SLC_Handle, 'SLGetWindowsInformationDWORD'); + + if @SLGetWindowsInformationDWORD <> nil then + begin + // rewrite original function to call our function (make hook) + + WriteLog('Hook SLGetWindowsInformationDWORD'); + Stub_SLGetWindowsInformationDWORD.PushOp := $68; + Stub_SLGetWindowsInformationDWORD.PushArg := @New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.RetOp := $C3; + ReadProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, + @Old_SLGetWindowsInformationDWORD, SizeOf(OldCode), bw); + WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, + @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); + end; + + if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin + // Patch functions: + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + + if (FV.Release = 7600) and (FV.Build = 16385) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F2E0000 + .text:6F2F9E1F lea eax, [ebp+VersionInformation] + .text:6F2F9E25 inc ebx <- nop + .text:6F2F9E26 push eax ; lpVersionInformation + .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2F9E31 mov [esi], ebx + .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $19E25); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $196F3); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + end; + if (FV.Release = 7601) and (FV.Build = 17514) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F2E0000 + .text:6F2FA497 lea eax, [ebp+VersionInformation] + .text:6F2FA49D inc ebx <- nop + .text:6F2FA49E push eax ; lpVersionInformation + .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4A9 mov [esi], ebx + .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $1A49D); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19D53); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + end; + if (FV.Release = 7601) and (FV.Build = 18540) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F2E0000 + .text:6F2FA4DF lea eax, [ebp+VersionInformation] + .text:6F2FA4E5 inc ebx <- nop + .text:6F2FA4E6 push eax ; lpVersionInformation + .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4F1 mov [esi], ebx + .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4E5); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19D9F); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + end; + if (FV.Release = 7601) and (FV.Build = 22750) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19E21); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + end; + if (FV.Release = 7601) and (FV.Build = 18637) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F2E0000 + .text:6F2FA4D7 lea eax, [ebp+VersionInformation] + .text:6F2FA4DD inc ebx <- nop + .text:6F2FA4DE push eax ; lpVersionInformation + .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4E9 mov [esi], ebx + .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4DD); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19DBB); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + end; + if (FV.Release = 7601) and (FV.Build = 22843) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19E25); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + end; + end; + end; + if V = $0602 then begin + // Windows 8 + // uses SL Policy internal unexported function + + // load slc.dll and get function + // (will be used on intercepting undefined values) + SLC_Handle := LoadLibrary('slc.dll'); + SLGetWindowsInformationDWORD := GetProcAddress(SLC_Handle, 'SLGetWindowsInformationDWORD'); + + if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin + // Patch functions: + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + // Hook function: + // SLGetWindowsInformationDWORDWrapper + + if (FV.Release = 8102) and (FV.Build = 0) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:1000F7E5 lea eax, [esp+150h+VersionInformation] + .text:1000F7E9 inc esi <- nop + .text:1000F7EA push eax ; lpVersionInformation + .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1000F7F3 mov [edi], esi + .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $F7E9); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $E47C); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + + WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $1B909); + MovJump.MovOp := $89; // mov eax, ecx + MovJump.MovArg := $C8; // __msfastcall compatibility + MovJump.PushOp := $68; + MovJump.PushArg := @New_Win8SL; + MovJump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @MovJump, SizeOf(mov_far_jmp), bw); + end; + if (FV.Release = 8250) and (FV.Build = 0) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:100159C5 lea eax, [esp+150h+VersionInformation] + .text:100159C9 inc esi <- nop + .text:100159CA push eax ; lpVersionInformation + .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:100159D3 mov [edi], esi + .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $159C9); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $13520); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + + WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $1A0A9); + MovJump.MovOp := $89; // mov eax, ecx + MovJump.MovArg := $C8; // __msfastcall compatibility + MovJump.PushOp := $68; + MovJump.PushArg := @New_Win8SL_CP; + MovJump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @MovJump, SizeOf(mov_far_jmp), bw); + end; + if (FV.Release = 8400) and (FV.Build = 0) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:1001547E lea eax, [esp+150h+VersionInformation] + .text:10015482 inc esi <- nop + .text:10015483 push eax ; lpVersionInformation + .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001548C mov [edi], esi + .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $15482); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $13E48); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + + WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19629); + MovJump.MovOp := $89; // mov eax, ecx + MovJump.MovArg := $C8; // __msfastcall compatibility + MovJump.PushOp := $68; + MovJump.PushArg := @New_Win8SL; + MovJump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @MovJump, SizeOf(mov_far_jmp), bw); + end; + if (FV.Release = 9200) and (FV.Build = 16384) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:1001554E lea eax, [esp+150h+VersionInformation] + .text:10015552 inc esi <- nop + .text:10015553 push eax ; lpVersionInformation + .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001555C mov [edi], esi + .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $15552); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $13F08); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + + WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19559); + MovJump.MovOp := $89; // mov eax, ecx + MovJump.MovArg := $C8; // __msfastcall compatibility + MovJump.PushOp := $68; + MovJump.PushArg := @New_Win8SL; + MovJump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @MovJump, SizeOf(mov_far_jmp), bw); + end; + if (FV.Release = 9200) and (FV.Build = 17048) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:1002058E lea eax, [esp+150h+VersionInformation] + .text:10020592 inc esi <- nop + .text:10020593 push eax ; lpVersionInformation + .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1002059C mov [edi], esi + .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $20592); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $1F408); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + + WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $17059); + MovJump.MovOp := $89; // mov eax, ecx + MovJump.MovArg := $C8; // __msfastcall compatibility + MovJump.PushOp := $68; + MovJump.PushArg := @New_Win8SL; + MovJump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @MovJump, SizeOf(mov_far_jmp), bw); + end; + if (FV.Release = 9200) and (FV.Build = 21166) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:10015576 lea eax, [esp+150h+VersionInformation] + .text:1001557A inc esi <- nop + .text:1001557B push eax ; lpVersionInformation + .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:10015584 mov [edi], esi + .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $1557A); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $13F30); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_esi[0], + SizeOf(CDefPolicy_Query_eax_esi), bw); + + WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $19581); + MovJump.MovOp := $89; // mov eax, ecx + MovJump.MovArg := $C8; // __msfastcall compatibility + MovJump.PushOp := $68; + MovJump.PushArg := @New_Win8SL; + MovJump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @MovJump, SizeOf(mov_far_jmp), bw); + end; + end; + end; + if V = $0603 then begin + // Windows 8.1 + // uses SL Policy internal inline code + + if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin + // Patch functions: + // CEnforcementCore::GetInstanceOfTSLicense + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + // Hook function: + // CSLQuery::Initialize + + if (FV.Release = 9431) and (FV.Build = 0) then begin + WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); + { + .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:1008A609 test eax, eax + .text:1008A60B js short loc_1008A628 + .text:1008A60D cmp [ebp+var_8], 0 + .text:1008A611 jz short loc_1008A628 <- jmp + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $8A611); + b := $EB; + WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); + + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:100306A4 lea eax, [esp+150h+VersionInformation] + .text:100306A8 inc ebx <- nop + .text:100306A9 mov [edi], ebx + .text:100306AB push eax ; lpVersionInformation + .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $306A8); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $2EA25); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_ecx[0], + SizeOf(CDefPolicy_Query_eax_ecx), bw); + + WriteLog('Hook CSLQuery::Initialize'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $196B0); + Jump.PushOp := $68; + Jump.PushArg := @New_CSLQuery_Initialize; + Jump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @Jump, SizeOf(far_jmp), bw); + end; + if (FV.Release = 9600) and (FV.Build = 16384) then begin + WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); + { + .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A2721 test eax, eax + .text:100A2723 js short loc_100A2740 + .text:100A2725 cmp [ebp+var_8], 0 + .text:100A2729 jz short loc_100A2740 <- jmp + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $A2729); + b := $EB; + WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); + + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:10018024 lea eax, [esp+150h+VersionInformation] + .text:10018028 inc ebx <- nop + .text:10018029 mov [edi], ebx + .text:1001802B push eax ; lpVersionInformation + .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $18028); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $16115); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_ecx[0], + SizeOf(CDefPolicy_Query_eax_ecx), bw); + + WriteLog('Hook CSLQuery::Initialize'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $1CEB0); + Jump.PushOp := $68; + Jump.PushArg := @New_CSLQuery_Initialize; + Jump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @Jump, SizeOf(far_jmp), bw); + end; + if (FV.Release = 9600) and (FV.Build = 17095) then begin + WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); + { + .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A36C9 test eax, eax + .text:100A36CB js short loc_100A36E8 + .text:100A36CD cmp [ebp+var_8], 0 + .text:100A36D1 jz short loc_100A36E8 <- jmp + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $A36D1); + b := $EB; + WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); + + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:10036BA5 lea eax, [esp+150h+VersionInformation] + .text:10036BA9 inc ebx <- nop + .text:10036BAA mov [edi], ebx + .text:10036BAC push eax ; lpVersionInformation + .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $36BA9); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $37529); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_ecx[0], + SizeOf(CDefPolicy_Query_eax_ecx), bw); + + WriteLog('Hook CSLQuery::Initialize'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $117F1); + Jump.PushOp := $68; + Jump.PushArg := @New_CSLQuery_Initialize; + Jump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @Jump, SizeOf(far_jmp), bw); + end; + + end; + end; + if V = $0604 then begin + // Windows 10 + // uses SL Policy internal inline code + + if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin + // Patch functions: + // CEnforcementCore::GetInstanceOfTSLicense + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + // Hook function: + // CSLQuery::Initialize + + if (FV.Release = 9841) and (FV.Build = 0) then begin + WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); + { + .text:1009569B call sub_100B7EE5 + .text:100956A0 test eax, eax + .text:100956A2 js short loc_100956BF + .text:100956A4 cmp [ebp+var_C], 0 + .text:100956A8 jz short loc_100956BF <- jmp + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $956A8); + b := $EB; + WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); + + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:10030121 lea eax, [esp+150h+VersionInformation] + .text:10030125 inc ebx <- nop + .text:10030126 mov [edi], ebx + .text:10030128 push eax ; lpVersionInformation + .text:10030129 call ds:GetVersionExW + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $30125); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $3B989); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_ecx[0], + SizeOf(CDefPolicy_Query_eax_ecx), bw); + + WriteLog('Hook CSLQuery::Initialize'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $46A68); + Jump.PushOp := $68; + Jump.PushArg := @New_CSLQuery_Initialize; + Jump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @Jump, SizeOf(far_jmp), bw); + end; + + if (FV.Release = 9860) and (FV.Build = 0) then begin + WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); + { + .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100962C0 test eax, eax + .text:100962C2 js short loc_100962DF + .text:100962C4 cmp [ebp+var_C], 0 + .text:100962C8 jz short loc_100962DF <- jmp + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $962C8); + b := $EB; + WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); + + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + { + .text:10030841 lea eax, [esp+150h+VersionInformation] + .text:10030845 inc ebx <- nop + .text:10030846 mov [edi], ebx + .text:10030848 push eax ; lpVersionInformation + .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + } + SignPtr := Pointer(Cardinal(TermSrvBase) + $30845); + WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); + + WriteLog('Patch CDefPolicy::Query'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $3BEC9); + WriteProcessMemory(GetCurrentProcess, SignPtr, + @CDefPolicy_Query_eax_ecx[0], + SizeOf(CDefPolicy_Query_eax_ecx), bw); + + WriteLog('Hook CSLQuery::Initialize'); + SignPtr := Pointer(Cardinal(TermSrvBase) + $46F18); + Jump.PushOp := $68; + Jump.PushArg := @New_CSLQuery_Initialize; + Jump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @Jump, SizeOf(far_jmp), bw); + end; + + end; + end; + + // unfreeze threads + WriteLog('resume'); + RunThreads(); +end; + +function TermServiceMain(dwArgc: DWORD; lpszArgv: PWideChar): DWORD; stdcall; +begin + // wrap ServiceMain function + WriteLog('> ServiceMain'); + if not IsHooked then + HookFunctions; + Result := 0; + if @TSMain <> nil then + Result := TSMain(dwArgc, lpszArgv); +end; + +function TermServiceGlobals(lpGlobalData: Pointer): DWORD; stdcall; +begin + // wrap SvchostPushServiceGlobals function + WriteLog('> SvchostPushServiceGlobals'); + if not IsHooked then + HookFunctions; + Result := 0; + if @TSGlobals <> nil then + Result := TSGlobals(lpGlobalData); +end; + +// export section + +exports + TermServiceMain index 1 name 'ServiceMain'; +exports + TermServiceGlobals index 2 name 'SvchostPushServiceGlobals'; + +begin + // DllMain procedure is not used +end. \ No newline at end of file diff --git a/src-x86-binarymaster/src/rdpwrap.dpr b/src-x86-binarymaster/src/rdpwrap.dpr index b4c8351..7878a43 100644 --- a/src-x86-binarymaster/src/rdpwrap.dpr +++ b/src-x86-binarymaster/src/rdpwrap.dpr @@ -19,7 +19,8 @@ library rdpwrap; uses SysUtils, Windows, - TlHelp32; + TlHelp32, + LiteINI; {$R rdpwrap.res} @@ -54,7 +55,7 @@ type tpDeltaPri: LongInt; dwFlags: DWORD; end; - IntArray = Array of Integer; + //IntArray = Array of Integer; FILE_VERSION = record Version: record case Boolean of True: (dw: DWORD); @@ -70,9 +71,10 @@ const THREAD_SUSPEND_RESUME = 2; TH32CS_SNAPTHREAD = 4; var + INI: INIFile; + LogFile: String = '\rdpwrap.txt'; bw: DWORD; IsHooked: Boolean = False; - FCount: Cardinal = 0; // Unhooked import @@ -102,312 +104,6 @@ var TermSrvBase: Pointer; FV: FILE_VERSION; -const - CDefPolicy_Query_edx_ecx: Array[0..12] of Byte = - ($BA,$00,$01,$00,$00,$89,$91,$20,$03,$00,$00,$5E,$90); - CDefPolicy_Query_eax_esi: Array[0..11] of Byte = - ($B8,$00,$01,$00,$00,$89,$86,$20,$03,$00,$00,$90); - CDefPolicy_Query_eax_ecx: Array[0..11] of Byte = - ($B8,$00,$01,$00,$00,$89,$81,$20,$03,$00,$00,$90); - -{ -termsrv.dll 6.0.6000.16386 - -Original -.text:6F335CD8 cmp edx, [ecx+320h] -.text:6F335CDE pop esi -.text:6F335CDF jz loc_6F3426F1 -_______________ - -Changed -.text:6F335CD8 mov edx, 100h -.text:6F335CDD mov [ecx+320h], edx -.text:6F335CE3 pop esi -.text:6F335CE4 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6001.18000 - -Original -.text:6E817FD8 cmp edx, [ecx+320h] -.text:6E817FDE pop esi -.text:6E817FDF jz loc_6E826F16 -_______________ - -Changed -.text:6E817FD8 mov edx, 100h -.text:6E817FDD mov [ecx+320h], edx -.text:6E817FE3 pop esi -.text:6E817FE4 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6002.18005 - -Original -.text:6F5979C0 cmp edx, [ecx+320h] -.text:6F5979C6 pop esi -.text:6F5979C7 jz loc_6F5A6F26 -_______________ - -Changed -.text:6F5979C0 mov edx, 100h -.text:6F5979C5 mov [ecx+320h], edx -.text:6F5979CB pop esi -.text:6F5979CC nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6002.19214 - -Original -.text:6F5979B8 cmp edx, [ecx+320h] -.text:6F5979BE pop esi -.text:6F5979BF jz loc_6F5A6F3E -_______________ - -Changed -.text:6F5979B8 mov edx, 100h -.text:6F5979BD mov [ecx+320h], edx -.text:6F5979C3 pop esi -.text:6F5979C4 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6002.23521 - -Original -.text:6F5979CC cmp edx, [ecx+320h] -.text:6F5979D2 pop esi -.text:6F5979D3 jz loc_6F5A6F2E -_______________ - -Changed -.text:6F5979CC mov edx, 100h -.text:6F5979D1 mov [ecx+320h], edx -.text:6F5979D7 pop esi -.text:6F5979D8 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.1.7600.16385 - -Original -.text:6F2F96F3 cmp eax, [esi+320h] -.text:6F2F96F9 jz loc_6F30E256 -_______________ - -Changed -.text:6F2F96F3 mov eax, 100h -.text:6F2F96F8 mov [esi+320h], eax -.text:6F2F96FE nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.17514 - -Original -.text:6F2F9D53 cmp eax, [esi+320h] -.text:6F2F9D59 jz loc_6F30B25E -_______________ - -Changed -.text:6F2F9D53 mov eax, 100h -.text:6F2F9D58 mov [esi+320h], eax -.text:6F2F9D5E nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.18540 - -Original -.text:6F2F9D9F cmp eax, [esi+320h] -.text:6F2F9DA5 jz loc_6F30B2AE -_______________ - -Changed -.text:6F2F9D9F mov eax, 100h -.text:6F2F9DA4 mov [esi+320h], eax -.text:6F2F9DAA nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.22750 - -Original -.text:6F2F9E21 cmp eax, [esi+320h] -.text:6F2F9E27 jz loc_6F30B6CE -_______________ - -Changed -.text:6F2F9E21 mov eax, 100h -.text:6F2F9E26 mov [esi+320h], eax -.text:6F2F9E2C nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.18637 - -Original -.text:6F2F9DBB cmp eax, [esi+320h] -.text:6F2F9DC1 jz loc_6F30B2A6 -_______________ - -Changed -.text:6F2F9DBB mov eax, 100h -.text:6F2F9DC0 mov [esi+320h], eax -.text:6F2F9DC6 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.22843 - -Original -.text:6F2F9E25 cmp eax, [esi+320h] -.text:6F2F9E2B jz loc_6F30B6D6 -_______________ - -Changed -.text:6F2F9E25 mov eax, 100h -.text:6F2F9E2A mov [esi+320h], eax -.text:6F2F9E30 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.8102.0 - -Original -.text:1000E47C cmp eax, [esi+320h] -.text:1000E482 jz loc_1002D775 -_______________ - -Changed -.text:1000E47C mov eax, 100h -.text:1000E481 mov [esi+320h], eax -.text:1000E487 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.8250.0 - -Original -.text:10013520 cmp eax, [esi+320h] -.text:10013526 jz loc_1002DB85 -_______________ - -Changed -.text:10013520 mov eax, 100h -.text:10013525 mov [esi+320h], eax -.text:1001352B nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.8400.0 - -Original -.text:10013E48 cmp eax, [esi+320h] -.text:10013E4E jz loc_1002E079 -_______________ - -Changed -.text:10013E48 mov eax, 100h -.text:10013E4D mov [esi+320h], eax -.text:10013E53 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.9200.16384 - -Original -.text:10013F08 cmp eax, [esi+320h] -.text:10013F0E jz loc_1002E161 -_______________ - -Changed -.text:10013F08 mov eax, 100h -.text:10013F0D mov [esi+320h], eax -.text:10013F13 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.9200.17048 - -Original -.text:1001F408 cmp eax, [esi+320h] -.text:1001F40E jz loc_1002E201 -_______________ - -Changed -.text:1001F408 mov eax, 100h -.text:1001F40D mov [esi+320h], eax -.text:1001F413 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.9200.21166 - -Original -.text:10013F30 cmp eax, [esi+320h] -.text:10013F36 jz loc_1002E189 -_______________ - -Changed -.text:10013F30 mov eax, 100h -.text:10013F35 mov [esi+320h], eax -.text:10013F3B nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.3.9431.0 - -Original -.text:1002EA25 cmp eax, [ecx+320h] -.text:1002EA2B jz loc_100348C1 -_______________ - -Changed -.text:1002EA25 mov eax, 100h -.text:1002EA2A mov [ecx+320h], eax -.text:1002EA30 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.3.9600.16384 - -Original -.text:10016115 cmp eax, [ecx+320h] -.text:1001611B jz loc_10034DE1 -_______________ - -Changed -.text:10016115 mov eax, 100h -.text:1001611A mov [ecx+320h], eax -.text:10016120 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.3.9600.17095 - -Original -.text:10037529 cmp eax, [ecx+320h] -.text:1003752F jz loc_10043662 -_______________ - -Changed -.text:10037529 mov eax, 100h -.text:1003752E mov [ecx+320h], eax -.text:10037534 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.4.9841.0 - -Original -.text:1003B989 cmp eax, [ecx+320h] -.text:1003B98F jz loc_1005E809 -_______________ - -Changed -.text:1003B989 mov eax, 100h -.text:1003B98E mov [ecx+320h], eax -.text:1003B994 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.4.9860.0 - -Original -.text:1003BEC9 cmp eax, [ecx+320h] -.text:1003BECF jz loc_1005EE1A -_______________ - -Changed -.text:1003BEC9 mov eax, 100h -.text:1003BECE mov [ecx+320h], eax -.text:1003BED4 nop -CDefPolicy_Query_eax_ecx -} - var Stub_SLGetWindowsInformationDWORD: far_jmp; Old_SLGetWindowsInformationDWORD: OldCode; @@ -415,8 +111,6 @@ var // Main code procedure WriteLog(S: AnsiString); -const - LogFile = '\rdpwrap.txt'; var F: TextFile; begin @@ -428,6 +122,28 @@ begin CloseFile(F); end; +function GetModuleHandleEx(dwFlags: DWORD; lpModuleName: PWideChar; + var phModule: HMODULE): BOOL; stdcall; external kernel32 name 'GetModuleHandleExW'; + +function GetCurrentModule: HMODULE; +const + GET_MODULE_HANDLE_EX_FLAG_PIN = 1; + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2; + GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4; +begin + Result := 0; + GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, @GetCurrentModule, Result); +end; + +function GetBinaryPath: String; +var + Buf: Array[0..511] of Byte; +begin + ZeroMemory(@Buf[0], Length(Buf)); + GetModuleFileName(GetCurrentModule, PWideChar(@Buf[0]), Length(Buf)); + Result := PWideChar(@Buf[0]); +end; + procedure StopThreads; var h, CurrTh, ThrHandle, CurrPr: DWORD; @@ -541,7 +257,7 @@ begin end; end;} -function GetModuleVersion(const ModuleName: TFileName; var FileVersion: FILE_VERSION): Boolean; +function GetModuleVersion(const ModuleName: String; var FileVersion: FILE_VERSION): Boolean; type VS_VERSIONINFO = record wLength, wValueLength, wType: Word; @@ -589,7 +305,7 @@ begin Result := True; end; -function GetFileVersion(const FileName: TFileName; var FileVersion: FILE_VERSION): Boolean; +function GetFileVersion(const FileName: String; var FileVersion: FILE_VERSION): Boolean; type VS_VERSIONINFO = record wLength, wValueLength, wType: Word; @@ -637,62 +353,8 @@ end; function OverrideSL(ValueName: String; var Value: DWORD): Boolean; begin Result := True; - // Allow Remote Connections - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowRemoteConnections' then begin - Value := 1; - Exit; - end; - // Allow Multiple Sessions - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowMultipleSessions' then begin - Value := 1; - Exit; - end; - // Allow Multiple Sessions (Application Server Mode) - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowAppServerMode' then begin - Value := 1; - Exit; - end; - // Allow Multiple Monitors - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowMultimon' then begin - Value := 1; - Exit; - end; - // Max User Sessions (0 = unlimited) - if ValueName = 'TerminalServices-RemoteConnectionManager-MaxUserSessions' then begin - Value := 0; - Exit; - end; - // Max Debug Sessions (Win 8, 0 = unlimited) - if ValueName = 'TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions' then begin - Value := 0; - Exit; - end; - // Max Sessions - // 0 - logon not possible even from console - // 1 - only one active user (console or remote) - // 2 - allow concurrent sessions - if ValueName = 'TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions' then begin - Value := 2; - Exit; - end; - // Allow Advanced Compression with RDP 7 Protocol - if ValueName = 'TerminalServices-RDP-7-Advanced-Compression-Allowed' then begin - Value := 1; - Exit; - end; - // IsTerminalTypeLocalOnly = 0 - if ValueName = 'TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly' then begin - Value := 0; - Exit; - end; - // Max Sessions (hard limit) - if ValueName = 'TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions' then begin - Value := 1000; - Exit; - end; - // Allow Easy Print - if ValueName = 'TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed' then begin - Value := 1; + if INIValueExists(INI, 'SLPolicy', ValueName) then begin + Value := INIReadDWord(INI, 'SLPolicy', ValueName, 0); Exit; end; Result := False; @@ -770,6 +432,7 @@ end; function New_CSLQuery_Initialize: HRESULT; stdcall; var + Sect: String; bServerSku, bRemoteConnAllowed, bFUSEnabled, @@ -788,110 +451,82 @@ begin ulMaxDebugSessions := nil; bInitialized := nil; WriteLog('> CSLQuery::Initialize'); - if (FV.Release = 9431) and (FV.Build = 0) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $A22A8); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $A22AC); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $A22B0); - bInitialized := Pointer(Cardinal(TermSrvBase) + $A22B4); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $A22B8); - bServerSku := Pointer(Cardinal(TermSrvBase) + $A22BC); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $A22C0); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $A22C4); - end; - if (FV.Release = 9600) and (FV.Build = 16384) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $C02A8); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $C02AC); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $C02B0); - bInitialized := Pointer(Cardinal(TermSrvBase) + $C02B4); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $C02B8); - bServerSku := Pointer(Cardinal(TermSrvBase) + $C02BC); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $C02C0); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $C02C4); - end; - if (FV.Release = 9600) and (FV.Build = 17095) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $C12A8); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $C12AC); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $C12B0); - bInitialized := Pointer(Cardinal(TermSrvBase) + $C12B4); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $C12B8); - bServerSku := Pointer(Cardinal(TermSrvBase) + $C12BC); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $C12C0); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $C12C4); - end; - if (FV.Release = 9841) and (FV.Build = 0) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $BF9F0); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $BF9F4); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $BF9F8); - bInitialized := Pointer(Cardinal(TermSrvBase) + $BF9FC); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $BFA00); - bServerSku := Pointer(Cardinal(TermSrvBase) + $BFA04); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $BFA08); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $BFA0C); - end; - if (FV.Release = 9860) and (FV.Build = 0) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $BF7E0); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $BF7E4); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $BF7E8); - bInitialized := Pointer(Cardinal(TermSrvBase) + $BF7EC); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $BF7F0); - bServerSku := Pointer(Cardinal(TermSrvBase) + $BF7F4); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $BF7F8); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $BF7FC); + Sect := IntToStr(FV.Version.w.Major)+'.'+IntToStr(FV.Version.w.Minor)+'.'+ + IntToStr(FV.Release)+'.'+IntToStr(FV.Build)+'-SLInit'; + if INISectionExists(INI, Sect) then begin + bServerSku := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'bServerSku.x86', 0)); + bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'bRemoteConnAllowed.x86', 0)); + bFUSEnabled := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'bFUSEnabled.x86', 0)); + bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'bAppServerAllowed.x86', 0)); + bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'bMultimonAllowed.x86', 0)); + lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'lMaxUserSessions.x86', 0)); + ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'ulMaxDebugSessions.x86', 0)); + bInitialized := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'bInitialized.x86', 0)); end; + if bServerSku <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bServerSku), 1)+'] bServerSku = 1'); - bServerSku^ := 1; + bServerSku^ := INIReadDWord(INI, 'SLInit', 'bServerSku', 1); + WriteLog('[0x'+IntToHex(DWORD(bServerSku), 1)+'] bServerSku = ' + IntToStr(bServerSku^)); end; if bRemoteConnAllowed <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bRemoteConnAllowed), 1)+'] bRemoteConnAllowed = 1'); - bRemoteConnAllowed^ := 1; + bRemoteConnAllowed^ := INIReadDWord(INI, 'SLInit', 'bRemoteConnAllowed', 1); + WriteLog('[0x'+IntToHex(DWORD(bRemoteConnAllowed), 1)+'] bRemoteConnAllowed = ' + IntToStr(bRemoteConnAllowed^)); end; if bFUSEnabled <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bFUSEnabled), 1)+'] bFUSEnabled = 1'); - bFUSEnabled^ := 1; + bFUSEnabled^ := INIReadDWord(INI, 'SLInit', 'bFUSEnabled', 1); + WriteLog('[0x'+IntToHex(DWORD(bFUSEnabled), 1)+'] bFUSEnabled = ' + IntToStr(bFUSEnabled^)); end; if bAppServerAllowed <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bAppServerAllowed), 1)+'] bAppServerAllowed = 1'); - bAppServerAllowed^ := 1; + bAppServerAllowed^ := INIReadDWord(INI, 'SLInit', 'bAppServerAllowed', 1); + WriteLog('[0x'+IntToHex(DWORD(bAppServerAllowed), 1)+'] bAppServerAllowed = ' + IntToStr(bAppServerAllowed^)); end; if bMultimonAllowed <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bMultimonAllowed), 1)+'] bMultimonAllowed = 1'); - bMultimonAllowed^ := 1; + bMultimonAllowed^ := INIReadDWord(INI, 'SLInit', 'bMultimonAllowed', 1); + WriteLog('[0x'+IntToHex(DWORD(bMultimonAllowed), 1)+'] bMultimonAllowed = ' + IntToStr(bMultimonAllowed^)); end; if lMaxUserSessions <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(lMaxUserSessions), 1)+'] lMaxUserSessions = 0'); - lMaxUserSessions^ := 0; + lMaxUserSessions^ := INIReadDWord(INI, 'SLInit', 'lMaxUserSessions', 0); + WriteLog('[0x'+IntToHex(DWORD(lMaxUserSessions), 1)+'] lMaxUserSessions = ' + IntToStr(lMaxUserSessions^)); end; if ulMaxDebugSessions <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(ulMaxDebugSessions), 1)+'] ulMaxDebugSessions = 0'); - ulMaxDebugSessions^ := 0; + ulMaxDebugSessions^ := INIReadDWord(INI, 'SLInit', 'ulMaxDebugSessions', 0); + WriteLog('[0x'+IntToHex(DWORD(ulMaxDebugSessions), 1)+'] ulMaxDebugSessions = ' + IntToStr(ulMaxDebugSessions^)); end; if bInitialized <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bInitialized), 1)+'] bInitialized = 1'); - bInitialized^ := 1; + bInitialized^ := INIReadDWord(INI, 'SLInit', 'bInitialized', 1); + WriteLog('[0x'+IntToHex(DWORD(bInitialized), 1)+'] bInitialized = ' + IntToStr(bInitialized^)); end; Result := S_OK; end; procedure HookFunctions; var + Sect, FuncName: String; V: DWORD; TS_Handle, SLC_Handle: THandle; TermSrvSize: DWORD; SignPtr: Pointer; - Results: IntArray; + I: Integer; + PatchList: SList; + Patch: Array of TBytes; Jump: far_jmp; MovJump: mov_far_jmp; - nop: DWORD; - b: Byte; begin { hook function ^^ (called once) } IsHooked := True; - nop := $90909090; TSMain := nil; TSGlobals := nil; SLGetWindowsInformationDWORD := nil; + + WriteLog('Loading configuration...'); + INILoad(INI, ExtractFilePath(GetBinaryPath) + 'rdpwrap.ini'); + if Length(INI) = 0 then begin + WriteLog('Error: Failed to load configuration'); + Exit; + end; + + LogFile := INIReadString(INI, 'Main', 'LogFile', ExtractFilePath(GetBinaryPath) + 'rdpwrap.txt'); WriteLog('init'); // load termsrv.dll and get functions @@ -928,7 +563,16 @@ begin WriteLog('freeze'); StopThreads(); - if (V = $0600) then begin + WriteLog('Loading patch codes...'); + PatchList := INIReadSection(INI, 'PatchCodes'); + SetLength(Patch, Length(PatchList)); + for I := 0 to Length(Patch) - 1 do begin + Patch[I] := INIReadBytes(INI, 'PatchCodes', PatchList[I]); + if Length(Patch[I]) > 16 then // for security reasons + SetLength(Patch[I], 16); // not more than 16 bytes + end; + + if (V = $0600) and (INIReadBool(INI, 'Main', 'SLPolicyHookNT60', True)) then begin // Windows Vista // uses SL Policy API (slc.dll) @@ -949,110 +593,8 @@ begin WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); end; - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release = 6000) and (FV.Build = 16386) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F320000 - .text:6F3360B9 lea eax, [ebp+VersionInformation] - .text:6F3360BF inc ebx <- nop - .text:6F3360C0 push eax ; lpVersionInformation - .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F3360CB mov [esi], ebx - .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $160BF); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $15CD8); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6001) and (FV.Build = 18000) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6E800000 - .text:6E8185DE lea eax, [ebp+VersionInformation] - .text:6E8185E4 inc ebx <- nop - .text:6E8185E5 push eax ; lpVersionInformation - .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6E8185F0 mov [esi], ebx - .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $185E4); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FD8); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6002) and (FV.Build = 18005) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F580000 - .text:6F597FA2 lea eax, [ebp+VersionInformation] - .text:6F597FA8 inc ebx <- nop - .text:6F597FA9 push eax ; lpVersionInformation - .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FB4 mov [esi], ebx - .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FA8); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $179C0); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6002) and (FV.Build = 19214) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F580000 - .text:6F597FBE lea eax, [ebp+VersionInformation] - .text:6F597FC4 inc ebx <- nop - .text:6F597FC5 push eax ; lpVersionInformation - .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FD0 mov [esi], ebx - .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FC4); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $179B8); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6002) and (FV.Build = 23521) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F580000 - .text:6F597FAE lea eax, [ebp+VersionInformation] - .text:6F597FB4 inc ebx <- nop - .text:6F597FB5 push eax ; lpVersionInformation - .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FC0 mov [esi], ebx - .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FB4); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $179CC); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - end; end; - if (V = $0601) then begin + if (V = $0601) and (INIReadBool(INI, 'Main', 'SLPolicyHookNT61', True)) then begin // Windows 7 // uses SL Policy API (slc.dll) @@ -1073,127 +615,6 @@ begin WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); end; - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release = 7600) and (FV.Build = 16385) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2F9E1F lea eax, [ebp+VersionInformation] - .text:6F2F9E25 inc ebx <- nop - .text:6F2F9E26 push eax ; lpVersionInformation - .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2F9E31 mov [esi], ebx - .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $19E25); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $196F3); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 17514) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA497 lea eax, [ebp+VersionInformation] - .text:6F2FA49D inc ebx <- nop - .text:6F2FA49E push eax ; lpVersionInformation - .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4A9 mov [esi], ebx - .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A49D); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19D53); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 18540) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA4DF lea eax, [ebp+VersionInformation] - .text:6F2FA4E5 inc ebx <- nop - .text:6F2FA4E6 push eax ; lpVersionInformation - .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4F1 mov [esi], ebx - .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4E5); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19D9F); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 22750) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19E21); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 18637) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA4D7 lea eax, [ebp+VersionInformation] - .text:6F2FA4DD inc ebx <- nop - .text:6F2FA4DE push eax ; lpVersionInformation - .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4E9 mov [esi], ebx - .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4DD); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19DBB); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 22843) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19E25); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - end; end; if V = $0602 then begin // Windows 8 @@ -1203,412 +624,92 @@ begin // (will be used on intercepting undefined values) SLC_Handle := LoadLibrary('slc.dll'); SLGetWindowsInformationDWORD := GetProcAddress(SLC_Handle, 'SLGetWindowsInformationDWORD'); - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // SLGetWindowsInformationDWORDWrapper - - if (FV.Release = 8102) and (FV.Build = 0) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1000F7E5 lea eax, [esp+150h+VersionInformation] - .text:1000F7E9 inc esi <- nop - .text:1000F7EA push eax ; lpVersionInformation - .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1000F7F3 mov [edi], esi - .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $F7E9); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $E47C); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1B909); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 8250) and (FV.Build = 0) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:100159C5 lea eax, [esp+150h+VersionInformation] - .text:100159C9 inc esi <- nop - .text:100159CA push eax ; lpVersionInformation - .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:100159D3 mov [edi], esi - .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $159C9); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13520); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A0A9); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL_CP; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 8400) and (FV.Build = 0) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1001547E lea eax, [esp+150h+VersionInformation] - .text:10015482 inc esi <- nop - .text:10015483 push eax ; lpVersionInformation - .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001548C mov [edi], esi - .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $15482); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13E48); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19629); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 9200) and (FV.Build = 16384) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1001554E lea eax, [esp+150h+VersionInformation] - .text:10015552 inc esi <- nop - .text:10015553 push eax ; lpVersionInformation - .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001555C mov [edi], esi - .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $15552); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13F08); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19559); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 9200) and (FV.Build = 17048) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1002058E lea eax, [esp+150h+VersionInformation] - .text:10020592 inc esi <- nop - .text:10020593 push eax ; lpVersionInformation - .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1002059C mov [edi], esi - .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $20592); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1F408); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $17059); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 9200) and (FV.Build = 21166) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10015576 lea eax, [esp+150h+VersionInformation] - .text:1001557A inc esi <- nop - .text:1001557B push eax ; lpVersionInformation - .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:10015584 mov [edi], esi - .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1557A); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13F30); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19581); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - end; end; if V = $0603 then begin // Windows 8.1 // uses SL Policy internal inline code - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release = 9431) and (FV.Build = 0) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:1008A609 test eax, eax - .text:1008A60B js short loc_1008A628 - .text:1008A60D cmp [ebp+var_8], 0 - .text:1008A611 jz short loc_1008A628 <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $8A611); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:100306A4 lea eax, [esp+150h+VersionInformation] - .text:100306A8 inc ebx <- nop - .text:100306A9 mov [edi], ebx - .text:100306AB push eax ; lpVersionInformation - .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $306A8); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $2EA25); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $196B0); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - if (FV.Release = 9600) and (FV.Build = 16384) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A2721 test eax, eax - .text:100A2723 js short loc_100A2740 - .text:100A2725 cmp [ebp+var_8], 0 - .text:100A2729 jz short loc_100A2740 <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $A2729); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10018024 lea eax, [esp+150h+VersionInformation] - .text:10018028 inc ebx <- nop - .text:10018029 mov [edi], ebx - .text:1001802B push eax ; lpVersionInformation - .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $18028); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $16115); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1CEB0); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - if (FV.Release = 9600) and (FV.Build = 17095) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A36C9 test eax, eax - .text:100A36CB js short loc_100A36E8 - .text:100A36CD cmp [ebp+var_8], 0 - .text:100A36D1 jz short loc_100A36E8 <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $A36D1); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10036BA5 lea eax, [esp+150h+VersionInformation] - .text:10036BA9 inc ebx <- nop - .text:10036BAA mov [edi], ebx - .text:10036BAC push eax ; lpVersionInformation - .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $36BA9); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $37529); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $117F1); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - - end; end; if V = $0604 then begin // Windows 10 // uses SL Policy internal inline code - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release = 9841) and (FV.Build = 0) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:1009569B call sub_100B7EE5 - .text:100956A0 test eax, eax - .text:100956A2 js short loc_100956BF - .text:100956A4 cmp [ebp+var_C], 0 - .text:100956A8 jz short loc_100956BF <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $956A8); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10030121 lea eax, [esp+150h+VersionInformation] - .text:10030125 inc ebx <- nop - .text:10030126 mov [edi], ebx - .text:10030128 push eax ; lpVersionInformation - .text:10030129 call ds:GetVersionExW - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $30125); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $3B989); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $46A68); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - - if (FV.Release = 9860) and (FV.Build = 0) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100962C0 test eax, eax - .text:100962C2 js short loc_100962DF - .text:100962C4 cmp [ebp+var_C], 0 - .text:100962C8 jz short loc_100962DF <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $962C8); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10030841 lea eax, [esp+150h+VersionInformation] - .text:10030845 inc ebx <- nop - .text:10030846 mov [edi], ebx - .text:10030848 push eax ; lpVersionInformation - .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $30845); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $3BEC9); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $46F18); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - - end; end; + Sect := IntToStr(FV.Version.w.Major)+'.'+IntToStr(FV.Version.w.Minor)+'.'+ + IntToStr(FV.Release)+'.'+IntToStr(FV.Build); + + if INISectionExists(INI, Sect) then + if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin + if INIReadBool(INI, Sect, 'LocalOnlyPatch.x86', False) then begin + WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); + try + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'LocalOnlyOffset.x86', 0)); + I := SListFind(PatchList, INIReadString(INI, Sect, 'LocalOnlyCode.x86', '')); + if I >= 0 then + WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); + except + + end; + end; + if INIReadBool(INI, Sect, 'SingleUserPatch.x86', False) then begin + WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); + try + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SingleUserOffset.x86', 0)); + I := SListFind(PatchList, INIReadString(INI, Sect, 'SingleUserCode.x86', '')); + if I >= 0 then + WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); + except + + end; + end; + if INIReadBool(INI, Sect, 'DefPolicyPatch.x86', False) then begin + WriteLog('Patch CDefPolicy::Query'); + try + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'DefPolicyOffset.x86', 0)); + I := SListFind(PatchList, INIReadString(INI, Sect, 'DefPolicyCode.x86', '')); + if I >= 0 then + WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); + except + + end; + end; + if INIReadBool(INI, Sect, 'SLPolicyInternal.x86', False) then begin + WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); + try + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SLPolicyOffset.x86', 0)); + except + SignPtr := nil; + end; + MovJump.MovOp := $89; // mov eax, ecx + MovJump.MovArg := $C8; // __msfastcall compatibility + MovJump.PushOp := $68; + MovJump.PushArg := nil; + FuncName := INIReadString(INI, Sect, 'SLPolicyFunc.x86', 'New_Win8SL'); + if FuncName = 'New_Win8SL' then + MovJump.PushArg := @New_Win8SL; + if FuncName = 'New_Win8SL_CP' then + MovJump.PushArg := @New_Win8SL_CP; + MovJump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @MovJump, SizeOf(mov_far_jmp), bw); + end; + if INIReadBool(INI, Sect, 'SLInitHook.x86', False) then begin + WriteLog('Hook CSLQuery::Initialize'); + try + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SLInitOffset.x86', 0)); + except + SignPtr := nil; + end; + Jump.PushOp := $68; + Jump.PushArg := nil; + FuncName := INIReadString(INI, Sect, 'SLInitFunc.x86', 'New_CSLQuery_Initialize'); + if FuncName = 'New_CSLQuery_Initialize' then + Jump.PushArg := @New_CSLQuery_Initialize; + Jump.RetOp := $C3; + WriteProcessMemory(GetCurrentProcess, SignPtr, + @Jump, SizeOf(far_jmp), bw); + end; + end; + // unfreeze threads WriteLog('resume'); RunThreads(); diff --git a/src-x86-binarymaster/src/rdpwrap.ini b/src-x86-binarymaster/src/rdpwrap.ini new file mode 100644 index 0000000..6b44968 --- /dev/null +++ b/src-x86-binarymaster/src/rdpwrap.ini @@ -0,0 +1,1250 @@ +; RDP Wrapper Library configuration +; Do not modify without special knowledge + +[Main] +Updated=2014-11-20 +LogFile=\rdpwrap.txt +SLPolicyHookNT60=1 +SLPolicyHookNT61=1 + +[SLPolicy] +; Allow Remote Connections +TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 +; Allow Multiple Sessions +TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 +; Allow Multiple Sessions (Application Server Mode) +TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 +; Allow Multiple Monitors +TerminalServices-RemoteConnectionManager-AllowMultimon=1 +; Max User Sessions (0 = unlimited) +TerminalServices-RemoteConnectionManager-MaxUserSessions=0 +; Max Debug Sessions (Windows 8, 0 = unlimited) +TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 +; Max Sessions +; 0 - logon not possible even from console +; 1 - only one active user (console or remote) +; 2 - allow concurrent sessions +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 +; Allow Advanced Compression with RDP 7 Protocol +TerminalServices-RDP-7-Advanced-Compression-Allowed=1 +; IsTerminalTypeLocalOnly = 0 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 +; Max Sessions (hard limit) +TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 +; EasyPrint +TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 + +[PatchCodes] +nop=90 +Zero=00 +jmpshort=EB +nopjmp=90E9 +CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 +CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB +CDefPolicy_Query_eax_esi=B80001000089862003000090 +CDefPolicy_Query_eax_rdi=B80001000089873806000090 +CDefPolicy_Query_eax_ecx=B80001000089812003000090 +CDefPolicy_Query_eax_rcx=B80001000089813806000090 + +[6.0.6000.16386] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F320000 +; .text:6F3360B9 lea eax, [ebp+VersionInformation] +; .text:6F3360BF inc ebx <- nop +; .text:6F3360C0 push eax ; lpVersionInformation +; .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F3360CB mov [esi], ebx +; .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=160BF +SingleUserCode.x86=nop +; Imagebase: 7FF756E0000 +; .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75745E3D mov ebx, 1 <- 0 +; .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75745E4A mov [rdi], ebx +; .text:000007FF75745E4C call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=65E3E +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F335CD8 cmp edx, [ecx+320h] +; .text:6F335CDE pop esi +; .text:6F335CDF jz loc_6F3426F1 +; Changed +; .text:6F335CD8 mov edx, 100h +; .text:6F335CDD mov [ecx+320h], edx +; .text:6F335CE3 pop esi +; .text:6F335CE4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=15CD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF7573C88F mov eax, [rcx+638h] +; .text:000007FF7573C895 cmp [rcx+63Ch], eax +; .text:000007FF7573C89B jnz short loc_7FF7573C8B3 +; Changed +; .text:000007FF7573C88F mov eax, 100h +; .text:000007FF7573C894 mov [rcx+638h], eax +; .text:000007FF7573C89A nop +; .text:000007FF7573C89B jmp short loc_7FF7573C8B3 +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=5C88F +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6001.18000] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6E800000 +; .text:6E8185DE lea eax, [ebp+VersionInformation] +; .text:6E8185E4 inc ebx <- nop +; .text:6E8185E5 push eax ; lpVersionInformation +; .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6E8185F0 mov [esi], ebx +; .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=185E4 +SingleUserCode.x86=nop +; Imagebase: 7FF76220000 +; .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF76290DB9 mov ebx, 1 <- 0 +; .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF76290DC6 mov [rdi], ebx +; .text:000007FF76290DC8 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=70DBA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6E817FD8 cmp edx, [ecx+320h] +; .text:6E817FDE pop esi +; .text:6E817FDF jz loc_6E826F16 +; Changed +; .text:6E817FD8 mov edx, 100h +; .text:6E817FDD mov [ecx+320h], edx +; .text:6E817FE3 pop esi +; .text:6E817FE4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=17FD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF76285BD7 mov eax, [rcx+638h] +; .text:000007FF76285BDD cmp [rcx+63Ch], eax +; .text:000007FF76285BE3 jnz short loc_7FF76285BFB +; Changed +; .text:000007FF76285BD7 mov eax, 100h +; .text:000007FF76285BDC mov [rcx+638h], eax +; .text:000007FF76285BE2 nop +; .text:000007FF76285BE3 jmp short loc_7FF76285BFB +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65BD7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.18005] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F580000 +; .text:6F597FA2 lea eax, [ebp+VersionInformation] +; .text:6F597FA8 inc ebx <- nop +; .text:6F597FA9 push eax ; lpVersionInformation +; .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F597FB4 mov [esi], ebx +; .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FA8 +SingleUserCode.x86=nop +; Imagebase: 7FF766C0000 +; .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF76730FF5 mov ebx, 1 <- 0 +; .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF76731002 mov [rdi], ebx +; .text:000007FF76731004 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=70FF6 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F5979C0 cmp edx, [ecx+320h] +; .text:6F5979C6 pop esi +; .text:6F5979C7 jz loc_6F5A6F26 +; Changed +; .text:6F5979C0 mov edx, 100h +; .text:6F5979C5 mov [ecx+320h], edx +; .text:6F5979CB pop esi +; .text:6F5979CC nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179C0 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF76725E83 mov eax, [rcx+638h] +; .text:000007FF76725E89 cmp [rcx+63Ch], eax +; .text:000007FF76725E8F jz short loc_7FF76725EA7 +; Changed +; .text:000007FF76725E83 mov eax, 100h +; .text:000007FF76725E88 mov [rcx+638h], eax +; .text:000007FF76725E8E nop +; .text:000007FF76725E8F jmp short loc_7FF76725EA7 +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65E83 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.19214] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F580000 +; .text:6F597FBE lea eax, [ebp+VersionInformation] +; .text:6F597FC4 inc ebx <- nop +; .text:6F597FC5 push eax ; lpVersionInformation +; .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F597FD0 mov [esi], ebx +; .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FC4 +SingleUserCode.x86=nop +; Imagebase: 7FF75AC0000 +; .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75B312A9 mov ebx, 1 <- 0 +; .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75B312B6 mov [rdi], ebx +; .text:000007FF75B312B8 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=712AA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F5979B8 cmp edx, [ecx+320h] +; .text:6F5979BE pop esi +; .text:6F5979BF jz loc_6F5A6F3E +; Changed +; .text:6F5979B8 mov edx, 100h +; .text:6F5979BD mov [ecx+320h], edx +; .text:6F5979C3 pop esi +; .text:6F5979C4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179B8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF75B25FF7 mov eax, [rcx+638h] +; .text:000007FF75B25FFD cmp [rcx+63Ch], eax +; .text:000007FF75B26003 jnz short loc_7FF75B2601B +; Changed +; .text:000007FF75B25FF7 mov eax, 100h +; .text:000007FF75B25FFC mov [rcx+638h], eax +; .text:000007FF75B26002 nop +; .text:000007FF75B26003 jmp short loc_7FF75B2601B +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65FF7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.23521] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F580000 +; .text:6F597FAE lea eax, [ebp+VersionInformation] +; .text:6F597FB4 inc ebx <- nop +; .text:6F597FB5 push eax ; lpVersionInformation +; .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F597FC0 mov [esi], ebx +; .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FB4 +SingleUserCode.x86=nop +; Imagebase: 7FF75AC0000 +; .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75B31EA9 mov ebx, 1 <- 0 +; .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75B31EB6 mov [rdi], ebx +; .text:000007FF75B31EB8 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=71EAA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F5979CC cmp edx, [ecx+320h] +; .text:6F5979D2 pop esi +; .text:6F5979D3 jz loc_6F5A6F2E +; Changed +; .text:6F5979CC mov edx, 100h +; .text:6F5979D1 mov [ecx+320h], edx +; .text:6F5979D7 pop esi +; .text:6F5979D8 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179CC +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF75B269CB mov eax, [rcx+638h] +; .text:000007FF75B269D1 cmp [rcx+63Ch], eax +; .text:000007FF75B269D7 jnz short loc_7FF75B269EF +; Changed +; .text:000007FF75B269CB mov eax, 100h +; .text:000007FF75B269D0 mov [rcx+638h], eax +; .text:000007FF75B269D6 nop +; .text:000007FF75B269D7 jmp short loc_7FF75B269EF +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=669CB +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.1.7600.16385] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2F9E1F lea eax, [ebp+VersionInformation] +; .text:6F2F9E25 inc ebx <- nop +; .text:6F2F9E26 push eax ; lpVersionInformation +; .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2F9E31 mov [esi], ebx +; .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E25 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A97D95 mov ebx, 1 <- 0 +; .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A97DA2 mov [rdi], ebx +; .text:000007FF75A97DA4 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=17D96 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F96F3 cmp eax, [esi+320h] +; .text:6F2F96F9 jz loc_6F30E256 +; Changed +; .text:6F2F96F3 mov eax, 100h +; .text:6F2F96F8 mov [esi+320h], eax +; .text:6F2F96FE nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196F3 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97AD2 cmp [rdi+63Ch], eax +; .text:000007FF75A97AD8 jz loc_7FF75AA4978 +; Changed +; .text:000007FF75A97AD2 mov eax, 100h +; .text:000007FF75A97AD7 mov [rdi+638h], eax +; .text:000007FF75A97ADD nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17AD2 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.17514] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA497 lea eax, [ebp+VersionInformation] +; .text:6F2FA49D inc ebx <- nop +; .text:6F2FA49E push eax ; lpVersionInformation +; .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA4A9 mov [esi], ebx +; .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A980E1 mov ebx, 1 <- 0 +; .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A980EE mov [rdi], ebx +; .text:000007FF75A980F0 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=180E2 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9D53 cmp eax, [esi+320h] +; .text:6F2F9D59 jz loc_6F30B25E +; Changed +; .text:6F2F9D53 mov eax, 100h +; .text:6F2F9D58 mov [esi+320h], eax +; .text:6F2F9D5E nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97D8A cmp [rdi+63Ch], eax +; .text:000007FF75A97D90 jz loc_7FF75AA40F4 +; Changed +; .text:000007FF75A97D8A mov eax, 100h +; .text:000007FF75A97D8F mov [rdi+638h], eax +; .text:000007FF75A97D95 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D8A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18540] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA4DF lea eax, [ebp+VersionInformation] +; .text:6F2FA4E5 inc ebx <- nop +; .text:6F2FA4E6 push eax ; lpVersionInformation +; .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA4F1 mov [esi], ebx +; .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4E5 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A98005 mov ebx, 1 <- 0 +; .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A98012 mov [rdi], ebx +; .text:000007FF75A98014 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=18006 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9D9F cmp eax, [esi+320h] +; .text:6F2F9DA5 jz loc_6F30B2AE +; Changed +; .text:6F2F9D9F mov eax, 100h +; .text:6F2F9DA4 mov [esi+320h], eax +; .text:6F2F9DAA nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D9F +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97C82 cmp [rdi+63Ch], eax +; .text:000007FF75A97C88 jz loc_7FF75AA3FBD +; Changed +; .text:000007FF75A97C82 mov eax, 100h +; .text:000007FF75A97C87 mov [rdi+638h], eax +; .text:000007FF75A97C8D nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C82 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22750] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA64F lea eax, [ebp+VersionInformation] +; .text:6F2FA655 inc ebx <- nop +; .text:6F2FA656 push eax ; lpVersionInformation +; .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA661 mov [esi], ebx +; .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A97E8D mov ebx, 1 <- 0 +; .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A97E9A mov [rdi], ebx +; .text:000007FF75A97E9C call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E8E +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9E21 cmp eax, [esi+320h] +; .text:6F2F9E27 jz loc_6F30B6CE +; Changed +; .text:6F2F9E21 mov eax, 100h +; .text:6F2F9E26 mov [esi+320h], eax +; .text:6F2F9E2C nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E21 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97C92 cmp [rdi+63Ch], eax +; .text:000007FF75A97C98 jz loc_7FF75AA40A2 +; Changed +; .text:000007FF75A97C92 mov eax, 100h +; .text:000007FF75A97C97 mov [rdi+638h], eax +; .text:000007FF75A97C9D nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C92 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18637] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA4D7 lea eax, [ebp+VersionInformation] +; .text:6F2FA4DD inc ebx <- nop +; .text:6F2FA4DE push eax ; lpVersionInformation +; .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA4E9 mov [esi], ebx +; .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4DD +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A980F9 mov ebx, 1 <- 0 +; .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A98106 mov [rdi], ebx +; .text:000007FF75A98108 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=180FA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9DBB cmp eax, [esi+320h] +; .text:6F2F9DC1 jz loc_6F30B2A6 +; Changed +; .text:6F2F9DBB mov eax, 100h +; .text:6F2F9DC0 mov [esi+320h], eax +; .text:6F2F9DC6 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19DBB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97DC6 cmp [rdi+63Ch], eax +; .text:000007FF75A97DCC jz loc_7FF75AA40BD +; Changed +; .text:000007FF75A97DC6 mov eax, 100h +; .text:000007FF75A97DCB mov [rdi+638h], eax +; .text:000007FF75A97DD1 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17DC6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22843] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA64F lea eax, [ebp+VersionInformation] +; .text:6F2FA655 inc ebx <- nop +; .text:6F2FA656 push eax ; lpVersionInformation +; .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA661 mov [esi], ebx +; .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A97F95 mov ebx, 1 <- 0 +; .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A97FA2 mov [rdi], ebx +; .text:000007FF75A97FA4 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F96 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9E25 cmp eax, [esi+320h] +; .text:6F2F9E2B jz loc_6F30B6D6 +; Changed +; .text:6F2F9E25 mov eax, 100h +; .text:6F2F9E2A mov [esi+320h], eax +; .text:6F2F9E30 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E25 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97D6E cmp [rdi+63Ch], eax +; .text:000007FF75A97D74 jz loc_7FF75AA4182 +; Changed +; .text:000007FF75A97D6E mov eax, 100h +; .text:000007FF75A97D73 mov [rdi+638h], eax +; .text:000007FF75A97D79 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D6E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.2.8102.0] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1000F7E5 lea eax, [esp+150h+VersionInformation] +; .text:1000F7E9 inc esi <- nop +; .text:1000F7EA push eax ; lpVersionInformation +; .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1000F7F3 mov [edi], esi +; .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=F7E9 +SingleUserCode.x86=nop +; .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:000000018000D83F mov ebx, 1 <- 0 +; .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018000D84C mov [rdi], ebx +; .text:000000018000D84E call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=D840 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1000E47C cmp eax, [esi+320h] +; .text:1000E482 jz loc_1002D775 +; Changed +; .text:1000E47C mov eax, 100h +; .text:1000E481 mov [esi+320h], eax +; .text:1000E487 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=E47C +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018000D3E6 cmp [rdi+63Ch], eax +; .text:000000018000D3EC jz loc_180027792 +; Changed +; .text:000000018000D3E6 mov eax, 100h +; .text:000000018000D3EB mov [rdi+638h], eax +; .text:000000018000D3F1 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=D3E6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1B909 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=1A484 +SLPolicyFunc.x64=New_Win8SL + +[6.2.8250.0] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:100159C5 lea eax, [esp+150h+VersionInformation] +; .text:100159C9 inc esi <- nop +; .text:100159CA push eax ; lpVersionInformation +; .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:100159D3 mov [edi], esi +; .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=159C9 +SingleUserCode.x86=nop +; .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:0000000180011E73 mov ebx, 1 <- 0 +; .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180011E80 mov [rdi], ebx +; .text:0000000180011E82 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=11E74 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013520 cmp eax, [esi+320h] +; .text:10013526 jz loc_1002DB85 +; Changed +; .text:10013520 mov eax, 100h +; .text:10013525 mov [esi+320h], eax +; .text:1001352B nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13520 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018001187A cmp [rdi+63Ch], eax +; .text:0000000180011880 jz loc_1800273A2 +; Changed +; .text:000000018001187A mov eax, 100h +; .text:000000018001187F mov [rdi+638h], eax +; .text:0000000180011885 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1187A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1A0A9 +SLPolicyFunc.x86=New_Win8SL_CP +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=18FAC +SLPolicyFunc.x64=New_Win8SL + +[6.2.8400.0] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1001547E lea eax, [esp+150h+VersionInformation] +; .text:10015482 inc esi <- nop +; .text:10015483 push eax ; lpVersionInformation +; .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1001548C mov [edi], esi +; .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=15482 +SingleUserCode.x86=nop +; .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:0000000180020823 mov ebx, 1 <- 0 +; .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180020830 mov [rdi], ebx +; .text:0000000180020832 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=20824 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013E48 cmp eax, [esi+320h] +; .text:10013E4E jz loc_1002E079 +; Changed +; .text:10013E48 mov eax, 100h +; .text:10013E4D mov [esi+320h], eax +; .text:10013E53 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13E48 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018001F102 cmp [rdi+63Ch], eax +; .text:000000018001F108 jz loc_18003A02E +; Changed +; .text:000000018001F102 mov eax, 100h +; .text:000000018001F107 mov [rdi+638h], eax +; .text:000000018001F10D nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F102 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19629 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=2492C +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.16384] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1001554E lea eax, [esp+150h+VersionInformation] +; .text:10015552 inc esi <- nop +; .text:10015553 push eax ; lpVersionInformation +; .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1001555C mov [edi], esi +; .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=15552 +SingleUserCode.x86=nop +; .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:000000018002BAA7 mov ebx, 1 <- 0 +; .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018002BAB4 mov [rdi], ebx +; .text:000000018002BAB6 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAA8 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013F08 cmp eax, [esi+320h] +; .text:10013F0E jz loc_1002E161 +; Changed +; .text:10013F08 mov eax, 100h +; .text:10013F0D mov [esi+320h], eax +; .text:10013F13 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F08 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018002A31A cmp [rdi+63Ch], eax +; .text:000000018002A320 jz loc_18003A0F9 +; Changed +; .text:000000018002A31A mov eax, 100h +; .text:000000018002A31F mov [rdi+638h], eax +; .text:000000018002A325 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A31A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19559 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FA8 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.17048] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1002058E lea eax, [esp+150h+VersionInformation] +; .text:10020592 inc esi <- nop +; .text:10020593 push eax ; lpVersionInformation +; .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1002059C mov [edi], esi +; .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=20592 +SingleUserCode.x86=nop +; .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:0000000180020947 mov ebx, 1 <- 0 +; .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180020954 mov [rdi], ebx +; .text:0000000180020956 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=20948 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1001F408 cmp eax, [esi+320h] +; .text:1001F40E jz loc_1002E201 +; Changed +; .text:1001F408 mov eax, 100h +; .text:1001F40D mov [esi+320h], eax +; .text:1001F413 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=1F408 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018001F206 cmp [rdi+63Ch], eax +; .text:000000018001F20C jz loc_18003A1B4 +; Changed +; .text:000000018001F206 mov eax, 100h +; .text:000000018001F20B mov [rdi+638h], eax +; .text:000000018001F211 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F206 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=17059 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=24570 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.21166] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10015576 lea eax, [esp+150h+VersionInformation] +; .text:1001557A inc esi <- nop +; .text:1001557B push eax ; lpVersionInformation +; .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:10015584 mov [edi], esi +; .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1557A +SingleUserCode.x86=nop +; .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:000000018002BAF7 mov ebx, 1 <- 0 +; .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018002BB04 mov [rdi], ebx +; .text:000000018002BB06 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAF8 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013F30 cmp eax, [esi+320h] +; .text:10013F36 jz loc_1002E189 +; Changed +; .text:10013F30 mov eax, 100h +; .text:10013F35 mov [esi+320h], eax +; .text:10013F3B nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F30 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018002A3B6 cmp [rdi+63Ch], eax +; .text:000000018002A3BC jz loc_18003A174 +; Changed +; .text:000000018002A3B6 mov eax, 100h +; .text:000000018002A3BB mov [rdi+638h], eax +; .text:000000018002A3C1 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A3B6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19581 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FD0 +SLPolicyFunc.x64=New_Win8SL + +[6.3.9431.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:1008A609 test eax, eax +; .text:1008A60B js short loc_1008A628 +; .text:1008A60D cmp [ebp+var_8], 0 +; .text:1008A611 jz short loc_1008A628 <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=8A611 +LocalOnlyCode.x86=jmpshort +; .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:000000018009F718 test eax, eax +; .text:000000018009F71A js short loc_18009F73B +; .text:000000018009F71C cmp [rsp+48h+arg_18], 0 +; .text:000000018009F721 jz short loc_18009F73B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9F721 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:100306A4 lea eax, [esp+150h+VersionInformation] +; .text:100306A8 inc ebx <- nop +; .text:100306A9 mov [edi], ebx +; .text:100306AB push eax ; lpVersionInformation +; .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=306A8 +SingleUserCode.x86=nop +; .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:00000001800367F8 mov ebx, 1 <- 0 +; .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180036805 mov [rdi], ebx +; .text:0000000180036807 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=367F9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1002EA25 cmp eax, [ecx+320h] +; .text:1002EA2B jz loc_100348C1 +; Changed +; .text:1002EA25 mov eax, 100h +; .text:1002EA2A mov [ecx+320h], eax +; .text:1002EA30 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2EA25 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:00000001800350FD cmp [rcx+63Ch], eax +; .text:0000000180035103 jz loc_18004F6AE +; Changed +; .text:00000001800350FD mov eax, 100h +; .text:0000000180035102 mov [rcx+638h], eax +; .text:0000000180035108 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=350FD +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=196B0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2F9C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.16384] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A2721 test eax, eax +; .text:100A2723 js short loc_100A2740 +; .text:100A2725 cmp [ebp+var_8], 0 +; .text:100A2729 jz short loc_100A2740 <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A2729 +LocalOnlyCode.x86=jmpshort +; .text:000000018008181F cmp [rsp+48h+arg_18], 0 +; .text:0000000180081824 jz loc_180031DEF <- nop + jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81824 +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10018024 lea eax, [esp+150h+VersionInformation] +; .text:10018028 inc ebx <- nop +; .text:10018029 mov [edi], ebx +; .text:1001802B push eax ; lpVersionInformation +; .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=18028 +SingleUserCode.x86=nop +; .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180020240 mov ebx, 1 <- 0 +; .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018002024D mov [rdi], ebx +; .text:000000018002024F call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=20241 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10016115 cmp eax, [ecx+320h] +; .text:1001611B jz loc_10034DE1 +; Changed +; .text:10016115 mov eax, 100h +; .text:1001611A mov [ecx+320h], eax +; .text:10016120 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=16115 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:0000000180057829 cmp [rcx+63Ch], eax +; .text:000000018005782F jz loc_18005E850 +; Changed +; .text:0000000180057829 mov eax, 100h +; .text:000000018005782E mov [rcx+638h], eax +; .text:0000000180057834 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=57829 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=1CEB0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=554C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17095] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A36C9 test eax, eax +; .text:100A36CB js short loc_100A36E8 +; .text:100A36CD cmp [ebp+var_8], 0 +; .text:100A36D1 jz short loc_100A36E8 <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A36D1 +LocalOnlyCode.x86=jmpshort +; .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:00000001800B9150 test eax, eax +; .text:00000001800B9152 js short loc_1800B9173 +; .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 +; .text:00000001800B9159 jz short loc_1800B9173 <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=B9159 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10036BA5 lea eax, [esp+150h+VersionInformation] +; .text:10036BA9 inc ebx <- nop +; .text:10036BAA mov [edi], ebx +; .text:10036BAC push eax ; lpVersionInformation +; .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=36BA9 +SingleUserCode.x86=nop +; .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180021828 mov ebx, 1 <- 0 +; .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180021835 mov [rdi], ebx +; .text:0000000180021837 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=21829 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10037529 cmp eax, [ecx+320h] +; .text:1003752F jz loc_10043662 +; Changed +; .text:10037529 mov eax, 100h +; .text:1003752E mov [ecx+320h], eax +; .text:10037534 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=37529 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018001F6A1 cmp [rcx+63Ch], eax +; .text:000000018001F6A7 jz loc_18007284B +; Changed +; .text:000000018001F6A1 mov eax, 100h +; .text:000000018001F6A6 mov [rcx+638h], eax +; .text:000000018001F6AC nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F6A1 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=117F1 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=3B110 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9841.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:1009569B call sub_100B7EE5 +; .text:100956A0 test eax, eax +; .text:100956A2 js short loc_100956BF +; .text:100956A4 cmp [ebp+var_C], 0 +; .text:100956A8 jz short loc_100956BF <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=956A8 +LocalOnlyCode.x86=jmpshort +; .text:0000000180081133 call sub_1800A9048 +; .text:0000000180081138 test eax, eax +; .text:000000018008113A js short loc_18008115B +; .text:000000018008113C cmp [rsp+58h+arg_18], 0 +; .text:0000000180081141 jz short loc_18008115B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81141 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10030121 lea eax, [esp+150h+VersionInformation] +; .text:10030125 inc ebx <- nop +; .text:10030126 mov [edi], ebx +; .text:10030128 push eax ; lpVersionInformation +; .text:10030129 call ds:GetVersionExW +SingleUserPatch.x86=1 +SingleUserOffset.x86=30125 +SingleUserCode.x86=nop +; .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180012158 mov ebx, 1 <- 0 +; .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180012165 mov [rdi], ebx +; .text:0000000180012167 call cs:GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=12159 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1003B989 cmp eax, [ecx+320h] +; .text:1003B98F jz loc_1005E809 +; Changed +; .text:1003B989 mov eax, 100h +; .text:1003B98E mov [ecx+320h], eax +; .text:1003B994 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3B989 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018000C125 cmp [rcx+63Ch], eax +; .text:000000018000C12B jz sub_18003BABC +; Changed +; .text:000000018000C125 mov eax, 100h +; .text:000000018000C12A mov [rcx+638h], eax +; .text:000000018000C130 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=C125 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46A68 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EA50 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9860.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100962C0 test eax, eax +; .text:100962C2 js short loc_100962DF +; .text:100962C4 cmp [ebp+var_C], 0 +; .text:100962C8 jz short loc_100962DF <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=962C8 +LocalOnlyCode.x86=jmpshort +; .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:0000000180081088 test eax, eax +; .text:000000018008108A js short loc_1800810AB +; .text:000000018008108C cmp [rsp+58h+arg_18], 0 +; .text:0000000180081091 jz short loc_1800810AB <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81091 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10030841 lea eax, [esp+150h+VersionInformation] +; .text:10030845 inc ebx <- nop +; .text:10030846 mov [edi], ebx +; .text:10030848 push eax ; lpVersionInformation +; .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=30845 +SingleUserCode.x86=nop +; .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180011AA8 mov ebx, 1 <- 0 +; .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180011AB5 mov [rdi], ebx +; .text:0000000180011AB7 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=11AA9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1003BEC9 cmp eax, [ecx+320h] +; .text:1003BECF jz loc_1005EE1A +; Changed +; .text:1003BEC9 mov eax, 100h +; .text:1003BECE mov [ecx+320h], eax +; .text:1003BED4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3BEC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018000B9F5 cmp [rcx+63Ch], eax +; .text:000000018000B9FB jz sub_18003B9C8 +; Changed +; .text:000000018000B9F5 mov eax, 100h +; .text:000000018000B9FA mov [rcx+638h], eax +; .text:000000018000BA00 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B9F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46F18 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EB00 +SLInitFunc.x64=New_CSLQuery_Initialize + +[SLInit] +bServerSku=1 +bRemoteConnAllowed=1 +bFUSEnabled=1 +bAppServerAllowed=1 +bMultimonAllowed=1 +lMaxUserSessions=0 +ulMaxDebugSessions=0 +bInitialized=1 + +[6.3.9431.0-SLInit] +bFUSEnabled.x86 =A22A8 +lMaxUserSessions.x86 =A22AC +bAppServerAllowed.x86 =A22B0 +bInitialized.x86 =A22B4 +bMultimonAllowed.x86 =A22B8 +bServerSku.x86 =A22BC +ulMaxDebugSessions.x86=A22C0 +bRemoteConnAllowed.x86=A22C4 + +bFUSEnabled.x64 =C4490 +lMaxUserSessions.x64 =C4494 +bAppServerAllowed.x64 =C4498 +bInitialized.x64 =C449C +bMultimonAllowed.x64 =C44A0 +bServerSku.x64 =C44A4 +ulMaxDebugSessions.x64=C44A8 +bRemoteConnAllowed.x64=C44AC + +[6.3.9600.16384-SLInit] +bFUSEnabled.x86 =C02A8 +lMaxUserSessions.x86 =C02AC +bAppServerAllowed.x86 =C02B0 +bInitialized.x86 =C02B4 +bMultimonAllowed.x86 =C02B8 +bServerSku.x86 =C02BC +ulMaxDebugSessions.x86=C02C0 +bRemoteConnAllowed.x86=C02C4 + +bServerSku.x64 =E6494 +ulMaxDebugSessions.x64=E6498 +bRemoteConnAllowed.x64=E649C +bFUSEnabled.x64 =E64A0 +lMaxUserSessions.x64 =E64A4 +bAppServerAllowed.x64 =E64A8 +bInitialized.x64 =E64AC +bMultimonAllowed.x64 =E64B0 + +[6.3.9600.17095-SLInit] +bFUSEnabled.x86 =C12A8 +lMaxUserSessions.x86 =C12AC +bAppServerAllowed.x86 =C12B0 +bInitialized.x86 =C12B4 +bMultimonAllowed.x86 =C12B8 +bServerSku.x86 =C12BC +ulMaxDebugSessions.x86=C12C0 +bRemoteConnAllowed.x86=C12C4 + +bServerSku.x64 =E4494 +ulMaxDebugSessions.x64=E4498 +bRemoteConnAllowed.x64=E449C +bFUSEnabled.x64 =E44A0 +lMaxUserSessions.x64 =E44A4 +bAppServerAllowed.x64 =E44A8 +bInitialized.x64 =E44AC +bMultimonAllowed.x64 =E44B0 + +[6.4.9841.0-SLInit] +bFUSEnabled.x86 =BF9F0 +lMaxUserSessions.x86 =BF9F4 +bAppServerAllowed.x86 =BF9F8 +bInitialized.x86 =BF9FC +bMultimonAllowed.x86 =BFA00 +bServerSku.x86 =BFA04 +ulMaxDebugSessions.x86=BFA08 +bRemoteConnAllowed.x86=BFA0C + +bFUSEnabled.x64 =ECFF8 +lMaxUserSessions.x64 =ECFFC +bAppServerAllowed.x64 =ED000 +bInitialized.x64 =ED004 +bMultimonAllowed.x64 =ED008 +bServerSku.x64 =ED00C +ulMaxDebugSessions.x64=ED010 +bRemoteConnAllowed.x64=ED014 + +[6.4.9860.0-SLInit] +bFUSEnabled.x86 =BF7E0 +lMaxUserSessions.x86 =BF7E4 +bAppServerAllowed.x86 =BF7E8 +bInitialized.x86 =BF7EC +bMultimonAllowed.x86 =BF7F0 +bServerSku.x86 =BF7F4 +ulMaxDebugSessions.x86=BF7F8 +bRemoteConnAllowed.x86=BF7FC + +bFUSEnabled.x64 =ECBD8 +lMaxUserSessions.x64 =ECBDC +bAppServerAllowed.x64 =ECBE0 +bInitialized.x64 =ECBE4 +bMultimonAllowed.x64 =ECBE8 +bServerSku.x64 =ECBEC +ulMaxDebugSessions.x64=ECBF0 +bRemoteConnAllowed.x64=ECBF4 From c47495acc5a688c309472d97b3a704e27eabfa21 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 21 Nov 2014 05:50:42 +0300 Subject: [PATCH 010/208] Tech update --- technical.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/technical.txt b/technical.txt index 5e68c1e..a4e7be3 100644 --- a/technical.txt +++ b/technical.txt @@ -45,6 +45,12 @@ Known failures Source code changelog (rdpwrap library): +2014.11.21 : +- new LiteINI module to read INI files +- added support to store patch settings in INI file +- version support can be extended without recompilation +- C++ version needs to be updated + 2014.11.20 : - improved comments - researching KB3000850 From 1d35b31d6ebb147d8f418f10799a2ff5c042b6b3 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 21 Nov 2014 14:46:04 +0300 Subject: [PATCH 011/208] Resource sorrection --- {src-x86-binarymaster/src => res}/rdpwrap.ini | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {src-x86-binarymaster/src => res}/rdpwrap.ini (100%) diff --git a/src-x86-binarymaster/src/rdpwrap.ini b/res/rdpwrap.ini similarity index 100% rename from src-x86-binarymaster/src/rdpwrap.ini rename to res/rdpwrap.ini From 2c7e0279e0893874cf0230c376606745661535c8 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 21 Nov 2014 16:38:07 +0300 Subject: [PATCH 012/208] Code updates C++ code still needs to be processed --- src-x86-binarymaster/src/rdpwrap.dpr | 56 +- src-x86-x64-Fusix/src/RDPWrap-old.cpp | 2523 +++++++++++++++++++++++++ src-x86-x64-Fusix/src/RDPWrap.cpp | 2107 ++------------------- 3 files changed, 2736 insertions(+), 1950 deletions(-) create mode 100644 src-x86-x64-Fusix/src/RDPWrap-old.cpp diff --git a/src-x86-binarymaster/src/rdpwrap.dpr b/src-x86-binarymaster/src/rdpwrap.dpr index 7878a43..4e1534e 100644 --- a/src-x86-binarymaster/src/rdpwrap.dpr +++ b/src-x86-binarymaster/src/rdpwrap.dpr @@ -641,70 +641,50 @@ begin if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin if INIReadBool(INI, Sect, 'LocalOnlyPatch.x86', False) then begin WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - try - SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'LocalOnlyOffset.x86', 0)); - I := SListFind(PatchList, INIReadString(INI, Sect, 'LocalOnlyCode.x86', '')); - if I >= 0 then - WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); - except - - end; + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'LocalOnlyOffset.x86', 0)); + I := SListFind(PatchList, INIReadString(INI, Sect, 'LocalOnlyCode.x86', '')); + if I >= 0 then + WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); end; if INIReadBool(INI, Sect, 'SingleUserPatch.x86', False) then begin WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - try - SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SingleUserOffset.x86', 0)); - I := SListFind(PatchList, INIReadString(INI, Sect, 'SingleUserCode.x86', '')); - if I >= 0 then - WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); - except - - end; + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SingleUserOffset.x86', 0)); + I := SListFind(PatchList, INIReadString(INI, Sect, 'SingleUserCode.x86', '')); + if I >= 0 then + WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); end; if INIReadBool(INI, Sect, 'DefPolicyPatch.x86', False) then begin WriteLog('Patch CDefPolicy::Query'); - try - SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'DefPolicyOffset.x86', 0)); - I := SListFind(PatchList, INIReadString(INI, Sect, 'DefPolicyCode.x86', '')); - if I >= 0 then - WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); - except - - end; + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'DefPolicyOffset.x86', 0)); + I := SListFind(PatchList, INIReadString(INI, Sect, 'DefPolicyCode.x86', '')); + if I >= 0 then + WriteProcessMemory(GetCurrentProcess, SignPtr, @Patch[I][0], Length(Patch[I]), bw); end; if INIReadBool(INI, Sect, 'SLPolicyInternal.x86', False) then begin WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - try - SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SLPolicyOffset.x86', 0)); - except - SignPtr := nil; - end; + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SLPolicyOffset.x86', 0)); MovJump.MovOp := $89; // mov eax, ecx MovJump.MovArg := $C8; // __msfastcall compatibility MovJump.PushOp := $68; - MovJump.PushArg := nil; + MovJump.PushArg := @New_Win8SL; + MovJump.RetOp := $C3; FuncName := INIReadString(INI, Sect, 'SLPolicyFunc.x86', 'New_Win8SL'); if FuncName = 'New_Win8SL' then MovJump.PushArg := @New_Win8SL; if FuncName = 'New_Win8SL_CP' then MovJump.PushArg := @New_Win8SL_CP; - MovJump.RetOp := $C3; WriteProcessMemory(GetCurrentProcess, SignPtr, @MovJump, SizeOf(mov_far_jmp), bw); end; if INIReadBool(INI, Sect, 'SLInitHook.x86', False) then begin WriteLog('Hook CSLQuery::Initialize'); - try - SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SLInitOffset.x86', 0)); - except - SignPtr := nil; - end; + SignPtr := Pointer(Cardinal(TermSrvBase) + INIReadDWordHex(INI, Sect, 'SLInitOffset.x86', 0)); Jump.PushOp := $68; - Jump.PushArg := nil; + Jump.PushArg := @New_CSLQuery_Initialize; + Jump.RetOp := $C3; FuncName := INIReadString(INI, Sect, 'SLInitFunc.x86', 'New_CSLQuery_Initialize'); if FuncName = 'New_CSLQuery_Initialize' then Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; WriteProcessMemory(GetCurrentProcess, SignPtr, @Jump, SizeOf(far_jmp), bw); end; diff --git a/src-x86-x64-Fusix/src/RDPWrap-old.cpp b/src-x86-x64-Fusix/src/RDPWrap-old.cpp new file mode 100644 index 0000000..e424029 --- /dev/null +++ b/src-x86-x64-Fusix/src/RDPWrap-old.cpp @@ -0,0 +1,2523 @@ +/* + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "stdafx.h" + +typedef struct +{ + union + { + struct + { + WORD Minor; + WORD Major; + } wVersion; + DWORD dwVersion; + }; + WORD Release; + WORD Build; +} FILE_VERSION; + +#ifdef _WIN64 +typedef unsigned long long PLATFORM_DWORD; +struct FARJMP +{ // x64 far jump | opcode | assembly + BYTE MovOp; // 48 mov rax, ptr + BYTE MovRegArg; // B8 + DWORD64 MovArg; // PTR + BYTE PushRaxOp; // 50 push rax + BYTE RetOp; // C3 retn +}; +// x64 signatures +char CDefPolicy_Query_eax_rcx_jmp[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x38, 0x06, 0x00, 0x00, 0x90, 0xEB}; +char CDefPolicy_Query_eax_rdi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x87, 0x38, 0x06, 0x00, 0x00, 0x90}; +char CDefPolicy_Query_eax_rcx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x38, 0x06, 0x00, 0x00, 0x90}; + +/* +termsrv.dll 6.0.6000.16386 + +Original +.text:000007FF7573C88F mov eax, [rcx+638h] +.text:000007FF7573C895 cmp [rcx+63Ch], eax +.text:000007FF7573C89B jnz short loc_7FF7573C8B3 +_______________ + +Changed +.text:000007FF7573C88F mov eax, 100h +.text:000007FF7573C894 mov [rcx+638h], eax +.text:000007FF7573C89A nop +.text:000007FF7573C89B jmp short loc_7FF7573C8B3 +char CDefPolicy_Query_eax_rcx_jmp[] + +termsrv.dll 6.0.6001.18000 + +Original +.text:000007FF76285BD7 mov eax, [rcx+638h] +.text:000007FF76285BDD cmp [rcx+63Ch], eax +.text:000007FF76285BE3 jnz short loc_7FF76285BFB +_______________ + +Changed +.text:000007FF76285BD7 mov eax, 100h +.text:000007FF76285BDC mov [rcx+638h], eax +.text:000007FF76285BE2 nop +.text:000007FF76285BE3 jmp short loc_7FF76285BFB +char CDefPolicy_Query_eax_rcx_jmp[] + +termsrv.dll 6.0.6002.18005 + +Original +.text:000007FF76725E83 mov eax, [rcx+638h] +.text:000007FF76725E89 cmp [rcx+63Ch], eax +.text:000007FF76725E8F jz short loc_7FF76725EA7 +_______________ + +Changed +.text:000007FF76725E83 mov eax, 100h +.text:000007FF76725E88 mov [rcx+638h], eax +.text:000007FF76725E8E nop +.text:000007FF76725E8F jmp short loc_7FF76725EA7 +char CDefPolicy_Query_eax_rcx_jmp[] + +termsrv.dll 6.0.6002.19214 + +Original +.text:000007FF75B25FF7 mov eax, [rcx+638h] +.text:000007FF75B25FFD cmp [rcx+63Ch], eax +.text:000007FF75B26003 jnz short loc_7FF75B2601B +_______________ + +Changed +.text:000007FF75B25FF7 mov eax, 100h +.text:000007FF75B25FFC mov [rcx+638h], eax +.text:000007FF75B26002 nop +.text:000007FF75B26003 jmp short loc_7FF75B2601B +char CDefPolicy_Query_eax_rcx_jmp[] + +termsrv.dll 6.0.6002.23521 + +Original +.text:000007FF75B269CB mov eax, [rcx+638h] +.text:000007FF75B269D1 cmp [rcx+63Ch], eax +.text:000007FF75B269D7 jnz short loc_7FF75B269EF +_______________ + +Changed +.text:000007FF75B269CB mov eax, 100h +.text:000007FF75B269D0 mov [rcx+638h], eax +.text:000007FF75B269D6 nop +.text:000007FF75B269D7 jmp short loc_7FF75B269EF +char CDefPolicy_Query_eax_rcx_jmp[] + +termsrv.dll 6.1.7600.16385 + +Original +.text:000007FF75A97AD2 cmp [rdi+63Ch], eax +.text:000007FF75A97AD8 jz loc_7FF75AA4978 +_______________ + +Changed +.text:000007FF75A97AD2 mov eax, 100h +.text:000007FF75A97AD7 mov [rdi+638h], eax +.text:000007FF75A97ADD nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.1.7601.17514 + +Original +.text:000007FF75A97D8A cmp [rdi+63Ch], eax +.text:000007FF75A97D90 jz loc_7FF75AA40F4 +_______________ + +Changed +.text:000007FF75A97D8A mov eax, 100h +.text:000007FF75A97D8F mov [rdi+638h], eax +.text:000007FF75A97D95 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.1.7601.18540 + +Original +.text:000007FF75A97C82 cmp [rdi+63Ch], eax +.text:000007FF75A97C88 jz loc_7FF75AA3FBD +_______________ + +Changed +.text:000007FF75A97C82 mov eax, 100h +.text:000007FF75A97C87 mov [rdi+638h], eax +.text:000007FF75A97C8D nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.1.7601.22750 + +Original +.text:000007FF75A97C92 cmp [rdi+63Ch], eax +.text:000007FF75A97C98 jz loc_7FF75AA40A2 +_______________ + +Changed +.text:000007FF75A97C92 mov eax, 100h +.text:000007FF75A97C97 mov [rdi+638h], eax +.text:000007FF75A97C9D nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.1.7601.18637 + +Original +.text:000007FF75A97DC6 cmp [rdi+63Ch], eax +.text:000007FF75A97DCC jz loc_7FF75AA40BD +_______________ + +Changed +.text:000007FF75A97DC6 mov eax, 100h +.text:000007FF75A97DCB mov [rdi+638h], eax +.text:000007FF75A97DD1 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.1.7601.22843 + +Original +.text:000007FF75A97D6E cmp [rdi+63Ch], eax +.text:000007FF75A97D74 jz loc_7FF75AA4182 +_______________ + +Changed +.text:000007FF75A97D6E mov eax, 100h +.text:000007FF75A97D73 mov [rdi+638h], eax +.text:000007FF75A97D79 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.8102.0 + +Original +.text:000000018000D3E6 cmp [rdi+63Ch], eax +.text:000000018000D3EC jz loc_180027792 +_______________ + +Changed +.text:000000018000D3E6 mov eax, 100h +.text:000000018000D3EB mov [rdi+638h], eax +.text:000000018000D3F1 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.8250.0 + +Original +.text:000000018001187A cmp [rdi+63Ch], eax +.text:0000000180011880 jz loc_1800273A2 +_______________ + +Changed +.text:000000018001187A mov eax, 100h +.text:000000018001187F mov [rdi+638h], eax +.text:0000000180011885 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.8400.0 + +Original +.text:000000018001F102 cmp [rdi+63Ch], eax +.text:000000018001F108 jz loc_18003A02E +_______________ + +Changed +.text:000000018001F102 mov eax, 100h +.text:000000018001F107 mov [rdi+638h], eax +.text:000000018001F10D nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.9200.16384 + +Original +.text:000000018002A31A cmp [rdi+63Ch], eax +.text:000000018002A320 jz loc_18003A0F9 +_______________ + +Changed +.text:000000018002A31A mov eax, 100h +.text:000000018002A31F mov [rdi+638h], eax +.text:000000018002A325 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.9200.17048 + +Original +.text:000000018001F206 cmp [rdi+63Ch], eax +.text:000000018001F20C jz loc_18003A1B4 +_______________ + +Changed +.text:000000018001F206 mov eax, 100h +.text:000000018001F20B mov [rdi+638h], eax +.text:000000018001F211 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.2.9200.21166 + +Original +.text:000000018002A3B6 cmp [rdi+63Ch], eax +.text:000000018002A3BC jz loc_18003A174 +_______________ + +Changed +.text:000000018002A3B6 mov eax, 100h +.text:000000018002A3BB mov [rdi+638h], eax +.text:000000018002A3C1 nop +char CDefPolicy_Query_eax_rdi[] + +termsrv.dll 6.3.9431.0 + +Original +.text:00000001800350FD cmp [rcx+63Ch], eax +.text:0000000180035103 jz loc_18004F6AE +_______________ + +Changed +.text:00000001800350FD mov eax, 100h +.text:0000000180035102 mov [rcx+638h], eax +.text:0000000180035108 nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.3.9600.16384 + +Original +.text:0000000180057829 cmp [rcx+63Ch], eax +.text:000000018005782F jz loc_18005E850 +_______________ + +Changed +.text:0000000180057829 mov eax, 100h +.text:000000018005782E mov [rcx+638h], eax +.text:0000000180057834 nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.3.9600.17095 + +Original +.text:000000018001F6A1 cmp [rcx+63Ch], eax +.text:000000018001F6A7 jz loc_18007284B +_______________ + +Changed +.text:000000018001F6A1 mov eax, 100h +.text:000000018001F6A6 mov [rcx+638h], eax +.text:000000018001F6AC nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.4.9841.0 + +Original +.text:000000018000C125 cmp [rcx+63Ch], eax +.text:000000018000C12B jz sub_18003BABC +_______________ + +Changed +.text:000000018000C125 mov eax, 100h +.text:000000018000C12A mov [rcx+638h], eax +.text:000000018000C130 nop +char CDefPolicy_Query_eax_rcx[] + +termsrv.dll 6.4.9860.0 + +Original +.text:000000018000B9F5 cmp [rcx+63Ch], eax +.text:000000018000B9FB jz sub_18003B9C8 +_______________ + +Changed +.text:000000018000B9F5 mov eax, 100h +.text:000000018000B9FA mov [rcx+638h], eax +.text:000000018000BA00 nop +char CDefPolicy_Query_eax_rcx[] +*/ + +#else +typedef unsigned long PLATFORM_DWORD; +struct FARJMP +{ // x86 far jump | opcode | assembly + BYTE PushOp; // 68 push ptr + DWORD PushArg; // PTR + BYTE RetOp; // C3 retn +}; +// x86 signatures +char CDefPolicy_Query_edx_ecx[] = {0xBA, 0x00, 0x01, 0x00, 0x00, 0x89, 0x91, 0x20, 0x03, 0x00, 0x00, 0x5E, 0x90}; +char CDefPolicy_Query_eax_esi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x86, 0x20, 0x03, 0x00, 0x00, 0x90}; +char CDefPolicy_Query_eax_ecx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x20, 0x03, 0x00, 0x00, 0x90}; + +/* +termsrv.dll 6.0.6000.16386 + +Original +.text:6F335CD8 cmp edx, [ecx+320h] +.text:6F335CDE pop esi +.text:6F335CDF jz loc_6F3426F1 +_______________ + +Changed +.text:6F335CD8 mov edx, 100h +.text:6F335CDD mov [ecx+320h], edx +.text:6F335CE3 pop esi +.text:6F335CE4 nop +char CDefPolicy_Query_edx_ecx[] + +termsrv.dll 6.0.6001.18000 + +Original +.text:6E817FD8 cmp edx, [ecx+320h] +.text:6E817FDE pop esi +.text:6E817FDF jz loc_6E826F16 +_______________ + +Changed +.text:6E817FD8 mov edx, 100h +.text:6E817FDD mov [ecx+320h], edx +.text:6E817FE3 pop esi +.text:6E817FE4 nop +char CDefPolicy_Query_edx_ecx[] + +termsrv.dll 6.0.6002.18005 + +Original +.text:6F5979C0 cmp edx, [ecx+320h] +.text:6F5979C6 pop esi +.text:6F5979C7 jz loc_6F5A6F26 +_______________ + +Changed +.text:6F5979C0 mov edx, 100h +.text:6F5979C5 mov [ecx+320h], edx +.text:6F5979CB pop esi +.text:6F5979CC nop +char CDefPolicy_Query_edx_ecx[] + +termsrv.dll 6.0.6002.19214 + +Original +.text:6F5979B8 cmp edx, [ecx+320h] +.text:6F5979BE pop esi +.text:6F5979BF jz loc_6F5A6F3E +_______________ + +Changed +.text:6F5979B8 mov edx, 100h +.text:6F5979BD mov [ecx+320h], edx +.text:6F5979C3 pop esi +.text:6F5979C4 nop +char CDefPolicy_Query_edx_ecx[] + +termsrv.dll 6.0.6002.23521 + +Original +.text:6F5979CC cmp edx, [ecx+320h] +.text:6F5979D2 pop esi +.text:6F5979D3 jz loc_6F5A6F2E +_______________ + +Changed +.text:6F5979CC mov edx, 100h +.text:6F5979D1 mov [ecx+320h], edx +.text:6F5979D7 pop esi +.text:6F5979D8 nop +char CDefPolicy_Query_edx_ecx[] + +termsrv.dll 6.1.7600.16385 + +Original +.text:6F2F96F3 cmp eax, [esi+320h] +.text:6F2F96F9 jz loc_6F30E256 +_______________ + +Changed +.text:6F2F96F3 mov eax, 100h +.text:6F2F96F8 mov [esi+320h], eax +.text:6F2F96FE nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.1.7601.17514 + +Original +.text:6F2F9D53 cmp eax, [esi+320h] +.text:6F2F9D59 jz loc_6F30B25E +_______________ + +Changed +.text:6F2F9D53 mov eax, 100h +.text:6F2F9D58 mov [esi+320h], eax +.text:6F2F9D5E nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.1.7601.18540 + +Original +.text:6F2F9D9F cmp eax, [esi+320h] +.text:6F2F9DA5 jz loc_6F30B2AE +_______________ + +Changed +.text:6F2F9D9F mov eax, 100h +.text:6F2F9DA4 mov [esi+320h], eax +.text:6F2F9DAA nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.1.7601.22750 + +Original +.text:6F2F9E21 cmp eax, [esi+320h] +.text:6F2F9E27 jz loc_6F30B6CE +_______________ + +Changed +.text:6F2F9E21 mov eax, 100h +.text:6F2F9E26 mov [esi+320h], eax +.text:6F2F9E2C nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.1.7601.18637 + +Original +.text:6F2F9DBB cmp eax, [esi+320h] +.text:6F2F9DC1 jz loc_6F30B2A6 +_______________ + +Changed +.text:6F2F9DBB mov eax, 100h +.text:6F2F9DC0 mov [esi+320h], eax +.text:6F2F9DC6 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.1.7601.22843 + +Original +.text:6F2F9E25 cmp eax, [esi+320h] +.text:6F2F9E2B jz loc_6F30B6D6 +_______________ + +Changed +.text:6F2F9E25 mov eax, 100h +.text:6F2F9E2A mov [esi+320h], eax +.text:6F2F9E30 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.8102.0 + +Original +.text:1000E47C cmp eax, [esi+320h] +.text:1000E482 jz loc_1002D775 +_______________ + +Changed +.text:1000E47C mov eax, 100h +.text:1000E481 mov [esi+320h], eax +.text:1000E487 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.8250.0 + +Original +.text:10013520 cmp eax, [esi+320h] +.text:10013526 jz loc_1002DB85 +_______________ + +Changed +.text:10013520 mov eax, 100h +.text:10013525 mov [esi+320h], eax +.text:1001352B nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.8400.0 + +Original +.text:10013E48 cmp eax, [esi+320h] +.text:10013E4E jz loc_1002E079 +_______________ + +Changed +.text:10013E48 mov eax, 100h +.text:10013E4D mov [esi+320h], eax +.text:10013E53 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.9200.16384 + +Original +.text:10013F08 cmp eax, [esi+320h] +.text:10013F0E jz loc_1002E161 +_______________ + +Changed +.text:10013F08 mov eax, 100h +.text:10013F0D mov [esi+320h], eax +.text:10013F13 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.9200.17048 + +Original +.text:1001F408 cmp eax, [esi+320h] +.text:1001F40E jz loc_1002E201 +_______________ + +Changed +.text:1001F408 mov eax, 100h +.text:1001F40D mov [esi+320h], eax +.text:1001F413 nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.2.9200.21166 + +Original +.text:10013F30 cmp eax, [esi+320h] +.text:10013F36 jz loc_1002E189 +_______________ + +Changed +.text:10013F30 mov eax, 100h +.text:10013F35 mov [esi+320h], eax +.text:10013F3B nop +char CDefPolicy_Query_eax_esi[] + +termsrv.dll 6.3.9431.0 + +Original +.text:1002EA25 cmp eax, [ecx+320h] +.text:1002EA2B jz loc_100348C1 +_______________ + +Changed +.text:1002EA25 mov eax, 100h +.text:1002EA2A mov [ecx+320h], eax +.text:1002EA30 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.3.9600.16384 + +Original +.text:10016115 cmp eax, [ecx+320h] +.text:1001611B jz loc_10034DE1 +_______________ + +Changed +.text:10016115 mov eax, 100h +.text:1001611A mov [ecx+320h], eax +.text:10016120 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.3.9600.17095 + +Original +.text:10037529 cmp eax, [ecx+320h] +.text:1003752F jz loc_10043662 +_______________ + +Changed +.text:10037529 mov eax, 100h +.text:1003752E mov [ecx+320h], eax +.text:10037534 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.4.9841.0 + +Original +.text:1003B989 cmp eax, [ecx+320h] +.text:1003B98F jz loc_1005E809 +_______________ + +Changed +.text:1003B989 mov eax, 100h +.text:1003B98E mov [ecx+320h], eax +.text:1003B994 nop +char CDefPolicy_Query_eax_ecx[] + +termsrv.dll 6.4.9860.0 + +Original +.text:1003BEC9 cmp eax, [ecx+320h] +.text:1003BECF jz loc_1005EE1A +_______________ + +Changed +.text:1003BEC9 mov eax, 100h +.text:1003BECE mov [ecx+320h], eax +.text:1003BED4 nop +char CDefPolicy_Query_eax_ecx[] +*/ + +#endif + +FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; +SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; + +HMODULE hTermSrv; +HMODULE hSLC; +PLATFORM_DWORD TermSrvBase; +FILE_VERSION FV; +SERVICEMAIN _ServiceMain; +SVCHOSTPUSHSERVICEGLOBALS _SvchostPushServiceGlobals; +bool AlreadyHooked = false; + +void WriteToLog(LPSTR Text) +{ + DWORD dwBytesOfWritten; + + HANDLE hFile = CreateFile(L"\\rdpwrap.txt", GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile == INVALID_HANDLE_VALUE) return; + + SetFilePointer(hFile, 0, 0, FILE_END); + WriteFile(hFile, Text, strlen(Text), &dwBytesOfWritten, NULL); + CloseHandle(hFile); +} + +PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) +{ + PLATFORM_DWORD AddressReturn = -1; + + for (PLATFORM_DWORD i = 0; i < Size; i++) + { + for (int j = 0; StartPosition[i+j] == Signature[j] && j < SignatureSize; j++) + { + if (j == SignatureSize-1) AddressReturn = (PLATFORM_DWORD)&StartPosition[i]; + } + } + + return AddressReturn; +} + +bool GetModuleCodeSectionInfo(HMODULE hModule, PLATFORM_DWORD *BaseAddr, PLATFORM_DWORD *BaseSize) +{ + PIMAGE_DOS_HEADER pDosHeader; + PIMAGE_FILE_HEADER pFileHeader; + PIMAGE_OPTIONAL_HEADER pOptionalHeader; + + if (hModule == NULL) return false; + + pDosHeader = (PIMAGE_DOS_HEADER)hModule; + pFileHeader = (PIMAGE_FILE_HEADER)(((PBYTE)hModule)+pDosHeader->e_lfanew+4); + pOptionalHeader = (PIMAGE_OPTIONAL_HEADER)(pFileHeader+1); + + *BaseAddr = (PLATFORM_DWORD)hModule; + *BaseSize = (PLATFORM_DWORD)pOptionalHeader->SizeOfCode; + + if (*BaseAddr <= 0 || *BaseSize <= 0) return false; + return true; +} + +void SetThreadsState(bool Resume) +{ + HANDLE h, hThread; + DWORD CurrTh, CurrPr; + THREADENTRY32 Thread; + + CurrTh = GetCurrentThreadId(); + CurrPr = GetCurrentProcessId(); + + h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); + if (h != INVALID_HANDLE_VALUE) + { + Thread.dwSize = sizeof(THREADENTRY32); + Thread32First(h, &Thread); + do + { + if (Thread.th32ThreadID != CurrTh && Thread.th32OwnerProcessID == CurrPr) + { + hThread = OpenThread(THREAD_SUSPEND_RESUME, false, Thread.th32ThreadID); + if (hThread != INVALID_HANDLE_VALUE) + { + if (Resume) ResumeThread(hThread); + else SuspendThread(hThread); + CloseHandle(hThread); + } + } + } while (Thread32Next(h, &Thread)); + CloseHandle(h); + } +} + +BOOL __stdcall GetModuleVersion(LPCWSTR lptstrModuleName, FILE_VERSION *FileVersion) +{ + typedef struct + { + WORD wLength; + WORD wValueLength; + WORD wType; + WCHAR szKey[16]; + WORD Padding1; + VS_FIXEDFILEINFO Value; + WORD Padding2; + WORD Children; + } VS_VERSIONINFO; + + HMODULE hMod = GetModuleHandle(lptstrModuleName); + if(!hMod) + { + return false; + } + + HRSRC hResourceInfo = FindResourceW(hMod, (LPCWSTR)1, (LPCWSTR)0x10); + if(!hResourceInfo) + { + return false; + } + + VS_VERSIONINFO *VersionInfo = (VS_VERSIONINFO*)LoadResource(hMod, hResourceInfo); + if(!VersionInfo) + { + return false; + } + + FileVersion->dwVersion = VersionInfo->Value.dwFileVersionMS; + FileVersion->Release = (WORD)(VersionInfo->Value.dwFileVersionLS >> 16); + FileVersion->Build = (WORD)VersionInfo->Value.dwFileVersionLS; + + return true; +} + +BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) +{ + typedef struct + { + WORD wLength; + WORD wValueLength; + WORD wType; + WCHAR szKey[16]; + WORD Padding1; + VS_FIXEDFILEINFO Value; + WORD Padding2; + WORD Children; + } VS_VERSIONINFO; + + HMODULE hFile = LoadLibraryExW(lptstrFilename, NULL, LOAD_LIBRARY_AS_DATAFILE); + if(!hFile) + { + return false; + } + + HRSRC hResourceInfo = FindResourceW(hFile, (LPCWSTR)1, (LPCWSTR)0x10); + if(!hResourceInfo) + { + return false; + } + + VS_VERSIONINFO *VersionInfo = (VS_VERSIONINFO*)LoadResource(hFile, hResourceInfo); + if(!VersionInfo) + { + return false; + } + + FileVersion->dwVersion = VersionInfo->Value.dwFileVersionMS; + FileVersion->Release = (WORD)(VersionInfo->Value.dwFileVersionLS >> 16); + FileVersion->Build = (WORD)VersionInfo->Value.dwFileVersionLS; + + return true; +} + +bool OverrideSL(LPWSTR ValueName, DWORD *Value) +{ + // Allow Remote Connections + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowRemoteConnections") == 0) + { + *Value = 1; + return true; + } + // Allow Multiple Sessions + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowMultipleSessions") == 0) + { + *Value = 1; + return true; + } + // Allow Multiple Sessions (Application Server Mode) + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowAppServerMode") == 0) + { + *Value = 1; + return true; + } + // Allow Multiple Monitors + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowMultimon") == 0) + { + *Value = 1; + return true; + } + // Max User Sessions (0 = unlimited) + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-MaxUserSessions") == 0) + { + *Value = 0; + return true; + } + // Max Debug Sessions (Win 8, 0 = unlimited) + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions") == 0) + { + *Value = 0; + return true; + } + // Max Sessions + // 0 - logon not possible even from console + // 1 - only one active user (console or remote) + // 2 - allow concurrent sessions + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions") == 0) + { + *Value = 2; + return true; + } + // Allow Advanced Compression with RDP 7 Protocol + if (wcscmp(ValueName, L"TerminalServices-RDP-7-Advanced-Compression-Allowed") == 0) + { + *Value = 1; + return true; + } + // IsTerminalTypeLocalOnly = 0 + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly") == 0) + { + *Value = 0; + return true; + } + // Max Sessions (hard limit) + if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions") == 0) + { + *Value = 1000; + return true; + } + return false; +} + +HRESULT WINAPI New_SLGetWindowsInformationDWORD(PWSTR pwszValueName, DWORD *pdwValue) +{ + // wrapped SLGetWindowsInformationDWORD function + // termsrv.dll will call this function instead of original SLC.dll + + // Override SL Policy + + extern FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; + extern SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; + + char *Log; + DWORD dw; + SIZE_T bw; + HRESULT Result; + + Log = new char[1024]; + wsprintfA(Log, "Policy query: %S\r\n", pwszValueName); + WriteToLog(Log); + delete[] Log; + + if (OverrideSL(pwszValueName, &dw)) + { + *pdwValue = dw; + + Log = new char[1024]; + wsprintfA(Log, "Rewrite: %i\r\n", dw); + WriteToLog(Log); + delete[] Log; + + return S_OK; + } + + WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); + Result = _SLGetWindowsInformationDWORD(pwszValueName, pdwValue); + if (Result == S_OK) + { + Log = new char[1024]; + wsprintfA(Log, "Result: %i\r\n", dw); + WriteToLog(Log); + delete[] Log; + } else { + WriteToLog("Failed\r\n"); + } + WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); + + return Result; +} + +HRESULT __fastcall New_Win8SL(PWSTR pwszValueName, DWORD *pdwValue) +{ + // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll + // for Windows 8 support + + // Override SL Policy + + extern SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; + + char *Log; + DWORD dw; + HRESULT Result; + + Log = new char[1024]; + wsprintfA(Log, "Policy query: %S\r\n", pwszValueName); + WriteToLog(Log); + delete[] Log; + + if (OverrideSL(pwszValueName, &dw)) + { + *pdwValue = dw; + + Log = new char[1024]; + wsprintfA(Log, "Rewrite: %i\r\n", dw); + WriteToLog(Log); + delete[] Log; + + return S_OK; + } + + Result = _SLGetWindowsInformationDWORD(pwszValueName, pdwValue); + if (Result == S_OK) + { + Log = new char[1024]; + wsprintfA(Log, "Result: %i\r\n", dw); + WriteToLog(Log); + delete[] Log; + } else { + WriteToLog("Failed\r\n"); + } + + return Result; +} + +#ifndef _WIN64 +HRESULT __fastcall New_Win8SL_CP(DWORD arg1, DWORD *pdwValue, PWSTR pwszValueName, DWORD arg4) +{ + // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll + // for Windows 8 Consumer Preview support + + return New_Win8SL(pwszValueName, pdwValue); +} +#endif + +HRESULT WINAPI New_CSLQuery_Initialize() +{ + extern PLATFORM_DWORD TermSrvBase; + extern FILE_VERSION FV; + + char *Log; + DWORD *bServerSku = NULL; + DWORD *bRemoteConnAllowed = NULL; + DWORD *bFUSEnabled = NULL; + DWORD *bAppServerAllowed = NULL; + DWORD *bMultimonAllowed = NULL; + DWORD *lMaxUserSessions = NULL; + DWORD *ulMaxDebugSessions = NULL; + DWORD *bInitialized = NULL; + + WriteToLog("> CSLQuery::Initialize\r\n"); + + if (FV.Release == 9431 && FV.Build == 0) + { + #ifdef _WIN64 + bFUSEnabled = (DWORD*)(TermSrvBase + 0xC4490); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC4494); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC4498); + bInitialized = (DWORD*)(TermSrvBase + 0xC449C); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC44A0); + bServerSku = (DWORD*)(TermSrvBase + 0xC44A4); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC44A8); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC44AC); + #else + bFUSEnabled = (DWORD*)(TermSrvBase + 0xA22A8); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xA22AC); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xA22B0); + bInitialized = (DWORD*)(TermSrvBase + 0xA22B4); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xA22B8); + bServerSku = (DWORD*)(TermSrvBase + 0xA22BC); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xA22C0); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xA22C4); + #endif + } + if (FV.Release == 9600 && FV.Build == 16384) + { + #ifdef _WIN64 + bServerSku = (DWORD*)(TermSrvBase + 0xE6494); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xE6498); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xE649C); + bFUSEnabled = (DWORD*)(TermSrvBase + 0xE64A0); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xE64A4); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xE64A8); + bInitialized = (DWORD*)(TermSrvBase + 0xE64AC); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xE64B0); + #else + bFUSEnabled = (DWORD*)(TermSrvBase + 0xC02A8); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC02AC); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC02B0); + bInitialized = (DWORD*)(TermSrvBase + 0xC02B4); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC02B8); + bServerSku = (DWORD*)(TermSrvBase + 0xC02BC); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC02C0); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC02C4); + #endif + /* __ARM_ARCH_7 + bFUSEnabled = (DWORD*)(TermSrvBase + 0x?); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0x?); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0x?); + bInitialized = (DWORD*)(TermSrvBase + 0x?); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0x?); + bServerSku = (DWORD*)(TermSrvBase + 0x?); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0x?); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0x?); + */ + } + if (FV.Release == 9600 && FV.Build == 17095) + { + #ifdef _WIN64 + bServerSku = (DWORD*)(TermSrvBase + 0xE4494); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xE4498); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xE449C); + bFUSEnabled = (DWORD*)(TermSrvBase + 0xE44A0); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xE44A4); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xE44A8); + bInitialized = (DWORD*)(TermSrvBase + 0xE44AC); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xE44B0); + #else + bFUSEnabled = (DWORD*)(TermSrvBase + 0xC12A8); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC12AC); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC12B0); + bInitialized = (DWORD*)(TermSrvBase + 0xC12B4); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC12B8); + bServerSku = (DWORD*)(TermSrvBase + 0xC12BC); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC12C0); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC12C4); + #endif + } + if (FV.Release == 9841 && FV.Build == 0) + { + #ifdef _WIN64 + bFUSEnabled = (DWORD*)(TermSrvBase + 0xECFF8); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xECFFC); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xED000); + bInitialized = (DWORD*)(TermSrvBase + 0xED004); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xED008); + bServerSku = (DWORD*)(TermSrvBase + 0xED00C); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xED010); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xED014); + #else + bFUSEnabled = (DWORD*)(TermSrvBase + 0xBF9F0); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xBF9F4); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xBF9F8); + bInitialized = (DWORD*)(TermSrvBase + 0xBF9FC); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xBFA00); + bServerSku = (DWORD*)(TermSrvBase + 0xBFA04); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xBFA08); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xBFA0C); + #endif + } + if (FV.Release == 9860 && FV.Build == 0) + { + #ifdef _WIN64 + bFUSEnabled = (DWORD*)(TermSrvBase + 0xECBD8); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xECBDC); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xECBE0); + bInitialized = (DWORD*)(TermSrvBase + 0xECBE4); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xECBE8); + bServerSku = (DWORD*)(TermSrvBase + 0xECBEC); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xECBF0); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xECBF4); + #else + bFUSEnabled = (DWORD*)(TermSrvBase + 0xBF7E0); + lMaxUserSessions = (DWORD*)(TermSrvBase + 0xBF7E4); + bAppServerAllowed = (DWORD*)(TermSrvBase + 0xBF7E8); + bInitialized = (DWORD*)(TermSrvBase + 0xBF7EC); + bMultimonAllowed = (DWORD*)(TermSrvBase + 0xBF7F0); + bServerSku = (DWORD*)(TermSrvBase + 0xBF7F4); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xBF7F8); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xBF7FC); + #endif + } + if (bServerSku) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] bServerSku = 1\r\n", bServerSku); + WriteToLog(Log); + delete[] Log; + + *bServerSku = 1; + } + if (bRemoteConnAllowed) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] bRemoteConnAllowed = 1\r\n", bRemoteConnAllowed); + WriteToLog(Log); + delete[] Log; + + *bRemoteConnAllowed = 1; + } + if (bFUSEnabled) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] bFUSEnabled = 1\r\n", bFUSEnabled); + WriteToLog(Log); + delete[] Log; + + *bFUSEnabled = 1; + } + if (bAppServerAllowed) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] bAppServerAllowed = 1\r\n", bAppServerAllowed); + WriteToLog(Log); + delete[] Log; + + *bAppServerAllowed = 1; + } + if (bMultimonAllowed) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] bMultimonAllowed = 1\r\n", bMultimonAllowed); + WriteToLog(Log); + delete[] Log; + + *bMultimonAllowed = 1; + } + if (lMaxUserSessions) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] lMaxUserSessions = 0\r\n", lMaxUserSessions); + WriteToLog(Log); + delete[] Log; + + *lMaxUserSessions = 0; + } + if (ulMaxDebugSessions) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] ulMaxDebugSessions = 0\r\n", ulMaxDebugSessions); + WriteToLog(Log); + delete[] Log; + + *ulMaxDebugSessions = 0; + } + if (bInitialized) + { + Log = new char[1024]; + wsprintfA(Log, "[0x%p] bInitialized = 1\r\n", bInitialized); + WriteToLog(Log); + delete[] Log; + + *bInitialized = 1; + } + return S_OK; +} + +void Hook() +{ + extern FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; + extern SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; + extern HMODULE hTermSrv; + extern HMODULE hSLC; + extern PLATFORM_DWORD TermSrvBase; + extern FILE_VERSION FV; + + AlreadyHooked = true; + + bool Result; + char *Log; + SIZE_T bw; + WORD Ver = 0; + PLATFORM_DWORD TermSrvSize, SignPtr; + FARJMP Jump; + BYTE b; + + WriteToLog("init\r\n"); + + hTermSrv = LoadLibrary(L"termsrv.dll"); + if (hTermSrv == 0) + { + WriteToLog("Error: Failed to load Terminal Services library\r\n"); + return; + } + _ServiceMain = (SERVICEMAIN)GetProcAddress(hTermSrv, "ServiceMain"); + _SvchostPushServiceGlobals = (SVCHOSTPUSHSERVICEGLOBALS)GetProcAddress(hTermSrv, "SvchostPushServiceGlobals"); + + Log = new char[1024]; + wsprintfA(Log, "Base addr: 0x%p\r\n", hTermSrv); + WriteToLog(Log); + delete[] Log; + + Log = new char[1024]; + wsprintfA(Log, "SvcMain: termsrv.dll+0x%p\r\n", (PLATFORM_DWORD)_ServiceMain - (PLATFORM_DWORD)hTermSrv); + WriteToLog(Log); + delete[] Log; + + Log = new char[1024]; + wsprintfA(Log, "SvcGlobals: termsrv.dll+0x%p\r\n", (PLATFORM_DWORD)_SvchostPushServiceGlobals - (PLATFORM_DWORD)hTermSrv); + WriteToLog(Log); + delete[] Log; + + // check termsrv version + if (GetModuleVersion(L"termsrv.dll", &FV)) + { + Ver = (BYTE)FV.wVersion.Minor | ((BYTE)FV.wVersion.Major << 8); + } else { + // check NT version + // Ver = GetVersion(); // deprecated + // Ver = ((Ver & 0xFF) << 8) | ((Ver & 0xFF00) >> 8); + } + if (Ver == 0) + { + WriteToLog("Error: Failed to detect Terminal Services version\r\n"); + return; + } + + Log = new char[1024]; + wsprintfA(Log, "Version: %d.%d\r\n", FV.wVersion.Major, FV.wVersion.Minor); + WriteToLog(Log); + delete[] Log; + + Log = new char[1024]; + wsprintfA(Log, "Release: %d\r\n", FV.Release); + WriteToLog(Log); + delete[] Log; + + Log = new char[1024]; + wsprintfA(Log, "Build: %d\r\n", FV.Build); + WriteToLog(Log); + delete[] Log; + + // temporarily freeze threads + WriteToLog("freeze\r\n"); + SetThreadsState(false); + + if (Ver == 0x0600) + { + // Windows Vista + // uses SL Policy API (slc.dll) + + // load slc.dll and hook function + hSLC = LoadLibrary(L"slc.dll"); + _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); + if (_SLGetWindowsInformationDWORD != INVALID_HANDLE_VALUE) + { + // rewrite original function to call our function (make hook) + + WriteToLog("Hook SLGetWindowsInformationDWORD\r\n"); + #ifdef _WIN64 + Stub_SLGetWindowsInformationDWORD.MovOp = 0x48; + Stub_SLGetWindowsInformationDWORD.MovRegArg = 0xB8; + Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.PushRaxOp = 0x50; + Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; + #else + Stub_SLGetWindowsInformationDWORD.PushOp = 0x68; + Stub_SLGetWindowsInformationDWORD.PushArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; + #endif + + ReadProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); + WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); + } + + if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) + { + // Patch functions: + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + + if (FV.Release == 6000 && FV.Build == 16386) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF756E0000 + .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75745E3D mov ebx, 1 <- 0 + .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75745E4A mov [rdi], ebx + .text:000007FF75745E4C call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65E3E); + b = 0; + #else + /* Imagebase: 6F320000 + .text:6F3360B9 lea eax, [ebp+VersionInformation] + .text:6F3360BF inc ebx <- nop + .text:6F3360C0 push eax ; lpVersionInformation + .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F3360CB mov [esi], ebx + .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x160BF); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x5C88F); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15CD8); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); + #endif + } + if (FV.Release == 6001 && FV.Build == 18000) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF76220000 + .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF76290DB9 mov ebx, 1 <- 0 + .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF76290DC6 mov [rdi], ebx + .text:000007FF76290DC8 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70DBA); + b = 0; + #else + /* Imagebase: 6E800000 + .text:6E8185DE lea eax, [ebp+VersionInformation] + .text:6E8185E4 inc ebx <- nop + .text:6E8185E5 push eax ; lpVersionInformation + .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6E8185F0 mov [esi], ebx + .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x185E4); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65BD7); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FD8); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); + #endif + } + if (FV.Release == 6002 && FV.Build == 18005) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF766C0000 + .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF76730FF5 mov ebx, 1 <- 0 + .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF76731002 mov [rdi], ebx + .text:000007FF76731004 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70FF6); + b = 0; + #else + /* Imagebase: 6F580000 + .text:6F597FA2 lea eax, [ebp+VersionInformation] + .text:6F597FA8 inc ebx <- nop + .text:6F597FA9 push eax ; lpVersionInformation + .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FB4 mov [esi], ebx + .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FA8); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65E83); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179C0); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); + #endif + } + if (FV.Release == 6002 && FV.Build == 19214) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75AC0000 + .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75B312A9 mov ebx, 1 <- 0 + .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75B312B6 mov [rdi], ebx + .text:000007FF75B312B8 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x712AA); + b = 0; + #else + /* Imagebase: 6F580000 + .text:6F597FBE lea eax, [ebp+VersionInformation] + .text:6F597FC4 inc ebx <- nop + .text:6F597FC5 push eax ; lpVersionInformation + .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FD0 mov [esi], ebx + .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FC4); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65FF7); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179B8); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); + #endif + } + if (FV.Release == 6002 && FV.Build == 23521) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75AC0000 + .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75B31EA9 mov ebx, 1 <- 0 + .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75B31EB6 mov [rdi], ebx + .text:000007FF75B31EB8 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x71EAA); + b = 0; + #else + /* Imagebase: 6F580000 + .text:6F597FAE lea eax, [ebp+VersionInformation] + .text:6F597FB4 inc ebx <- nop + .text:6F597FB5 push eax ; lpVersionInformation + .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F597FC0 mov [esi], ebx + .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FB4); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x669CB); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179CC); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); + #endif + } + } + } + if (Ver == 0x0601) + { + // Windows 7 + // uses SL Policy API (slc.dll) + + // load slc.dll and hook function + hSLC = LoadLibrary(L"slc.dll"); + _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); + if (_SLGetWindowsInformationDWORD != INVALID_HANDLE_VALUE) + { + // rewrite original function to call our function (make hook) + + WriteToLog("Hook SLGetWindowsInformationDWORD\r\n"); + #ifdef _WIN64 + Stub_SLGetWindowsInformationDWORD.MovOp = 0x48; + Stub_SLGetWindowsInformationDWORD.MovRegArg = 0xB8; + Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.PushRaxOp = 0x50; + Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; + #else + Stub_SLGetWindowsInformationDWORD.PushOp = 0x68; + Stub_SLGetWindowsInformationDWORD.PushArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; + #endif + + ReadProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); + WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); + } + + if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) + { + // Patch functions: + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + + if (FV.Release == 7600 && FV.Build == 16385) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75A80000 + .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A97D95 mov ebx, 1 <- 0 + .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A97DA2 mov [rdi], ebx + .text:000007FF75A97DA4 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D96); + b = 0; + #else + /* Imagebase: 6F2E0000 + .text:6F2F9E1F lea eax, [ebp+VersionInformation] + .text:6F2F9E25 inc ebx <- nop + .text:6F2F9E26 push eax ; lpVersionInformation + .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2F9E31 mov [esi], ebx + .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E25); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17AD2); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x196F3); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + } + if (FV.Release == 7601 && FV.Build == 17514) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75A80000 + .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A980E1 mov ebx, 1 <- 0 + .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A980EE mov [rdi], ebx + .text:000007FF75A980F0 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180E2); + b = 0; + #else + /* Imagebase: 6F2E0000 + .text:6F2FA497 lea eax, [ebp+VersionInformation] + .text:6F2FA49D inc ebx <- nop + .text:6F2FA49E push eax ; lpVersionInformation + .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4A9 mov [esi], ebx + .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A49D); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D8A); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19D53); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + } + if (FV.Release == 7601 && FV.Build == 18540) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75A80000 + .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A98005 mov ebx, 1 <- 0 + .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A98012 mov [rdi], ebx + .text:000007FF75A98014 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18006); + b = 0; + #else + /* Imagebase: 6F2E0000 + .text:6F2FA4DF lea eax, [ebp+VersionInformation] + .text:6F2FA4E5 inc ebx <- nop + .text:6F2FA4E6 push eax ; lpVersionInformation + .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4F1 mov [esi], ebx + .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4E5); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17C82); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19D9F); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + } + if (FV.Release == 7601 && FV.Build == 22750) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75A80000 + .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A97E8D mov ebx, 1 <- 0 + .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A97E9A mov [rdi], ebx + .text:000007FF75A97E9C call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17E8E); + b = 0; + #else + /* Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17C92); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E21); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + } + if (FV.Release == 7601 && FV.Build == 18637) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75A80000 + .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A980F9 mov ebx, 1 <- 0 + .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A98106 mov [rdi], ebx + .text:000007FF75A98108 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180FA); + b = 0; + #else + /* Imagebase: 6F2E0000 + .text:6F2FA4D7 lea eax, [ebp+VersionInformation] + .text:6F2FA4DD inc ebx <- nop + .text:6F2FA4DE push eax ; lpVersionInformation + .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA4E9 mov [esi], ebx + .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4DD); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17DC6); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19DBB); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + } + if (FV.Release == 7601 && FV.Build == 22843) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* Imagebase: 7FF75A80000 + .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation + .text:000007FF75A97F95 mov ebx, 1 <- 0 + .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000007FF75A97FA2 mov [rdi], ebx + .text:000007FF75A97FA4 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17F96); + b = 0; + #else + /* Imagebase: 6F2E0000 + .text:6F2FA64F lea eax, [ebp+VersionInformation] + .text:6F2FA655 inc ebx <- nop + .text:6F2FA656 push eax ; lpVersionInformation + .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:6F2FA661 mov [esi], ebx + .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D6E); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E25); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + } + } + } + if (Ver == 0x0602) + { + // Windows 8 + // uses SL Policy internal unexported function + + // load slc.dll and get function + // (will be used on intercepting undefined values) + hSLC = LoadLibrary(L"slc.dll"); + _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); + + if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) + { + // Patch functions: + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + // Hook function: + // SLGetWindowsInformationDWORDWrapper + + if (FV.Release == 8102 && FV.Build == 0) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:000000018000D83F mov ebx, 1 <- 0 + .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018000D84C mov [rdi], ebx + .text:000000018000D84E call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xD840); + b = 0; + #else + /* + .text:1000F7E5 lea eax, [esp+150h+VersionInformation] + .text:1000F7E9 inc esi <- nop + .text:1000F7EA push eax ; lpVersionInformation + .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1000F7F3 mov [edi], esi + .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xF7E9); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xD3E6); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xE47C); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + + WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A484); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1B909); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 8250 && FV.Build == 0) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:0000000180011E73 mov ebx, 1 <- 0 + .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180011E80 mov [rdi], ebx + .text:0000000180011E82 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11E74); + b = 0; + #else + /* + .text:100159C5 lea eax, [esp+150h+VersionInformation] + .text:100159C9 inc esi <- nop + .text:100159CA push eax ; lpVersionInformation + .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:100159D3 mov [edi], esi + .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x159C9); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1187A); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13520); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + + WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18FAC); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A0A9); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL_CP; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 8400 && FV.Build == 0) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:0000000180020823 mov ebx, 1 <- 0 + .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180020830 mov [rdi], ebx + .text:0000000180020832 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20824); + b = 0; + #else + /* + .text:1001547E lea eax, [esp+150h+VersionInformation] + .text:10015482 inc esi <- nop + .text:10015483 push eax ; lpVersionInformation + .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001548C mov [edi], esi + .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15482); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F102); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13E48); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + + WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2492C); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19629); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 9200 && FV.Build == 16384) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:000000018002BAA7 mov ebx, 1 <- 0 + .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018002BAB4 mov [rdi], ebx + .text:000000018002BAB6 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAA8); + b = 0; + #else + /* + .text:1001554E lea eax, [esp+150h+VersionInformation] + .text:10015552 inc esi <- nop + .text:10015553 push eax ; lpVersionInformation + .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1001555C mov [edi], esi + .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15552); + b = 0x90; + #endif + /* __ARM_ARCH_7 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x?); // unknown + */ + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2A31A); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13F08); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + /* __ARM_ARCH_7 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x?); // unknown + */ + + WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21FA8); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19559); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; + Jump.RetOp = 0xC3; + #endif + /* __ARM_ARCH_7 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x5F934); + // hook opcodes? + Don't know how to make far jump on ARM platform + */ + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 9200 && FV.Build == 17048) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:0000000180020947 mov ebx, 1 <- 0 + .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180020954 mov [rdi], ebx + .text:0000000180020956 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20948); + b = 0; + #else + /* + .text:1002058E lea eax, [esp+150h+VersionInformation] + .text:10020592 inc esi <- nop + .text:10020593 push eax ; lpVersionInformation + .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:1002059C mov [edi], esi + .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20592); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F206); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F408); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + + WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x24570); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17059); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 9200 && FV.Build == 21166) + { + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation + .text:000000018002BAF7 mov ebx, 1 <- 0 + .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018002BB04 mov [rdi], ebx + .text:000000018002BB06 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAF8); + b = 0; + #else + /* + .text:10015576 lea eax, [esp+150h+VersionInformation] + .text:1001557A inc esi <- nop + .text:1001557B push eax ; lpVersionInformation + .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:10015584 mov [edi], esi + .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1557A); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2A3B6); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13F30); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); + #endif + + WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21FD0); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19581); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + } + } + if (Ver == 0x0603) + { + // Windows 8.1 + // uses SL Policy internal inline code + + if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) + { + // Patch functions: + // CEnforcementCore::GetInstanceOfTSLicense + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + // Hook function: + // CSLQuery::Initialize + + if (FV.Release == 9431 && FV.Build == 0) + { + WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); + #ifdef _WIN64 + /* + .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:000000018009F718 test eax, eax + .text:000000018009F71A js short loc_18009F73B + .text:000000018009F71C cmp [rsp+48h+arg_18], 0 + .text:000000018009F721 jz short loc_18009F73B <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x9F721); + #else + /* + .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:1008A609 test eax, eax + .text:1008A60B js short loc_1008A628 + .text:1008A60D cmp [ebp+var_8], 0 + .text:1008A611 jz short loc_1008A628 <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x8A611); + #endif + b = 0xEB; + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:00000001800367F8 mov ebx, 1 <- 0 + .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180036805 mov [rdi], ebx + .text:0000000180036807 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x367F9); + b = 0; + #else + /* + .text:100306A4 lea eax, [esp+150h+VersionInformation] + .text:100306A8 inc ebx <- nop + .text:100306A9 mov [edi], ebx + .text:100306AB push eax ; lpVersionInformation + .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x306A8); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x350FD); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2EA25); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); + #endif + + WriteToLog("Hook CSLQuery::Initialize\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2F9C0); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x196B0); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 9600 && FV.Build == 16384) + { + WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); + #ifdef _WIN64 + /* + .text:000000018008181F cmp [rsp+48h+arg_18], 0 + .text:0000000180081824 jz loc_180031DEF <- nop + jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81824); + b = 0x90; + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81825); + b = 0xE9; + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + #else + /* + .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A2721 test eax, eax + .text:100A2723 js short loc_100A2740 + .text:100A2725 cmp [ebp+var_8], 0 + .text:100A2729 jz short loc_100A2740 <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA2729); + b = 0xEB; + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + #endif + + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180020240 mov ebx, 1 <- 0 + .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:000000018002024D mov [rdi], ebx + .text:000000018002024F call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20241); + b = 0; + #else + /* + .text:10018024 lea eax, [esp+150h+VersionInformation] + .text:10018028 inc ebx <- nop + .text:10018029 mov [edi], ebx + .text:1001802B push eax ; lpVersionInformation + .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18028); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x57829); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x16115); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); + #endif + + WriteToLog("Hook CSLQuery::Initialize\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x554C0); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1CEB0); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 9600 && FV.Build == 17095) + { + WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); + #ifdef _WIN64 + /* + .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:00000001800B9150 test eax, eax + .text:00000001800B9152 js short loc_1800B9173 + .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 + .text:00000001800B9159 jz short loc_1800B9173 <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xB9159); + #else + /* + .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100A36C9 test eax, eax + .text:100A36CB js short loc_100A36E8 + .text:100A36CD cmp [ebp+var_8], 0 + .text:100A36D1 jz short loc_100A36E8 <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA36D1); + #endif + b = 0xEB; + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180021828 mov ebx, 1 <- 0 + .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180021835 mov [rdi], ebx + .text:0000000180021837 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21829); + b = 0; + #else + /* + .text:10036BA5 lea eax, [esp+150h+VersionInformation] + .text:10036BA9 inc ebx <- nop + .text:10036BAA mov [edi], ebx + .text:10036BAC push eax ; lpVersionInformation + .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x36BA9); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F6A1); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x37529); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); + #endif + + WriteToLog("Hook CSLQuery::Initialize\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3B110); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x117F1); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + } + } + if (Ver == 0x0604) + { + // Windows 10 + // uses SL Policy internal inline code + + if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) + { + // Patch functions: + // CEnforcementCore::GetInstanceOfTSLicense + // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled + // CDefPolicy::Query + // Hook function: + // CSLQuery::Initialize + + if (FV.Release == 9841 && FV.Build == 0) + { + WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); + #ifdef _WIN64 + /* + .text:0000000180081133 call sub_1800A9048 + .text:0000000180081138 test eax, eax + .text:000000018008113A js short loc_18008115B + .text:000000018008113C cmp [rsp+58h+arg_18], 0 + .text:0000000180081141 jz short loc_18008115B <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81141); + #else + /* + .text:1009569B call sub_100B7EE5 + .text:100956A0 test eax, eax + .text:100956A2 js short loc_100956BF + .text:100956A4 cmp [ebp+var_C], 0 + .text:100956A8 jz short loc_100956BF <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x956A8); + #endif + b = 0xEB; + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180012158 mov ebx, 1 <- 0 + .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180012165 mov [rdi], ebx + .text:0000000180012167 call cs:GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x12159); + b = 0; + #else + /* + .text:10030121 lea eax, [esp+150h+VersionInformation] + .text:10030125 inc ebx <- nop + .text:10030126 mov [edi], ebx + .text:10030128 push eax ; lpVersionInformation + .text:10030129 call ds:GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30125); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xC125); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3B989); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); + #endif + + WriteToLog("Hook CSLQuery::Initialize\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1EA50); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x46A68); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + if (FV.Release == 9860 && FV.Build == 0) + { + WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); + #ifdef _WIN64 + /* + .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:0000000180081088 test eax, eax + .text:000000018008108A js short loc_1800810AB + .text:000000018008108C cmp [rsp+58h+arg_18], 0 + .text:0000000180081091 jz short loc_1800810AB <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81091); + #else + /* + .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) + .text:100962C0 test eax, eax + .text:100962C2 js short loc_100962DF + .text:100962C4 cmp [ebp+var_C], 0 + .text:100962C8 jz short loc_100962DF <- jmp + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x962C8); + #endif + b = 0xEB; + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + #ifdef _WIN64 + /* + .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation + .text:0000000180011AA8 mov ebx, 1 <- 0 + .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch + .text:0000000180011AB5 mov [rdi], ebx + .text:0000000180011AB7 call cs:__imp_GetVersionExW + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11AA9); + b = 0; + #else + /* + .text:10030841 lea eax, [esp+150h+VersionInformation] + .text:10030845 inc ebx <- nop + .text:10030846 mov [edi], ebx + .text:10030848 push eax ; lpVersionInformation + .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) + */ + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30845); + b = 0x90; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); + + WriteToLog("Patch CDefPolicy::Query\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xB9F5); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3BEC9); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); + #endif + + WriteToLog("Hook CSLQuery::Initialize\r\n"); + #ifdef _WIN64 + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1EB00); + Jump.MovOp = 0x48; + Jump.MovRegArg = 0xB8; + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.PushRaxOp = 0x50; + Jump.RetOp = 0xC3; + #else + SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x46F18); + Jump.PushOp = 0x68; + Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.RetOp = 0xC3; + #endif + WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + } + } + } + WriteToLog("resume\r\n"); + SetThreadsState(true); + return; +} + +void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) +{ + WriteToLog("> ServiceMain\r\n"); + if (!AlreadyHooked) Hook(); + + if (_ServiceMain != NULL) _ServiceMain(dwArgc, lpszArgv); +} + +void WINAPI SvchostPushServiceGlobals(void *lpGlobalData) +{ + WriteToLog("> SvchostPushServiceGlobals\r\n"); + if (!AlreadyHooked) Hook(); + + if (_SvchostPushServiceGlobals != NULL) _SvchostPushServiceGlobals(lpGlobalData); +} \ No newline at end of file diff --git a/src-x86-x64-Fusix/src/RDPWrap.cpp b/src-x86-x64-Fusix/src/RDPWrap.cpp index e424029..620ee60 100644 --- a/src-x86-x64-Fusix/src/RDPWrap.cpp +++ b/src-x86-x64-Fusix/src/RDPWrap.cpp @@ -41,309 +41,6 @@ struct FARJMP BYTE PushRaxOp; // 50 push rax BYTE RetOp; // C3 retn }; -// x64 signatures -char CDefPolicy_Query_eax_rcx_jmp[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x38, 0x06, 0x00, 0x00, 0x90, 0xEB}; -char CDefPolicy_Query_eax_rdi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x87, 0x38, 0x06, 0x00, 0x00, 0x90}; -char CDefPolicy_Query_eax_rcx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x38, 0x06, 0x00, 0x00, 0x90}; - -/* -termsrv.dll 6.0.6000.16386 - -Original -.text:000007FF7573C88F mov eax, [rcx+638h] -.text:000007FF7573C895 cmp [rcx+63Ch], eax -.text:000007FF7573C89B jnz short loc_7FF7573C8B3 -_______________ - -Changed -.text:000007FF7573C88F mov eax, 100h -.text:000007FF7573C894 mov [rcx+638h], eax -.text:000007FF7573C89A nop -.text:000007FF7573C89B jmp short loc_7FF7573C8B3 -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6001.18000 - -Original -.text:000007FF76285BD7 mov eax, [rcx+638h] -.text:000007FF76285BDD cmp [rcx+63Ch], eax -.text:000007FF76285BE3 jnz short loc_7FF76285BFB -_______________ - -Changed -.text:000007FF76285BD7 mov eax, 100h -.text:000007FF76285BDC mov [rcx+638h], eax -.text:000007FF76285BE2 nop -.text:000007FF76285BE3 jmp short loc_7FF76285BFB -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6002.18005 - -Original -.text:000007FF76725E83 mov eax, [rcx+638h] -.text:000007FF76725E89 cmp [rcx+63Ch], eax -.text:000007FF76725E8F jz short loc_7FF76725EA7 -_______________ - -Changed -.text:000007FF76725E83 mov eax, 100h -.text:000007FF76725E88 mov [rcx+638h], eax -.text:000007FF76725E8E nop -.text:000007FF76725E8F jmp short loc_7FF76725EA7 -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6002.19214 - -Original -.text:000007FF75B25FF7 mov eax, [rcx+638h] -.text:000007FF75B25FFD cmp [rcx+63Ch], eax -.text:000007FF75B26003 jnz short loc_7FF75B2601B -_______________ - -Changed -.text:000007FF75B25FF7 mov eax, 100h -.text:000007FF75B25FFC mov [rcx+638h], eax -.text:000007FF75B26002 nop -.text:000007FF75B26003 jmp short loc_7FF75B2601B -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6002.23521 - -Original -.text:000007FF75B269CB mov eax, [rcx+638h] -.text:000007FF75B269D1 cmp [rcx+63Ch], eax -.text:000007FF75B269D7 jnz short loc_7FF75B269EF -_______________ - -Changed -.text:000007FF75B269CB mov eax, 100h -.text:000007FF75B269D0 mov [rcx+638h], eax -.text:000007FF75B269D6 nop -.text:000007FF75B269D7 jmp short loc_7FF75B269EF -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.1.7600.16385 - -Original -.text:000007FF75A97AD2 cmp [rdi+63Ch], eax -.text:000007FF75A97AD8 jz loc_7FF75AA4978 -_______________ - -Changed -.text:000007FF75A97AD2 mov eax, 100h -.text:000007FF75A97AD7 mov [rdi+638h], eax -.text:000007FF75A97ADD nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.17514 - -Original -.text:000007FF75A97D8A cmp [rdi+63Ch], eax -.text:000007FF75A97D90 jz loc_7FF75AA40F4 -_______________ - -Changed -.text:000007FF75A97D8A mov eax, 100h -.text:000007FF75A97D8F mov [rdi+638h], eax -.text:000007FF75A97D95 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.18540 - -Original -.text:000007FF75A97C82 cmp [rdi+63Ch], eax -.text:000007FF75A97C88 jz loc_7FF75AA3FBD -_______________ - -Changed -.text:000007FF75A97C82 mov eax, 100h -.text:000007FF75A97C87 mov [rdi+638h], eax -.text:000007FF75A97C8D nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.22750 - -Original -.text:000007FF75A97C92 cmp [rdi+63Ch], eax -.text:000007FF75A97C98 jz loc_7FF75AA40A2 -_______________ - -Changed -.text:000007FF75A97C92 mov eax, 100h -.text:000007FF75A97C97 mov [rdi+638h], eax -.text:000007FF75A97C9D nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.18637 - -Original -.text:000007FF75A97DC6 cmp [rdi+63Ch], eax -.text:000007FF75A97DCC jz loc_7FF75AA40BD -_______________ - -Changed -.text:000007FF75A97DC6 mov eax, 100h -.text:000007FF75A97DCB mov [rdi+638h], eax -.text:000007FF75A97DD1 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.22843 - -Original -.text:000007FF75A97D6E cmp [rdi+63Ch], eax -.text:000007FF75A97D74 jz loc_7FF75AA4182 -_______________ - -Changed -.text:000007FF75A97D6E mov eax, 100h -.text:000007FF75A97D73 mov [rdi+638h], eax -.text:000007FF75A97D79 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.8102.0 - -Original -.text:000000018000D3E6 cmp [rdi+63Ch], eax -.text:000000018000D3EC jz loc_180027792 -_______________ - -Changed -.text:000000018000D3E6 mov eax, 100h -.text:000000018000D3EB mov [rdi+638h], eax -.text:000000018000D3F1 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.8250.0 - -Original -.text:000000018001187A cmp [rdi+63Ch], eax -.text:0000000180011880 jz loc_1800273A2 -_______________ - -Changed -.text:000000018001187A mov eax, 100h -.text:000000018001187F mov [rdi+638h], eax -.text:0000000180011885 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.8400.0 - -Original -.text:000000018001F102 cmp [rdi+63Ch], eax -.text:000000018001F108 jz loc_18003A02E -_______________ - -Changed -.text:000000018001F102 mov eax, 100h -.text:000000018001F107 mov [rdi+638h], eax -.text:000000018001F10D nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.9200.16384 - -Original -.text:000000018002A31A cmp [rdi+63Ch], eax -.text:000000018002A320 jz loc_18003A0F9 -_______________ - -Changed -.text:000000018002A31A mov eax, 100h -.text:000000018002A31F mov [rdi+638h], eax -.text:000000018002A325 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.9200.17048 - -Original -.text:000000018001F206 cmp [rdi+63Ch], eax -.text:000000018001F20C jz loc_18003A1B4 -_______________ - -Changed -.text:000000018001F206 mov eax, 100h -.text:000000018001F20B mov [rdi+638h], eax -.text:000000018001F211 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.9200.21166 - -Original -.text:000000018002A3B6 cmp [rdi+63Ch], eax -.text:000000018002A3BC jz loc_18003A174 -_______________ - -Changed -.text:000000018002A3B6 mov eax, 100h -.text:000000018002A3BB mov [rdi+638h], eax -.text:000000018002A3C1 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.3.9431.0 - -Original -.text:00000001800350FD cmp [rcx+63Ch], eax -.text:0000000180035103 jz loc_18004F6AE -_______________ - -Changed -.text:00000001800350FD mov eax, 100h -.text:0000000180035102 mov [rcx+638h], eax -.text:0000000180035108 nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.3.9600.16384 - -Original -.text:0000000180057829 cmp [rcx+63Ch], eax -.text:000000018005782F jz loc_18005E850 -_______________ - -Changed -.text:0000000180057829 mov eax, 100h -.text:000000018005782E mov [rcx+638h], eax -.text:0000000180057834 nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.3.9600.17095 - -Original -.text:000000018001F6A1 cmp [rcx+63Ch], eax -.text:000000018001F6A7 jz loc_18007284B -_______________ - -Changed -.text:000000018001F6A1 mov eax, 100h -.text:000000018001F6A6 mov [rcx+638h], eax -.text:000000018001F6AC nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.4.9841.0 - -Original -.text:000000018000C125 cmp [rcx+63Ch], eax -.text:000000018000C12B jz sub_18003BABC -_______________ - -Changed -.text:000000018000C125 mov eax, 100h -.text:000000018000C12A mov [rcx+638h], eax -.text:000000018000C130 nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.4.9860.0 - -Original -.text:000000018000B9F5 cmp [rcx+63Ch], eax -.text:000000018000B9FB jz sub_18003B9C8 -_______________ - -Changed -.text:000000018000B9F5 mov eax, 100h -.text:000000018000B9FA mov [rcx+638h], eax -.text:000000018000BA00 nop -char CDefPolicy_Query_eax_rcx[] -*/ - #else typedef unsigned long PLATFORM_DWORD; struct FARJMP @@ -352,314 +49,15 @@ struct FARJMP DWORD PushArg; // PTR BYTE RetOp; // C3 retn }; -// x86 signatures -char CDefPolicy_Query_edx_ecx[] = {0xBA, 0x00, 0x01, 0x00, 0x00, 0x89, 0x91, 0x20, 0x03, 0x00, 0x00, 0x5E, 0x90}; -char CDefPolicy_Query_eax_esi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x86, 0x20, 0x03, 0x00, 0x00, 0x90}; -char CDefPolicy_Query_eax_ecx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x20, 0x03, 0x00, 0x00, 0x90}; - -/* -termsrv.dll 6.0.6000.16386 - -Original -.text:6F335CD8 cmp edx, [ecx+320h] -.text:6F335CDE pop esi -.text:6F335CDF jz loc_6F3426F1 -_______________ - -Changed -.text:6F335CD8 mov edx, 100h -.text:6F335CDD mov [ecx+320h], edx -.text:6F335CE3 pop esi -.text:6F335CE4 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6001.18000 - -Original -.text:6E817FD8 cmp edx, [ecx+320h] -.text:6E817FDE pop esi -.text:6E817FDF jz loc_6E826F16 -_______________ - -Changed -.text:6E817FD8 mov edx, 100h -.text:6E817FDD mov [ecx+320h], edx -.text:6E817FE3 pop esi -.text:6E817FE4 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6002.18005 - -Original -.text:6F5979C0 cmp edx, [ecx+320h] -.text:6F5979C6 pop esi -.text:6F5979C7 jz loc_6F5A6F26 -_______________ - -Changed -.text:6F5979C0 mov edx, 100h -.text:6F5979C5 mov [ecx+320h], edx -.text:6F5979CB pop esi -.text:6F5979CC nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6002.19214 - -Original -.text:6F5979B8 cmp edx, [ecx+320h] -.text:6F5979BE pop esi -.text:6F5979BF jz loc_6F5A6F3E -_______________ - -Changed -.text:6F5979B8 mov edx, 100h -.text:6F5979BD mov [ecx+320h], edx -.text:6F5979C3 pop esi -.text:6F5979C4 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6002.23521 - -Original -.text:6F5979CC cmp edx, [ecx+320h] -.text:6F5979D2 pop esi -.text:6F5979D3 jz loc_6F5A6F2E -_______________ - -Changed -.text:6F5979CC mov edx, 100h -.text:6F5979D1 mov [ecx+320h], edx -.text:6F5979D7 pop esi -.text:6F5979D8 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.1.7600.16385 - -Original -.text:6F2F96F3 cmp eax, [esi+320h] -.text:6F2F96F9 jz loc_6F30E256 -_______________ - -Changed -.text:6F2F96F3 mov eax, 100h -.text:6F2F96F8 mov [esi+320h], eax -.text:6F2F96FE nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.17514 - -Original -.text:6F2F9D53 cmp eax, [esi+320h] -.text:6F2F9D59 jz loc_6F30B25E -_______________ - -Changed -.text:6F2F9D53 mov eax, 100h -.text:6F2F9D58 mov [esi+320h], eax -.text:6F2F9D5E nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.18540 - -Original -.text:6F2F9D9F cmp eax, [esi+320h] -.text:6F2F9DA5 jz loc_6F30B2AE -_______________ - -Changed -.text:6F2F9D9F mov eax, 100h -.text:6F2F9DA4 mov [esi+320h], eax -.text:6F2F9DAA nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.22750 - -Original -.text:6F2F9E21 cmp eax, [esi+320h] -.text:6F2F9E27 jz loc_6F30B6CE -_______________ - -Changed -.text:6F2F9E21 mov eax, 100h -.text:6F2F9E26 mov [esi+320h], eax -.text:6F2F9E2C nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.18637 - -Original -.text:6F2F9DBB cmp eax, [esi+320h] -.text:6F2F9DC1 jz loc_6F30B2A6 -_______________ - -Changed -.text:6F2F9DBB mov eax, 100h -.text:6F2F9DC0 mov [esi+320h], eax -.text:6F2F9DC6 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.22843 - -Original -.text:6F2F9E25 cmp eax, [esi+320h] -.text:6F2F9E2B jz loc_6F30B6D6 -_______________ - -Changed -.text:6F2F9E25 mov eax, 100h -.text:6F2F9E2A mov [esi+320h], eax -.text:6F2F9E30 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.8102.0 - -Original -.text:1000E47C cmp eax, [esi+320h] -.text:1000E482 jz loc_1002D775 -_______________ - -Changed -.text:1000E47C mov eax, 100h -.text:1000E481 mov [esi+320h], eax -.text:1000E487 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.8250.0 - -Original -.text:10013520 cmp eax, [esi+320h] -.text:10013526 jz loc_1002DB85 -_______________ - -Changed -.text:10013520 mov eax, 100h -.text:10013525 mov [esi+320h], eax -.text:1001352B nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.8400.0 - -Original -.text:10013E48 cmp eax, [esi+320h] -.text:10013E4E jz loc_1002E079 -_______________ - -Changed -.text:10013E48 mov eax, 100h -.text:10013E4D mov [esi+320h], eax -.text:10013E53 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.9200.16384 - -Original -.text:10013F08 cmp eax, [esi+320h] -.text:10013F0E jz loc_1002E161 -_______________ - -Changed -.text:10013F08 mov eax, 100h -.text:10013F0D mov [esi+320h], eax -.text:10013F13 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.9200.17048 - -Original -.text:1001F408 cmp eax, [esi+320h] -.text:1001F40E jz loc_1002E201 -_______________ - -Changed -.text:1001F408 mov eax, 100h -.text:1001F40D mov [esi+320h], eax -.text:1001F413 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.9200.21166 - -Original -.text:10013F30 cmp eax, [esi+320h] -.text:10013F36 jz loc_1002E189 -_______________ - -Changed -.text:10013F30 mov eax, 100h -.text:10013F35 mov [esi+320h], eax -.text:10013F3B nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.3.9431.0 - -Original -.text:1002EA25 cmp eax, [ecx+320h] -.text:1002EA2B jz loc_100348C1 -_______________ - -Changed -.text:1002EA25 mov eax, 100h -.text:1002EA2A mov [ecx+320h], eax -.text:1002EA30 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.3.9600.16384 - -Original -.text:10016115 cmp eax, [ecx+320h] -.text:1001611B jz loc_10034DE1 -_______________ - -Changed -.text:10016115 mov eax, 100h -.text:1001611A mov [ecx+320h], eax -.text:10016120 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.3.9600.17095 - -Original -.text:10037529 cmp eax, [ecx+320h] -.text:1003752F jz loc_10043662 -_______________ - -Changed -.text:10037529 mov eax, 100h -.text:1003752E mov [ecx+320h], eax -.text:10037534 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.4.9841.0 - -Original -.text:1003B989 cmp eax, [ecx+320h] -.text:1003B98F jz loc_1005E809 -_______________ - -Changed -.text:1003B989 mov eax, 100h -.text:1003B98E mov [ecx+320h], eax -.text:1003B994 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.4.9860.0 - -Original -.text:1003BEC9 cmp eax, [ecx+320h] -.text:1003BECF jz loc_1005EE1A -_______________ - -Changed -.text:1003BEC9 mov eax, 100h -.text:1003BECE mov [ecx+320h], eax -.text:1003BED4 nop -char CDefPolicy_Query_eax_ecx[] -*/ - #endif FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; +// Implement this +INIFile INI; +// Correct this +LPCTSTR LogFile = L"\\rdpwrap.txt"; HMODULE hTermSrv; HMODULE hSLC; PLATFORM_DWORD TermSrvBase; @@ -672,7 +70,8 @@ void WriteToLog(LPSTR Text) { DWORD dwBytesOfWritten; - HANDLE hFile = CreateFile(L"\\rdpwrap.txt", GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + // Correct this - LogFile + HANDLE hFile = CreateFile(LogFile, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) return; SetFilePointer(hFile, 0, 0, FILE_END); @@ -680,7 +79,23 @@ void WriteToLog(LPSTR Text) CloseHandle(hFile); } -PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) +HMODULE GetCurrentModule() +{ + HMODULE hModule = NULL; + // Check this + GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)GetCurrentModule, &hModule); + return hModule; +} + +// Correct this +LPCWSTR GetBinaryPath() +{ + wchar_t Filename[256]; + GetModuleFileName(GetCurrentModule(), &Filename[0], 256); + return &Filename[0]; +} + +/*PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) { PLATFORM_DWORD AddressReturn = -1; @@ -693,7 +108,7 @@ PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size } return AddressReturn; -} +}*/ bool GetModuleCodeSectionInfo(HMODULE hModule, PLATFORM_DWORD *BaseAddr, PLATFORM_DWORD *BaseSize) { @@ -825,69 +240,11 @@ BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) bool OverrideSL(LPWSTR ValueName, DWORD *Value) { - // Allow Remote Connections - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowRemoteConnections") == 0) + if (INIValueExists(INI, "SLPolicy", ValueName)) { - *Value = 1; + *Value = INIReadDWord(INI, "SLPolicy", ValueName, 0); return true; } - // Allow Multiple Sessions - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowMultipleSessions") == 0) - { - *Value = 1; - return true; - } - // Allow Multiple Sessions (Application Server Mode) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowAppServerMode") == 0) - { - *Value = 1; - return true; - } - // Allow Multiple Monitors - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowMultimon") == 0) - { - *Value = 1; - return true; - } - // Max User Sessions (0 = unlimited) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-MaxUserSessions") == 0) - { - *Value = 0; - return true; - } - // Max Debug Sessions (Win 8, 0 = unlimited) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions") == 0) - { - *Value = 0; - return true; - } - // Max Sessions - // 0 - logon not possible even from console - // 1 - only one active user (console or remote) - // 2 - allow concurrent sessions - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions") == 0) - { - *Value = 2; - return true; - } - // Allow Advanced Compression with RDP 7 Protocol - if (wcscmp(ValueName, L"TerminalServices-RDP-7-Advanced-Compression-Allowed") == 0) - { - *Value = 1; - return true; - } - // IsTerminalTypeLocalOnly = 0 - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly") == 0) - { - *Value = 0; - return true; - } - // Max Sessions (hard limit) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions") == 0) - { - *Value = 1000; - return true; - } return false; } @@ -1010,197 +367,105 @@ HRESULT WINAPI New_CSLQuery_Initialize() WriteToLog("> CSLQuery::Initialize\r\n"); - if (FV.Release == 9431 && FV.Build == 0) + char *Sect; + Sect = new char[1024]; + wsprintfA(Sect, "%d.%d.%d.%d-SLInit", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); + + if (INISectionExists(INI, Sect)) { #ifdef _WIN64 - bFUSEnabled = (DWORD*)(TermSrvBase + 0xC4490); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC4494); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC4498); - bInitialized = (DWORD*)(TermSrvBase + 0xC449C); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC44A0); - bServerSku = (DWORD*)(TermSrvBase + 0xC44A4); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC44A8); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC44AC); + bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bServerSku.x64", 0)); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bRemoteConnAllowed.x64", 0)); + bFUSEnabled = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bFUSEnabled.x64", 0)); + bAppServerAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bAppServerAllowed.x64", 0)); + bMultimonAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bMultimonAllowed.x64", 0)); + lMaxUserSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "lMaxUserSessions.x64", 0)); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "ulMaxDebugSessions.x64", 0)); + bInitialized = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bInitialized.x64", 0)); #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xA22A8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xA22AC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xA22B0); - bInitialized = (DWORD*)(TermSrvBase + 0xA22B4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xA22B8); - bServerSku = (DWORD*)(TermSrvBase + 0xA22BC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xA22C0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xA22C4); - #endif - } - if (FV.Release == 9600 && FV.Build == 16384) - { - #ifdef _WIN64 - bServerSku = (DWORD*)(TermSrvBase + 0xE6494); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xE6498); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xE649C); - bFUSEnabled = (DWORD*)(TermSrvBase + 0xE64A0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xE64A4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xE64A8); - bInitialized = (DWORD*)(TermSrvBase + 0xE64AC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xE64B0); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xC02A8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC02AC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC02B0); - bInitialized = (DWORD*)(TermSrvBase + 0xC02B4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC02B8); - bServerSku = (DWORD*)(TermSrvBase + 0xC02BC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC02C0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC02C4); - #endif - /* __ARM_ARCH_7 - bFUSEnabled = (DWORD*)(TermSrvBase + 0x?); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0x?); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0x?); - bInitialized = (DWORD*)(TermSrvBase + 0x?); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0x?); - bServerSku = (DWORD*)(TermSrvBase + 0x?); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0x?); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0x?); - */ - } - if (FV.Release == 9600 && FV.Build == 17095) - { - #ifdef _WIN64 - bServerSku = (DWORD*)(TermSrvBase + 0xE4494); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xE4498); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xE449C); - bFUSEnabled = (DWORD*)(TermSrvBase + 0xE44A0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xE44A4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xE44A8); - bInitialized = (DWORD*)(TermSrvBase + 0xE44AC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xE44B0); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xC12A8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC12AC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC12B0); - bInitialized = (DWORD*)(TermSrvBase + 0xC12B4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC12B8); - bServerSku = (DWORD*)(TermSrvBase + 0xC12BC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC12C0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC12C4); - #endif - } - if (FV.Release == 9841 && FV.Build == 0) - { - #ifdef _WIN64 - bFUSEnabled = (DWORD*)(TermSrvBase + 0xECFF8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xECFFC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xED000); - bInitialized = (DWORD*)(TermSrvBase + 0xED004); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xED008); - bServerSku = (DWORD*)(TermSrvBase + 0xED00C); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xED010); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xED014); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xBF9F0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xBF9F4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xBF9F8); - bInitialized = (DWORD*)(TermSrvBase + 0xBF9FC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xBFA00); - bServerSku = (DWORD*)(TermSrvBase + 0xBFA04); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xBFA08); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xBFA0C); - #endif - } - if (FV.Release == 9860 && FV.Build == 0) - { - #ifdef _WIN64 - bFUSEnabled = (DWORD*)(TermSrvBase + 0xECBD8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xECBDC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xECBE0); - bInitialized = (DWORD*)(TermSrvBase + 0xECBE4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xECBE8); - bServerSku = (DWORD*)(TermSrvBase + 0xECBEC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xECBF0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xECBF4); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xBF7E0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xBF7E4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xBF7E8); - bInitialized = (DWORD*)(TermSrvBase + 0xBF7EC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xBF7F0); - bServerSku = (DWORD*)(TermSrvBase + 0xBF7F4); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xBF7F8); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xBF7FC); + bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bServerSku.x86", 0)); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bRemoteConnAllowed.x86", 0)); + bFUSEnabled = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bFUSEnabled.x86", 0)); + bAppServerAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bAppServerAllowed.x86", 0)); + bMultimonAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bMultimonAllowed.x86", 0)); + lMaxUserSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "lMaxUserSessions.x86", 0)); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "ulMaxDebugSessions.x86", 0)); + bInitialized = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bInitialized.x86", 0)); #endif } + delete[] Sect; + if (bServerSku) { + *bServerSku = INIReadDWord(INI, "SLInit", "bServerSku", 1); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] bServerSku = 1\r\n", bServerSku); + wsprintfA(Log, "[0x%p] bServerSku = %d\r\n", bServerSku, *bServerSku); WriteToLog(Log); delete[] Log; - - *bServerSku = 1; } if (bRemoteConnAllowed) { + *bRemoteConnAllowed = INIReadDWord(INI, "SLInit", "bRemoteConnAllowed", 1); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] bRemoteConnAllowed = 1\r\n", bRemoteConnAllowed); + wsprintfA(Log, "[0x%p] bRemoteConnAllowed = %d\r\n", bRemoteConnAllowed, *bRemoteConnAllowed); WriteToLog(Log); delete[] Log; - - *bRemoteConnAllowed = 1; } if (bFUSEnabled) { + *bFUSEnabled = INIReadDWord(INI, "SLInit", "bFUSEnabled", 1); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] bFUSEnabled = 1\r\n", bFUSEnabled); + wsprintfA(Log, "[0x%p] bFUSEnabled = %d\r\n", bFUSEnabled, *bFUSEnabled); WriteToLog(Log); delete[] Log; - - *bFUSEnabled = 1; } if (bAppServerAllowed) { + *bAppServerAllowed = INIReadDWord(INI, "SLInit", "bAppServerAllowed", 1); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] bAppServerAllowed = 1\r\n", bAppServerAllowed); + wsprintfA(Log, "[0x%p] bAppServerAllowed = %d\r\n", bAppServerAllowed, *bAppServerAllowed); WriteToLog(Log); delete[] Log; - - *bAppServerAllowed = 1; } if (bMultimonAllowed) { + *bMultimonAllowed = INIReadDWord(INI, "SLInit", "bMultimonAllowed", 1); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] bMultimonAllowed = 1\r\n", bMultimonAllowed); + wsprintfA(Log, "[0x%p] bMultimonAllowed = %d\r\n", bMultimonAllowed, *bMultimonAllowed); WriteToLog(Log); delete[] Log; - - *bMultimonAllowed = 1; } if (lMaxUserSessions) { + *lMaxUserSessions = INIReadDWord(INI, "SLInit", "lMaxUserSessions", 0); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] lMaxUserSessions = 0\r\n", lMaxUserSessions); + wsprintfA(Log, "[0x%p] lMaxUserSessions = %d\r\n", lMaxUserSessions, *lMaxUserSessions); WriteToLog(Log); delete[] Log; - - *lMaxUserSessions = 0; } if (ulMaxDebugSessions) { + *ulMaxDebugSessions = INIReadDWord(INI, "SLInit", "ulMaxDebugSessions", 0); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] ulMaxDebugSessions = 0\r\n", ulMaxDebugSessions); + wsprintfA(Log, "[0x%p] ulMaxDebugSessions = %d\r\n", ulMaxDebugSessions, *ulMaxDebugSessions); WriteToLog(Log); delete[] Log; - - *ulMaxDebugSessions = 0; } if (bInitialized) { + *bInitialized = INIReadDWord(INI, "SLInit", "bInitialized", 1); + Log = new char[1024]; - wsprintfA(Log, "[0x%p] bInitialized = 1\r\n", bInitialized); + wsprintfA(Log, "[0x%p] bInitialized = %d\r\n", bInitialized, *bInitialized); WriteToLog(Log); delete[] Log; - - *bInitialized = 1; } return S_OK; } @@ -1213,9 +478,18 @@ void Hook() extern HMODULE hSLC; extern PLATFORM_DWORD TermSrvBase; extern FILE_VERSION FV; + extern LPCTSTR LogFile; AlreadyHooked = true; + WriteToLog("Loading configuration...\r\n"); + if (!INILoad(INI, ExtractFilePath(GetBinaryPath()) + "rdpwrap.ini")) + { + WriteToLog("Error: Failed to load configuration\r\n"); + return; + } + LogFile = INIReadString(INI, "Main", "LogFile", ExtractFilePath(GetBinaryPath()) + "rdpwrap.txt"); + bool Result; char *Log; SIZE_T bw; @@ -1284,11 +558,22 @@ void Hook() WriteToLog("freeze\r\n"); SetThreadsState(false); - if (Ver == 0x0600) + WriteToLog("Loading patch codes...\r\n"); + PatchList = INIReadSection(INI, "PatchCodes"); + //SetLength(Patch, Length(PatchList)); + for (int i = 0; i < Patch.length; i++) + { + Patch[i] = INIReadBytes(INI, "PatchCodes", PatchList[i]); + // for security reasons + // not more than 16 bytes + if (Patch[i].length > 16) SetLength(Patch[i], 16); + } + + if ((Ver == 0x0600) && (INIReadBool(INI, "Main", "SLPolicyHookNT60", true))) { // Windows Vista // uses SL Policy API (slc.dll) - + // load slc.dll and hook function hSLC = LoadLibrary(L"slc.dll"); _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); @@ -1300,7 +585,7 @@ void Hook() #ifdef _WIN64 Stub_SLGetWindowsInformationDWORD.MovOp = 0x48; Stub_SLGetWindowsInformationDWORD.MovRegArg = 0xB8; - Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; Stub_SLGetWindowsInformationDWORD.PushRaxOp = 0x50; Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; #else @@ -1312,200 +597,12 @@ void Hook() ReadProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); } - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release == 6000 && FV.Build == 16386) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF756E0000 - .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75745E3D mov ebx, 1 <- 0 - .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75745E4A mov [rdi], ebx - .text:000007FF75745E4C call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65E3E); - b = 0; - #else - /* Imagebase: 6F320000 - .text:6F3360B9 lea eax, [ebp+VersionInformation] - .text:6F3360BF inc ebx <- nop - .text:6F3360C0 push eax ; lpVersionInformation - .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F3360CB mov [esi], ebx - .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x160BF); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x5C88F); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15CD8); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6001 && FV.Build == 18000) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF76220000 - .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF76290DB9 mov ebx, 1 <- 0 - .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF76290DC6 mov [rdi], ebx - .text:000007FF76290DC8 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70DBA); - b = 0; - #else - /* Imagebase: 6E800000 - .text:6E8185DE lea eax, [ebp+VersionInformation] - .text:6E8185E4 inc ebx <- nop - .text:6E8185E5 push eax ; lpVersionInformation - .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6E8185F0 mov [esi], ebx - .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x185E4); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65BD7); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FD8); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6002 && FV.Build == 18005) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF766C0000 - .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF76730FF5 mov ebx, 1 <- 0 - .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF76731002 mov [rdi], ebx - .text:000007FF76731004 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70FF6); - b = 0; - #else - /* Imagebase: 6F580000 - .text:6F597FA2 lea eax, [ebp+VersionInformation] - .text:6F597FA8 inc ebx <- nop - .text:6F597FA9 push eax ; lpVersionInformation - .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FB4 mov [esi], ebx - .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FA8); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65E83); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179C0); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6002 && FV.Build == 19214) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75AC0000 - .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75B312A9 mov ebx, 1 <- 0 - .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75B312B6 mov [rdi], ebx - .text:000007FF75B312B8 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x712AA); - b = 0; - #else - /* Imagebase: 6F580000 - .text:6F597FBE lea eax, [ebp+VersionInformation] - .text:6F597FC4 inc ebx <- nop - .text:6F597FC5 push eax ; lpVersionInformation - .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FD0 mov [esi], ebx - .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FC4); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65FF7); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179B8); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6002 && FV.Build == 23521) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75AC0000 - .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75B31EA9 mov ebx, 1 <- 0 - .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75B31EB6 mov [rdi], ebx - .text:000007FF75B31EB8 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x71EAA); - b = 0; - #else - /* Imagebase: 6F580000 - .text:6F597FAE lea eax, [ebp+VersionInformation] - .text:6F597FB4 inc ebx <- nop - .text:6F597FB5 push eax ; lpVersionInformation - .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FC0 mov [esi], ebx - .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FB4); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x669CB); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179CC); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - } } - if (Ver == 0x0601) + if ((Ver == 0x0601) && (INIReadBool(INI, "Main", "SLPolicyHookNT61", true))) { // Windows 7 // uses SL Policy API (slc.dll) - + // load slc.dll and hook function hSLC = LoadLibrary(L"slc.dll"); _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); @@ -1517,7 +614,7 @@ void Hook() #ifdef _WIN64 Stub_SLGetWindowsInformationDWORD.MovOp = 0x48; Stub_SLGetWindowsInformationDWORD.MovRegArg = 0xB8; - Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; + Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; Stub_SLGetWindowsInformationDWORD.PushRaxOp = 0x50; Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; #else @@ -1529,978 +626,164 @@ void Hook() ReadProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); } - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release == 7600 && FV.Build == 16385) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A97D95 mov ebx, 1 <- 0 - .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A97DA2 mov [rdi], ebx - .text:000007FF75A97DA4 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D96); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2F9E1F lea eax, [ebp+VersionInformation] - .text:6F2F9E25 inc ebx <- nop - .text:6F2F9E26 push eax ; lpVersionInformation - .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2F9E31 mov [esi], ebx - .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E25); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17AD2); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x196F3); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 17514) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A980E1 mov ebx, 1 <- 0 - .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A980EE mov [rdi], ebx - .text:000007FF75A980F0 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180E2); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA497 lea eax, [ebp+VersionInformation] - .text:6F2FA49D inc ebx <- nop - .text:6F2FA49E push eax ; lpVersionInformation - .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4A9 mov [esi], ebx - .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A49D); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D8A); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19D53); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 18540) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A98005 mov ebx, 1 <- 0 - .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A98012 mov [rdi], ebx - .text:000007FF75A98014 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18006); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA4DF lea eax, [ebp+VersionInformation] - .text:6F2FA4E5 inc ebx <- nop - .text:6F2FA4E6 push eax ; lpVersionInformation - .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4F1 mov [esi], ebx - .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4E5); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17C82); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19D9F); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 22750) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A97E8D mov ebx, 1 <- 0 - .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A97E9A mov [rdi], ebx - .text:000007FF75A97E9C call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17E8E); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17C92); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E21); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 18637) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A980F9 mov ebx, 1 <- 0 - .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A98106 mov [rdi], ebx - .text:000007FF75A98108 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180FA); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA4D7 lea eax, [ebp+VersionInformation] - .text:6F2FA4DD inc ebx <- nop - .text:6F2FA4DE push eax ; lpVersionInformation - .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4E9 mov [esi], ebx - .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4DD); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17DC6); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19DBB); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 22843) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A97F95 mov ebx, 1 <- 0 - .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A97FA2 mov [rdi], ebx - .text:000007FF75A97FA4 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17F96); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D6E); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E25); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - } } if (Ver == 0x0602) { // Windows 8 // uses SL Policy internal unexported function - + // load slc.dll and get function // (will be used on intercepting undefined values) hSLC = LoadLibrary(L"slc.dll"); _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // SLGetWindowsInformationDWORDWrapper - - if (FV.Release == 8102 && FV.Build == 0) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:000000018000D83F mov ebx, 1 <- 0 - .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018000D84C mov [rdi], ebx - .text:000000018000D84E call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xD840); - b = 0; - #else - /* - .text:1000F7E5 lea eax, [esp+150h+VersionInformation] - .text:1000F7E9 inc esi <- nop - .text:1000F7EA push eax ; lpVersionInformation - .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1000F7F3 mov [edi], esi - .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xF7E9); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xD3E6); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xE47C); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A484); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1B909); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 8250 && FV.Build == 0) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:0000000180011E73 mov ebx, 1 <- 0 - .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180011E80 mov [rdi], ebx - .text:0000000180011E82 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11E74); - b = 0; - #else - /* - .text:100159C5 lea eax, [esp+150h+VersionInformation] - .text:100159C9 inc esi <- nop - .text:100159CA push eax ; lpVersionInformation - .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:100159D3 mov [edi], esi - .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x159C9); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1187A); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13520); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18FAC); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A0A9); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL_CP; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 8400 && FV.Build == 0) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:0000000180020823 mov ebx, 1 <- 0 - .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180020830 mov [rdi], ebx - .text:0000000180020832 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20824); - b = 0; - #else - /* - .text:1001547E lea eax, [esp+150h+VersionInformation] - .text:10015482 inc esi <- nop - .text:10015483 push eax ; lpVersionInformation - .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001548C mov [edi], esi - .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15482); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F102); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13E48); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2492C); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19629); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9200 && FV.Build == 16384) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:000000018002BAA7 mov ebx, 1 <- 0 - .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018002BAB4 mov [rdi], ebx - .text:000000018002BAB6 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAA8); - b = 0; - #else - /* - .text:1001554E lea eax, [esp+150h+VersionInformation] - .text:10015552 inc esi <- nop - .text:10015553 push eax ; lpVersionInformation - .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001555C mov [edi], esi - .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15552); - b = 0x90; - #endif - /* __ARM_ARCH_7 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x?); // unknown - */ - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2A31A); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13F08); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - /* __ARM_ARCH_7 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x?); // unknown - */ - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21FA8); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19559); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - /* __ARM_ARCH_7 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x5F934); - // hook opcodes? - Don't know how to make far jump on ARM platform - */ - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9200 && FV.Build == 17048) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:0000000180020947 mov ebx, 1 <- 0 - .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180020954 mov [rdi], ebx - .text:0000000180020956 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20948); - b = 0; - #else - /* - .text:1002058E lea eax, [esp+150h+VersionInformation] - .text:10020592 inc esi <- nop - .text:10020593 push eax ; lpVersionInformation - .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1002059C mov [edi], esi - .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20592); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F206); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F408); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x24570); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17059); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9200 && FV.Build == 21166) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:000000018002BAF7 mov ebx, 1 <- 0 - .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018002BB04 mov [rdi], ebx - .text:000000018002BB06 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAF8); - b = 0; - #else - /* - .text:10015576 lea eax, [esp+150h+VersionInformation] - .text:1001557A inc esi <- nop - .text:1001557B push eax ; lpVersionInformation - .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:10015584 mov [edi], esi - .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1557A); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2A3B6); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13F30); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21FD0); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19581); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - } } if (Ver == 0x0603) { // Windows 8.1 // uses SL Policy internal inline code - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release == 9431 && FV.Build == 0) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:000000018009F718 test eax, eax - .text:000000018009F71A js short loc_18009F73B - .text:000000018009F71C cmp [rsp+48h+arg_18], 0 - .text:000000018009F721 jz short loc_18009F73B <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x9F721); - #else - /* - .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:1008A609 test eax, eax - .text:1008A60B js short loc_1008A628 - .text:1008A60D cmp [ebp+var_8], 0 - .text:1008A611 jz short loc_1008A628 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x8A611); - #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:00000001800367F8 mov ebx, 1 <- 0 - .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180036805 mov [rdi], ebx - .text:0000000180036807 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x367F9); - b = 0; - #else - /* - .text:100306A4 lea eax, [esp+150h+VersionInformation] - .text:100306A8 inc ebx <- nop - .text:100306A9 mov [edi], ebx - .text:100306AB push eax ; lpVersionInformation - .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x306A8); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x350FD); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2EA25); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2F9C0); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x196B0); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9600 && FV.Build == 16384) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:000000018008181F cmp [rsp+48h+arg_18], 0 - .text:0000000180081824 jz loc_180031DEF <- nop + jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81824); - b = 0x90; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81825); - b = 0xE9; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - #else - /* - .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A2721 test eax, eax - .text:100A2723 js short loc_100A2740 - .text:100A2725 cmp [ebp+var_8], 0 - .text:100A2729 jz short loc_100A2740 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA2729); - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - #endif - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180020240 mov ebx, 1 <- 0 - .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018002024D mov [rdi], ebx - .text:000000018002024F call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20241); - b = 0; - #else - /* - .text:10018024 lea eax, [esp+150h+VersionInformation] - .text:10018028 inc ebx <- nop - .text:10018029 mov [edi], ebx - .text:1001802B push eax ; lpVersionInformation - .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18028); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x57829); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x16115); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x554C0); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1CEB0); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9600 && FV.Build == 17095) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:00000001800B9150 test eax, eax - .text:00000001800B9152 js short loc_1800B9173 - .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 - .text:00000001800B9159 jz short loc_1800B9173 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xB9159); - #else - /* - .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A36C9 test eax, eax - .text:100A36CB js short loc_100A36E8 - .text:100A36CD cmp [ebp+var_8], 0 - .text:100A36D1 jz short loc_100A36E8 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA36D1); - #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180021828 mov ebx, 1 <- 0 - .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180021835 mov [rdi], ebx - .text:0000000180021837 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21829); - b = 0; - #else - /* - .text:10036BA5 lea eax, [esp+150h+VersionInformation] - .text:10036BA9 inc ebx <- nop - .text:10036BAA mov [edi], ebx - .text:10036BAC push eax ; lpVersionInformation - .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x36BA9); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F6A1); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x37529); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3B110); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x117F1); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - } } if (Ver == 0x0604) { // Windows 10 // uses SL Policy internal inline code + } + char *Sect; + Sect = new char[1024]; + wsprintfA(Sect, "%d.%d.%d.%d", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); + if (INISectionExists(INI, Sect)) + { if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) { - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release == 9841 && FV.Build == 0) + #ifdef _WIN64 + if (INIReadBool(INI, Sect, "LocalOnlyPatch.x64", false)) + #else + if (INIReadBool(INI, Sect, "LocalOnlyPatch.x86", false)) + #endif { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); + int i = -1; #ifdef _WIN64 - /* - .text:0000000180081133 call sub_1800A9048 - .text:0000000180081138 test eax, eax - .text:000000018008113A js short loc_18008115B - .text:000000018008113C cmp [rsp+58h+arg_18], 0 - .text:0000000180081141 jz short loc_18008115B <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81141); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "LocalOnlyOffset.x64", 0)); + i = SListFind(PatchList, INIReadString(INI, Sect, "LocalOnlyCode.x64", "")); #else - /* - .text:1009569B call sub_100B7EE5 - .text:100956A0 test eax, eax - .text:100956A2 js short loc_100956BF - .text:100956A4 cmp [ebp+var_C], 0 - .text:100956A8 jz short loc_100956BF <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x956A8); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "LocalOnlyOffset.x86", 0)); + i = SListFind(PatchList, INIReadString(INI, Sect, "LocalOnlyCode.x86", "")); #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - + if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); + } + #ifdef _WIN64 + if (INIReadBool(INI, Sect, "SingleUserPatch.x64", false)) + #else + if (INIReadBool(INI, Sect, "SingleUserPatch.x86", false)) + #endif + { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); + int i = -1; #ifdef _WIN64 - /* - .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180012158 mov ebx, 1 <- 0 - .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180012165 mov [rdi], ebx - .text:0000000180012167 call cs:GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x12159); - b = 0; + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SingleUserOffset.x64", 0)); + i = SListFind(PatchList, INIReadString(INI, Sect, "SingleUserCode.x64", "")); #else - /* - .text:10030121 lea eax, [esp+150h+VersionInformation] - .text:10030125 inc ebx <- nop - .text:10030126 mov [edi], ebx - .text:10030128 push eax ; lpVersionInformation - .text:10030129 call ds:GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30125); - b = 0x90; + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SingleUserOffset.x86", 0)); + i = SListFind(PatchList, INIReadString(INI, Sect, "SingleUserCode.x86", "")); #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - + if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); + } + #ifdef _WIN64 + if (INIReadBool(INI, Sect, "DefPolicyPatch.x64", false)) + #else + if (INIReadBool(INI, Sect, "DefPolicyPatch.x86", false)) + #endif + { WriteToLog("Patch CDefPolicy::Query\r\n"); + int i = -1; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xC125); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "DefPolicyOffset.x64", 0)); + i = SListFind(PatchList, INIReadString(INI, Sect, "DefPolicyCode.x64", "")); #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3B989); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "DefPolicyOffset.x86", 0)); + i = SListFind(PatchList, INIReadString(INI, Sect, "DefPolicyCode.x86", "")); #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); + if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); + } + #ifdef _WIN64 + if (INIReadBool(INI, Sect, "SLPolicyInternal.x64", false)) + #else + if (INIReadBool(INI, Sect, "SLPolicyInternal.x86", false)) + #endif + { + WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); + char *FuncName; + FuncName = new char[1024]; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1EA50); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLPolicyOffset.x64", 0)); Jump.MovOp = 0x48; Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; Jump.PushRaxOp = 0x50; Jump.RetOp = 0xC3; + FuncName = INIReadString(INI, Sect, "SLPolicyFunc.x64", "New_Win8SL"); + if (strcmp(FuncName, "New_Win8SL")) + { + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + } #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x46A68); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLPolicyOffset.x86", 0)); Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; Jump.RetOp = 0xC3; + FuncName = INIReadString(INI, Sect, "SLPolicyFunc.x86", "New_Win8SL"); + if (strcmp(FuncName, "New_Win8SL")) + { + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + } + if (strcmp(FuncName, "New_Win8SL_CP")) + { + Jump.MovArg = (PLATFORM_DWORD)New_Win8SL_CP; + } #endif + delete[] FuncName; WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); } - if (FV.Release == 9860 && FV.Build == 0) + #ifdef _WIN64 + if (INIReadBool(INI, Sect, "SLInitHook.x64", false)) + #else + if (INIReadBool(INI, Sect, "SLInitHook.x86", false)) + #endif { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:0000000180081088 test eax, eax - .text:000000018008108A js short loc_1800810AB - .text:000000018008108C cmp [rsp+58h+arg_18], 0 - .text:0000000180081091 jz short loc_1800810AB <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81091); - #else - /* - .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100962C0 test eax, eax - .text:100962C2 js short loc_100962DF - .text:100962C4 cmp [ebp+var_C], 0 - .text:100962C8 jz short loc_100962DF <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x962C8); - #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180011AA8 mov ebx, 1 <- 0 - .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180011AB5 mov [rdi], ebx - .text:0000000180011AB7 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11AA9); - b = 0; - #else - /* - .text:10030841 lea eax, [esp+150h+VersionInformation] - .text:10030845 inc ebx <- nop - .text:10030846 mov [edi], ebx - .text:10030848 push eax ; lpVersionInformation - .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30845); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xB9F5); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3BEC9); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - WriteToLog("Hook CSLQuery::Initialize\r\n"); + char *FuncName; + FuncName = new char[1024]; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1EB00); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLInitOffset.x64", 0)); Jump.MovOp = 0x48; Jump.MovRegArg = 0xB8; Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; Jump.PushRaxOp = 0x50; Jump.RetOp = 0xC3; + FuncName = INIReadString(INI, Sect, "SLInitFunc.x64", "New_CSLQuery_Initialize"); + if (strcmp(FuncName, "New_CSLQuery_Initialize")) + { + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + } #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x46F18); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLInitOffset.x86", 0)); Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; Jump.RetOp = 0xC3; + FuncName = INIReadString(INI, Sect, "SLInitFunc.x86", "New_CSLQuery_Initialize"); + if (strcmp(FuncName, "New_CSLQuery_Initialize")) + { + Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + } #endif + delete[] FuncName; WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); } } } + delete[] Sect; + WriteToLog("resume\r\n"); SetThreadsState(true); return; From edbff7beddd11bb503bc754f8a104cd5182a5e72 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 21 Nov 2014 16:42:39 +0300 Subject: [PATCH 013/208] Better structure --- {src-x86-x64-Fusix => res}/rdpw32.dll | Bin {src-x86-x64-Fusix => res}/rdpw64.dll | Bin {src-x86-binarymaster => res}/rdpwrap.dll | Bin src-x86-binarymaster/{src => }/LiteINI.pas | 0 src-x86-binarymaster/{src => }/rdpwrap-old.dpr | 0 src-x86-binarymaster/{src => }/rdpwrap.dpr | 0 src-x86-binarymaster/{src => }/rdpwrap.dproj | 0 src-x86-binarymaster/{src => }/rdpwrap.res | Bin src-x86-x64-Fusix/{src => }/Export.def | 0 src-x86-x64-Fusix/{src => }/RDPWrap-old.cpp | 0 src-x86-x64-Fusix/{src => }/RDPWrap.cpp | 0 src-x86-x64-Fusix/{src => }/RDPWrap.sln | 0 src-x86-x64-Fusix/{src => }/RDPWrap.v11.suo | Bin src-x86-x64-Fusix/{src => }/RDPWrap.vcxproj | 0 src-x86-x64-Fusix/{src => }/RDPWrap.vcxproj.filters | 0 src-x86-x64-Fusix/{src => }/ReadMe.txt | 0 src-x86-x64-Fusix/{src => }/dllmain.cpp | 0 src-x86-x64-Fusix/{src => }/stdafx.cpp | 0 src-x86-x64-Fusix/{src => }/stdafx.h | 0 src-x86-x64-Fusix/{src => }/targetver.h | 0 20 files changed, 0 insertions(+), 0 deletions(-) rename {src-x86-x64-Fusix => res}/rdpw32.dll (100%) rename {src-x86-x64-Fusix => res}/rdpw64.dll (100%) rename {src-x86-binarymaster => res}/rdpwrap.dll (100%) rename src-x86-binarymaster/{src => }/LiteINI.pas (100%) rename src-x86-binarymaster/{src => }/rdpwrap-old.dpr (100%) rename src-x86-binarymaster/{src => }/rdpwrap.dpr (100%) rename src-x86-binarymaster/{src => }/rdpwrap.dproj (100%) rename src-x86-binarymaster/{src => }/rdpwrap.res (100%) rename src-x86-x64-Fusix/{src => }/Export.def (100%) rename src-x86-x64-Fusix/{src => }/RDPWrap-old.cpp (100%) rename src-x86-x64-Fusix/{src => }/RDPWrap.cpp (100%) rename src-x86-x64-Fusix/{src => }/RDPWrap.sln (100%) rename src-x86-x64-Fusix/{src => }/RDPWrap.v11.suo (100%) rename src-x86-x64-Fusix/{src => }/RDPWrap.vcxproj (100%) rename src-x86-x64-Fusix/{src => }/RDPWrap.vcxproj.filters (100%) rename src-x86-x64-Fusix/{src => }/ReadMe.txt (100%) rename src-x86-x64-Fusix/{src => }/dllmain.cpp (100%) rename src-x86-x64-Fusix/{src => }/stdafx.cpp (100%) rename src-x86-x64-Fusix/{src => }/stdafx.h (100%) rename src-x86-x64-Fusix/{src => }/targetver.h (100%) diff --git a/src-x86-x64-Fusix/rdpw32.dll b/res/rdpw32.dll similarity index 100% rename from src-x86-x64-Fusix/rdpw32.dll rename to res/rdpw32.dll diff --git a/src-x86-x64-Fusix/rdpw64.dll b/res/rdpw64.dll similarity index 100% rename from src-x86-x64-Fusix/rdpw64.dll rename to res/rdpw64.dll diff --git a/src-x86-binarymaster/rdpwrap.dll b/res/rdpwrap.dll similarity index 100% rename from src-x86-binarymaster/rdpwrap.dll rename to res/rdpwrap.dll diff --git a/src-x86-binarymaster/src/LiteINI.pas b/src-x86-binarymaster/LiteINI.pas similarity index 100% rename from src-x86-binarymaster/src/LiteINI.pas rename to src-x86-binarymaster/LiteINI.pas diff --git a/src-x86-binarymaster/src/rdpwrap-old.dpr b/src-x86-binarymaster/rdpwrap-old.dpr similarity index 100% rename from src-x86-binarymaster/src/rdpwrap-old.dpr rename to src-x86-binarymaster/rdpwrap-old.dpr diff --git a/src-x86-binarymaster/src/rdpwrap.dpr b/src-x86-binarymaster/rdpwrap.dpr similarity index 100% rename from src-x86-binarymaster/src/rdpwrap.dpr rename to src-x86-binarymaster/rdpwrap.dpr diff --git a/src-x86-binarymaster/src/rdpwrap.dproj b/src-x86-binarymaster/rdpwrap.dproj similarity index 100% rename from src-x86-binarymaster/src/rdpwrap.dproj rename to src-x86-binarymaster/rdpwrap.dproj diff --git a/src-x86-binarymaster/src/rdpwrap.res b/src-x86-binarymaster/rdpwrap.res similarity index 100% rename from src-x86-binarymaster/src/rdpwrap.res rename to src-x86-binarymaster/rdpwrap.res diff --git a/src-x86-x64-Fusix/src/Export.def b/src-x86-x64-Fusix/Export.def similarity index 100% rename from src-x86-x64-Fusix/src/Export.def rename to src-x86-x64-Fusix/Export.def diff --git a/src-x86-x64-Fusix/src/RDPWrap-old.cpp b/src-x86-x64-Fusix/RDPWrap-old.cpp similarity index 100% rename from src-x86-x64-Fusix/src/RDPWrap-old.cpp rename to src-x86-x64-Fusix/RDPWrap-old.cpp diff --git a/src-x86-x64-Fusix/src/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp similarity index 100% rename from src-x86-x64-Fusix/src/RDPWrap.cpp rename to src-x86-x64-Fusix/RDPWrap.cpp diff --git a/src-x86-x64-Fusix/src/RDPWrap.sln b/src-x86-x64-Fusix/RDPWrap.sln similarity index 100% rename from src-x86-x64-Fusix/src/RDPWrap.sln rename to src-x86-x64-Fusix/RDPWrap.sln diff --git a/src-x86-x64-Fusix/src/RDPWrap.v11.suo b/src-x86-x64-Fusix/RDPWrap.v11.suo similarity index 100% rename from src-x86-x64-Fusix/src/RDPWrap.v11.suo rename to src-x86-x64-Fusix/RDPWrap.v11.suo diff --git a/src-x86-x64-Fusix/src/RDPWrap.vcxproj b/src-x86-x64-Fusix/RDPWrap.vcxproj similarity index 100% rename from src-x86-x64-Fusix/src/RDPWrap.vcxproj rename to src-x86-x64-Fusix/RDPWrap.vcxproj diff --git a/src-x86-x64-Fusix/src/RDPWrap.vcxproj.filters b/src-x86-x64-Fusix/RDPWrap.vcxproj.filters similarity index 100% rename from src-x86-x64-Fusix/src/RDPWrap.vcxproj.filters rename to src-x86-x64-Fusix/RDPWrap.vcxproj.filters diff --git a/src-x86-x64-Fusix/src/ReadMe.txt b/src-x86-x64-Fusix/ReadMe.txt similarity index 100% rename from src-x86-x64-Fusix/src/ReadMe.txt rename to src-x86-x64-Fusix/ReadMe.txt diff --git a/src-x86-x64-Fusix/src/dllmain.cpp b/src-x86-x64-Fusix/dllmain.cpp similarity index 100% rename from src-x86-x64-Fusix/src/dllmain.cpp rename to src-x86-x64-Fusix/dllmain.cpp diff --git a/src-x86-x64-Fusix/src/stdafx.cpp b/src-x86-x64-Fusix/stdafx.cpp similarity index 100% rename from src-x86-x64-Fusix/src/stdafx.cpp rename to src-x86-x64-Fusix/stdafx.cpp diff --git a/src-x86-x64-Fusix/src/stdafx.h b/src-x86-x64-Fusix/stdafx.h similarity index 100% rename from src-x86-x64-Fusix/src/stdafx.h rename to src-x86-x64-Fusix/stdafx.h diff --git a/src-x86-x64-Fusix/src/targetver.h b/src-x86-x64-Fusix/targetver.h similarity index 100% rename from src-x86-x64-Fusix/src/targetver.h rename to src-x86-x64-Fusix/targetver.h From 61f6adf1f2cc1c5be8cb4ae7421e52dd92ed506d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 22 Nov 2014 21:17:39 +0300 Subject: [PATCH 014/208] Code improvements Fixed memory leak in the installer Added diagnostics info to configuration app --- src-installer/RDPWInst.dpr | 1 + src-rdpconfig/MainUnit.dfm | 133 +++++++++++--- src-rdpconfig/MainUnit.pas | 359 ++++++++++++++++++++++++++++++++++++- 3 files changed, 468 insertions(+), 25 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 3d4527c..34f402b 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -676,6 +676,7 @@ begin FileVersion.bPrivate := (VersionInfo.Value.dwFileFlags and VFF_PRIVATE) = VFF_PRIVATE; FileVersion.bSpecial := (VersionInfo.Value.dwFileFlags and VFF_SPECIAL) = VFF_SPECIAL; + FreeLibrary(hFile); Result := True; end; diff --git a/src-rdpconfig/MainUnit.dfm b/src-rdpconfig/MainUnit.dfm index 7e06d8a..f342a77 100644 --- a/src-rdpconfig/MainUnit.dfm +++ b/src-rdpconfig/MainUnit.dfm @@ -3,8 +3,8 @@ object MainForm: TMainForm Top = 0 BorderStyle = bsDialog Caption = 'RDP Wrapper Configuration' - ClientHeight = 245 - ClientWidth = 326 + ClientHeight = 326 + ClientWidth = 351 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -15,18 +15,19 @@ object MainForm: TMainForm Position = poDesktopCenter OnCloseQuery = FormCloseQuery OnCreate = FormCreate + OnDestroy = FormDestroy PixelsPerInch = 96 TextHeight = 13 object lRDPPort: TLabel - Left = 203 - Top = 33 + Left = 225 + Top = 103 Width = 47 Height = 13 Caption = 'RDP Port:' end object bOK: TButton - Left = 45 - Top = 212 + Left = 10 + Top = 293 Width = 75 Height = 25 Caption = 'OK' @@ -35,8 +36,8 @@ object MainForm: TMainForm OnClick = bOKClick end object bCancel: TButton - Left = 126 - Top = 212 + Left = 91 + Top = 293 Width = 75 Height = 25 Caption = 'Cancel' @@ -45,8 +46,8 @@ object MainForm: TMainForm OnClick = bCancelClick end object bApply: TButton - Left = 207 - Top = 212 + Left = 172 + Top = 293 Width = 75 Height = 25 Caption = 'Apply' @@ -56,7 +57,7 @@ object MainForm: TMainForm end object cbSingleSessionPerUser: TCheckBox Left = 8 - Top = 31 + Top = 112 Width = 130 Height = 17 Caption = 'Single Session Per User' @@ -65,8 +66,8 @@ object MainForm: TMainForm end object rgNLA: TRadioGroup Left = 8 - Top = 54 - Width = 310 + Top = 135 + Width = 335 Height = 73 Caption = 'Security Mode' Items.Strings = ( @@ -78,7 +79,7 @@ object MainForm: TMainForm end object cbAllowTSConnections: TCheckBox Left = 8 - Top = 8 + Top = 89 Width = 174 Height = 17 Caption = 'Enable Remote Desktop Protocol' @@ -87,20 +88,20 @@ object MainForm: TMainForm end object rgShadow: TRadioGroup Left = 8 - Top = 133 - Width = 310 + Top = 214 + Width = 335 Height = 73 Caption = 'Session Shadowing Mode' Items.Strings = ( 'Disable Shadowing' - 'Shadowing will request user permission' - 'Shadowing sessions immediately') + 'Shadowing will request user'#39's permission' + 'Shadow sessions immediately') TabOrder = 6 OnClick = cbAllowTSConnectionsClick end object seRDPPort: TSpinEdit - Left = 256 - Top = 30 + Left = 278 + Top = 100 Width = 62 Height = 22 MaxValue = 65535 @@ -110,12 +111,96 @@ object MainForm: TMainForm OnChange = seRDPPortChange end object bLicense: TButton - Left = 224 - Top = 6 - Width = 94 - Height = 21 + Left = 253 + Top = 293 + Width = 87 + Height = 25 Caption = 'View license...' TabOrder = 8 OnClick = bLicenseClick end + object gbDiag: TGroupBox + Left = 8 + Top = 6 + Width = 335 + Height = 77 + Caption = 'Diagnostics' + TabOrder = 9 + object lListener: TLabel + Left = 11 + Top = 55 + Width = 70 + Height = 13 + Caption = 'Listener state:' + end + object lService: TLabel + Left = 11 + Top = 36 + Width = 67 + Height = 13 + Caption = 'Service state:' + end + object lsListener: TLabel + Left = 91 + Top = 55 + Width = 44 + Height = 13 + Caption = 'Unknown' + end + object lsService: TLabel + Left = 91 + Top = 36 + Width = 44 + Height = 13 + Caption = 'Unknown' + end + object lsTSVer: TLabel + Left = 206 + Top = 36 + Width = 44 + Height = 13 + Caption = 'Unknown' + end + object lsWrapper: TLabel + Left = 91 + Top = 17 + Width = 44 + Height = 13 + Caption = 'Unknown' + end + object lsWrapVer: TLabel + Left = 206 + Top = 17 + Width = 44 + Height = 13 + Caption = 'Unknown' + end + object lTSVer: TLabel + Left = 182 + Top = 36 + Width = 20 + Height = 13 + Caption = 'ver.' + end + object lWrapper: TLabel + Left = 11 + Top = 17 + Width = 74 + Height = 13 + Caption = 'Wrapper state:' + end + object lWrapVer: TLabel + Left = 182 + Top = 17 + Width = 20 + Height = 13 + Caption = 'ver.' + end + end + object Timer: TTimer + Interval = 250 + OnTimer = TimerTimer + Left = 280 + Top = 19 + end end diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index a236689..306a7b7 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -20,7 +20,7 @@ interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Spin, ExtCtrls, Registry; + Dialogs, StdCtrls, Spin, ExtCtrls, Registry, WinSvc; type TMainForm = class(TForm) @@ -33,7 +33,19 @@ type rgShadow: TRadioGroup; seRDPPort: TSpinEdit; lRDPPort: TLabel; + lService: TLabel; + lListener: TLabel; + lWrapper: TLabel; + lsListener: TLabel; + lsService: TLabel; + lsWrapper: TLabel; + Timer: TTimer; + lTSVer: TLabel; + lsTSVer: TLabel; + lWrapVer: TLabel; + lsWrapVer: TLabel; bLicense: TButton; + gbDiag: TGroupBox; procedure FormCreate(Sender: TObject); procedure cbAllowTSConnectionsClick(Sender: TObject); procedure seRDPPortChange(Sender: TObject); @@ -42,6 +54,8 @@ type procedure bOKClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure bLicenseClick(Sender: TObject); + procedure TimerTimer(Sender: TObject); + procedure FormDestroy(Sender: TObject); private { Private declarations } public @@ -49,10 +63,36 @@ type procedure ReadSettings; procedure WriteSettings; end; + FILE_VERSION = record + Version: record case Boolean of + True: (dw: DWORD); + False: (w: record + Minor, Major: Word; + end;) + end; + Release, Build: Word; + bDebug, bPrerelease, bPrivate, bSpecial: Boolean; + end; + WTS_SESSION_INFOW = record + SessionId: DWORD; + Name: packed array [0..33] of WideChar; + State: DWORD; + end; + WTS_SESSION = Array[0..0] of WTS_SESSION_INFOW; + PWTS_SESSION_INFOW = ^WTS_SESSION; +const + winstadll = 'winsta.dll'; var MainForm: TMainForm; Ready: Boolean = False; + Arch: Byte; + OldWow64RedirectionValue: LongBool; + +function WinStationEnumerateW(hServer: THandle; + var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall; + external winstadll name 'WinStationEnumerateW'; +function WinStationFreeMemory(P: Pointer): BOOL; stdcall; external winstadll; implementation @@ -62,6 +102,214 @@ implementation uses LicenseUnit; +function ExpandPath(Path: String): String; +var + Str: Array[0..511] of Char; +begin + Result := ''; + FillChar(Str, 512, 0); + if Arch = 64 then + Path := StringReplace(Path, '%ProgramFiles%', '%ProgramW6432%', [rfReplaceAll, rfIgnoreCase]); + if ExpandEnvironmentStrings(PWideChar(Path), Str, 512) > 0 then + Result := Str; +end; + +function DisableWowRedirection: Boolean; +type + TFunc = function(var Wow64FsEnableRedirection: LongBool): LongBool; stdcall; +var + hModule: THandle; + Wow64DisableWow64FsRedirection: TFunc; +begin + Result := False; + hModule := GetModuleHandle(kernel32); + if hModule <> 0 then + Wow64DisableWow64FsRedirection := GetProcAddress(hModule, 'Wow64DisableWow64FsRedirection') + else + Exit; + if @Wow64DisableWow64FsRedirection <> nil then + Result := Wow64DisableWow64FsRedirection(OldWow64RedirectionValue); +end; + +function RevertWowRedirection: Boolean; +type + TFunc = function(var Wow64RevertWow64FsRedirection: LongBool): LongBool; stdcall; +var + hModule: THandle; + Wow64RevertWow64FsRedirection: TFunc; +begin + Result := False; + hModule := GetModuleHandle(kernel32); + if hModule <> 0 then + Wow64RevertWow64FsRedirection := GetProcAddress(hModule, 'Wow64RevertWow64FsRedirection') + else + Exit; + if @Wow64RevertWow64FsRedirection <> nil then + Result := Wow64RevertWow64FsRedirection(OldWow64RedirectionValue); +end; + +function GetFileVersion(const FileName: TFileName; var FileVersion: FILE_VERSION): Boolean; +type + VS_VERSIONINFO = record + wLength, wValueLength, wType: Word; + szKey: Array[1..16] of WideChar; + Padding1: Word; + Value: VS_FIXEDFILEINFO; + Padding2, Children: Word; + end; + PVS_VERSIONINFO = ^VS_VERSIONINFO; +const + VFF_DEBUG = 1; + VFF_PRERELEASE = 2; + VFF_PRIVATE = 8; + VFF_SPECIAL = 32; +var + hFile: HMODULE; + hResourceInfo: HRSRC; + VersionInfo: PVS_VERSIONINFO; +begin + Result := False; + + hFile := LoadLibraryEx(PWideChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE); + if hFile = 0 then + Exit; + + hResourceInfo := FindResource(hFile, PWideChar(1), PWideChar($10)); + if hResourceInfo = 0 then + Exit; + + VersionInfo := Pointer(LoadResource(hFile, hResourceInfo)); + if VersionInfo = nil then + Exit; + + FileVersion.Version.dw := VersionInfo.Value.dwFileVersionMS; + FileVersion.Release := Word(VersionInfo.Value.dwFileVersionLS shr 16); + FileVersion.Build := Word(VersionInfo.Value.dwFileVersionLS); + FileVersion.bDebug := (VersionInfo.Value.dwFileFlags and VFF_DEBUG) = VFF_DEBUG; + FileVersion.bPrerelease := (VersionInfo.Value.dwFileFlags and VFF_PRERELEASE) = VFF_PRERELEASE; + FileVersion.bPrivate := (VersionInfo.Value.dwFileFlags and VFF_PRIVATE) = VFF_PRIVATE; + FileVersion.bSpecial := (VersionInfo.Value.dwFileFlags and VFF_SPECIAL) = VFF_SPECIAL; + + FreeLibrary(hFile); + Result := True; +end; + +function IsWrapperInstalled(var WrapperPath: String): ShortInt; +var + TermServiceHost, + TermServicePath: String; + Reg: TRegistry; +begin + Result := -1; + WrapperPath := ''; + Reg := TRegistry.Create; + Reg.RootKey := HKEY_LOCAL_MACHINE; + if not Reg.OpenKeyReadOnly('\SYSTEM\CurrentControlSet\Services\TermService') then begin + Reg.Free; + Exit; + end; + TermServiceHost := Reg.ReadString('ImagePath'); + Reg.CloseKey; + if Pos('svchost.exe', LowerCase(TermServiceHost)) = 0 then + begin + Result := 2; + Reg.Free; + Exit; + end; + if not Reg.OpenKeyReadOnly('\SYSTEM\CurrentControlSet\Services\TermService\Parameters') then + begin + Reg.Free; + Exit; + end; + TermServicePath := Reg.ReadString('ServiceDll'); + Reg.CloseKey; + Reg.Free; + if (Pos('termsrv.dll', LowerCase(TermServicePath)) = 0) + and (Pos('rdpwrap.dll', LowerCase(TermServicePath)) = 0) then + begin + Result := 2; + Exit; + end; + + if Pos('rdpwrap.dll', LowerCase(TermServicePath)) > 0 then begin + WrapperPath := TermServicePath; + Result := 1; + end else + Result := 0; +end; + +function GetTermSrvState: ShortInt; +type + SERVICE_STATUS_PROCESS = record + dwServiceType, + dwCurrentState, + dwControlsAccepted, + dwWin32ExitCode, + dwServiceSpecificExitCode, + dwCheckPoint, + dwWaitHint, + dwProcessId, + dwServiceFlags: DWORD; + end; + PSERVICE_STATUS_PROCESS = ^SERVICE_STATUS_PROCESS; +const + SvcName = 'TermService'; +var + hSC: SC_HANDLE; + hSvc: THandle; + lpServiceStatusProcess: PSERVICE_STATUS_PROCESS; + Buf: Pointer; + cbBufSize, pcbBytesNeeded: Cardinal; +begin + Result := -1; + hSC := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT); + if hSC = 0 then + Exit; + + hSvc := OpenService(hSC, PWideChar(SvcName), SERVICE_QUERY_STATUS); + if hSvc = 0 then + begin + CloseServiceHandle(hSC); + Exit; + end; + + if QueryServiceStatusEx(hSvc, SC_STATUS_PROCESS_INFO, nil, 0, pcbBytesNeeded) then + Exit; + + cbBufSize := pcbBytesNeeded; + GetMem(Buf, cbBufSize); + + if not QueryServiceStatusEx(hSvc, SC_STATUS_PROCESS_INFO, Buf, cbBufSize, pcbBytesNeeded) then begin + FreeMem(Buf, cbBufSize); + CloseServiceHandle(hSvc); + CloseServiceHandle(hSC); + Exit; + end else begin + lpServiceStatusProcess := Buf; + Result := ShortInt(lpServiceStatusProcess^.dwCurrentState); + end; + FreeMem(Buf, cbBufSize); + CloseServiceHandle(hSvc); + CloseServiceHandle(hSC); +end; + +function IsListenerWorking: Boolean; +var + pCount: DWORD; + SessionInfo: PWTS_SESSION_INFOW; + I: Integer; +begin + Result := False; + if not WinStationEnumerateW(0, SessionInfo, pCount) then + Exit; + for I := 0 to pCount - 1 do + if SessionInfo^[I].Name = 'RDP-Tcp' then begin + Result := True; + Break; + end; + WinStationFreeMemory(SessionInfo); +end; + function ExtractResText(ResName: String): String; var ResStream: TResourceStream; @@ -192,6 +440,98 @@ begin Reg.Free; end; +procedure TMainForm.TimerTimer(Sender: TObject); +var + WrapperPath: String; + FV: FILE_VERSION; +begin + case IsWrapperInstalled(WrapperPath) of + -1: begin + lsWrapper.Caption := 'Unknown'; + lsWrapper.Font.Color := clGrayText; + end; + 0: begin + lsWrapper.Caption := 'Not installed'; + lsWrapper.Font.Color := clGrayText; + end; + 1: begin + lsWrapper.Caption := 'Installed'; + lsWrapper.Font.Color := clGreen; + end; + 2: begin + lsWrapper.Caption := '3rd-party'; + lsWrapper.Font.Color := clRed; + end; + end; + case GetTermSrvState of + -1, 0: begin + lsService.Caption := 'Unknown'; + lsService.Font.Color := clGrayText; + end; + SERVICE_STOPPED: begin + lsService.Caption := 'Stopped'; + lsService.Font.Color := clRed; + end; + SERVICE_START_PENDING: begin + lsService.Caption := 'Starting...'; + lsService.Font.Color := clGrayText; + end; + SERVICE_STOP_PENDING: begin + lsService.Caption := 'Stopping...'; + lsService.Font.Color := clGrayText; + end; + SERVICE_RUNNING: begin + lsService.Caption := 'Running'; + lsService.Font.Color := clGreen; + end; + SERVICE_CONTINUE_PENDING: begin + lsService.Caption := 'Resuming...'; + lsService.Font.Color := clGrayText; + end; + SERVICE_PAUSE_PENDING: begin + lsService.Caption := 'Suspending...'; + lsService.Font.Color := clGrayText; + end; + SERVICE_PAUSED: begin + lsService.Caption := 'Suspended'; + lsService.Font.Color := clWindowText; + end; + end; + if IsListenerWorking then begin + lsListener.Caption := 'Listening'; + lsListener.Font.Color := clGreen; + end else begin + lsListener.Caption := 'Not listening'; + lsListener.Font.Color := clRed; + end; + if WrapperPath = '' then begin + lsWrapVer.Caption := 'N/A'; + lsWrapVer.Font.Color := clGrayText; + end else + if not GetFileVersion(ExpandPath(WrapperPath), FV) then begin + lsWrapVer.Caption := 'N/A'; + lsWrapVer.Font.Color := clGrayText; + end else begin + lsWrapVer.Caption := + IntToStr(FV.Version.w.Major)+'.'+ + IntToStr(FV.Version.w.Minor)+'.'+ + IntToStr(FV.Release)+'.'+ + IntToStr(FV.Build); + lsWrapVer.Font.Color := clWindowText; + end; + if not GetFileVersion('termsrv.dll', FV) then begin + lsTSVer.Caption := 'N/A'; + lsTSVer.Font.Color := clGrayText; + end else begin + lsTSVer.Caption := + IntToStr(FV.Version.w.Major)+'.'+ + IntToStr(FV.Version.w.Minor)+'.'+ + IntToStr(FV.Release)+'.'+ + IntToStr(FV.Build); + lsTSVer.Font.Color := clWindowText; + end; +end; + procedure TMainForm.bLicenseClick(Sender: TObject); begin LicenseForm.mText.Text := ExtractResText('LICENSE'); @@ -212,11 +552,28 @@ begin end; procedure TMainForm.FormCreate(Sender: TObject); +var + SI: TSystemInfo; begin + GetNativeSystemInfo(SI); + case SI.wProcessorArchitecture of + 0: Arch := 32; + 6: Arch := 64; // Itanium-based x64 + 9: Arch := 64; // Intel/AMD x64 + else Arch := 0; + end; + if Arch = 64 then + DisableWowRedirection; ReadSettings; Ready := True; end; +procedure TMainForm.FormDestroy(Sender: TObject); +begin + if Arch = 64 then + RevertWowRedirection; +end; + procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if bApply.Enabled then From 2136d2c3580bc1907bb03d56afa7abc0a606c200 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 3 Dec 2014 21:58:56 +0300 Subject: [PATCH 015/208] INI reader added Added INI reader by Fusix for C++ version with additional help from asulwer --- src-x86-x64-Fusix/IniFile.cpp | 504 ++++++++++++++++++++++++++++++++++ src-x86-x64-Fusix/IniFile.h | 109 ++++++++ 2 files changed, 613 insertions(+) create mode 100644 src-x86-x64-Fusix/IniFile.cpp create mode 100644 src-x86-x64-Fusix/IniFile.h diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp new file mode 100644 index 0000000..e375006 --- /dev/null +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -0,0 +1,504 @@ +/* + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "stdafx.h" +#include +#include "IniFile.h" + +INI_FILE::INI_FILE(wchar_t *FilePath) +{ + DWORD Status = 0; + DWORD NumberOfBytesRead = 0; + + HANDLE hFile = CreateFile(FilePath, GENERIC_ALL, FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if(hFile == INVALID_HANDLE_VALUE) + { + return; + } + + FileSize = GetFileSize(hFile, NULL); + if(FileSize == INVALID_FILE_SIZE) + { + return; + } + + FileRaw = new char[FileSize]; + Status = (bool)ReadFile(hFile, FileRaw, FileSize, &NumberOfBytesRead, NULL); + if(!Status) + { + return; + } + + CreateStringsMap(); + Parse(); +} + + +INI_FILE::~INI_FILE() +{ + for(DWORD i = 0; i < IniData.SectionCount; i++) + { + delete[] IniData.Section[i].Variables; + } + delete[] IniData.Section; + delete[] FileStringsMap; + delete FileRaw; +} + +bool INI_FILE::CreateStringsMap() +{ + DWORD StringsCount = 1; + + for(DWORD i = 0; i < FileSize; i++) + { + if(FileRaw[i] == '\r' && FileRaw[i+1] == '\n') StringsCount++; + } + + FileStringsCount = StringsCount; + + FileStringsMap = new DWORD[StringsCount]; + FileStringsMap[0] = 0; + + StringsCount = 1; + + for(DWORD i = 9; i < FileSize; i++) + { + if(FileRaw[i] == '\r' && FileRaw[i+1] == '\n') + { + FileStringsMap[StringsCount] = i+2; + StringsCount++; + } + } + + return true; +} + +int INI_FILE::StrTrim(char* Str, STRING_TRIM_TYPE Type) +{ + int StrLn = strlen(Str) + 1; + if ((StrLn == 0) || (Type < TRIM_LEFT) || (Type > TRIM_BOTH)) { + return 0; + } + char *NewStr = new char[StrLn]; + int IdxSrc = -1, IdxDest = 0; + if ((Type == TRIM_LEFT) || (Type == TRIM_BOTH)) { + bool InText = false; + while(Str[++IdxSrc]) { + if (!InText && (Str[IdxSrc] != ' ') && (Str[IdxSrc] != '\n') && (Str[IdxSrc] != '\t')) { + InText = true; + } + if (InText) { + NewStr[IdxDest++] = Str[IdxSrc]; + } + } + NewStr[IdxDest] = '\0'; + } else { + IdxDest = StrLn - 1; + strcpy_s(NewStr, StrLn, Str); + } + if ((Type == TRIM_RIGHT) || (Type == TRIM_BOTH)) { + while(--IdxDest > 0) { + if ((NewStr[IdxDest] != ' ') && (NewStr[IdxDest] != '\n') && (NewStr[IdxDest] != '\t')) { + break; + } + } + NewStr[IdxDest] = '\0'; + } + strcpy_s(Str, StrLn, NewStr); + delete NewStr; + return IdxDest; +} + +DWORD INI_FILE::GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size) +{ + DWORD CurrentStringNum = 0; + DWORD EndStringPos = 0; + DWORD StringSize = 0; + + if(StringNumber > FileStringsCount) return -1; + + for(DWORD i = FileStringsMap[StringNumber]; i < FileSize; i++) + { + if((FileRaw[i] == '\r' && FileRaw[i+1] == '\n') || i == (FileSize-1)) + { + EndStringPos = i; + break; + } + } + + StringSize = EndStringPos-FileStringsMap[StringNumber]; + + if(Size < StringSize) return -1; + + memset(RetString, 0x00, Size); + memcpy(RetString, &(FileRaw[FileStringsMap[StringNumber]]), StringSize); + return StringSize; +} + +bool INI_FILE::IsVariable(char *Str, DWORD StrSize) +{ + bool Quotes = false; + + for(DWORD i = 0; i < StrSize; i++) + { + if(Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; + if(Str[i] == '=' && !Quotes) return true; + } + return false; +} + +bool INI_FILE::FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD StrSize) +{ + bool Quotes = false; + + for(DWORD i = 0; i < StrSize; i++) + { + if(Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; + if(Str[i] == '=' && !Quotes) + { + memcpy(Variable->VariableName, Str, i); + memcpy(Variable->VariableValue, &(Str[i+1]), StrSize-(i-1)); + //StrTrim(Variable->VariableName, TRIM_BOTH); + //StrTrim(Variable->VariableValue, TRIM_BOTH); + break; + } + } + return true; +} + +bool INI_FILE::Parse() +{ + DWORD CurrentStringNum = 0; + char CurrentString[512]; + DWORD CurrentStringSize = 0; + + DWORD SectionsCount = 0; + DWORD VariablesCount = 0; + + DWORD CurrentSectionNum = -1; + DWORD CurrentVariableNum = -1; + + // Calculate sections count + for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) + { + CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); + + if(CurrentString[0] == ';') continue; // It's comment + + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate + { + SectionsCount++; + continue; + } + } + + DWORD *SectionVariableCount = new DWORD[SectionsCount]; + memset(SectionVariableCount, 0x00, sizeof(DWORD)*SectionsCount); + + for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) + { + CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); + + if(CurrentString[0] == ';') continue; // It's comment + + + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate + { + CurrentSectionNum++; + continue; + } + if(IsVariable(CurrentString, CurrentStringSize)) + { + VariablesCount++; + SectionVariableCount[CurrentSectionNum]++; + continue; + } + } + + IniData.SectionCount = SectionsCount; + IniData.Section = new INI_SECTION[SectionsCount]; + memset(IniData.Section, 0x00, sizeof(PINI_SECTION)*SectionsCount); + + for(DWORD i = 0; i < SectionsCount; i++) + { + IniData.Section[i].VariablesCount = SectionVariableCount[i]; + IniData.Section[i].Variables = new INI_SECTION_VARIABLE[SectionVariableCount[i]]; + memset(IniData.Section[i].Variables, 0x00, sizeof(INI_SECTION_VARIABLE)*SectionVariableCount[i]); + } + + delete[] SectionVariableCount; + + CurrentSectionNum = -1; + CurrentVariableNum = -1; + + for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) + { + CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); + + if(CurrentString[0] == ';') // It's comment + { + continue; + } + + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') + { + CurrentSectionNum++; + CurrentVariableNum = 0; + memcpy(IniData.Section[CurrentSectionNum].SectionName, &(CurrentString[1]), (CurrentStringSize-2)); + continue; + } + + if(IsVariable(CurrentString, CurrentStringSize)) + { + FillVariable(&(IniData.Section[CurrentSectionNum].Variables[CurrentVariableNum]), CurrentString, CurrentStringSize); + CurrentVariableNum++; + continue; + } + } + + return true; +} + +bool INI_FILE::SectionExists(char *SectionName) +{ + for(DWORD i = 0; i < IniData.SectionCount; i++) + { + if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + { + return true; + } + } + return false; +} + +bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_STRING *RetVariable) +{ + INI_SECTION *Section = NULL; + INI_SECTION_VARIABLE *Variable = NULL; + + // Find section + for(DWORD i = 0; i < IniData.SectionCount; i++) + { + if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + { + Section = &(IniData.Section[i]); + break; + } + } + if(Section == NULL) + { + SetLastError(318); // This region is not found + return false; + } + // Find variable + for(DWORD i = 0; i < Section->VariablesCount; i++) + { + if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) + { + Variable = &(Section->Variables[i]); + break; + } + } + if(Variable == NULL) + { + SetLastError(1898); // Member of the group is not found + return false; + } + + memset(RetVariable, 0x00, sizeof(*RetVariable)); + memcpy(RetVariable->Name, Variable->VariableName, strlen(Variable->VariableName)); + memcpy(RetVariable->Value, Variable->VariableValue, strlen(Variable->VariableValue)); + + return true; +} + +bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_DWORD *RetVariable) +{ + INI_SECTION *Section = NULL; + INI_SECTION_VARIABLE *Variable = NULL; + + // Find section + for(DWORD i = 0; i < IniData.SectionCount; i++) + { + if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + { + Section = &(IniData.Section[i]); + break; + } + } + if(Section == NULL) + { + SetLastError(318); // This region is not found + return false; + } + // Find variable + for(DWORD i = 0; i < Section->VariablesCount; i++) + { + if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) + { + Variable = &(Section->Variables[i]); + break; + } + } + if(Variable == NULL) + { + SetLastError(1898); // Member of the group is not found + return false; + } + + memset(RetVariable, 0x00, sizeof(*RetVariable)); + memcpy(RetVariable->Name, Variable->VariableName, strlen(Variable->VariableName)); + +#ifndef _WIN64 + RetVariable->ValueDec = strtol(Variable->VariableValue, NULL, 10); + RetVariable->ValueHex = strtol(Variable->VariableValue, NULL, 16); +#else + RetVariable->ValueDec = _strtoi64(Variable->VariableValue, NULL, 10); + RetVariable->ValueHex = _strtoi64(Variable->VariableValue, NULL, 16); +#endif + return true; +} + +bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BYTEARRAY *RetVariable) +{ + INI_SECTION *Section = NULL; + INI_SECTION_VARIABLE *Variable = NULL; + + // Find section + for(DWORD i = 0; i < IniData.SectionCount; i++) + { + if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + { + Section = &(IniData.Section[i]); + break; + } + } + if(Section == NULL) + { + SetLastError(318); // This region is not found + return false; + } + // Find variable + for(DWORD i = 0; i < Section->VariablesCount; i++) + { + if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) + { + Variable = &(Section->Variables[i]); + break; + } + } + if(Variable == NULL) + { + SetLastError(1898); // Member of the group is not found + return false; + } + + DWORD ValueLen = strlen(Variable->VariableName); + if((ValueLen % 2) != 0) return false; + + memset(RetVariable, 0x00, sizeof(*RetVariable)); + memcpy(RetVariable->Name, Variable->VariableName, ValueLen); + + char Mask[15] = {}; + + for(DWORD i = 0; i <= ValueLen; i++) + { + if((i % 2) != 0) continue; + + switch(Variable->VariableValue[i]) + { + case '0': break; + case '1': RetVariable->Value[(i/2)] += (1 << 4); break; + case '2': RetVariable->Value[(i/2)] += (2 << 4); break; + case '3': RetVariable->Value[(i/2)] += (3 << 4); break; + case '4': RetVariable->Value[(i/2)] += (4 << 4); break; + case '5': RetVariable->Value[(i/2)] += (5 << 4); break; + case '6': RetVariable->Value[(i/2)] += (6 << 4); break; + case '7': RetVariable->Value[(i/2)] += (7 << 4); break; + case '8': RetVariable->Value[(i/2)] += (8 << 4); break; + case '9': RetVariable->Value[(i/2)] += (9 << 4); break; + case 'A': RetVariable->Value[(i/2)] += (10 << 4); break; + case 'B': RetVariable->Value[(i/2)] += (11 << 4); break; + case 'C': RetVariable->Value[(i/2)] += (12 << 4); break; + case 'D': RetVariable->Value[(i/2)] += (13 << 4); break; + case 'E': RetVariable->Value[(i/2)] += (14 << 4); break; + case 'F': RetVariable->Value[(i/2)] += (15 << 4); break; + } + + switch(Variable->VariableValue[i+1]) + { + case '0': break; + case '1': RetVariable->Value[(i/2)] += 1; break; + case '2': RetVariable->Value[(i/2)] += 2; break; + case '3': RetVariable->Value[(i/2)] += 3; break; + case '4': RetVariable->Value[(i/2)] += 4; break; + case '5': RetVariable->Value[(i/2)] += 5; break; + case '6': RetVariable->Value[(i/2)] += 6; break; + case '7': RetVariable->Value[(i/2)] += 7; break; + case '8': RetVariable->Value[(i/2)] += 8; break; + case '9': RetVariable->Value[(i/2)] += 9; break; + case 'A': RetVariable->Value[(i/2)] += 10; break; + case 'B': RetVariable->Value[(i/2)] += 11; break; + case 'C': RetVariable->Value[(i/2)] += 12; break; + case 'D': RetVariable->Value[(i/2)] += 13; break; + case 'E': RetVariable->Value[(i/2)] += 14; break; + case 'F': RetVariable->Value[(i/2)] += 15; break; + } + } + RetVariable->ArraySize = ValueLen/2; + return true; +} + +bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BOOL *RetVariable) +{ + INI_SECTION *Section = NULL; + INI_SECTION_VARIABLE *Variable = NULL; + + // Find section + for(DWORD i = 0; i < IniData.SectionCount; i++) + { + if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + { + Section = &(IniData.Section[i]); + break; + } + } + if(Section == NULL) + { + SetLastError(318); // This region is not found + return false; + } + // Find variable + for(DWORD i = 0; i < Section->VariablesCount; i++) + { + if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) + { + Variable = &(Section->Variables[i]); + break; + } + } + if(Variable == NULL) + { + SetLastError(1898); // Member of the group is not found + return false; + } + + memset(RetVariable, 0x00, sizeof(*RetVariable)); + RetVariable->Value = (bool)strtol(Variable->VariableValue, NULL, 10); + return true; +} diff --git a/src-x86-x64-Fusix/IniFile.h b/src-x86-x64-Fusix/IniFile.h new file mode 100644 index 0000000..2486683 --- /dev/null +++ b/src-x86-x64-Fusix/IniFile.h @@ -0,0 +1,109 @@ +/* + Copyright 2014 Stas'M Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "stdafx.h" +#include + +typedef enum _STRING_TRIM_TYPE +{ + TRIM_LEFT, + TRIM_RIGHT, + TRIM_BOTH, +} STRING_TRIM_TYPE; + +// Out values struts +typedef struct _INI_VAR_STRING +{ + char Name[128]; + char Value[128]; +} INI_VAR_STRING, PINI_VAR_STRING; + +typedef struct _INI_VAR_DWORD +{ + char Name[128]; +#ifndef _WIN64 + DWORD ValueDec; + DWORD ValueHex; +#else + DWORD64 ValueDec; + DWORD64 ValueHex; +#endif + +} INI_VAR_DWORD, PINI_VAR_DWORD; + +typedef struct _INI_VAR_BOOL +{ + char Name[128]; + bool Value; +} INI_VAR_BOOL, PINI_VAR_BOOL; + +typedef struct _INI_VAR_BYTEARRAY +{ + char Name[128]; + byte ArraySize; + char Value[255]; +} INI_VAR_BYTEARRAY, PINI_VAR_BYTEARRAY; + +// end + +typedef struct _INI_SECTION_VARIABLE +{ + char VariableName[128]; + char VariableValue[128]; +} INI_SECTION_VARIABLE, PINI_SECTION_VARIABLE; + + +typedef struct _INI_SECTION +{ + char SectionName[128]; + DWORD VariablesCount; + [length_is(SectionCount)] INI_SECTION_VARIABLE *Variables; + +} INI_SECTION, PINI_SECTION; + +typedef struct _INI_DATA +{ + DWORD SectionCount; + [length_is(SectionCount)] INI_SECTION *Section; +} INI_DATA, *PINI_DATA; + +class INI_FILE +{ +public: + INI_FILE(wchar_t*); + ~INI_FILE(); + + bool SectionExists(char *SectionName); + bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_STRING *Variable); + bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_DWORD *Variable); + bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BOOL *Variable); + bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BYTEARRAY *Variable); + +private: + DWORD FileSize; // Ini file size + char *FileRaw; // Ini file raw dump + DWORD FileStringsCount; // String-map lenght + DWORD *FileStringsMap; // String-map + INI_DATA IniData; // Parsed data + + bool IsVariable(char *Str, DWORD StrSize); // Is variable (for Parse) + bool FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD StrSize); // Fill INI_SECTION_VARIABLE struct (for Parse) + int StrTrim(char* Str, STRING_TRIM_TYPE Type); + DWORD GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size); // Get stroing from string-map + bool CreateStringsMap(); // Create file string-map + bool Parse(); // Parse file to class structures +}; + From 81baa4522fbcb6c873f4b28a2f0e9de24eed3a4f Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 3 Dec 2014 22:07:26 +0300 Subject: [PATCH 016/208] Tech updates 2014.12.03 : - added INI reader by Fusix for C++ version - asulwer also helped with the development 2014.11.25 : - corrected some typos in INI file - added EasyPrint policy value 2014.11.24 : - added support for termsrv.dll 6.3.9600.17415 --- res/rdpwrap.ini | 86 +++++++++++++++++++++++++++++++++++++++++++++++-- technical.txt | 13 +++++++- 2 files changed, 95 insertions(+), 4 deletions(-) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 6b44968..5fe0c87 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2014-11-20 +Updated=2014-11-25 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -901,8 +901,8 @@ SLInitFunc.x64=New_CSLQuery_Initialize LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A2729 LocalOnlyCode.x86=jmpshort -; .text:000000018008181F cmp [rsp+48h+arg_18], 0 -; .text:0000000180081824 jz loc_180031DEF <- nop + jmp +; .text:000000018008181F cmp [rsp+48h+arg_18], 0 +; .text:0000000180081824 jz loc_180031DEF <- nop + jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=81824 LocalOnlyCode.x64=nopjmp @@ -1016,6 +1016,67 @@ SLInitHook.x64=1 SLInitOffset.x64=3B110 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.17415] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100B33EB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100B33F0 test eax, eax +; .text:100B33F2 js short loc_100B340F +; .text:100B33F4 cmp [ebp+var_C], 0 +; .text:100B33F8 jz short loc_100B340F <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B33F8 +LocalOnlyCode.x86=jmpshort +; .text:000000018008B2D4 cmp [rsp+58h+arg_18], 0 +; .text:000000018008B2D9 jz loc_180025C39 <- nop + jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B2D9 +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10037111 lea eax, [esp+150h+VersionInformation] +; .text:10037115 inc ebx <- nop +; .text:10037116 mov [edi], ebx +; .text:10037118 push eax ; lpVersionInformation +; .text:10037119 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=37115 +SingleUserCode.x86=nop +; .text:0000000180033CE3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180033CE8 mov ebx, 1 <- 0 +; .text:0000000180033CED mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180033CF5 mov [rdi], ebx +; .text:0000000180033CF7 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=33CE9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1003CFF9 cmp eax, [ecx+320h] +; .text:1003CFFF jz loc_1004A52F +; Changed +; .text:1003CFF9 mov eax, 100h +; .text:1003CFFE mov [ecx+320h], eax +; .text:1003D004 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFF9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:0000000180045825 cmp [rcx+63Ch], eax +; .text:000000018004582B jz loc_180067704 +; Changed +; .text:0000000180045825 mov eax, 100h +; .text:000000018004582A mov [rcx+638h], eax +; .text:0000000180045830 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45825 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=18478 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DBC0 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense ; .text:1009569B call sub_100B7EE5 @@ -1211,6 +1272,25 @@ bAppServerAllowed.x64 =E44A8 bInitialized.x64 =E44AC bMultimonAllowed.x64 =E44B0 +[6.3.9600.17415-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =F9054 +lMaxUserSessions.x64 =F9058 +bAppServerAllowed.x64 =F905C +bInitialized.x64 =F9060 +bMultimonAllowed.x64 =F9064 +bServerSku.x64 =F9068 +ulMaxDebugSessions.x64=F906C +bRemoteConnAllowed.x64=F9070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 diff --git a/technical.txt b/technical.txt index a4e7be3..5f2cc44 100644 --- a/technical.txt +++ b/technical.txt @@ -35,7 +35,7 @@ Terminal Services supported versions 6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] 6.3.9600.16384 (Windows 8.1) [init hook + extended patch] 6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] -6.3.9600.17415 (Windows 8.1 with KB3000850) [!todo] +6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch ~ requires INI support] 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] 6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview Update 2) [!todo] @@ -45,6 +45,17 @@ Known failures Source code changelog (rdpwrap library): +2014.12.03 : +- added INI reader by Fusix for C++ version +- asulwer also helped with the development + +2014.11.25 : +- corrected some typos in INI file +- added EasyPrint policy value + +2014.11.24 : +- added support for termsrv.dll 6.3.9600.17415 + 2014.11.21 : - new LiteINI module to read INI files - added support to store patch settings in INI file From d2449ccdd69181d6f99cf709da4c04254036f947 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 3 Dec 2014 22:51:56 +0300 Subject: [PATCH 017/208] Fix some typos --- src-x86-x64-Fusix/IniFile.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index e375006..b33b4de 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -88,7 +88,7 @@ bool INI_FILE::CreateStringsMap() return true; } -int INI_FILE::StrTrim(char* Str, STRING_TRIM_TYPE Type) +int INI_FILE::StrTrim(char* Str, STRING_TRIM_TYPE Type) { int StrLn = strlen(Str) + 1; if ((StrLn == 0) || (Type < TRIM_LEFT) || (Type > TRIM_BOTH)) { @@ -169,7 +169,7 @@ bool INI_FILE::FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD Str for(DWORD i = 0; i < StrSize; i++) { if(Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; - if(Str[i] == '=' && !Quotes) + if(Str[i] == '=' && !Quotes) { memcpy(Variable->VariableName, Str, i); memcpy(Variable->VariableValue, &(Str[i+1]), StrSize-(i-1)); @@ -193,14 +193,14 @@ bool INI_FILE::Parse() DWORD CurrentSectionNum = -1; DWORD CurrentVariableNum = -1; - // Calculate sections count + // Calculate section count for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's comment + if(CurrentString[0] == ';') continue; // It's a comment - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration { SectionsCount++; continue; @@ -214,15 +214,15 @@ bool INI_FILE::Parse() { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's comment + if(CurrentString[0] == ';') continue; // It's a comment - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration { CurrentSectionNum++; continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if(IsVariable(CurrentString, CurrentStringSize)) { VariablesCount++; SectionVariableCount[CurrentSectionNum]++; @@ -250,9 +250,9 @@ bool INI_FILE::Parse() { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') // It's comment + if(CurrentString[0] == ';') // It's a comment { - continue; + continue; } if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') @@ -263,7 +263,7 @@ bool INI_FILE::Parse() continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if(IsVariable(CurrentString, CurrentStringSize)) { FillVariable(&(IniData.Section[CurrentSectionNum].Variables[CurrentVariableNum]), CurrentString, CurrentStringSize); CurrentVariableNum++; @@ -442,7 +442,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V switch(Variable->VariableValue[i+1]) { - case '0': break; + case '0': break; case '1': RetVariable->Value[(i/2)] += 1; break; case '2': RetVariable->Value[(i/2)] += 2; break; case '3': RetVariable->Value[(i/2)] += 3; break; From bc84ee3ac43a379fdcfd82c24137906e3c7c3331 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 4 Dec 2014 01:23:10 +0300 Subject: [PATCH 018/208] Linking with new module (incomplete) --- src-x86-x64-Fusix/RDPWrap.cpp | 89 +++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 35 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 620ee60..a1ff822 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -15,6 +15,7 @@ */ #include "stdafx.h" +#include "IniFile.h" typedef struct { @@ -54,9 +55,7 @@ struct FARJMP FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; -// Implement this -INIFile INI; -// Correct this +INI_FILE *IniFile; LPCTSTR LogFile = L"\\rdpwrap.txt"; HMODULE hTermSrv; HMODULE hSLC; @@ -240,9 +239,9 @@ BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) bool OverrideSL(LPWSTR ValueName, DWORD *Value) { - if (INIValueExists(INI, "SLPolicy", ValueName)) + if (IniFile->VariableExists(INI, "SLPolicy", ValueName)) { - *Value = INIReadDWord(INI, "SLPolicy", ValueName, 0); + if (!(IniFile->GetVariableInSection("SLPolicy", ValueName, Value))) *Value = 0; return true; } return false; @@ -371,7 +370,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() Sect = new char[1024]; wsprintfA(Sect, "%d.%d.%d.%d-SLInit", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); - if (INISectionExists(INI, Sect)) + if (IniFile->SectionExists(Sect)) { #ifdef _WIN64 bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bServerSku.x64", 0)); @@ -397,7 +396,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() if (bServerSku) { - *bServerSku = INIReadDWord(INI, "SLInit", "bServerSku", 1); + if (!(IniFile->GetVariableInSection("SLInit", "bServerSku", bServerSku))) *bServerSku = 1; Log = new char[1024]; wsprintfA(Log, "[0x%p] bServerSku = %d\r\n", bServerSku, *bServerSku); @@ -406,7 +405,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bRemoteConnAllowed) { - *bRemoteConnAllowed = INIReadDWord(INI, "SLInit", "bRemoteConnAllowed", 1); + if (!(IniFile->GetVariableInSection("SLInit", "bRemoteConnAllowed", bRemoteConnAllowed))) *bRemoteConnAllowed = 1; Log = new char[1024]; wsprintfA(Log, "[0x%p] bRemoteConnAllowed = %d\r\n", bRemoteConnAllowed, *bRemoteConnAllowed); @@ -415,7 +414,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bFUSEnabled) { - *bFUSEnabled = INIReadDWord(INI, "SLInit", "bFUSEnabled", 1); + if (!(IniFile->GetVariableInSection("SLInit", "bFUSEnabled", bFUSEnabled))) *bFUSEnabled = 1; Log = new char[1024]; wsprintfA(Log, "[0x%p] bFUSEnabled = %d\r\n", bFUSEnabled, *bFUSEnabled); @@ -424,7 +423,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bAppServerAllowed) { - *bAppServerAllowed = INIReadDWord(INI, "SLInit", "bAppServerAllowed", 1); + if (!(IniFile->GetVariableInSection("SLInit", "bAppServerAllowed", bAppServerAllowed))) *bAppServerAllowed = 1; Log = new char[1024]; wsprintfA(Log, "[0x%p] bAppServerAllowed = %d\r\n", bAppServerAllowed, *bAppServerAllowed); @@ -433,7 +432,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bMultimonAllowed) { - *bMultimonAllowed = INIReadDWord(INI, "SLInit", "bMultimonAllowed", 1); + if (!(IniFile->GetVariableInSection("SLInit", "bMultimonAllowed", bMultimonAllowed))) *bMultimonAllowed = 1; Log = new char[1024]; wsprintfA(Log, "[0x%p] bMultimonAllowed = %d\r\n", bMultimonAllowed, *bMultimonAllowed); @@ -442,7 +441,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (lMaxUserSessions) { - *lMaxUserSessions = INIReadDWord(INI, "SLInit", "lMaxUserSessions", 0); + if (!(IniFile->GetVariableInSection("SLInit", "lMaxUserSessions", lMaxUserSessions))) *lMaxUserSessions = 0; Log = new char[1024]; wsprintfA(Log, "[0x%p] lMaxUserSessions = %d\r\n", lMaxUserSessions, *lMaxUserSessions); @@ -451,7 +450,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (ulMaxDebugSessions) { - *ulMaxDebugSessions = INIReadDWord(INI, "SLInit", "ulMaxDebugSessions", 0); + if (!(IniFile->GetVariableInSection("SLInit", "ulMaxDebugSessions", ulMaxDebugSessions))) *ulMaxDebugSessions = 0; Log = new char[1024]; wsprintfA(Log, "[0x%p] ulMaxDebugSessions = %d\r\n", ulMaxDebugSessions, *ulMaxDebugSessions); @@ -460,7 +459,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bInitialized) { - *bInitialized = INIReadDWord(INI, "SLInit", "bInitialized", 1); + if (!(IniFile->GetVariableInSection("SLInit", "bInitialized", bInitialized))) *bInitialized = 1; Log = new char[1024]; wsprintfA(Log, "[0x%p] bInitialized = %d\r\n", bInitialized, *bInitialized); @@ -483,12 +482,17 @@ void Hook() AlreadyHooked = true; WriteToLog("Loading configuration...\r\n"); - if (!INILoad(INI, ExtractFilePath(GetBinaryPath()) + "rdpwrap.ini")) + *IniFile = new INI_FILE(ExtractFilePath(GetBinaryPath()) + L"rdpwrap.ini"); + if (*IniFile == NULL) { WriteToLog("Error: Failed to load configuration\r\n"); return; } - LogFile = INIReadString(INI, "Main", "LogFile", ExtractFilePath(GetBinaryPath()) + "rdpwrap.txt"); + + if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFile))) + { + LogFile = ExtractFilePath(GetBinaryPath()) + L"rdpwrap.txt"; + } bool Result; char *Log; @@ -559,17 +563,23 @@ void Hook() SetThreadsState(false); WriteToLog("Loading patch codes...\r\n"); - PatchList = INIReadSection(INI, "PatchCodes"); - //SetLength(Patch, Length(PatchList)); + INI->ReadSection("PatchCodes", &PatchList); + + INI_VAR_BYTEARRAY Patch[PatchList.length]; for (int i = 0; i < Patch.length; i++) { - Patch[i] = INIReadBytes(INI, "PatchCodes", PatchList[i]); - // for security reasons - // not more than 16 bytes - if (Patch[i].length > 16) SetLength(Patch[i], 16); + if (IniFile->GetVariableInSection("PatchCodes", PatchList[i], &Patch[i])) + { + // for security reasons + // not more than 16 bytes + if (Patch[i].length > 16) SetLength(Patch[i], 16); + } } - if ((Ver == 0x0600) && (INIReadBool(INI, "Main", "SLPolicyHookNT60", true))) + bool bSLHook; + if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true; + + if ((Ver == 0x0600) && bSLHook) { // Windows Vista // uses SL Policy API (slc.dll) @@ -598,7 +608,10 @@ void Hook() WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); } } - if ((Ver == 0x0601) && (INIReadBool(INI, "Main", "SLPolicyHookNT61", true))) + + if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true; + + if ((Ver == 0x0601) && bSLHook) { // Windows 7 // uses SL Policy API (slc.dll) @@ -651,15 +664,17 @@ void Hook() char *Sect; Sect = new char[1024]; wsprintfA(Sect, "%d.%d.%d.%d", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); - if (INISectionExists(INI, Sect)) + if (IniFile->SectionExists(Sect)) { if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) { + bool Bool; #ifdef _WIN64 - if (INIReadBool(INI, Sect, "LocalOnlyPatch.x64", false)) + if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x64", &Bool))) Bool = true; #else - if (INIReadBool(INI, Sect, "LocalOnlyPatch.x86", false)) + if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x86", &Bool))) Bool = true; #endif + if (Bool) { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); int i = -1; @@ -673,10 +688,11 @@ void Hook() if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); } #ifdef _WIN64 - if (INIReadBool(INI, Sect, "SingleUserPatch.x64", false)) + if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x64", &Bool))) Bool = true; #else - if (INIReadBool(INI, Sect, "SingleUserPatch.x86", false)) + if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x86", &Bool))) Bool = true; #endif + if (Bool) { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); int i = -1; @@ -690,10 +706,11 @@ void Hook() if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); } #ifdef _WIN64 - if (INIReadBool(INI, Sect, "DefPolicyPatch.x64", false)) + if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x64", &Bool))) Bool = true; #else - if (INIReadBool(INI, Sect, "DefPolicyPatch.x86", false)) + if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x86", &Bool))) Bool = true; #endif + if (Bool) { WriteToLog("Patch CDefPolicy::Query\r\n"); int i = -1; @@ -707,10 +724,11 @@ void Hook() if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); } #ifdef _WIN64 - if (INIReadBool(INI, Sect, "SLPolicyInternal.x64", false)) + if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x64", &Bool))) Bool = true; #else - if (INIReadBool(INI, Sect, "SLPolicyInternal.x86", false)) + if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x86", &Bool))) Bool = true; #endif + if (Bool) { WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); char *FuncName; @@ -746,10 +764,11 @@ void Hook() WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); } #ifdef _WIN64 - if (INIReadBool(INI, Sect, "SLInitHook.x64", false)) + if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x64", &Bool))) Bool = true; #else - if (INIReadBool(INI, Sect, "SLInitHook.x86", false)) + if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x86", &Bool))) Bool = true; #endif + if (Bool) { WriteToLog("Hook CSLQuery::Initialize\r\n"); char *FuncName; From 17102ec1cd906958f1c6414ce24d1b1c003fe719 Mon Sep 17 00:00:00 2001 From: FusixGit Date: Thu, 4 Dec 2014 17:47:37 +0300 Subject: [PATCH 019/208] Update IniFile.cpp --- src-x86-x64-Fusix/IniFile.cpp | 235 ++++++++++++---------------------- 1 file changed, 81 insertions(+), 154 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index b33b4de..6f64676 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -76,7 +76,7 @@ bool INI_FILE::CreateStringsMap() StringsCount = 1; - for(DWORD i = 9; i < FileSize; i++) + for(DWORD i = 0; i < FileSize; i++) { if(FileRaw[i] == '\r' && FileRaw[i+1] == '\n') { @@ -88,40 +88,32 @@ bool INI_FILE::CreateStringsMap() return true; } -int INI_FILE::StrTrim(char* Str, STRING_TRIM_TYPE Type) +int INI_FILE::StrTrim(char* Str) { - int StrLn = strlen(Str) + 1; - if ((StrLn == 0) || (Type < TRIM_LEFT) || (Type > TRIM_BOTH)) { - return 0; - } - char *NewStr = new char[StrLn]; - int IdxSrc = -1, IdxDest = 0; - if ((Type == TRIM_LEFT) || (Type == TRIM_BOTH)) { - bool InText = false; - while(Str[++IdxSrc]) { - if (!InText && (Str[IdxSrc] != ' ') && (Str[IdxSrc] != '\n') && (Str[IdxSrc] != '\t')) { - InText = true; - } - if (InText) { - NewStr[IdxDest++] = Str[IdxSrc]; - } - } - NewStr[IdxDest] = '\0'; - } else { - IdxDest = StrLn - 1; - strcpy_s(NewStr, StrLn, Str); - } - if ((Type == TRIM_RIGHT) || (Type == TRIM_BOTH)) { - while(--IdxDest > 0) { - if ((NewStr[IdxDest] != ' ') && (NewStr[IdxDest] != '\n') && (NewStr[IdxDest] != '\t')) { - break; - } - } - NewStr[IdxDest] = '\0'; - } - strcpy_s(Str, StrLn, NewStr); - delete NewStr; - return IdxDest; + int i = 0, j; + while((Str[i]==' ')||(Str[i]=='\t')) + { + i++; + } + if(i>0) + { + for(j=0; j < strlen(Str); j++) + { + Str[j]=Str[j+i]; + } + Str[j]='\0'; + } + + i = strlen(Str)-1; + while((Str[i] == ' ')||(Str[i]=='\t')) + { + i--; + } + if(i < (strlen(Str)-1)) + { + Str[i+1] = '\0'; + } + return 0; } DWORD INI_FILE::GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size) @@ -169,12 +161,12 @@ bool INI_FILE::FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD Str for(DWORD i = 0; i < StrSize; i++) { if(Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; - if(Str[i] == '=' && !Quotes) + if(Str[i] == '=' && !Quotes) { memcpy(Variable->VariableName, Str, i); memcpy(Variable->VariableValue, &(Str[i+1]), StrSize-(i-1)); - //StrTrim(Variable->VariableName, TRIM_BOTH); - //StrTrim(Variable->VariableValue, TRIM_BOTH); + StrTrim(Variable->VariableName); + StrTrim(Variable->VariableValue); break; } } @@ -193,14 +185,14 @@ bool INI_FILE::Parse() DWORD CurrentSectionNum = -1; DWORD CurrentVariableNum = -1; - // Calculate section count + // Calculate sections count for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's a comment + if(CurrentString[0] == ';') continue; // It's comment - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate { SectionsCount++; continue; @@ -214,15 +206,15 @@ bool INI_FILE::Parse() { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's a comment + if(CurrentString[0] == ';') continue; // It's comment - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate { CurrentSectionNum++; continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if(IsVariable(CurrentString, CurrentStringSize)) { VariablesCount++; SectionVariableCount[CurrentSectionNum]++; @@ -250,9 +242,9 @@ bool INI_FILE::Parse() { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') // It's a comment + if(CurrentString[0] == ';') // It's comment { - continue; + continue; } if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') @@ -263,7 +255,7 @@ bool INI_FILE::Parse() continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if(IsVariable(CurrentString, CurrentStringSize)) { FillVariable(&(IniData.Section[CurrentSectionNum].Variables[CurrentVariableNum]), CurrentString, CurrentStringSize); CurrentVariableNum++; @@ -286,7 +278,7 @@ bool INI_FILE::SectionExists(char *SectionName) return false; } -bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_STRING *RetVariable) +bool INI_FILE::GetVariableInSectionPrivate(char *SectionName, char *VariableName, INI_SECTION_VARIABLE *RetVariable) { INI_SECTION *Section = NULL; INI_SECTION_VARIABLE *Variable = NULL; @@ -305,6 +297,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V SetLastError(318); // This region is not found return false; } + // Find variable for(DWORD i = 0; i < Section->VariablesCount; i++) { @@ -321,106 +314,66 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V } memset(RetVariable, 0x00, sizeof(*RetVariable)); - memcpy(RetVariable->Name, Variable->VariableName, strlen(Variable->VariableName)); - memcpy(RetVariable->Value, Variable->VariableValue, strlen(Variable->VariableValue)); + memcpy(RetVariable, Variable, sizeof(*Variable)); + + return true; +} + +bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_STRING *RetVariable) +{ + bool Status = false; + INI_SECTION_VARIABLE Variable = {}; + + Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); + if(!Status) return Status; + + memset(RetVariable, 0x00, sizeof(*RetVariable)); + memcpy(RetVariable->Name, Variable.VariableName, strlen(Variable.VariableName)); + memcpy(RetVariable->Value, Variable.VariableValue, strlen(Variable.VariableValue)); return true; } bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_DWORD *RetVariable) { - INI_SECTION *Section = NULL; - INI_SECTION_VARIABLE *Variable = NULL; + bool Status = false; + INI_SECTION_VARIABLE Variable = {}; - // Find section - for(DWORD i = 0; i < IniData.SectionCount; i++) - { - if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) - { - Section = &(IniData.Section[i]); - break; - } - } - if(Section == NULL) - { - SetLastError(318); // This region is not found - return false; - } - // Find variable - for(DWORD i = 0; i < Section->VariablesCount; i++) - { - if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) - { - Variable = &(Section->Variables[i]); - break; - } - } - if(Variable == NULL) - { - SetLastError(1898); // Member of the group is not found - return false; - } + Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); + if(!Status) return Status; memset(RetVariable, 0x00, sizeof(*RetVariable)); - memcpy(RetVariable->Name, Variable->VariableName, strlen(Variable->VariableName)); + memcpy(RetVariable->Name, Variable.VariableName, strlen(Variable.VariableName)); #ifndef _WIN64 - RetVariable->ValueDec = strtol(Variable->VariableValue, NULL, 10); - RetVariable->ValueHex = strtol(Variable->VariableValue, NULL, 16); + RetVariable->ValueDec = strtol(Variable.VariableValue, NULL, 10); + RetVariable->ValueHex = strtol(Variable.VariableValue, NULL, 16); #else - RetVariable->ValueDec = _strtoi64(Variable->VariableValue, NULL, 10); - RetVariable->ValueHex = _strtoi64(Variable->VariableValue, NULL, 16); + RetVariable->ValueDec = _strtoi64(Variable.VariableValue, NULL, 10); + RetVariable->ValueHex = _strtoi64(Variable.VariableValue, NULL, 16); #endif return true; } bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BYTEARRAY *RetVariable) { - INI_SECTION *Section = NULL; - INI_SECTION_VARIABLE *Variable = NULL; + bool Status = false; + INI_SECTION_VARIABLE Variable = {}; - // Find section - for(DWORD i = 0; i < IniData.SectionCount; i++) - { - if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) - { - Section = &(IniData.Section[i]); - break; - } - } - if(Section == NULL) - { - SetLastError(318); // This region is not found - return false; - } - // Find variable - for(DWORD i = 0; i < Section->VariablesCount; i++) - { - if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) - { - Variable = &(Section->Variables[i]); - break; - } - } - if(Variable == NULL) - { - SetLastError(1898); // Member of the group is not found - return false; - } - - DWORD ValueLen = strlen(Variable->VariableName); + Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); + if(!Status) return Status; + + DWORD ValueLen = strlen(Variable.VariableValue); if((ValueLen % 2) != 0) return false; memset(RetVariable, 0x00, sizeof(*RetVariable)); - memcpy(RetVariable->Name, Variable->VariableName, ValueLen); - - char Mask[15] = {}; + memcpy(RetVariable->Name, Variable.VariableName, ValueLen); for(DWORD i = 0; i <= ValueLen; i++) { if((i % 2) != 0) continue; - switch(Variable->VariableValue[i]) + switch(Variable.VariableValue[i]) { case '0': break; case '1': RetVariable->Value[(i/2)] += (1 << 4); break; @@ -440,9 +393,9 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V case 'F': RetVariable->Value[(i/2)] += (15 << 4); break; } - switch(Variable->VariableValue[i+1]) + switch(Variable.VariableValue[i+1]) { - case '0': break; + case '0': break; case '1': RetVariable->Value[(i/2)] += 1; break; case '2': RetVariable->Value[(i/2)] += 2; break; case '3': RetVariable->Value[(i/2)] += 3; break; @@ -466,39 +419,13 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BOOL *RetVariable) { - INI_SECTION *Section = NULL; - INI_SECTION_VARIABLE *Variable = NULL; + bool Status = false; + INI_SECTION_VARIABLE Variable = {}; + + Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); + if(!Status) return Status; - // Find section - for(DWORD i = 0; i < IniData.SectionCount; i++) - { - if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) - { - Section = &(IniData.Section[i]); - break; - } - } - if(Section == NULL) - { - SetLastError(318); // This region is not found - return false; - } - // Find variable - for(DWORD i = 0; i < Section->VariablesCount; i++) - { - if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) - { - Variable = &(Section->Variables[i]); - break; - } - } - if(Variable == NULL) - { - SetLastError(1898); // Member of the group is not found - return false; - } - memset(RetVariable, 0x00, sizeof(*RetVariable)); - RetVariable->Value = (bool)strtol(Variable->VariableValue, NULL, 10); + RetVariable->Value = (bool)strtol(Variable.VariableValue, NULL, 10); return true; } From 4d89fc245a89074c26f27ae2bf05bb012923c4b7 Mon Sep 17 00:00:00 2001 From: FusixGit Date: Thu, 4 Dec 2014 17:48:31 +0300 Subject: [PATCH 020/208] Update IniFile.h --- src-x86-x64-Fusix/IniFile.h | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.h b/src-x86-x64-Fusix/IniFile.h index 2486683..c044a55 100644 --- a/src-x86-x64-Fusix/IniFile.h +++ b/src-x86-x64-Fusix/IniFile.h @@ -17,14 +17,7 @@ #include "stdafx.h" #include -typedef enum _STRING_TRIM_TYPE -{ - TRIM_LEFT, - TRIM_RIGHT, - TRIM_BOTH, -} STRING_TRIM_TYPE; - -// Out values struts +// Out values struсts typedef struct _INI_VAR_STRING { char Name[128]; @@ -99,11 +92,15 @@ private: DWORD *FileStringsMap; // String-map INI_DATA IniData; // Parsed data - bool IsVariable(char *Str, DWORD StrSize); // Is variable (for Parse) - bool FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD StrSize); // Fill INI_SECTION_VARIABLE struct (for Parse) - int StrTrim(char* Str, STRING_TRIM_TYPE Type); - DWORD GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size); // Get stroing from string-map + // Common service functions + int StrTrim(char* Str); + + // Class service functions bool CreateStringsMap(); // Create file string-map bool Parse(); // Parse file to class structures + DWORD GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size); // Get stroing from string-map + bool IsVariable(char *Str, DWORD StrSize); + bool FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD StrSize); // Fill INI_SECTION_VARIABLE struct (for Parse) + bool GetVariableInSectionPrivate(char *SectionName, char *VariableName, INI_SECTION_VARIABLE *RetVariable); }; From 8b85f4360567fbd7a7098b08e1ec966ba40e9166 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 4 Dec 2014 21:22:57 +0300 Subject: [PATCH 021/208] Fix typos --- src-x86-x64-Fusix/IniFile.cpp | 46 +++++++++++++++++------------------ src-x86-x64-Fusix/IniFile.h | 8 +++--- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 6f64676..cc3f707 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -88,24 +88,24 @@ bool INI_FILE::CreateStringsMap() return true; } -int INI_FILE::StrTrim(char* Str) +int INI_FILE::StrTrim(char* Str) { int i = 0, j; - while((Str[i]==' ')||(Str[i]=='\t')) + while((Str[i]==' ')||(Str[i]=='\t')) { i++; } - if(i>0) + if(i>0) { for(j=0; j < strlen(Str); j++) { Str[j]=Str[j+i]; } Str[j]='\0'; - } - + } + i = strlen(Str)-1; - while((Str[i] == ' ')||(Str[i]=='\t')) + while((Str[i] == ' ')||(Str[i]=='\t')) { i--; } @@ -161,7 +161,7 @@ bool INI_FILE::FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD Str for(DWORD i = 0; i < StrSize; i++) { if(Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; - if(Str[i] == '=' && !Quotes) + if(Str[i] == '=' && !Quotes) { memcpy(Variable->VariableName, Str, i); memcpy(Variable->VariableValue, &(Str[i+1]), StrSize-(i-1)); @@ -190,9 +190,9 @@ bool INI_FILE::Parse() { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's comment - - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate + if(CurrentString[0] == ';') continue; // It's a comment + + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration { SectionsCount++; continue; @@ -206,15 +206,15 @@ bool INI_FILE::Parse() { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's comment - + if(CurrentString[0] == ';') continue; // It's a comment + - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section diclarate + if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration { CurrentSectionNum++; continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if(IsVariable(CurrentString, CurrentStringSize)) { VariablesCount++; SectionVariableCount[CurrentSectionNum]++; @@ -242,9 +242,9 @@ bool INI_FILE::Parse() { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') // It's comment + if(CurrentString[0] == ';') // It's a comment { - continue; + continue; } if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') @@ -255,7 +255,7 @@ bool INI_FILE::Parse() continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if(IsVariable(CurrentString, CurrentStringSize)) { FillVariable(&(IniData.Section[CurrentSectionNum].Variables[CurrentVariableNum]), CurrentString, CurrentStringSize); CurrentVariableNum++; @@ -292,7 +292,7 @@ bool INI_FILE::GetVariableInSectionPrivate(char *SectionName, char *VariableName break; } } - if(Section == NULL) + if(Section == NULL) { SetLastError(318); // This region is not found return false; @@ -330,7 +330,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, strlen(Variable.VariableName)); memcpy(RetVariable->Value, Variable.VariableValue, strlen(Variable.VariableValue)); - + return true; } @@ -341,7 +341,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); if(!Status) return Status; - + memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, strlen(Variable.VariableName)); @@ -362,7 +362,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); if(!Status) return Status; - + DWORD ValueLen = strlen(Variable.VariableValue); if((ValueLen % 2) != 0) return false; @@ -372,7 +372,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V for(DWORD i = 0; i <= ValueLen; i++) { if((i % 2) != 0) continue; - + switch(Variable.VariableValue[i]) { case '0': break; @@ -391,7 +391,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V case 'D': RetVariable->Value[(i/2)] += (13 << 4); break; case 'E': RetVariable->Value[(i/2)] += (14 << 4); break; case 'F': RetVariable->Value[(i/2)] += (15 << 4); break; - } + } switch(Variable.VariableValue[i+1]) { diff --git a/src-x86-x64-Fusix/IniFile.h b/src-x86-x64-Fusix/IniFile.h index c044a55..70d6837 100644 --- a/src-x86-x64-Fusix/IniFile.h +++ b/src-x86-x64-Fusix/IniFile.h @@ -28,10 +28,10 @@ typedef struct _INI_VAR_DWORD { char Name[128]; #ifndef _WIN64 - DWORD ValueDec; + DWORD ValueDec; DWORD ValueHex; #else - DWORD64 ValueDec; + DWORD64 ValueDec; DWORD64 ValueHex; #endif @@ -88,7 +88,7 @@ public: private: DWORD FileSize; // Ini file size char *FileRaw; // Ini file raw dump - DWORD FileStringsCount; // String-map lenght + DWORD FileStringsCount; // String-map length DWORD *FileStringsMap; // String-map INI_DATA IniData; // Parsed data @@ -98,7 +98,7 @@ private: // Class service functions bool CreateStringsMap(); // Create file string-map bool Parse(); // Parse file to class structures - DWORD GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size); // Get stroing from string-map + DWORD GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size); // Get string from string-map bool IsVariable(char *Str, DWORD StrSize); bool FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD StrSize); // Fill INI_SECTION_VARIABLE struct (for Parse) bool GetVariableInSectionPrivate(char *SectionName, char *VariableName, INI_SECTION_VARIABLE *RetVariable); From 9033bd91f171349a1c12d513ce724c9d112bda24 Mon Sep 17 00:00:00 2001 From: FusixGit Date: Thu, 4 Dec 2014 22:59:52 +0300 Subject: [PATCH 022/208] Update RDPWrap.cpp --- src-x86-x64-Fusix/RDPWrap.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index a1ff822..3dece5c 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -239,11 +239,14 @@ BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) bool OverrideSL(LPWSTR ValueName, DWORD *Value) { + INI_VAR_DWORD Variable = {0}; + if (IniFile->VariableExists(INI, "SLPolicy", ValueName)) { - if (!(IniFile->GetVariableInSection("SLPolicy", ValueName, Value))) *Value = 0; + if (!(IniFile->GetVariableInSection("SLPolicy", ValueName, &Variable))) *Value = 0; return true; } + *Value = Variable.ValueDec; return false; } @@ -482,8 +485,8 @@ void Hook() AlreadyHooked = true; WriteToLog("Loading configuration...\r\n"); - *IniFile = new INI_FILE(ExtractFilePath(GetBinaryPath()) + L"rdpwrap.ini"); - if (*IniFile == NULL) + IniFile = new INI_FILE(ExtractFilePath(GetBinaryPath()) + L"rdpwrap.ini"); + if (IniFile == NULL) { WriteToLog("Error: Failed to load configuration\r\n"); return; @@ -822,4 +825,4 @@ void WINAPI SvchostPushServiceGlobals(void *lpGlobalData) if (!AlreadyHooked) Hook(); if (_SvchostPushServiceGlobals != NULL) _SvchostPushServiceGlobals(lpGlobalData); -} \ No newline at end of file +} From faf2bdc9050eec8065d8e5dcb47703563b3751bb Mon Sep 17 00:00:00 2001 From: FusixGit Date: Thu, 4 Dec 2014 23:00:44 +0300 Subject: [PATCH 023/208] Update IniFile.h --- src-x86-x64-Fusix/IniFile.h | 52 ++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.h b/src-x86-x64-Fusix/IniFile.h index 70d6837..b473d9a 100644 --- a/src-x86-x64-Fusix/IniFile.h +++ b/src-x86-x64-Fusix/IniFile.h @@ -17,16 +17,18 @@ #include "stdafx.h" #include +#define MAX_STRING_LEN 255 + // Out values struсts typedef struct _INI_VAR_STRING { - char Name[128]; - char Value[128]; -} INI_VAR_STRING, PINI_VAR_STRING; + char Name[MAX_STRING_LEN]; + char Value[MAX_STRING_LEN]; +} INI_VAR_STRING, *PINI_VAR_STRING; typedef struct _INI_VAR_DWORD { - char Name[128]; + char Name[MAX_STRING_LEN]; #ifndef _WIN64 DWORD ValueDec; DWORD ValueHex; @@ -35,37 +37,43 @@ typedef struct _INI_VAR_DWORD DWORD64 ValueHex; #endif -} INI_VAR_DWORD, PINI_VAR_DWORD; - -typedef struct _INI_VAR_BOOL -{ - char Name[128]; - bool Value; -} INI_VAR_BOOL, PINI_VAR_BOOL; +} INI_VAR_DWORD, *PINI_VAR_DWORD; typedef struct _INI_VAR_BYTEARRAY { - char Name[128]; + char Name[MAX_STRING_LEN]; byte ArraySize; - char Value[255]; -} INI_VAR_BYTEARRAY, PINI_VAR_BYTEARRAY; + char Value[MAX_STRING_LEN]; +} INI_VAR_BYTEARRAY, *PINI_VAR_BYTEARRAY; + +typedef struct _INI_SECTION_VARLIST_ENTRY +{ + char String[MAX_STRING_LEN]; +} INI_SECTION_VARLIST_ENTRY, *PINI_SECTION_VARLIST_ENTRY; + +typedef struct _INI_SECTION_VARLIST +{ + DWORD EntriesCount; + [length_is(EntriesCount)] INI_SECTION_VARLIST_ENTRY *NamesEntries; + [length_is(EntriesCount)] INI_SECTION_VARLIST_ENTRY *ValuesEntries; +} INI_SECTION_VARLIST, *PINI_SECTION_VARLIST; // end typedef struct _INI_SECTION_VARIABLE { - char VariableName[128]; - char VariableValue[128]; -} INI_SECTION_VARIABLE, PINI_SECTION_VARIABLE; + char VariableName[MAX_STRING_LEN]; + char VariableValue[MAX_STRING_LEN]; +} INI_SECTION_VARIABLE, *PINI_SECTION_VARIABLE; typedef struct _INI_SECTION { - char SectionName[128]; + char SectionName[MAX_STRING_LEN]; DWORD VariablesCount; [length_is(SectionCount)] INI_SECTION_VARIABLE *Variables; -} INI_SECTION, PINI_SECTION; +} INI_SECTION, *PINI_SECTION; typedef struct _INI_DATA { @@ -80,10 +88,12 @@ public: ~INI_FILE(); bool SectionExists(char *SectionName); + bool VariableExists(char *SectionName, char *VariableName); bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_STRING *Variable); bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_DWORD *Variable); - bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BOOL *Variable); + bool GetVariableInSection(char *SectionName, char *VariableName, bool *Variable); bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BYTEARRAY *Variable); + bool GetSectionVariablesList(char *SectionName, INI_SECTION_VARLIST *VariablesList); private: DWORD FileSize; // Ini file size @@ -101,6 +111,6 @@ private: DWORD GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD Size); // Get string from string-map bool IsVariable(char *Str, DWORD StrSize); bool FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD StrSize); // Fill INI_SECTION_VARIABLE struct (for Parse) + PINI_SECTION GetSection(char *SectionName); bool GetVariableInSectionPrivate(char *SectionName, char *VariableName, INI_SECTION_VARIABLE *RetVariable); }; - From 03bbf7d7a86a6ceda98e43647281f4317df64044 Mon Sep 17 00:00:00 2001 From: FusixGit Date: Thu, 4 Dec 2014 23:01:30 +0300 Subject: [PATCH 024/208] Update IniFile.cpp --- src-x86-x64-Fusix/IniFile.cpp | 63 +++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index cc3f707..459997f 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -266,16 +266,28 @@ bool INI_FILE::Parse() return true; } -bool INI_FILE::SectionExists(char *SectionName) +PINI_SECTION INI_FILE::GetSection(char *SectionName) { for(DWORD i = 0; i < IniData.SectionCount; i++) { if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) { - return true; + return &IniData.Section[i]; } } - return false; + return NULL; +} + +bool INI_FILE::SectionExists(char *SectionName) +{ + if(GetSection(SectionName) == NULL) return false; + return true; +} + +bool INI_FILE::VariableExists(char *SectionName, char *VariableName) +{ + INI_SECTION_VARIABLE Variable = {0}; + return GetVariableInSectionPrivate(SectionName, VariableName, &Variable); } bool INI_FILE::GetVariableInSectionPrivate(char *SectionName, char *VariableName, INI_SECTION_VARIABLE *RetVariable) @@ -284,14 +296,7 @@ bool INI_FILE::GetVariableInSectionPrivate(char *SectionName, char *VariableName INI_SECTION_VARIABLE *Variable = NULL; // Find section - for(DWORD i = 0; i < IniData.SectionCount; i++) - { - if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) - { - Section = &(IniData.Section[i]); - break; - } - } + Section = GetSection(SectionName); if(Section == NULL) { SetLastError(318); // This region is not found @@ -417,7 +422,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V return true; } -bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BOOL *RetVariable) +bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, bool *RetVariable) { bool Status = false; INI_SECTION_VARIABLE Variable = {}; @@ -425,7 +430,37 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); if(!Status) return Status; - memset(RetVariable, 0x00, sizeof(*RetVariable)); - RetVariable->Value = (bool)strtol(Variable.VariableValue, NULL, 10); + *RetVariable = (bool)strtol(Variable.VariableValue, NULL, 10); + return true; +} + +bool INI_FILE::GetSectionVariablesList(char *SectionName, INI_SECTION_VARLIST *VariablesList) +{ + INI_SECTION *Section = NULL; + + Section = GetSection(SectionName); + if(Section == NULL) + { + SetLastError(318); // This region is not found + return false; + } + + VariablesList->EntriesCount = Section->VariablesCount; + + VariablesList->NamesEntries = new INI_SECTION_VARLIST_ENTRY[VariablesList->EntriesCount]; + memset(VariablesList->NamesEntries, 0x00, sizeof(INI_SECTION_VARLIST_ENTRY)*VariablesList->EntriesCount); + + VariablesList->ValuesEntries = new INI_SECTION_VARLIST_ENTRY[VariablesList->EntriesCount]; + memset(VariablesList->ValuesEntries, 0x00, sizeof(INI_SECTION_VARLIST_ENTRY)*VariablesList->EntriesCount); + + for(DWORD i = 0; i < Section->VariablesCount; i++) + { + memcpy(VariablesList->NamesEntries[i].String, Section->Variables[i].VariableName, + strlen(Section->Variables[i].VariableName)); + + memcpy(VariablesList->ValuesEntries[i].String, Section->Variables[i].VariableValue, + strlen(Section->Variables[i].VariableValue)); + } + return true; } From e1b4b1000650cf2e9fc18067a3b748d93dfaef8a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 4 Dec 2014 23:12:59 +0300 Subject: [PATCH 025/208] Bug fix --- src-x86-x64-Fusix/RDPWrap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 3dece5c..cb577ce 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -244,9 +244,9 @@ bool OverrideSL(LPWSTR ValueName, DWORD *Value) if (IniFile->VariableExists(INI, "SLPolicy", ValueName)) { if (!(IniFile->GetVariableInSection("SLPolicy", ValueName, &Variable))) *Value = 0; + else *Value = Variable.ValueDec; return true; } - *Value = Variable.ValueDec; return false; } From 06eb0a325e65678b19ee44bfdec0d0f2fc7c065d Mon Sep 17 00:00:00 2001 From: FusixGit Date: Sun, 7 Dec 2014 15:33:23 +0300 Subject: [PATCH 026/208] Update RDPWrap.cpp --- src-x86-x64-Fusix/RDPWrap.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index cb577ce..9fd91af 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -87,11 +87,14 @@ HMODULE GetCurrentModule() } // Correct this +// TODO: Add *wchar_t argument, size argument. Write ExtractFilePath function +// Variable "Filename" will be deleted after you exit the function. +// Stas => vk.com/im LPCWSTR GetBinaryPath() { wchar_t Filename[256]; - GetModuleFileName(GetCurrentModule(), &Filename[0], 256); - return &Filename[0]; + GetModuleFileName(GetCurrentModule(), Filename, 256); + return Filename; } /*PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) From 7d5f17edf6b0808838ab18fe83aeaac5803dc756 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 7 Dec 2014 20:34:04 +0300 Subject: [PATCH 027/208] Fix --- src-x86-x64-Fusix/RDPWrap.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 9fd91af..f1c9991 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -87,14 +87,11 @@ HMODULE GetCurrentModule() } // Correct this -// TODO: Add *wchar_t argument, size argument. Write ExtractFilePath function -// Variable "Filename" will be deleted after you exit the function. -// Stas => vk.com/im -LPCWSTR GetBinaryPath() +// TODO: Write ExtractFilePath function +// see http://forum.sources.ru/index.php?showtopic=48042 +DWORD GetBinaryPath(LPTSTR lpFileName, DWORD nSize) { - wchar_t Filename[256]; - GetModuleFileName(GetCurrentModule(), Filename, 256); - return Filename; + return GetModuleFileName(GetCurrentModule(), lpFileName, nSize); } /*PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) From b5e4350d0bee68e3acdedabf5651aaf2c5abba68 Mon Sep 17 00:00:00 2001 From: FusixGit Date: Mon, 8 Dec 2014 22:18:28 +0300 Subject: [PATCH 028/208] Compiled --- src-x86-x64-Fusix/RDPWrap.cpp | 214 ++++++++++++++++++++++------------ 1 file changed, 138 insertions(+), 76 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index f1c9991..c5f5d36 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -56,7 +56,7 @@ FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; INI_FILE *IniFile; -LPCTSTR LogFile = L"\\rdpwrap.txt"; +wchar_t LogFile[256] = {0x00}; HMODULE hTermSrv; HMODULE hSLC; PLATFORM_DWORD TermSrvBase; @@ -65,6 +65,39 @@ SERVICEMAIN _ServiceMain; SVCHOSTPUSHSERVICEGLOBALS _SvchostPushServiceGlobals; bool AlreadyHooked = false; +DWORD INIReadDWordHex(INI_FILE *IniFile, char *Sect, char *VariableName, PLATFORM_DWORD Default) +{ + INI_VAR_DWORD Variable; + + if(IniFile->GetVariableInSection(Sect, VariableName, &Variable)) + { + return Variable.ValueHex; + } + return Default; +} + +void INIReadString(INI_FILE *IniFile, char *Sect, char *VariableName, char *Default, char *Ret, DWORD RetSize) +{ + INI_VAR_STRING Variable; + + memset(Ret, 0x00, RetSize); + if(!IniFile->GetVariableInSection(Sect, VariableName, &Variable)) + { + strcpy_s(Ret, RetSize, Default); + return; + } + strcpy_s(Ret, RetSize, Variable.Value); +} + +int SListFind(INI_SECTION_VARLIST List, char *Name) +{ + for (DWORD i = 0; i < List.EntriesCount; i++) + { + if(strcmp(List.NamesEntries[i].String, Name) == 0) return i; + } + return -1; +} + void WriteToLog(LPSTR Text) { DWORD dwBytesOfWritten; @@ -87,11 +120,11 @@ HMODULE GetCurrentModule() } // Correct this -// TODO: Write ExtractFilePath function -// see http://forum.sources.ru/index.php?showtopic=48042 -DWORD GetBinaryPath(LPTSTR lpFileName, DWORD nSize) +LPCWSTR GetBinaryPath() { - return GetModuleFileName(GetCurrentModule(), lpFileName, nSize); + wchar_t Filename[256]; + GetModuleFileName(GetCurrentModule(), &Filename[0], 256); + return &Filename[0]; } /*PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) @@ -241,9 +274,9 @@ bool OverrideSL(LPWSTR ValueName, DWORD *Value) { INI_VAR_DWORD Variable = {0}; - if (IniFile->VariableExists(INI, "SLPolicy", ValueName)) + if (IniFile->VariableExists(L"SLPolicy", ValueName)) { - if (!(IniFile->GetVariableInSection("SLPolicy", ValueName, &Variable))) *Value = 0; + if (!(IniFile->GetVariableInSection(L"SLPolicy", ValueName, &Variable))) *Value = 0; else *Value = Variable.ValueDec; return true; } @@ -376,30 +409,30 @@ HRESULT WINAPI New_CSLQuery_Initialize() if (IniFile->SectionExists(Sect)) { #ifdef _WIN64 - bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bServerSku.x64", 0)); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bRemoteConnAllowed.x64", 0)); - bFUSEnabled = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bFUSEnabled.x64", 0)); - bAppServerAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bAppServerAllowed.x64", 0)); - bMultimonAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bMultimonAllowed.x64", 0)); - lMaxUserSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "lMaxUserSessions.x64", 0)); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "ulMaxDebugSessions.x64", 0)); - bInitialized = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bInitialized.x64", 0)); + bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bServerSku.x64", 0)); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bRemoteConnAllowed.x64", 0)); + bFUSEnabled = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bFUSEnabled.x64", 0)); + bAppServerAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bAppServerAllowed.x64", 0)); + bMultimonAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bMultimonAllowed.x64", 0)); + lMaxUserSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "lMaxUserSessions.x64", 0)); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "ulMaxDebugSessions.x64", 0)); + bInitialized = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bInitialized.x64", 0)); #else - bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bServerSku.x86", 0)); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bRemoteConnAllowed.x86", 0)); - bFUSEnabled = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bFUSEnabled.x86", 0)); - bAppServerAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bAppServerAllowed.x86", 0)); - bMultimonAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bMultimonAllowed.x86", 0)); - lMaxUserSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "lMaxUserSessions.x86", 0)); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "ulMaxDebugSessions.x86", 0)); - bInitialized = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bInitialized.x86", 0)); + bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bServerSku.x86", 0)); + bRemoteConnAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bRemoteConnAllowed.x86", 0)); + bFUSEnabled = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bFUSEnabled.x86", 0)); + bAppServerAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bAppServerAllowed.x86", 0)); + bMultimonAllowed = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bMultimonAllowed.x86", 0)); + lMaxUserSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "lMaxUserSessions.x86", 0)); + ulMaxDebugSessions = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "ulMaxDebugSessions.x86", 0)); + bInitialized = (DWORD*)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "bInitialized.x86", 0)); #endif } delete[] Sect; if (bServerSku) { - if (!(IniFile->GetVariableInSection("SLInit", "bServerSku", bServerSku))) *bServerSku = 1; + *bServerSku = INIReadDWordHex(IniFile, "SLInit", "bServerSku", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] bServerSku = %d\r\n", bServerSku, *bServerSku); @@ -408,7 +441,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bRemoteConnAllowed) { - if (!(IniFile->GetVariableInSection("SLInit", "bRemoteConnAllowed", bRemoteConnAllowed))) *bRemoteConnAllowed = 1; + *bRemoteConnAllowed = INIReadDWordHex(IniFile, "SLInit", "bRemoteConnAllowed", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] bRemoteConnAllowed = %d\r\n", bRemoteConnAllowed, *bRemoteConnAllowed); @@ -417,7 +450,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bFUSEnabled) { - if (!(IniFile->GetVariableInSection("SLInit", "bFUSEnabled", bFUSEnabled))) *bFUSEnabled = 1; + *bFUSEnabled = INIReadDWordHex(IniFile, "SLInit", "bFUSEnabled", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] bFUSEnabled = %d\r\n", bFUSEnabled, *bFUSEnabled); @@ -426,7 +459,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bAppServerAllowed) { - if (!(IniFile->GetVariableInSection("SLInit", "bAppServerAllowed", bAppServerAllowed))) *bAppServerAllowed = 1; + *bAppServerAllowed = INIReadDWordHex(IniFile, "SLInit", "bAppServerAllowed", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] bAppServerAllowed = %d\r\n", bAppServerAllowed, *bAppServerAllowed); @@ -435,7 +468,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bMultimonAllowed) { - if (!(IniFile->GetVariableInSection("SLInit", "bMultimonAllowed", bMultimonAllowed))) *bMultimonAllowed = 1; + *bMultimonAllowed = INIReadDWordHex(IniFile, "SLInit", "bMultimonAllowed", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] bMultimonAllowed = %d\r\n", bMultimonAllowed, *bMultimonAllowed); @@ -444,7 +477,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (lMaxUserSessions) { - if (!(IniFile->GetVariableInSection("SLInit", "lMaxUserSessions", lMaxUserSessions))) *lMaxUserSessions = 0; + *lMaxUserSessions = INIReadDWordHex(IniFile, "SLInit", "lMaxUserSessions", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] lMaxUserSessions = %d\r\n", lMaxUserSessions, *lMaxUserSessions); @@ -453,7 +486,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (ulMaxDebugSessions) { - if (!(IniFile->GetVariableInSection("SLInit", "ulMaxDebugSessions", ulMaxDebugSessions))) *ulMaxDebugSessions = 0; + *ulMaxDebugSessions = INIReadDWordHex(IniFile, "SLInit", "ulMaxDebugSessions", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] ulMaxDebugSessions = %d\r\n", ulMaxDebugSessions, *ulMaxDebugSessions); @@ -462,7 +495,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bInitialized) { - if (!(IniFile->GetVariableInSection("SLInit", "bInitialized", bInitialized))) *bInitialized = 1; + *bInitialized = INIReadDWordHex(IniFile, "SLInit", "bInitialized", 0); Log = new char[1024]; wsprintfA(Log, "[0x%p] bInitialized = %d\r\n", bInitialized, *bInitialized); @@ -480,30 +513,53 @@ void Hook() extern HMODULE hSLC; extern PLATFORM_DWORD TermSrvBase; extern FILE_VERSION FV; - extern LPCTSTR LogFile; + extern wchar_t LogFile[256]; AlreadyHooked = true; + wchar_t ConfigFile[256] = {0x00}; WriteToLog("Loading configuration...\r\n"); - IniFile = new INI_FILE(ExtractFilePath(GetBinaryPath()) + L"rdpwrap.ini"); + + // ���� ������. ����� ����� ��� + GetModuleFileName(GetCurrentModule(), ConfigFile, 255); + for(DWORD i = wcslen(ConfigFile); i > 0; i--) + { + if(ConfigFile[i] == '\\') + { + memset(&ConfigFile[i+1], 0x00, ((256-(i+1)))*2); + memcpy(&ConfigFile[i+1], "rdpwrap.ini", strlen("rdpwrap.ini")*2); + } + } + + IniFile = new INI_FILE(ConfigFile); + if (IniFile == NULL) { WriteToLog("Error: Failed to load configuration\r\n"); return; } - if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFile))) + INI_VAR_STRING LogFileVar; + + if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFileVar))) { - LogFile = ExtractFilePath(GetBinaryPath()) + L"rdpwrap.txt"; + memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value)); + + for(DWORD i = wcslen(LogFile); i > 0; i--) + { + if(LogFile[i] == '\\') + { + memset(&LogFile[i+1], 0x00, ((256-(i+1)))*2); + memcpy(&LogFile[i+1], "rdpwrap.txt", strlen("rdpwrap.txt")*2); + } + } } - bool Result; char *Log; SIZE_T bw; WORD Ver = 0; PLATFORM_DWORD TermSrvSize, SignPtr; FARJMP Jump; - BYTE b; WriteToLog("init\r\n"); @@ -566,18 +622,11 @@ void Hook() SetThreadsState(false); WriteToLog("Loading patch codes...\r\n"); - INI->ReadSection("PatchCodes", &PatchList); - INI_VAR_BYTEARRAY Patch[PatchList.length]; - for (int i = 0; i < Patch.length; i++) - { - if (IniFile->GetVariableInSection("PatchCodes", PatchList[i], &Patch[i])) - { - // for security reasons - // not more than 16 bytes - if (Patch[i].length > 16) SetLength(Patch[i], 16); - } - } + INI_SECTION_VARLIST PatchList; + + IniFile->GetSectionVariablesList("PatchCodes", &PatchList); + bool bSLHook; if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true; @@ -665,8 +714,10 @@ void Hook() } char *Sect; + INI_VAR_BYTEARRAY Patch; Sect = new char[1024]; wsprintfA(Sect, "%d.%d.%d.%d", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); + if (IniFile->SectionExists(Sect)) { if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) @@ -682,13 +733,14 @@ void Hook() WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); int i = -1; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "LocalOnlyOffset.x64", 0)); - i = SListFind(PatchList, INIReadString(INI, Sect, "LocalOnlyCode.x64", "")); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x64", 0)); + IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x64", &Patch); #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "LocalOnlyOffset.x86", 0)); - i = SListFind(PatchList, INIReadString(INI, Sect, "LocalOnlyCode.x86", "")); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x86", 0)); + IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &Patch); #endif - if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); + + if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x64", &Bool))) Bool = true; @@ -700,13 +752,14 @@ void Hook() WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); int i = -1; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SingleUserOffset.x64", 0)); - i = SListFind(PatchList, INIReadString(INI, Sect, "SingleUserCode.x64", "")); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x64", 0)); + IniFile->GetVariableInSection(Sect, "SingleUserCode.x64", &Patch); #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SingleUserOffset.x86", 0)); - i = SListFind(PatchList, INIReadString(INI, Sect, "SingleUserCode.x86", "")); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x86", 0)); + IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &Patch); #endif - if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); + + if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x64", &Bool))) Bool = true; @@ -718,13 +771,14 @@ void Hook() WriteToLog("Patch CDefPolicy::Query\r\n"); int i = -1; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "DefPolicyOffset.x64", 0)); - i = SListFind(PatchList, INIReadString(INI, Sect, "DefPolicyCode.x64", "")); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x64", 0)); + IniFile->GetVariableInSection(Sect, "DefPolicyCode.x64", &Patch); #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "DefPolicyOffset.x86", 0)); - i = SListFind(PatchList, INIReadString(INI, Sect, "DefPolicyCode.x86", "")); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x86", 0)); + IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &Patch); #endif - if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw); + + if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x64", &Bool))) Bool = true; @@ -737,30 +791,34 @@ void Hook() char *FuncName; FuncName = new char[1024]; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLPolicyOffset.x64", 0)); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SLPolicyOffset.x64", 0)); Jump.MovOp = 0x48; Jump.MovRegArg = 0xB8; Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; Jump.PushRaxOp = 0x50; Jump.RetOp = 0xC3; - FuncName = INIReadString(INI, Sect, "SLPolicyFunc.x64", "New_Win8SL"); + + INIReadString(IniFile, Sect, "SLPolicyFunc.x64", "New_Win8SL", FuncName, 1024); + if (strcmp(FuncName, "New_Win8SL")) { Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; } #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLPolicyOffset.x86", 0)); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SLPolicyOffset.x86", 0)); Jump.PushOp = 0x68; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; Jump.RetOp = 0xC3; - FuncName = INIReadString(INI, Sect, "SLPolicyFunc.x86", "New_Win8SL"); + + INIReadString(IniFile, Sect, "SLPolicyFunc.x86", "New_Win8SL", FuncName, 1024); + if (strcmp(FuncName, "New_Win8SL")) { - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; } if (strcmp(FuncName, "New_Win8SL_CP")) { - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL_CP; + Jump.PushArg = (PLATFORM_DWORD)New_Win8SL_CP; } #endif delete[] FuncName; @@ -777,26 +835,30 @@ void Hook() char *FuncName; FuncName = new char[1024]; #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLInitOffset.x64", 0)); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SLInitOffset.x64", 0)); Jump.MovOp = 0x48; Jump.MovRegArg = 0xB8; Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; Jump.PushRaxOp = 0x50; Jump.RetOp = 0xC3; - FuncName = INIReadString(INI, Sect, "SLInitFunc.x64", "New_CSLQuery_Initialize"); + + INIReadString(IniFile, Sect, "SLInitFunc.x64", "New_CSLQuery_Initialize", FuncName, 1024); + if (strcmp(FuncName, "New_CSLQuery_Initialize")) { Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; } #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(INI, Sect, "SLInitOffset.x86", 0)); + SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SLInitOffset.x86", 0)); Jump.PushOp = 0x68; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; Jump.RetOp = 0xC3; - FuncName = INIReadString(INI, Sect, "SLInitFunc.x86", "New_CSLQuery_Initialize"); + + INIReadString(IniFile, Sect, "SLInitFunc.x86", "New_CSLQuery_Initialize", FuncName, 1024); + if (strcmp(FuncName, "New_CSLQuery_Initialize")) { - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; + Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; } #endif delete[] FuncName; From a449d046194d78b8a23584b9fdc915299e082e8b Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 00:59:47 +0300 Subject: [PATCH 029/208] Some fixes and comments The final is near, it already compiles :) --- src-x86-x64-Fusix/IniFile.cpp | 2 +- src-x86-x64-Fusix/RDPWrap.cpp | 92 +++++++++++++++-------------------- 2 files changed, 41 insertions(+), 53 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 459997f..7758bfd 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -400,7 +400,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V switch(Variable.VariableValue[i+1]) { - case '0': break; + case '0': break; case '1': RetVariable->Value[(i/2)] += 1; break; case '2': RetVariable->Value[(i/2)] += 2; break; case '3': RetVariable->Value[(i/2)] += 3; break; diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index c5f5d36..5659cb6 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -21,7 +21,7 @@ typedef struct { union { - struct + struct { WORD Minor; WORD Major; @@ -68,7 +68,7 @@ bool AlreadyHooked = false; DWORD INIReadDWordHex(INI_FILE *IniFile, char *Sect, char *VariableName, PLATFORM_DWORD Default) { INI_VAR_DWORD Variable; - + if(IniFile->GetVariableInSection(Sect, VariableName, &Variable)) { return Variable.ValueHex; @@ -82,27 +82,17 @@ void INIReadString(INI_FILE *IniFile, char *Sect, char *VariableName, char *Defa memset(Ret, 0x00, RetSize); if(!IniFile->GetVariableInSection(Sect, VariableName, &Variable)) - { + { strcpy_s(Ret, RetSize, Default); return; } strcpy_s(Ret, RetSize, Variable.Value); } -int SListFind(INI_SECTION_VARLIST List, char *Name) -{ - for (DWORD i = 0; i < List.EntriesCount; i++) - { - if(strcmp(List.NamesEntries[i].String, Name) == 0) return i; - } - return -1; -} - void WriteToLog(LPSTR Text) { DWORD dwBytesOfWritten; - // Correct this - LogFile HANDLE hFile = CreateFile(LogFile, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) return; @@ -114,19 +104,10 @@ void WriteToLog(LPSTR Text) HMODULE GetCurrentModule() { HMODULE hModule = NULL; - // Check this GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)GetCurrentModule, &hModule); return hModule; } -// Correct this -LPCWSTR GetBinaryPath() -{ - wchar_t Filename[256]; - GetModuleFileName(GetCurrentModule(), &Filename[0], 256); - return &Filename[0]; -} - /*PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) { PLATFORM_DWORD AddressReturn = -1; @@ -169,7 +150,7 @@ void SetThreadsState(bool Resume) CurrTh = GetCurrentThreadId(); CurrPr = GetCurrentProcessId(); - + h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (h != INVALID_HANDLE_VALUE) { @@ -187,14 +168,14 @@ void SetThreadsState(bool Resume) CloseHandle(hThread); } } - } while (Thread32Next(h, &Thread)); + } while (Thread32Next(h, &Thread)); CloseHandle(h); } } BOOL __stdcall GetModuleVersion(LPCWSTR lptstrModuleName, FILE_VERSION *FileVersion) { - typedef struct + typedef struct { WORD wLength; WORD wValueLength; @@ -211,13 +192,13 @@ BOOL __stdcall GetModuleVersion(LPCWSTR lptstrModuleName, FILE_VERSION *FileVers { return false; } - - HRSRC hResourceInfo = FindResourceW(hMod, (LPCWSTR)1, (LPCWSTR)0x10); + + HRSRC hResourceInfo = FindResourceW(hMod, (LPCWSTR)1, (LPCWSTR)0x10); if(!hResourceInfo) { return false; } - + VS_VERSIONINFO *VersionInfo = (VS_VERSIONINFO*)LoadResource(hMod, hResourceInfo); if(!VersionInfo) { @@ -233,7 +214,7 @@ BOOL __stdcall GetModuleVersion(LPCWSTR lptstrModuleName, FILE_VERSION *FileVers BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) { - typedef struct + typedef struct { WORD wLength; WORD wValueLength; @@ -250,13 +231,13 @@ BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) { return false; } - - HRSRC hResourceInfo = FindResourceW(hFile, (LPCWSTR)1, (LPCWSTR)0x10); + + HRSRC hResourceInfo = FindResourceW(hFile, (LPCWSTR)1, (LPCWSTR)0x10); if(!hResourceInfo) { return false; } - + VS_VERSIONINFO *VersionInfo = (VS_VERSIONINFO*)LoadResource(hFile, hResourceInfo); if(!VersionInfo) { @@ -273,7 +254,7 @@ BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) bool OverrideSL(LPWSTR ValueName, DWORD *Value) { INI_VAR_DWORD Variable = {0}; - + if (IniFile->VariableExists(L"SLPolicy", ValueName)) { if (!(IniFile->GetVariableInSection(L"SLPolicy", ValueName, &Variable))) *Value = 0; @@ -312,7 +293,7 @@ HRESULT WINAPI New_SLGetWindowsInformationDWORD(PWSTR pwszValueName, DWORD *pdwV WriteToLog(Log); delete[] Log; - return S_OK; + return S_OK; } WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); @@ -358,7 +339,7 @@ HRESULT __fastcall New_Win8SL(PWSTR pwszValueName, DWORD *pdwValue) WriteToLog(Log); delete[] Log; - return S_OK; + return S_OK; } Result = _SLGetWindowsInformationDWORD(pwszValueName, pdwValue); @@ -371,7 +352,7 @@ HRESULT __fastcall New_Win8SL(PWSTR pwszValueName, DWORD *pdwValue) } else { WriteToLog("Failed\r\n"); } - + return Result; } @@ -432,7 +413,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() if (bServerSku) { - *bServerSku = INIReadDWordHex(IniFile, "SLInit", "bServerSku", 0); + *bServerSku = INIReadDWordHex(IniFile, "SLInit", "bServerSku", 1); Log = new char[1024]; wsprintfA(Log, "[0x%p] bServerSku = %d\r\n", bServerSku, *bServerSku); @@ -441,7 +422,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bRemoteConnAllowed) { - *bRemoteConnAllowed = INIReadDWordHex(IniFile, "SLInit", "bRemoteConnAllowed", 0); + *bRemoteConnAllowed = INIReadDWordHex(IniFile, "SLInit", "bRemoteConnAllowed", 1); Log = new char[1024]; wsprintfA(Log, "[0x%p] bRemoteConnAllowed = %d\r\n", bRemoteConnAllowed, *bRemoteConnAllowed); @@ -450,7 +431,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bFUSEnabled) { - *bFUSEnabled = INIReadDWordHex(IniFile, "SLInit", "bFUSEnabled", 0); + *bFUSEnabled = INIReadDWordHex(IniFile, "SLInit", "bFUSEnabled", 1); Log = new char[1024]; wsprintfA(Log, "[0x%p] bFUSEnabled = %d\r\n", bFUSEnabled, *bFUSEnabled); @@ -459,7 +440,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bAppServerAllowed) { - *bAppServerAllowed = INIReadDWordHex(IniFile, "SLInit", "bAppServerAllowed", 0); + *bAppServerAllowed = INIReadDWordHex(IniFile, "SLInit", "bAppServerAllowed", 1); Log = new char[1024]; wsprintfA(Log, "[0x%p] bAppServerAllowed = %d\r\n", bAppServerAllowed, *bAppServerAllowed); @@ -468,7 +449,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bMultimonAllowed) { - *bMultimonAllowed = INIReadDWordHex(IniFile, "SLInit", "bMultimonAllowed", 0); + *bMultimonAllowed = INIReadDWordHex(IniFile, "SLInit", "bMultimonAllowed", 1); Log = new char[1024]; wsprintfA(Log, "[0x%p] bMultimonAllowed = %d\r\n", bMultimonAllowed, *bMultimonAllowed); @@ -495,7 +476,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() } if (bInitialized) { - *bInitialized = INIReadDWordHex(IniFile, "SLInit", "bInitialized", 0); + *bInitialized = INIReadDWordHex(IniFile, "SLInit", "bInitialized", 1); Log = new char[1024]; wsprintfA(Log, "[0x%p] bInitialized = %d\r\n", bInitialized, *bInitialized); @@ -519,8 +500,7 @@ void Hook() wchar_t ConfigFile[256] = {0x00}; WriteToLog("Loading configuration...\r\n"); - - // ���� ������. ����� ����� ��� + GetModuleFileName(GetCurrentModule(), ConfigFile, 255); for(DWORD i = wcslen(ConfigFile); i > 0; i--) { @@ -538,7 +518,7 @@ void Hook() WriteToLog("Error: Failed to load configuration\r\n"); return; } - + INI_VAR_STRING LogFileVar; if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFileVar))) @@ -554,6 +534,8 @@ void Hook() } } } + // else... + // LogFileVar => LogFile char *Log; SIZE_T bw; @@ -739,7 +721,9 @@ void Hook() SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x86", 0)); IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &Patch); #endif - + // Patch.Value is char + // WriteProcessMemory uses LPCVOID lpBuffer, so... + // maybe &Patch.Value ? if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 @@ -758,7 +742,9 @@ void Hook() SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x86", 0)); IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &Patch); #endif - + // Patch.Value is char + // WriteProcessMemory uses LPCVOID lpBuffer, so... + // maybe &Patch.Value ? if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 @@ -777,7 +763,9 @@ void Hook() SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x86", 0)); IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &Patch); #endif - + // Patch.Value is char + // WriteProcessMemory uses LPCVOID lpBuffer, so... + // maybe &Patch.Value ? if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 @@ -809,7 +797,7 @@ void Hook() Jump.PushOp = 0x68; Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; Jump.RetOp = 0xC3; - + INIReadString(IniFile, Sect, "SLPolicyFunc.x86", "New_Win8SL", FuncName, 1024); if (strcmp(FuncName, "New_Win8SL")) @@ -853,9 +841,9 @@ void Hook() Jump.PushOp = 0x68; Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; Jump.RetOp = 0xC3; - + INIReadString(IniFile, Sect, "SLInitFunc.x86", "New_CSLQuery_Initialize", FuncName, 1024); - + if (strcmp(FuncName, "New_CSLQuery_Initialize")) { Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; @@ -886,5 +874,5 @@ void WINAPI SvchostPushServiceGlobals(void *lpGlobalData) WriteToLog("> SvchostPushServiceGlobals\r\n"); if (!AlreadyHooked) Hook(); - if (_SvchostPushServiceGlobals != NULL) _SvchostPushServiceGlobals(lpGlobalData); + if (_SvchostPushServiceGlobals != NULL) _SvchostPushServiceGlobals(lpGlobalData); } From 12e04325dc733da3325600751481e286dda01efe Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 01:41:55 +0300 Subject: [PATCH 030/208] Moar conditions --- src-x86-x64-Fusix/RDPWrap.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 5659cb6..6012d42 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -713,18 +713,18 @@ void Hook() if (Bool) { WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - int i = -1; + Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x64", 0)); - IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x64", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x64", &Patch); #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x86", 0)); - IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &Patch); #endif // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... // maybe &Patch.Value ? - if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); + if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x64", &Bool))) Bool = true; @@ -734,18 +734,18 @@ void Hook() if (Bool) { WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - int i = -1; + Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x64", 0)); - IniFile->GetVariableInSection(Sect, "SingleUserCode.x64", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x64", &Patch); #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x86", 0)); - IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &Patch); #endif // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... // maybe &Patch.Value ? - if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); + if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x64", &Bool))) Bool = true; @@ -755,18 +755,18 @@ void Hook() if (Bool) { WriteToLog("Patch CDefPolicy::Query\r\n"); - int i = -1; + Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x64", 0)); - IniFile->GetVariableInSection(Sect, "DefPolicyCode.x64", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x64", &Patch); #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x86", 0)); - IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &Patch); #endif // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... // maybe &Patch.Value ? - if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); + if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x64", &Bool))) Bool = true; @@ -810,7 +810,7 @@ void Hook() } #endif delete[] FuncName; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + if (SignPtr > TermSrvBase) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); } #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x64", &Bool))) Bool = true; @@ -850,7 +850,7 @@ void Hook() } #endif delete[] FuncName; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); + if (SignPtr > TermSrvBase) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); } } } From e3ce360ec9aa627415fda3c26ba252bdb4ddc326 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 01:51:29 +0300 Subject: [PATCH 031/208] OMG there are bugs --- src-x86-x64-Fusix/RDPWrap.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 6012d42..951f9a9 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -716,10 +716,10 @@ void Hook() Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x64", 0)); - Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x64", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x64", &Patch); // [!] returns patch name, not the patch itself #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x86", 0)); - Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &Patch); // [!] returns patch name, not the patch itself #endif // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... @@ -737,10 +737,10 @@ void Hook() Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x64", 0)); - Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x64", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x64", &Patch); // [!] returns patch name, not the patch itself #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x86", 0)); - Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &Patch); // [!] returns patch name, not the patch itself #endif // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... @@ -758,10 +758,10 @@ void Hook() Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x64", 0)); - Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x64", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x64", &Patch); // [!] returns patch name, not the patch itself #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x86", 0)); - Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &Patch); + Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &Patch); // [!] returns patch name, not the patch itself #endif // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... From e2968a43de90fd539eec3e4a9fdedc98ca84bb39 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 02:00:43 +0300 Subject: [PATCH 032/208] Do not forget about security --- src-x86-x64-Fusix/IniFile.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 7758bfd..299247d 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -370,6 +370,8 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V DWORD ValueLen = strlen(Variable.VariableValue); if((ValueLen % 2) != 0) return false; + // for security reasons not more than 16 bytes + if (ValueLen > 32) ValueLen = 32; // 32 hex digits memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, ValueLen); From 39b8c6fade33ebc1fa438b69f7df1bff580aafac Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 03:15:58 +0300 Subject: [PATCH 033/208] Mega bug fixes! --- src-x86-x64-Fusix/RDPWrap.cpp | 51 ++++++++++++++++------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 951f9a9..4774be3 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -523,8 +523,7 @@ void Hook() if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFileVar))) { - memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value)); - + GetModuleFileName(GetCurrentModule(), LogFile, 255); for(DWORD i = wcslen(LogFile); i > 0; i--) { if(LogFile[i] == '\\') @@ -534,8 +533,7 @@ void Hook() } } } - // else... - // LogFileVar => LogFile + else memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value)); char *Log; SIZE_T bw; @@ -603,13 +601,6 @@ void Hook() WriteToLog("freeze\r\n"); SetThreadsState(false); - WriteToLog("Loading patch codes...\r\n"); - - INI_SECTION_VARLIST PatchList; - - IniFile->GetSectionVariablesList("PatchCodes", &PatchList); - - bool bSLHook; if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true; @@ -643,7 +634,7 @@ void Hook() } } - if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true; + if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT61", &bSLHook))) bSLHook = true; if ((Ver == 0x0601) && bSLHook) { @@ -696,6 +687,7 @@ void Hook() } char *Sect; + INI_VAR_STRING PatchName; INI_VAR_BYTEARRAY Patch; Sect = new char[1024]; wsprintfA(Sect, "%d.%d.%d.%d", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); @@ -706,9 +698,9 @@ void Hook() { bool Bool; #ifdef _WIN64 - if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x64", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x64", &Bool))) Bool = false; #else - if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x86", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x86", &Bool))) Bool = false; #endif if (Bool) { @@ -716,20 +708,21 @@ void Hook() Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x64", 0)); - Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x64", &Patch); // [!] returns patch name, not the patch itself + Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x64", &PatchName); #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "LocalOnlyOffset.x86", 0)); - Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &Patch); // [!] returns patch name, not the patch itself + Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &PatchName); #endif + if (Bool) Bool = IniFile->GetVariableInSection("PatchCodes", PatchName.Value, &Patch); // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... // maybe &Patch.Value ? if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 - if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x64", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x64", &Bool))) Bool = false; #else - if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x86", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x86", &Bool))) Bool = false; #endif if (Bool) { @@ -737,20 +730,21 @@ void Hook() Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x64", 0)); - Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x64", &Patch); // [!] returns patch name, not the patch itself + Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x64", &PatchName); #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "SingleUserOffset.x86", 0)); - Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &Patch); // [!] returns patch name, not the patch itself + Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &PatchName); #endif + if (Bool) Bool = IniFile->GetVariableInSection("PatchCodes", PatchName.Value, &Patch); // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... // maybe &Patch.Value ? if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 - if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x64", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x64", &Bool))) Bool = false; #else - if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x86", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x86", &Bool))) Bool = false; #endif if (Bool) { @@ -758,20 +752,21 @@ void Hook() Bool = false; #ifdef _WIN64 SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x64", 0)); - Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x64", &Patch); // [!] returns patch name, not the patch itself + Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x64", &PatchName); #else SignPtr = (PLATFORM_DWORD)(TermSrvBase + INIReadDWordHex(IniFile, Sect, "DefPolicyOffset.x86", 0)); - Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &Patch); // [!] returns patch name, not the patch itself + Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &PatchName); #endif + if (Bool) Bool = IniFile->GetVariableInSection("PatchCodes", PatchName.Value, &Patch); // Patch.Value is char // WriteProcessMemory uses LPCVOID lpBuffer, so... // maybe &Patch.Value ? if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 - if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x64", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x64", &Bool))) Bool = false; #else - if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x86", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x86", &Bool))) Bool = false; #endif if (Bool) { @@ -813,9 +808,9 @@ void Hook() if (SignPtr > TermSrvBase) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); } #ifdef _WIN64 - if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x64", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x64", &Bool))) Bool = false; #else - if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x86", &Bool))) Bool = true; + if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x86", &Bool))) Bool = false; #endif if (Bool) { From 539bdbfc526c9102a97f94a9eaa5e7605813e658 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 03:34:35 +0300 Subject: [PATCH 034/208] Weekly tech update --- technical.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/technical.txt b/technical.txt index 5f2cc44..5f11588 100644 --- a/technical.txt +++ b/technical.txt @@ -45,6 +45,11 @@ Known failures Source code changelog (rdpwrap library): +2014.12.09 : +- many bug fixes in C++ version, you can track it in the git history :) +- it can be compiled now :D +- we are getting closer to the finish line! + 2014.12.03 : - added INI reader by Fusix for C++ version - asulwer also helped with the development From ddb15f8cf5da23cd48d64cb86d70efc4b9830bd0 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 13:22:36 +0300 Subject: [PATCH 035/208] Minor fixes --- src-x86-x64-Fusix/RDPWrap.cpp | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 4774be3..2d76c97 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -583,17 +583,7 @@ void Hook() } Log = new char[1024]; - wsprintfA(Log, "Version: %d.%d\r\n", FV.wVersion.Major, FV.wVersion.Minor); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "Release: %d\r\n", FV.Release); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "Build: %d\r\n", FV.Build); + wsprintfA(Log, "Version: %d.%d.%d.%d\r\n", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); WriteToLog(Log); delete[] Log; @@ -714,9 +704,6 @@ void Hook() Bool = IniFile->GetVariableInSection(Sect, "LocalOnlyCode.x86", &PatchName); #endif if (Bool) Bool = IniFile->GetVariableInSection("PatchCodes", PatchName.Value, &Patch); - // Patch.Value is char - // WriteProcessMemory uses LPCVOID lpBuffer, so... - // maybe &Patch.Value ? if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 @@ -736,9 +723,6 @@ void Hook() Bool = IniFile->GetVariableInSection(Sect, "SingleUserCode.x86", &PatchName); #endif if (Bool) Bool = IniFile->GetVariableInSection("PatchCodes", PatchName.Value, &Patch); - // Patch.Value is char - // WriteProcessMemory uses LPCVOID lpBuffer, so... - // maybe &Patch.Value ? if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 @@ -758,9 +742,6 @@ void Hook() Bool = IniFile->GetVariableInSection(Sect, "DefPolicyCode.x86", &PatchName); #endif if (Bool) Bool = IniFile->GetVariableInSection("PatchCodes", PatchName.Value, &Patch); - // Patch.Value is char - // WriteProcessMemory uses LPCVOID lpBuffer, so... - // maybe &Patch.Value ? if (Bool && (SignPtr > TermSrvBase)) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, Patch.Value, Patch.ArraySize, &bw); } #ifdef _WIN64 From 190dd74a6529cf435199e870c3a885b14423c828 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 14:39:46 +0300 Subject: [PATCH 036/208] Small fix --- src-x86-x64-Fusix/IniFile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-x86-x64-Fusix/IniFile.h b/src-x86-x64-Fusix/IniFile.h index b473d9a..d834de4 100644 --- a/src-x86-x64-Fusix/IniFile.h +++ b/src-x86-x64-Fusix/IniFile.h @@ -42,7 +42,7 @@ typedef struct _INI_VAR_DWORD typedef struct _INI_VAR_BYTEARRAY { char Name[MAX_STRING_LEN]; - byte ArraySize; + BYTE ArraySize; char Value[MAX_STRING_LEN]; } INI_VAR_BYTEARRAY, *PINI_VAR_BYTEARRAY; From 60027d5e0278b01f0590d877b6473cca84338b2f Mon Sep 17 00:00:00 2001 From: FusixGit Date: Tue, 9 Dec 2014 16:00:11 +0300 Subject: [PATCH 037/208] New IniFile class --- src-x86-x64-Fusix/IniFile.cpp | 83 +++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 299247d..cec7906 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -16,6 +16,7 @@ #include "stdafx.h" #include +#include #include "IniFile.h" INI_FILE::INI_FILE(wchar_t *FilePath) @@ -370,8 +371,6 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V DWORD ValueLen = strlen(Variable.VariableValue); if((ValueLen % 2) != 0) return false; - // for security reasons not more than 16 bytes - if (ValueLen > 32) ValueLen = 32; // 32 hex digits memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, ValueLen); @@ -402,7 +401,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V switch(Variable.VariableValue[i+1]) { - case '0': break; + case '0': break; case '1': RetVariable->Value[(i/2)] += 1; break; case '2': RetVariable->Value[(i/2)] += 2; break; case '3': RetVariable->Value[(i/2)] += 3; break; @@ -466,3 +465,81 @@ bool INI_FILE::GetSectionVariablesList(char *SectionName, INI_SECTION_VARLIST *V return true; } + + +// ---------------------------- WCHAR_T BLOCK ---------------------------------------------- + +bool INI_FILE::SectionExists(wchar_t *SectionName) +{ + char cSectionName[MAX_STRING_LEN] = {0x00}; + + wcstombs(cSectionName, SectionName, MAX_STRING_LEN); + + return GetSection(cSectionName); +} + +bool INI_FILE::VariableExists(wchar_t *SectionName, wchar_t *VariableName) +{ + INI_SECTION_VARIABLE Variable = {0}; + + char cSectionName[MAX_STRING_LEN] = {0x00}; + char cVariableName[MAX_STRING_LEN] = {0x00}; + + wcstombs(cSectionName, SectionName, MAX_STRING_LEN); + wcstombs(cVariableName, VariableName, MAX_STRING_LEN); + + return GetVariableInSectionPrivate(cSectionName, cVariableName, &Variable); +} + +bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_STRING *RetVariable) +{ + char cSectionName[MAX_STRING_LEN] = {0x00}; + char cVariableName[MAX_STRING_LEN] = {0x00}; + + wcstombs(cSectionName, SectionName, MAX_STRING_LEN); + wcstombs(cVariableName, VariableName, MAX_STRING_LEN); + + return GetVariableInSection(cSectionName, cVariableName, RetVariable); +} + +bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_DWORD *RetVariable) +{ + char cSectionName[MAX_STRING_LEN] = {0x00}; + char cVariableName[MAX_STRING_LEN] = {0x00}; + + wcstombs(cSectionName, SectionName, MAX_STRING_LEN); + wcstombs(cVariableName, VariableName, MAX_STRING_LEN); + + return GetVariableInSection(cSectionName, cVariableName, RetVariable); +} + +bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_BYTEARRAY *RetVariable) +{ + char cSectionName[MAX_STRING_LEN] = {0x00}; + char cVariableName[MAX_STRING_LEN] = {0x00}; + + wcstombs(cSectionName, SectionName, MAX_STRING_LEN); + wcstombs(cVariableName, VariableName, MAX_STRING_LEN); + + return GetVariableInSection(cSectionName, cVariableName, RetVariable); +} + +bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, bool *RetVariable) +{ + char cSectionName[MAX_STRING_LEN] = {0x00}; + char cVariableName[MAX_STRING_LEN] = {0x00}; + + wcstombs(cSectionName, SectionName, MAX_STRING_LEN); + wcstombs(cVariableName, VariableName, MAX_STRING_LEN); + + return GetVariableInSection(cSectionName, cVariableName, RetVariable); +} + +bool INI_FILE::GetSectionVariablesList(wchar_t *SectionName, INI_SECTION_VARLIST *VariablesList) +{ + char cSectionName[MAX_STRING_LEN] = {0x00}; + + wcstombs(cSectionName, SectionName, MAX_STRING_LEN); + + return GetSectionVariablesList(cSectionName, VariablesList); +} From 4054ef493ba2531d82f5b30c4a6e6fb9830ee651 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 9 Dec 2014 16:09:54 +0300 Subject: [PATCH 038/208] Update --- src-x86-x64-Fusix/IniFile.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index cec7906..94d9c75 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -371,6 +371,8 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V DWORD ValueLen = strlen(Variable.VariableValue); if((ValueLen % 2) != 0) return false; + // for security reasons not more than 16 bytes + if (ValueLen > 32) ValueLen = 32; // 32 hex digits memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, ValueLen); @@ -401,7 +403,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V switch(Variable.VariableValue[i+1]) { - case '0': break; + case '0': break; case '1': RetVariable->Value[(i/2)] += 1; break; case '2': RetVariable->Value[(i/2)] += 2; break; case '3': RetVariable->Value[(i/2)] += 3; break; From 31cce7a87312a2de240da172939658a1bcdf31ed Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 01:00:20 +0300 Subject: [PATCH 039/208] Some updates --- src-x86-x64-Fusix/IniFile.cpp | 265 +++++++++++----------- src-x86-x64-Fusix/IniFile.h | 30 ++- src-x86-x64-Fusix/RDPWrap.cpp | 9 +- src-x86-x64-Fusix/RDPWrap.vcxproj | 12 +- src-x86-x64-Fusix/RDPWrap.vcxproj.filters | 6 + 5 files changed, 171 insertions(+), 151 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 94d9c75..b914a8e 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -1,17 +1,17 @@ /* - Copyright 2014 Stas'M Corp. +Copyright 2014 Stas'M Corp. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ #include "stdafx.h" @@ -24,23 +24,23 @@ INI_FILE::INI_FILE(wchar_t *FilePath) DWORD Status = 0; DWORD NumberOfBytesRead = 0; - HANDLE hFile = CreateFile(FilePath, GENERIC_ALL, FILE_SHARE_READ|FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE hFile = CreateFile(FilePath, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if(hFile == INVALID_HANDLE_VALUE) + if (hFile == INVALID_HANDLE_VALUE) { return; } FileSize = GetFileSize(hFile, NULL); - if(FileSize == INVALID_FILE_SIZE) + if (FileSize == INVALID_FILE_SIZE) { return; } FileRaw = new char[FileSize]; - Status = (bool)ReadFile(hFile, FileRaw, FileSize, &NumberOfBytesRead, NULL); - if(!Status) + Status = ReadFile(hFile, FileRaw, FileSize, &NumberOfBytesRead, NULL); + if (!Status) { return; } @@ -52,7 +52,7 @@ INI_FILE::INI_FILE(wchar_t *FilePath) INI_FILE::~INI_FILE() { - for(DWORD i = 0; i < IniData.SectionCount; i++) + for (DWORD i = 0; i < IniData.SectionCount; i++) { delete[] IniData.Section[i].Variables; } @@ -65,9 +65,9 @@ bool INI_FILE::CreateStringsMap() { DWORD StringsCount = 1; - for(DWORD i = 0; i < FileSize; i++) + for (DWORD i = 0; i < FileSize; i++) { - if(FileRaw[i] == '\r' && FileRaw[i+1] == '\n') StringsCount++; + if (FileRaw[i] == '\r' && FileRaw[i + 1] == '\n') StringsCount++; } FileStringsCount = StringsCount; @@ -77,11 +77,11 @@ bool INI_FILE::CreateStringsMap() StringsCount = 1; - for(DWORD i = 0; i < FileSize; i++) + for (DWORD i = 0; i < FileSize; i++) { - if(FileRaw[i] == '\r' && FileRaw[i+1] == '\n') + if (FileRaw[i] == '\r' && FileRaw[i + 1] == '\n') { - FileStringsMap[StringsCount] = i+2; + FileStringsMap[StringsCount] = i + 2; StringsCount++; } } @@ -92,27 +92,27 @@ bool INI_FILE::CreateStringsMap() int INI_FILE::StrTrim(char* Str) { int i = 0, j; - while((Str[i]==' ')||(Str[i]=='\t')) + while ((Str[i] == ' ') || (Str[i] == '\t')) { i++; } - if(i>0) + if (i>0) { - for(j=0; j < strlen(Str); j++) + for (j = 0; j < strlen(Str); j++) { - Str[j]=Str[j+i]; + Str[j] = Str[j + i]; } - Str[j]='\0'; + Str[j] = '\0'; } - i = strlen(Str)-1; - while((Str[i] == ' ')||(Str[i]=='\t')) + i = strlen(Str) - 1; + while ((Str[i] == ' ') || (Str[i] == '\t')) { i--; } - if(i < (strlen(Str)-1)) + if (i < (strlen(Str) - 1)) { - Str[i+1] = '\0'; + Str[i + 1] = '\0'; } return 0; } @@ -123,20 +123,20 @@ DWORD INI_FILE::GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD DWORD EndStringPos = 0; DWORD StringSize = 0; - if(StringNumber > FileStringsCount) return -1; + if (StringNumber > FileStringsCount) return -1; - for(DWORD i = FileStringsMap[StringNumber]; i < FileSize; i++) + for (DWORD i = FileStringsMap[StringNumber]; i < FileSize; i++) { - if((FileRaw[i] == '\r' && FileRaw[i+1] == '\n') || i == (FileSize-1)) + if ((FileRaw[i] == '\r' && FileRaw[i + 1] == '\n') || i == (FileSize - 1)) { EndStringPos = i; break; } } - StringSize = EndStringPos-FileStringsMap[StringNumber]; + StringSize = EndStringPos - FileStringsMap[StringNumber]; - if(Size < StringSize) return -1; + if (Size < StringSize) return -1; memset(RetString, 0x00, Size); memcpy(RetString, &(FileRaw[FileStringsMap[StringNumber]]), StringSize); @@ -147,10 +147,10 @@ bool INI_FILE::IsVariable(char *Str, DWORD StrSize) { bool Quotes = false; - for(DWORD i = 0; i < StrSize; i++) + for (DWORD i = 0; i < StrSize; i++) { - if(Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; - if(Str[i] == '=' && !Quotes) return true; + if (Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; + if (Str[i] == '=' && !Quotes) return true; } return false; } @@ -159,13 +159,13 @@ bool INI_FILE::FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD Str { bool Quotes = false; - for(DWORD i = 0; i < StrSize; i++) + for (DWORD i = 0; i < StrSize; i++) { - if(Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; - if(Str[i] == '=' && !Quotes) + if (Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; + if (Str[i] == '=' && !Quotes) { memcpy(Variable->VariableName, Str, i); - memcpy(Variable->VariableValue, &(Str[i+1]), StrSize-(i-1)); + memcpy(Variable->VariableValue, &(Str[i + 1]), StrSize - (i - 1)); StrTrim(Variable->VariableName); StrTrim(Variable->VariableValue); break; @@ -187,13 +187,13 @@ bool INI_FILE::Parse() DWORD CurrentVariableNum = -1; // Calculate sections count - for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) + for (DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's a comment - - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration + if (CurrentString[0] == ';') continue; // It's a comment + + if (CurrentString[0] == '[' && CurrentString[CurrentStringSize - 1] == ']') // It's section declaration { SectionsCount++; continue; @@ -203,19 +203,19 @@ bool INI_FILE::Parse() DWORD *SectionVariableCount = new DWORD[SectionsCount]; memset(SectionVariableCount, 0x00, sizeof(DWORD)*SectionsCount); - for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) + for (DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') continue; // It's a comment - + if (CurrentString[0] == ';') continue; // It's a comment - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') // It's section declaration + + if (CurrentString[0] == '[' && CurrentString[CurrentStringSize - 1] == ']') // It's section declaration { CurrentSectionNum++; continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if (IsVariable(CurrentString, CurrentStringSize)) { VariablesCount++; SectionVariableCount[CurrentSectionNum]++; @@ -227,7 +227,7 @@ bool INI_FILE::Parse() IniData.Section = new INI_SECTION[SectionsCount]; memset(IniData.Section, 0x00, sizeof(PINI_SECTION)*SectionsCount); - for(DWORD i = 0; i < SectionsCount; i++) + for (DWORD i = 0; i < SectionsCount; i++) { IniData.Section[i].VariablesCount = SectionVariableCount[i]; IniData.Section[i].Variables = new INI_SECTION_VARIABLE[SectionVariableCount[i]]; @@ -239,24 +239,24 @@ bool INI_FILE::Parse() CurrentSectionNum = -1; CurrentVariableNum = -1; - for(DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) + for (DWORD CurrentStringNum = 0; CurrentStringNum < FileStringsCount; CurrentStringNum++) { CurrentStringSize = GetFileStringFromNum(CurrentStringNum, CurrentString, 512); - if(CurrentString[0] == ';') // It's a comment + if (CurrentString[0] == ';') // It's a comment { continue; } - if(CurrentString[0] == '[' && CurrentString[CurrentStringSize-1] == ']') + if (CurrentString[0] == '[' && CurrentString[CurrentStringSize - 1] == ']') { CurrentSectionNum++; CurrentVariableNum = 0; - memcpy(IniData.Section[CurrentSectionNum].SectionName, &(CurrentString[1]), (CurrentStringSize-2)); + memcpy(IniData.Section[CurrentSectionNum].SectionName, &(CurrentString[1]), (CurrentStringSize - 2)); continue; } - if(IsVariable(CurrentString, CurrentStringSize)) + if (IsVariable(CurrentString, CurrentStringSize)) { FillVariable(&(IniData.Section[CurrentSectionNum].Variables[CurrentVariableNum]), CurrentString, CurrentStringSize); CurrentVariableNum++; @@ -269,9 +269,9 @@ bool INI_FILE::Parse() PINI_SECTION INI_FILE::GetSection(char *SectionName) { - for(DWORD i = 0; i < IniData.SectionCount; i++) + for (DWORD i = 0; i < IniData.SectionCount; i++) { - if(memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + if (memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) { return &IniData.Section[i]; } @@ -281,13 +281,13 @@ PINI_SECTION INI_FILE::GetSection(char *SectionName) bool INI_FILE::SectionExists(char *SectionName) { - if(GetSection(SectionName) == NULL) return false; + if (GetSection(SectionName) == NULL) return false; return true; } bool INI_FILE::VariableExists(char *SectionName, char *VariableName) -{ - INI_SECTION_VARIABLE Variable = {0}; +{ + INI_SECTION_VARIABLE Variable = { 0 }; return GetVariableInSectionPrivate(SectionName, VariableName, &Variable); } @@ -298,22 +298,22 @@ bool INI_FILE::GetVariableInSectionPrivate(char *SectionName, char *VariableName // Find section Section = GetSection(SectionName); - if(Section == NULL) + if (Section == NULL) { SetLastError(318); // This region is not found return false; } // Find variable - for(DWORD i = 0; i < Section->VariablesCount; i++) + for (DWORD i = 0; i < Section->VariablesCount; i++) { - if(memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) + if (memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) { Variable = &(Section->Variables[i]); break; } } - if(Variable == NULL) + if (Variable == NULL) { SetLastError(1898); // Member of the group is not found return false; @@ -331,7 +331,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V INI_SECTION_VARIABLE Variable = {}; Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); - if(!Status) return Status; + if (!Status) return Status; memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, strlen(Variable.VariableName)); @@ -346,7 +346,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V INI_SECTION_VARIABLE Variable = {}; Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); - if(!Status) return Status; + if (!Status) return Status; memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, strlen(Variable.VariableName)); @@ -367,61 +367,62 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V INI_SECTION_VARIABLE Variable = {}; Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); - if(!Status) return Status; + if (!Status) return Status; DWORD ValueLen = strlen(Variable.VariableValue); - if((ValueLen % 2) != 0) return false; + if ((ValueLen % 2) != 0) return false; + // for security reasons not more than 16 bytes if (ValueLen > 32) ValueLen = 32; // 32 hex digits memset(RetVariable, 0x00, sizeof(*RetVariable)); memcpy(RetVariable->Name, Variable.VariableName, ValueLen); - for(DWORD i = 0; i <= ValueLen; i++) + for (DWORD i = 0; i <= ValueLen; i++) { - if((i % 2) != 0) continue; - - switch(Variable.VariableValue[i]) + if ((i % 2) != 0) continue; + + switch (Variable.VariableValue[i]) { - case '0': break; - case '1': RetVariable->Value[(i/2)] += (1 << 4); break; - case '2': RetVariable->Value[(i/2)] += (2 << 4); break; - case '3': RetVariable->Value[(i/2)] += (3 << 4); break; - case '4': RetVariable->Value[(i/2)] += (4 << 4); break; - case '5': RetVariable->Value[(i/2)] += (5 << 4); break; - case '6': RetVariable->Value[(i/2)] += (6 << 4); break; - case '7': RetVariable->Value[(i/2)] += (7 << 4); break; - case '8': RetVariable->Value[(i/2)] += (8 << 4); break; - case '9': RetVariable->Value[(i/2)] += (9 << 4); break; - case 'A': RetVariable->Value[(i/2)] += (10 << 4); break; - case 'B': RetVariable->Value[(i/2)] += (11 << 4); break; - case 'C': RetVariable->Value[(i/2)] += (12 << 4); break; - case 'D': RetVariable->Value[(i/2)] += (13 << 4); break; - case 'E': RetVariable->Value[(i/2)] += (14 << 4); break; - case 'F': RetVariable->Value[(i/2)] += (15 << 4); break; + case '0': break; + case '1': RetVariable->Value[(i / 2)] += (1 << 4); break; + case '2': RetVariable->Value[(i / 2)] += (2 << 4); break; + case '3': RetVariable->Value[(i / 2)] += (3 << 4); break; + case '4': RetVariable->Value[(i / 2)] += (4 << 4); break; + case '5': RetVariable->Value[(i / 2)] += (5 << 4); break; + case '6': RetVariable->Value[(i / 2)] += (6 << 4); break; + case '7': RetVariable->Value[(i / 2)] += (7 << 4); break; + case '8': RetVariable->Value[(i / 2)] += (8 << 4); break; + case '9': RetVariable->Value[(i / 2)] += (9 << 4); break; + case 'A': RetVariable->Value[(i / 2)] += (10 << 4); break; + case 'B': RetVariable->Value[(i / 2)] += (11 << 4); break; + case 'C': RetVariable->Value[(i / 2)] += (12 << 4); break; + case 'D': RetVariable->Value[(i / 2)] += (13 << 4); break; + case 'E': RetVariable->Value[(i / 2)] += (14 << 4); break; + case 'F': RetVariable->Value[(i / 2)] += (15 << 4); break; } - switch(Variable.VariableValue[i+1]) + switch (Variable.VariableValue[i + 1]) { - case '0': break; - case '1': RetVariable->Value[(i/2)] += 1; break; - case '2': RetVariable->Value[(i/2)] += 2; break; - case '3': RetVariable->Value[(i/2)] += 3; break; - case '4': RetVariable->Value[(i/2)] += 4; break; - case '5': RetVariable->Value[(i/2)] += 5; break; - case '6': RetVariable->Value[(i/2)] += 6; break; - case '7': RetVariable->Value[(i/2)] += 7; break; - case '8': RetVariable->Value[(i/2)] += 8; break; - case '9': RetVariable->Value[(i/2)] += 9; break; - case 'A': RetVariable->Value[(i/2)] += 10; break; - case 'B': RetVariable->Value[(i/2)] += 11; break; - case 'C': RetVariable->Value[(i/2)] += 12; break; - case 'D': RetVariable->Value[(i/2)] += 13; break; - case 'E': RetVariable->Value[(i/2)] += 14; break; - case 'F': RetVariable->Value[(i/2)] += 15; break; + case '0': break; + case '1': RetVariable->Value[(i / 2)] += 1; break; + case '2': RetVariable->Value[(i / 2)] += 2; break; + case '3': RetVariable->Value[(i / 2)] += 3; break; + case '4': RetVariable->Value[(i / 2)] += 4; break; + case '5': RetVariable->Value[(i / 2)] += 5; break; + case '6': RetVariable->Value[(i / 2)] += 6; break; + case '7': RetVariable->Value[(i / 2)] += 7; break; + case '8': RetVariable->Value[(i / 2)] += 8; break; + case '9': RetVariable->Value[(i / 2)] += 9; break; + case 'A': RetVariable->Value[(i / 2)] += 10; break; + case 'B': RetVariable->Value[(i / 2)] += 11; break; + case 'C': RetVariable->Value[(i / 2)] += 12; break; + case 'D': RetVariable->Value[(i / 2)] += 13; break; + case 'E': RetVariable->Value[(i / 2)] += 14; break; + case 'F': RetVariable->Value[(i / 2)] += 15; break; } } - RetVariable->ArraySize = ValueLen/2; + RetVariable->ArraySize = ValueLen / 2; return true; } @@ -431,7 +432,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, bool INI_SECTION_VARIABLE Variable = {}; Status = GetVariableInSectionPrivate(SectionName, VariableName, &Variable); - if(!Status) return Status; + if (!Status) return Status; *RetVariable = (bool)strtol(Variable.VariableValue, NULL, 10); return true; @@ -442,7 +443,7 @@ bool INI_FILE::GetSectionVariablesList(char *SectionName, INI_SECTION_VARLIST *V INI_SECTION *Section = NULL; Section = GetSection(SectionName); - if(Section == NULL) + if (Section == NULL) { SetLastError(318); // This region is not found return false; @@ -451,17 +452,17 @@ bool INI_FILE::GetSectionVariablesList(char *SectionName, INI_SECTION_VARLIST *V VariablesList->EntriesCount = Section->VariablesCount; VariablesList->NamesEntries = new INI_SECTION_VARLIST_ENTRY[VariablesList->EntriesCount]; - memset(VariablesList->NamesEntries, 0x00, sizeof(INI_SECTION_VARLIST_ENTRY)*VariablesList->EntriesCount); - + memset(VariablesList->NamesEntries, 0x00, sizeof(INI_SECTION_VARLIST_ENTRY)*VariablesList->EntriesCount); + VariablesList->ValuesEntries = new INI_SECTION_VARLIST_ENTRY[VariablesList->EntriesCount]; memset(VariablesList->ValuesEntries, 0x00, sizeof(INI_SECTION_VARLIST_ENTRY)*VariablesList->EntriesCount); - for(DWORD i = 0; i < Section->VariablesCount; i++) + for (DWORD i = 0; i < Section->VariablesCount; i++) { - memcpy(VariablesList->NamesEntries[i].String, Section->Variables[i].VariableName, - strlen(Section->Variables[i].VariableName)); - - memcpy(VariablesList->ValuesEntries[i].String, Section->Variables[i].VariableValue, + memcpy(VariablesList->NamesEntries[i].String, Section->Variables[i].VariableName, + strlen(Section->Variables[i].VariableName)); + + memcpy(VariablesList->ValuesEntries[i].String, Section->Variables[i].VariableValue, strlen(Section->Variables[i].VariableValue)); } @@ -473,7 +474,7 @@ bool INI_FILE::GetSectionVariablesList(char *SectionName, INI_SECTION_VARLIST *V bool INI_FILE::SectionExists(wchar_t *SectionName) { - char cSectionName[MAX_STRING_LEN] = {0x00}; + char cSectionName[MAX_STRING_LEN] = { 0x00 }; wcstombs(cSectionName, SectionName, MAX_STRING_LEN); @@ -481,11 +482,11 @@ bool INI_FILE::SectionExists(wchar_t *SectionName) } bool INI_FILE::VariableExists(wchar_t *SectionName, wchar_t *VariableName) -{ - INI_SECTION_VARIABLE Variable = {0}; +{ + INI_SECTION_VARIABLE Variable = { 0 }; - char cSectionName[MAX_STRING_LEN] = {0x00}; - char cVariableName[MAX_STRING_LEN] = {0x00}; + char cSectionName[MAX_STRING_LEN] = { 0x00 }; + char cVariableName[MAX_STRING_LEN] = { 0x00 }; wcstombs(cSectionName, SectionName, MAX_STRING_LEN); wcstombs(cVariableName, VariableName, MAX_STRING_LEN); @@ -495,8 +496,8 @@ bool INI_FILE::VariableExists(wchar_t *SectionName, wchar_t *VariableName) bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_STRING *RetVariable) { - char cSectionName[MAX_STRING_LEN] = {0x00}; - char cVariableName[MAX_STRING_LEN] = {0x00}; + char cSectionName[MAX_STRING_LEN] = { 0x00 }; + char cVariableName[MAX_STRING_LEN] = { 0x00 }; wcstombs(cSectionName, SectionName, MAX_STRING_LEN); wcstombs(cVariableName, VariableName, MAX_STRING_LEN); @@ -506,8 +507,8 @@ bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_DWORD *RetVariable) { - char cSectionName[MAX_STRING_LEN] = {0x00}; - char cVariableName[MAX_STRING_LEN] = {0x00}; + char cSectionName[MAX_STRING_LEN] = { 0x00 }; + char cVariableName[MAX_STRING_LEN] = { 0x00 }; wcstombs(cSectionName, SectionName, MAX_STRING_LEN); wcstombs(cVariableName, VariableName, MAX_STRING_LEN); @@ -517,8 +518,8 @@ bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_BYTEARRAY *RetVariable) { - char cSectionName[MAX_STRING_LEN] = {0x00}; - char cVariableName[MAX_STRING_LEN] = {0x00}; + char cSectionName[MAX_STRING_LEN] = { 0x00 }; + char cVariableName[MAX_STRING_LEN] = { 0x00 }; wcstombs(cSectionName, SectionName, MAX_STRING_LEN); wcstombs(cVariableName, VariableName, MAX_STRING_LEN); @@ -528,8 +529,8 @@ bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, bool *RetVariable) { - char cSectionName[MAX_STRING_LEN] = {0x00}; - char cVariableName[MAX_STRING_LEN] = {0x00}; + char cSectionName[MAX_STRING_LEN] = { 0x00 }; + char cVariableName[MAX_STRING_LEN] = { 0x00 }; wcstombs(cSectionName, SectionName, MAX_STRING_LEN); wcstombs(cVariableName, VariableName, MAX_STRING_LEN); @@ -539,7 +540,7 @@ bool INI_FILE::GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, bool INI_FILE::GetSectionVariablesList(wchar_t *SectionName, INI_SECTION_VARLIST *VariablesList) { - char cSectionName[MAX_STRING_LEN] = {0x00}; + char cSectionName[MAX_STRING_LEN] = { 0x00 }; wcstombs(cSectionName, SectionName, MAX_STRING_LEN); diff --git a/src-x86-x64-Fusix/IniFile.h b/src-x86-x64-Fusix/IniFile.h index d834de4..632bf74 100644 --- a/src-x86-x64-Fusix/IniFile.h +++ b/src-x86-x64-Fusix/IniFile.h @@ -1,17 +1,17 @@ /* - Copyright 2014 Stas'M Corp. +Copyright 2014 Stas'M Corp. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ #include "stdafx.h" @@ -87,6 +87,7 @@ public: INI_FILE(wchar_t*); ~INI_FILE(); + // char block bool SectionExists(char *SectionName); bool VariableExists(char *SectionName, char *VariableName); bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_STRING *Variable); @@ -95,6 +96,15 @@ public: bool GetVariableInSection(char *SectionName, char *VariableName, INI_VAR_BYTEARRAY *Variable); bool GetSectionVariablesList(char *SectionName, INI_SECTION_VARLIST *VariablesList); + // wchar_t tramps + bool SectionExists(wchar_t *SectionName); + bool VariableExists(wchar_t *SectionName, wchar_t *VariableName); + bool GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_STRING *Variable); + bool GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_DWORD *Variable); + bool GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, bool *Variable); + bool GetVariableInSection(wchar_t *SectionName, wchar_t *VariableName, INI_VAR_BYTEARRAY *Variable); + bool GetSectionVariablesList(wchar_t *SectionName, INI_SECTION_VARLIST *VariablesList); + private: DWORD FileSize; // Ini file size char *FileRaw; // Ini file raw dump diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 2d76c97..fe6ca7e 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -56,7 +56,7 @@ FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; INI_FILE *IniFile; -wchar_t LogFile[256] = {0x00}; +wchar_t LogFile[256] = L"\\rdpwrap.txt"; HMODULE hTermSrv; HMODULE hSLC; PLATFORM_DWORD TermSrvBase; @@ -519,7 +519,7 @@ void Hook() return; } - INI_VAR_STRING LogFileVar; + /*INI_VAR_STRING LogFileVar; if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFileVar))) { @@ -533,7 +533,7 @@ void Hook() } } } - else memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value)); + else memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value));*/ char *Log; SIZE_T bw; @@ -583,7 +583,7 @@ void Hook() } Log = new char[1024]; - wsprintfA(Log, "Version: %d.%d.%d.%d\r\n", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); + wsprintfA(Log, "Version: %d.%d.%d.%d\r\n", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); WriteToLog(Log); delete[] Log; @@ -680,6 +680,7 @@ void Hook() INI_VAR_STRING PatchName; INI_VAR_BYTEARRAY Patch; Sect = new char[1024]; + memset(Sect, 0x00, 1024); wsprintfA(Sect, "%d.%d.%d.%d", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); if (IniFile->SectionExists(Sect)) diff --git a/src-x86-x64-Fusix/RDPWrap.vcxproj b/src-x86-x64-Fusix/RDPWrap.vcxproj index e7589ec..ebc2664 100644 --- a/src-x86-x64-Fusix/RDPWrap.vcxproj +++ b/src-x86-x64-Fusix/RDPWrap.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -27,26 +27,26 @@ DynamicLibrary true - v110 + v120 Unicode DynamicLibrary true - v110 + v120 Unicode DynamicLibrary false - v110 + v120 true Unicode DynamicLibrary false - v110 + v120 true Unicode @@ -160,6 +160,7 @@ + @@ -178,6 +179,7 @@ + Create diff --git a/src-x86-x64-Fusix/RDPWrap.vcxproj.filters b/src-x86-x64-Fusix/RDPWrap.vcxproj.filters index b394450..62569f2 100644 --- a/src-x86-x64-Fusix/RDPWrap.vcxproj.filters +++ b/src-x86-x64-Fusix/RDPWrap.vcxproj.filters @@ -24,6 +24,9 @@ Заголовочные файлы + + Заголовочные файлы + @@ -35,6 +38,9 @@ Файлы исходного кода + + Файлы исходного кода + From b5b58061777d922164898439e63b34cd286deb88 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 01:39:32 +0300 Subject: [PATCH 040/208] Some fixes --- src-x86-x64-Fusix/RDPWrap.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index fe6ca7e..67db734 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -56,7 +56,7 @@ FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; INI_FILE *IniFile; -wchar_t LogFile[256] = L"\\rdpwrap.txt"; +wchar_t LogFile[256] = L"\\rdpwrap.txt\0"; HMODULE hTermSrv; HMODULE hSLC; PLATFORM_DWORD TermSrvBase; @@ -497,6 +497,7 @@ void Hook() extern wchar_t LogFile[256]; AlreadyHooked = true; + char *Log; wchar_t ConfigFile[256] = {0x00}; WriteToLog("Loading configuration...\r\n"); @@ -507,10 +508,15 @@ void Hook() if(ConfigFile[i] == '\\') { memset(&ConfigFile[i+1], 0x00, ((256-(i+1)))*2); - memcpy(&ConfigFile[i+1], "rdpwrap.ini", strlen("rdpwrap.ini")*2); + memcpy(&ConfigFile[i+1], L"rdpwrap.ini", strlen("rdpwrap.ini")*2); } } + Log = new char[1024]; + wsprintfA(Log, "Configuration file: %S\r\n", ConfigFile); + WriteToLog(Log); + delete[] Log; + IniFile = new INI_FILE(ConfigFile); if (IniFile == NULL) @@ -519,7 +525,7 @@ void Hook() return; } - /*INI_VAR_STRING LogFileVar; + INI_VAR_STRING LogFileVar; if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFileVar))) { @@ -529,13 +535,17 @@ void Hook() if(LogFile[i] == '\\') { memset(&LogFile[i+1], 0x00, ((256-(i+1)))*2); - memcpy(&LogFile[i+1], "rdpwrap.txt", strlen("rdpwrap.txt")*2); + memcpy(&LogFile[i+1], L"rdpwrap.txt", strlen("rdpwrap.txt")*2); } } } - else memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value));*/ + else memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value)); + + Log = new char[1024]; + wsprintfA(Log, "Log file: %S\r\n", LogFile); + WriteToLog(Log); + delete[] Log; - char *Log; SIZE_T bw; WORD Ver = 0; PLATFORM_DWORD TermSrvSize, SignPtr; From ac5cb9e4805b795b804d441681f3ad8575ee1e20 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 02:17:24 +0300 Subject: [PATCH 041/208] Bug fixes --- src-x86-x64-Fusix/RDPWrap.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 67db734..7b0b8cd 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -509,6 +509,7 @@ void Hook() { memset(&ConfigFile[i+1], 0x00, ((256-(i+1)))*2); memcpy(&ConfigFile[i+1], L"rdpwrap.ini", strlen("rdpwrap.ini")*2); + break; } } @@ -536,6 +537,7 @@ void Hook() { memset(&LogFile[i+1], 0x00, ((256-(i+1)))*2); memcpy(&LogFile[i+1], L"rdpwrap.txt", strlen("rdpwrap.txt")*2); + break; } } } From 239cd5fe3fe4886546ce61f868542b0ad48e5a2c Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 02:59:13 +0300 Subject: [PATCH 042/208] More bug fixes --- src-x86-x64-Fusix/IniFile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index b914a8e..2c5f1ef 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -123,7 +123,7 @@ DWORD INI_FILE::GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD DWORD EndStringPos = 0; DWORD StringSize = 0; - if (StringNumber > FileStringsCount) return -1; + if (StringNumber > FileStringsCount) return 0; for (DWORD i = FileStringsMap[StringNumber]; i < FileSize; i++) { @@ -136,7 +136,7 @@ DWORD INI_FILE::GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD StringSize = EndStringPos - FileStringsMap[StringNumber]; - if (Size < StringSize) return -1; + if (Size < StringSize) return 0; memset(RetString, 0x00, Size); memcpy(RetString, &(FileRaw[FileStringsMap[StringNumber]]), StringSize); From 939a884f2038d488865f13100a8c6b76c377e607 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 19:11:36 +0300 Subject: [PATCH 043/208] That epic commit Seems to work well :+1: --- src-x86-x64-Fusix/IniFile.cpp | 6 +++--- src-x86-x64-Fusix/RDPWrap.cpp | 37 +++++++++++++++++++---------------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 2c5f1ef..8364cca 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -24,7 +24,7 @@ INI_FILE::INI_FILE(wchar_t *FilePath) DWORD Status = 0; DWORD NumberOfBytesRead = 0; - HANDLE hFile = CreateFile(FilePath, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, + HANDLE hFile = CreateFile(FilePath, GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) @@ -376,7 +376,7 @@ bool INI_FILE::GetVariableInSection(char *SectionName, char *VariableName, INI_V if (ValueLen > 32) ValueLen = 32; // 32 hex digits memset(RetVariable, 0x00, sizeof(*RetVariable)); - memcpy(RetVariable->Name, Variable.VariableName, ValueLen); + memcpy(RetVariable->Name, Variable.VariableName, strlen(Variable.VariableName)); for (DWORD i = 0; i <= ValueLen; i++) { @@ -545,4 +545,4 @@ bool INI_FILE::GetSectionVariablesList(wchar_t *SectionName, INI_SECTION_VARLIST wcstombs(cSectionName, SectionName, MAX_STRING_LEN); return GetSectionVariablesList(cSectionName, VariablesList); -} +} \ No newline at end of file diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 7b0b8cd..bf99675 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -16,6 +16,7 @@ #include "stdafx.h" #include "IniFile.h" +#include typedef struct { @@ -499,16 +500,16 @@ void Hook() AlreadyHooked = true; char *Log; - wchar_t ConfigFile[256] = {0x00}; + wchar_t ConfigFile[256] = { 0x00 }; WriteToLog("Loading configuration...\r\n"); GetModuleFileName(GetCurrentModule(), ConfigFile, 255); - for(DWORD i = wcslen(ConfigFile); i > 0; i--) + for (DWORD i = wcslen(ConfigFile); i > 0; i--) { - if(ConfigFile[i] == '\\') + if (ConfigFile[i] == '\\') { - memset(&ConfigFile[i+1], 0x00, ((256-(i+1)))*2); - memcpy(&ConfigFile[i+1], L"rdpwrap.ini", strlen("rdpwrap.ini")*2); + memset(&ConfigFile[i + 1], 0x00, ((256 - (i + 1))) * 2); + memcpy(&ConfigFile[i + 1], L"rdpwrap.ini", strlen("rdpwrap.ini") * 2); break; } } @@ -520,6 +521,7 @@ void Hook() IniFile = new INI_FILE(ConfigFile); + // TODO: implement this if (IniFile == NULL) { WriteToLog("Error: Failed to load configuration\r\n"); @@ -541,12 +543,14 @@ void Hook() } } } - else memcpy((void*)LogFile, LogFileVar.Value, strlen(LogFileVar.Value)); - - Log = new char[1024]; - wsprintfA(Log, "Log file: %S\r\n", LogFile); - WriteToLog(Log); - delete[] Log; + else + { + // TODO: Change it before add UNICODE in IniFile + wchar_t wcLogFile[256]; + memset(wcLogFile, 0x00, 256); + mbstowcs(wcLogFile, LogFileVar.Value, 255); + wcscpy(LogFile, wcLogFile); + } SIZE_T bw; WORD Ver = 0; @@ -603,10 +607,10 @@ void Hook() WriteToLog("freeze\r\n"); SetThreadsState(false); - bool bSLHook; - if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true; + bool Bool; + if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &Bool))) Bool = true; - if ((Ver == 0x0600) && bSLHook) + if ((Ver == 0x0600) && Bool) { // Windows Vista // uses SL Policy API (slc.dll) @@ -636,9 +640,9 @@ void Hook() } } - if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT61", &bSLHook))) bSLHook = true; + if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT61", &Bool))) Bool = true; - if ((Ver == 0x0601) && bSLHook) + if ((Ver == 0x0601) && Bool) { // Windows 7 // uses SL Policy API (slc.dll) @@ -699,7 +703,6 @@ void Hook() { if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) { - bool Bool; #ifdef _WIN64 if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x64", &Bool))) Bool = false; #else From 6059197036452263c89b30d89215429693043f33 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 19:28:31 +0300 Subject: [PATCH 044/208] Perfect look --- src-x86-x64-Fusix/RDPWrap.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index bf99675..81e37c0 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -568,18 +568,14 @@ void Hook() _ServiceMain = (SERVICEMAIN)GetProcAddress(hTermSrv, "ServiceMain"); _SvchostPushServiceGlobals = (SVCHOSTPUSHSERVICEGLOBALS)GetProcAddress(hTermSrv, "SvchostPushServiceGlobals"); - Log = new char[1024]; - wsprintfA(Log, "Base addr: 0x%p\r\n", hTermSrv); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "SvcMain: termsrv.dll+0x%p\r\n", (PLATFORM_DWORD)_ServiceMain - (PLATFORM_DWORD)hTermSrv); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "SvcGlobals: termsrv.dll+0x%p\r\n", (PLATFORM_DWORD)_SvchostPushServiceGlobals - (PLATFORM_DWORD)hTermSrv); + Log = new char[4096]; + wsprintfA(Log, + "Base addr: 0x%p\r\n" + "SvcMain: termsrv.dll+0x%p\r\n" + "SvcGlobals: termsrv.dll+0x%p\r\n", + hTermSrv, + (PLATFORM_DWORD)_ServiceMain - (PLATFORM_DWORD)hTermSrv, + (PLATFORM_DWORD)_SvchostPushServiceGlobals - (PLATFORM_DWORD)hTermSrv); WriteToLog(Log); delete[] Log; From cf53e9c98436f33c59f03eeadd5faaffa6813421 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 19:38:01 +0300 Subject: [PATCH 045/208] Improvements --- src-x86-x64-Fusix/RDPWrap.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 81e37c0..77903ca 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -385,7 +385,8 @@ HRESULT WINAPI New_CSLQuery_Initialize() WriteToLog("> CSLQuery::Initialize\r\n"); char *Sect; - Sect = new char[1024]; + Sect = new char[256]; + memset(Sect, 0x00, 256); wsprintfA(Sect, "%d.%d.%d.%d-SLInit", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); if (IniFile->SectionExists(Sect)) @@ -691,8 +692,8 @@ void Hook() char *Sect; INI_VAR_STRING PatchName; INI_VAR_BYTEARRAY Patch; - Sect = new char[1024]; - memset(Sect, 0x00, 1024); + Sect = new char[256]; + memset(Sect, 0x00, 256); wsprintfA(Sect, "%d.%d.%d.%d", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build); if (IniFile->SectionExists(Sect)) From 1febb524bcde774e53fd5573e75cebe9e8756dd6 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 19:55:53 +0300 Subject: [PATCH 046/208] Logging improved --- src-x86-binarymaster/rdpwrap.dpr | 70 ++++++++++++++++++-------------- src-x86-x64-Fusix/RDPWrap.cpp | 44 ++++++++++---------- 2 files changed, 62 insertions(+), 52 deletions(-) diff --git a/src-x86-binarymaster/rdpwrap.dpr b/src-x86-binarymaster/rdpwrap.dpr index 4e1534e..7a7ae49 100644 --- a/src-x86-binarymaster/rdpwrap.dpr +++ b/src-x86-binarymaster/rdpwrap.dpr @@ -374,7 +374,7 @@ begin if OverrideSL(pwszValueName, dw) then begin pdwValue^ := dw; Result := S_OK; - WriteLog('Rewrite: ' + IntToStr(pdwValue^)); + WriteLog('Policy rewrite: ' + IntToStr(pdwValue^)); Exit; end; @@ -387,9 +387,9 @@ begin // get result Result := SLGetWindowsInformationDWORD(pwszValueName, pdwValue); if Result = S_OK then - WriteLog('Result: ' + IntToStr(pdwValue^)) + WriteLog('Policy result: ' + IntToStr(pdwValue^)) else - WriteLog('Failed'); + WriteLog('Policy request failed'); // wrap it back WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); @@ -408,7 +408,7 @@ begin if OverrideSL(pwszValueName, dw) then begin pdwValue^ := dw; Result := S_OK; - WriteLog('Rewrite: ' + IntToStr(pdwValue^)); + WriteLog('Policy rewrite: ' + IntToStr(pdwValue^)); Exit; end; @@ -417,9 +417,9 @@ begin Result := SLGetWindowsInformationDWORD(pwszValueName, pdwValue); if Result = S_OK then - WriteLog('Result: ' + IntToStr(pdwValue^)) + WriteLog('Policy result: ' + IntToStr(pdwValue^)) else - WriteLog('Failed'); + WriteLog('Policy request failed'); end; function New_Win8SL_CP(eax: DWORD; pdwValue: PDWORD; ecx: DWORD; pwszValueName: PWideChar): HRESULT; register; @@ -450,7 +450,7 @@ begin lMaxUserSessions := nil; ulMaxDebugSessions := nil; bInitialized := nil; - WriteLog('> CSLQuery::Initialize'); + WriteLog('>>> CSLQuery::Initialize'); Sect := IntToStr(FV.Version.w.Major)+'.'+IntToStr(FV.Version.w.Minor)+'.'+ IntToStr(FV.Release)+'.'+IntToStr(FV.Build)+'-SLInit'; if INISectionExists(INI, Sect) then begin @@ -466,42 +466,43 @@ begin if bServerSku <> nil then begin bServerSku^ := INIReadDWord(INI, 'SLInit', 'bServerSku', 1); - WriteLog('[0x'+IntToHex(DWORD(bServerSku), 1)+'] bServerSku = ' + IntToStr(bServerSku^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(bServerSku), 1)+'] bServerSku = ' + IntToStr(bServerSku^)); end; if bRemoteConnAllowed <> nil then begin bRemoteConnAllowed^ := INIReadDWord(INI, 'SLInit', 'bRemoteConnAllowed', 1); - WriteLog('[0x'+IntToHex(DWORD(bRemoteConnAllowed), 1)+'] bRemoteConnAllowed = ' + IntToStr(bRemoteConnAllowed^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(bRemoteConnAllowed), 1)+'] bRemoteConnAllowed = ' + IntToStr(bRemoteConnAllowed^)); end; if bFUSEnabled <> nil then begin bFUSEnabled^ := INIReadDWord(INI, 'SLInit', 'bFUSEnabled', 1); - WriteLog('[0x'+IntToHex(DWORD(bFUSEnabled), 1)+'] bFUSEnabled = ' + IntToStr(bFUSEnabled^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(bFUSEnabled), 1)+'] bFUSEnabled = ' + IntToStr(bFUSEnabled^)); end; if bAppServerAllowed <> nil then begin bAppServerAllowed^ := INIReadDWord(INI, 'SLInit', 'bAppServerAllowed', 1); - WriteLog('[0x'+IntToHex(DWORD(bAppServerAllowed), 1)+'] bAppServerAllowed = ' + IntToStr(bAppServerAllowed^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(bAppServerAllowed), 1)+'] bAppServerAllowed = ' + IntToStr(bAppServerAllowed^)); end; if bMultimonAllowed <> nil then begin bMultimonAllowed^ := INIReadDWord(INI, 'SLInit', 'bMultimonAllowed', 1); - WriteLog('[0x'+IntToHex(DWORD(bMultimonAllowed), 1)+'] bMultimonAllowed = ' + IntToStr(bMultimonAllowed^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(bMultimonAllowed), 1)+'] bMultimonAllowed = ' + IntToStr(bMultimonAllowed^)); end; if lMaxUserSessions <> nil then begin lMaxUserSessions^ := INIReadDWord(INI, 'SLInit', 'lMaxUserSessions', 0); - WriteLog('[0x'+IntToHex(DWORD(lMaxUserSessions), 1)+'] lMaxUserSessions = ' + IntToStr(lMaxUserSessions^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(lMaxUserSessions), 1)+'] lMaxUserSessions = ' + IntToStr(lMaxUserSessions^)); end; if ulMaxDebugSessions <> nil then begin ulMaxDebugSessions^ := INIReadDWord(INI, 'SLInit', 'ulMaxDebugSessions', 0); - WriteLog('[0x'+IntToHex(DWORD(ulMaxDebugSessions), 1)+'] ulMaxDebugSessions = ' + IntToStr(ulMaxDebugSessions^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(ulMaxDebugSessions), 1)+'] ulMaxDebugSessions = ' + IntToStr(ulMaxDebugSessions^)); end; if bInitialized <> nil then begin bInitialized^ := INIReadDWord(INI, 'SLInit', 'bInitialized', 1); - WriteLog('[0x'+IntToHex(DWORD(bInitialized), 1)+'] bInitialized = ' + IntToStr(bInitialized^)); + WriteLog('SLInit [0x'+IntToHex(DWORD(bInitialized), 1)+'] bInitialized = ' + IntToStr(bInitialized^)); end; Result := S_OK; + WriteLog('<<< CSLQuery::Initialize'); end; procedure HookFunctions; var - Sect, FuncName: String; + ConfigFile, Sect, FuncName: String; V: DWORD; TS_Handle, SLC_Handle: THandle; TermSrvSize: DWORD; @@ -520,14 +521,16 @@ begin SLGetWindowsInformationDWORD := nil; WriteLog('Loading configuration...'); - INILoad(INI, ExtractFilePath(GetBinaryPath) + 'rdpwrap.ini'); + ConfigFile := ExtractFilePath(GetBinaryPath) + 'rdpwrap.ini'; + WriteLog('Configuration file: ' + ConfigFile); + INILoad(INI, ConfigFile); if Length(INI) = 0 then begin WriteLog('Error: Failed to load configuration'); Exit; end; LogFile := INIReadString(INI, 'Main', 'LogFile', ExtractFilePath(GetBinaryPath) + 'rdpwrap.txt'); - WriteLog('init'); + WriteLog('Initializing RDP Wrapper...'); // load termsrv.dll and get functions TS_Handle := LoadLibrary('termsrv.dll'); @@ -535,11 +538,13 @@ begin WriteLog('Error: Failed to load Terminal Services library'); Exit; end; - WriteLog('Base addr: 0x'+IntToHex(TS_Handle, 8)); TSMain := GetProcAddress(TS_Handle, 'ServiceMain'); - WriteLog('SvcMain: termsrv.dll+0x'+IntToHex(Cardinal(@TSMain) - TS_Handle, 1)); TSGlobals := GetProcAddress(TS_Handle, 'SvchostPushServiceGlobals'); - WriteLog('SvcGlobals: termsrv.dll+0x'+IntToHex(Cardinal(@TSGlobals) - TS_Handle, 1)); + WriteLog( + 'Base addr: 0x' + IntToHex(TS_Handle, 8) + + 'SvcMain: termsrv.dll+0x' + IntToHex(Cardinal(@TSMain) - TS_Handle, 1) + + 'SvcGlobals: termsrv.dll+0x' + IntToHex(Cardinal(@TSGlobals) - TS_Handle, 1) + ); V := 0; // check termsrv version @@ -555,15 +560,17 @@ begin Exit; end; - WriteLog('Version: '+IntToStr(FV.Version.w.Major)+'.'+IntToStr(FV.Version.w.Minor)); - WriteLog('Release: '+IntToStr(FV.Release)); - WriteLog('Build: '+IntToStr(FV.Build)); + WriteLog('Version: '+ + IntToStr(FV.Version.w.Major)+'.'+ + IntToStr(FV.Version.w.Minor)+'.'+ + IntToStr(FV.Release)+'.'+ + IntToStr(FV.Build)); // temporarily freeze threads - WriteLog('freeze'); + WriteLog('Freezing threads...'); StopThreads(); - WriteLog('Loading patch codes...'); + WriteLog('Caching patch codes...'); PatchList := INIReadSection(INI, 'PatchCodes'); SetLength(Patch, Length(PatchList)); for I := 0 to Length(Patch) - 1 do begin @@ -691,37 +698,38 @@ begin end; // unfreeze threads - WriteLog('resume'); + WriteLog('Resumimg threads...'); RunThreads(); end; function TermServiceMain(dwArgc: DWORD; lpszArgv: PWideChar): DWORD; stdcall; begin // wrap ServiceMain function - WriteLog('> ServiceMain'); + WriteLog('>>> ServiceMain'); if not IsHooked then HookFunctions; Result := 0; if @TSMain <> nil then Result := TSMain(dwArgc, lpszArgv); + WriteLog('<<< ServiceMain'); end; function TermServiceGlobals(lpGlobalData: Pointer): DWORD; stdcall; begin // wrap SvchostPushServiceGlobals function - WriteLog('> SvchostPushServiceGlobals'); + WriteLog('>>> SvchostPushServiceGlobals'); if not IsHooked then HookFunctions; Result := 0; if @TSGlobals <> nil then Result := TSGlobals(lpGlobalData); + WriteLog('<<< SvchostPushServiceGlobals'); end; // export section exports - TermServiceMain index 1 name 'ServiceMain'; -exports + TermServiceMain index 1 name 'ServiceMain', TermServiceGlobals index 2 name 'SvchostPushServiceGlobals'; begin diff --git a/src-x86-x64-Fusix/RDPWrap.cpp b/src-x86-x64-Fusix/RDPWrap.cpp index 77903ca..c5a80c6 100644 --- a/src-x86-x64-Fusix/RDPWrap.cpp +++ b/src-x86-x64-Fusix/RDPWrap.cpp @@ -290,7 +290,7 @@ HRESULT WINAPI New_SLGetWindowsInformationDWORD(PWSTR pwszValueName, DWORD *pdwV *pdwValue = dw; Log = new char[1024]; - wsprintfA(Log, "Rewrite: %i\r\n", dw); + wsprintfA(Log, "Policy rewrite: %i\r\n", dw); WriteToLog(Log); delete[] Log; @@ -302,11 +302,11 @@ HRESULT WINAPI New_SLGetWindowsInformationDWORD(PWSTR pwszValueName, DWORD *pdwV if (Result == S_OK) { Log = new char[1024]; - wsprintfA(Log, "Result: %i\r\n", dw); + wsprintfA(Log, "Policy result: %i\r\n", dw); WriteToLog(Log); delete[] Log; } else { - WriteToLog("Failed\r\n"); + WriteToLog("Policy request failed\r\n"); } WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); @@ -336,7 +336,7 @@ HRESULT __fastcall New_Win8SL(PWSTR pwszValueName, DWORD *pdwValue) *pdwValue = dw; Log = new char[1024]; - wsprintfA(Log, "Rewrite: %i\r\n", dw); + wsprintfA(Log, "Policy rewrite: %i\r\n", dw); WriteToLog(Log); delete[] Log; @@ -347,11 +347,11 @@ HRESULT __fastcall New_Win8SL(PWSTR pwszValueName, DWORD *pdwValue) if (Result == S_OK) { Log = new char[1024]; - wsprintfA(Log, "Result: %i\r\n", dw); + wsprintfA(Log, "Policy result: %i\r\n", dw); WriteToLog(Log); delete[] Log; } else { - WriteToLog("Failed\r\n"); + WriteToLog("Policy request failed\r\n"); } return Result; @@ -382,7 +382,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() DWORD *ulMaxDebugSessions = NULL; DWORD *bInitialized = NULL; - WriteToLog("> CSLQuery::Initialize\r\n"); + WriteToLog(">>> CSLQuery::Initialize\r\n"); char *Sect; Sect = new char[256]; @@ -418,7 +418,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() *bServerSku = INIReadDWordHex(IniFile, "SLInit", "bServerSku", 1); Log = new char[1024]; - wsprintfA(Log, "[0x%p] bServerSku = %d\r\n", bServerSku, *bServerSku); + wsprintfA(Log, "SLInit [0x%p] bServerSku = %d\r\n", bServerSku, *bServerSku); WriteToLog(Log); delete[] Log; } @@ -427,7 +427,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() *bRemoteConnAllowed = INIReadDWordHex(IniFile, "SLInit", "bRemoteConnAllowed", 1); Log = new char[1024]; - wsprintfA(Log, "[0x%p] bRemoteConnAllowed = %d\r\n", bRemoteConnAllowed, *bRemoteConnAllowed); + wsprintfA(Log, "SLInit [0x%p] bRemoteConnAllowed = %d\r\n", bRemoteConnAllowed, *bRemoteConnAllowed); WriteToLog(Log); delete[] Log; } @@ -436,7 +436,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() *bFUSEnabled = INIReadDWordHex(IniFile, "SLInit", "bFUSEnabled", 1); Log = new char[1024]; - wsprintfA(Log, "[0x%p] bFUSEnabled = %d\r\n", bFUSEnabled, *bFUSEnabled); + wsprintfA(Log, "SLInit [0x%p] bFUSEnabled = %d\r\n", bFUSEnabled, *bFUSEnabled); WriteToLog(Log); delete[] Log; } @@ -445,7 +445,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() *bAppServerAllowed = INIReadDWordHex(IniFile, "SLInit", "bAppServerAllowed", 1); Log = new char[1024]; - wsprintfA(Log, "[0x%p] bAppServerAllowed = %d\r\n", bAppServerAllowed, *bAppServerAllowed); + wsprintfA(Log, "SLInit [0x%p] bAppServerAllowed = %d\r\n", bAppServerAllowed, *bAppServerAllowed); WriteToLog(Log); delete[] Log; } @@ -454,7 +454,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() *bMultimonAllowed = INIReadDWordHex(IniFile, "SLInit", "bMultimonAllowed", 1); Log = new char[1024]; - wsprintfA(Log, "[0x%p] bMultimonAllowed = %d\r\n", bMultimonAllowed, *bMultimonAllowed); + wsprintfA(Log, "SLInit [0x%p] bMultimonAllowed = %d\r\n", bMultimonAllowed, *bMultimonAllowed); WriteToLog(Log); delete[] Log; } @@ -463,7 +463,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() *lMaxUserSessions = INIReadDWordHex(IniFile, "SLInit", "lMaxUserSessions", 0); Log = new char[1024]; - wsprintfA(Log, "[0x%p] lMaxUserSessions = %d\r\n", lMaxUserSessions, *lMaxUserSessions); + wsprintfA(Log, "SLInit [0x%p] lMaxUserSessions = %d\r\n", lMaxUserSessions, *lMaxUserSessions); WriteToLog(Log); delete[] Log; } @@ -472,7 +472,7 @@ HRESULT WINAPI New_CSLQuery_Initialize() *ulMaxDebugSessions = INIReadDWordHex(IniFile, "SLInit", "ulMaxDebugSessions", 0); Log = new char[1024]; - wsprintfA(Log, "[0x%p] ulMaxDebugSessions = %d\r\n", ulMaxDebugSessions, *ulMaxDebugSessions); + wsprintfA(Log, "SLInit [0x%p] ulMaxDebugSessions = %d\r\n", ulMaxDebugSessions, *ulMaxDebugSessions); WriteToLog(Log); delete[] Log; } @@ -481,10 +481,11 @@ HRESULT WINAPI New_CSLQuery_Initialize() *bInitialized = INIReadDWordHex(IniFile, "SLInit", "bInitialized", 1); Log = new char[1024]; - wsprintfA(Log, "[0x%p] bInitialized = %d\r\n", bInitialized, *bInitialized); + wsprintfA(Log, "SLInit [0x%p] bInitialized = %d\r\n", bInitialized, *bInitialized); WriteToLog(Log); delete[] Log; } + WriteToLog("<<< CSLQuery::Initialize\r\n"); return S_OK; } @@ -521,7 +522,6 @@ void Hook() delete[] Log; IniFile = new INI_FILE(ConfigFile); - // TODO: implement this if (IniFile == NULL) { @@ -558,7 +558,7 @@ void Hook() PLATFORM_DWORD TermSrvSize, SignPtr; FARJMP Jump; - WriteToLog("init\r\n"); + WriteToLog("Initializing RDP Wrapper...\r\n"); hTermSrv = LoadLibrary(L"termsrv.dll"); if (hTermSrv == 0) @@ -601,7 +601,7 @@ void Hook() delete[] Log; // temporarily freeze threads - WriteToLog("freeze\r\n"); + WriteToLog("Freezing threads...\r\n"); SetThreadsState(false); bool Bool; @@ -845,23 +845,25 @@ void Hook() } delete[] Sect; - WriteToLog("resume\r\n"); + WriteToLog("Resumimg threads...\r\n"); SetThreadsState(true); return; } void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) { - WriteToLog("> ServiceMain\r\n"); + WriteToLog(">>> ServiceMain\r\n"); if (!AlreadyHooked) Hook(); if (_ServiceMain != NULL) _ServiceMain(dwArgc, lpszArgv); + WriteToLog("<<< ServiceMain\r\n"); } void WINAPI SvchostPushServiceGlobals(void *lpGlobalData) { - WriteToLog("> SvchostPushServiceGlobals\r\n"); + WriteToLog(">>> SvchostPushServiceGlobals\r\n"); if (!AlreadyHooked) Hook(); if (_SvchostPushServiceGlobals != NULL) _SvchostPushServiceGlobals(lpGlobalData); + WriteToLog("<<< SvchostPushServiceGlobals\r\n"); } From f8de2d529707accca353e2f29c0a41a92d554135 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 19:58:45 +0300 Subject: [PATCH 047/208] Delete old files --- src-x86-binarymaster/rdpwrap-old.dpr | 1648 ----------------- src-x86-x64-Fusix/RDPWrap-old.cpp | 2523 -------------------------- 2 files changed, 4171 deletions(-) delete mode 100644 src-x86-binarymaster/rdpwrap-old.dpr delete mode 100644 src-x86-x64-Fusix/RDPWrap-old.cpp diff --git a/src-x86-binarymaster/rdpwrap-old.dpr b/src-x86-binarymaster/rdpwrap-old.dpr deleted file mode 100644 index b4c8351..0000000 --- a/src-x86-binarymaster/rdpwrap-old.dpr +++ /dev/null @@ -1,1648 +0,0 @@ -{ - Copyright 2014 Stas'M Corp. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -} - -library rdpwrap; - -uses - SysUtils, - Windows, - TlHelp32; - -{$R rdpwrap.res} - -// Hook core definitions - -type - OldCode = packed record - One: DWORD; - two: Word; - end; - - far_jmp = packed record - PushOp: Byte; - PushArg: Pointer; - RetOp: Byte; - end; - - mov_far_jmp = packed record - MovOp: Byte; - MovArg: Byte; - PushOp: Byte; - PushArg: Pointer; - RetOp: Byte; - end; - - TTHREADENTRY32 = packed record - dwSize: DWORD; - cntUsage: DWORD; - th32ThreadID: DWORD; - th32OwnerProcessID: DWORD; - tpBasePri: LongInt; - tpDeltaPri: LongInt; - dwFlags: DWORD; - end; - IntArray = Array of Integer; - FILE_VERSION = record - Version: record case Boolean of - True: (dw: DWORD); - False: (w: record - Minor, Major: Word; - end;) - end; - Release, Build: Word; - bDebug, bPrerelease, bPrivate, bSpecial: Boolean; - end; - -const - THREAD_SUSPEND_RESUME = 2; - TH32CS_SNAPTHREAD = 4; -var - bw: DWORD; - IsHooked: Boolean = False; - FCount: Cardinal = 0; - -// Unhooked import - -function OpenThread(dwDesiredAccess: DWORD; bInheritHandle: BOOL; - dwThreadId: DWORD): DWORD; stdcall; external kernel32; - -function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): DWORD; - stdcall; external kernel32; - -function Thread32First(hSnapshot: THandle; var lpte: TTHREADENTRY32): bool; - stdcall; external kernel32; - -function Thread32Next(hSnapshot: THandle; var lpte: TTHREADENTRY32): bool; - stdcall; external kernel32; - -// Wrapped import - -var - TSMain: function(dwArgc: DWORD; lpszArgv: PWideChar): DWORD; stdcall; - TSGlobals: function(lpGlobalData: Pointer): DWORD; stdcall; - -// Hooked import and vars - -var - SLGetWindowsInformationDWORD: function(pwszValueName: PWideChar; - pdwValue: PDWORD): HRESULT; stdcall; - TermSrvBase: Pointer; - FV: FILE_VERSION; - -const - CDefPolicy_Query_edx_ecx: Array[0..12] of Byte = - ($BA,$00,$01,$00,$00,$89,$91,$20,$03,$00,$00,$5E,$90); - CDefPolicy_Query_eax_esi: Array[0..11] of Byte = - ($B8,$00,$01,$00,$00,$89,$86,$20,$03,$00,$00,$90); - CDefPolicy_Query_eax_ecx: Array[0..11] of Byte = - ($B8,$00,$01,$00,$00,$89,$81,$20,$03,$00,$00,$90); - -{ -termsrv.dll 6.0.6000.16386 - -Original -.text:6F335CD8 cmp edx, [ecx+320h] -.text:6F335CDE pop esi -.text:6F335CDF jz loc_6F3426F1 -_______________ - -Changed -.text:6F335CD8 mov edx, 100h -.text:6F335CDD mov [ecx+320h], edx -.text:6F335CE3 pop esi -.text:6F335CE4 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6001.18000 - -Original -.text:6E817FD8 cmp edx, [ecx+320h] -.text:6E817FDE pop esi -.text:6E817FDF jz loc_6E826F16 -_______________ - -Changed -.text:6E817FD8 mov edx, 100h -.text:6E817FDD mov [ecx+320h], edx -.text:6E817FE3 pop esi -.text:6E817FE4 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6002.18005 - -Original -.text:6F5979C0 cmp edx, [ecx+320h] -.text:6F5979C6 pop esi -.text:6F5979C7 jz loc_6F5A6F26 -_______________ - -Changed -.text:6F5979C0 mov edx, 100h -.text:6F5979C5 mov [ecx+320h], edx -.text:6F5979CB pop esi -.text:6F5979CC nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6002.19214 - -Original -.text:6F5979B8 cmp edx, [ecx+320h] -.text:6F5979BE pop esi -.text:6F5979BF jz loc_6F5A6F3E -_______________ - -Changed -.text:6F5979B8 mov edx, 100h -.text:6F5979BD mov [ecx+320h], edx -.text:6F5979C3 pop esi -.text:6F5979C4 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.0.6002.23521 - -Original -.text:6F5979CC cmp edx, [ecx+320h] -.text:6F5979D2 pop esi -.text:6F5979D3 jz loc_6F5A6F2E -_______________ - -Changed -.text:6F5979CC mov edx, 100h -.text:6F5979D1 mov [ecx+320h], edx -.text:6F5979D7 pop esi -.text:6F5979D8 nop -CDefPolicy_Query_edx_ecx - -termsrv.dll 6.1.7600.16385 - -Original -.text:6F2F96F3 cmp eax, [esi+320h] -.text:6F2F96F9 jz loc_6F30E256 -_______________ - -Changed -.text:6F2F96F3 mov eax, 100h -.text:6F2F96F8 mov [esi+320h], eax -.text:6F2F96FE nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.17514 - -Original -.text:6F2F9D53 cmp eax, [esi+320h] -.text:6F2F9D59 jz loc_6F30B25E -_______________ - -Changed -.text:6F2F9D53 mov eax, 100h -.text:6F2F9D58 mov [esi+320h], eax -.text:6F2F9D5E nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.18540 - -Original -.text:6F2F9D9F cmp eax, [esi+320h] -.text:6F2F9DA5 jz loc_6F30B2AE -_______________ - -Changed -.text:6F2F9D9F mov eax, 100h -.text:6F2F9DA4 mov [esi+320h], eax -.text:6F2F9DAA nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.22750 - -Original -.text:6F2F9E21 cmp eax, [esi+320h] -.text:6F2F9E27 jz loc_6F30B6CE -_______________ - -Changed -.text:6F2F9E21 mov eax, 100h -.text:6F2F9E26 mov [esi+320h], eax -.text:6F2F9E2C nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.18637 - -Original -.text:6F2F9DBB cmp eax, [esi+320h] -.text:6F2F9DC1 jz loc_6F30B2A6 -_______________ - -Changed -.text:6F2F9DBB mov eax, 100h -.text:6F2F9DC0 mov [esi+320h], eax -.text:6F2F9DC6 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.1.7601.22843 - -Original -.text:6F2F9E25 cmp eax, [esi+320h] -.text:6F2F9E2B jz loc_6F30B6D6 -_______________ - -Changed -.text:6F2F9E25 mov eax, 100h -.text:6F2F9E2A mov [esi+320h], eax -.text:6F2F9E30 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.8102.0 - -Original -.text:1000E47C cmp eax, [esi+320h] -.text:1000E482 jz loc_1002D775 -_______________ - -Changed -.text:1000E47C mov eax, 100h -.text:1000E481 mov [esi+320h], eax -.text:1000E487 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.8250.0 - -Original -.text:10013520 cmp eax, [esi+320h] -.text:10013526 jz loc_1002DB85 -_______________ - -Changed -.text:10013520 mov eax, 100h -.text:10013525 mov [esi+320h], eax -.text:1001352B nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.8400.0 - -Original -.text:10013E48 cmp eax, [esi+320h] -.text:10013E4E jz loc_1002E079 -_______________ - -Changed -.text:10013E48 mov eax, 100h -.text:10013E4D mov [esi+320h], eax -.text:10013E53 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.9200.16384 - -Original -.text:10013F08 cmp eax, [esi+320h] -.text:10013F0E jz loc_1002E161 -_______________ - -Changed -.text:10013F08 mov eax, 100h -.text:10013F0D mov [esi+320h], eax -.text:10013F13 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.9200.17048 - -Original -.text:1001F408 cmp eax, [esi+320h] -.text:1001F40E jz loc_1002E201 -_______________ - -Changed -.text:1001F408 mov eax, 100h -.text:1001F40D mov [esi+320h], eax -.text:1001F413 nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.2.9200.21166 - -Original -.text:10013F30 cmp eax, [esi+320h] -.text:10013F36 jz loc_1002E189 -_______________ - -Changed -.text:10013F30 mov eax, 100h -.text:10013F35 mov [esi+320h], eax -.text:10013F3B nop -CDefPolicy_Query_eax_esi - -termsrv.dll 6.3.9431.0 - -Original -.text:1002EA25 cmp eax, [ecx+320h] -.text:1002EA2B jz loc_100348C1 -_______________ - -Changed -.text:1002EA25 mov eax, 100h -.text:1002EA2A mov [ecx+320h], eax -.text:1002EA30 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.3.9600.16384 - -Original -.text:10016115 cmp eax, [ecx+320h] -.text:1001611B jz loc_10034DE1 -_______________ - -Changed -.text:10016115 mov eax, 100h -.text:1001611A mov [ecx+320h], eax -.text:10016120 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.3.9600.17095 - -Original -.text:10037529 cmp eax, [ecx+320h] -.text:1003752F jz loc_10043662 -_______________ - -Changed -.text:10037529 mov eax, 100h -.text:1003752E mov [ecx+320h], eax -.text:10037534 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.4.9841.0 - -Original -.text:1003B989 cmp eax, [ecx+320h] -.text:1003B98F jz loc_1005E809 -_______________ - -Changed -.text:1003B989 mov eax, 100h -.text:1003B98E mov [ecx+320h], eax -.text:1003B994 nop -CDefPolicy_Query_eax_ecx - -termsrv.dll 6.4.9860.0 - -Original -.text:1003BEC9 cmp eax, [ecx+320h] -.text:1003BECF jz loc_1005EE1A -_______________ - -Changed -.text:1003BEC9 mov eax, 100h -.text:1003BECE mov [ecx+320h], eax -.text:1003BED4 nop -CDefPolicy_Query_eax_ecx -} - -var - Stub_SLGetWindowsInformationDWORD: far_jmp; - Old_SLGetWindowsInformationDWORD: OldCode; - -// Main code - -procedure WriteLog(S: AnsiString); -const - LogFile = '\rdpwrap.txt'; -var - F: TextFile; -begin - if not FileExists(LogFile) then - Exit; - AssignFile(F, LogFile); - Append(F); - Write(F, S+#13#10); - CloseFile(F); -end; - -procedure StopThreads; -var - h, CurrTh, ThrHandle, CurrPr: DWORD; - Thread: TTHREADENTRY32; -begin - CurrTh := GetCurrentThreadId; - CurrPr := GetCurrentProcessId; - h := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); - if h <> INVALID_HANDLE_VALUE then - begin - Thread.dwSize := SizeOf(TTHREADENTRY32); - if Thread32First(h, Thread) then - repeat - if (Thread.th32ThreadID <> CurrTh) and - (Thread.th32OwnerProcessID = CurrPr) then - begin - ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, - Thread.th32ThreadID); - if ThrHandle > 0 then - begin - SuspendThread(ThrHandle); - CloseHandle(ThrHandle); - end; - end; - until not Thread32Next(h, Thread); - CloseHandle(h); - end; -end; - -procedure RunThreads; -var - h, CurrTh, ThrHandle, CurrPr: DWORD; - Thread: TTHREADENTRY32; -begin - CurrTh := GetCurrentThreadId; - CurrPr := GetCurrentProcessId; - h := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); - if h <> INVALID_HANDLE_VALUE then - begin - Thread.dwSize := SizeOf(TTHREADENTRY32); - if Thread32First(h, Thread) then - repeat - if (Thread.th32ThreadID <> CurrTh) and - (Thread.th32OwnerProcessID = CurrPr) then - begin - ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, - Thread.th32ThreadID); - if ThrHandle > 0 then - begin - ResumeThread(ThrHandle); - CloseHandle(ThrHandle); - end; - end; - until not Thread32Next(h, Thread); - CloseHandle(h); - end; -end; - -function GetModuleAddress(ModuleName: String; ProcessId: DWORD; var BaseAddr: Pointer; var BaseSize: DWORD): Boolean; -var - hSnap: THandle; - md: MODULEENTRY32; -begin - Result := False; - hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId); - if hSnap = INVALID_HANDLE_VALUE Then - Exit; - md.dwSize := SizeOf(MODULEENTRY32); - if Module32First(hSnap, md) then - begin - if LowerCase(ExtractFileName(md.szExePath)) = LowerCase(ModuleName) then - begin - Result := True; - BaseAddr := Pointer(md.modBaseAddr); - BaseSize := md.modBaseSize; - CloseHandle(hSnap); - Exit; - end; - while Module32Next(hSnap, md) Do - begin - if LowerCase(ExtractFileName(md.szExePath)) = LowerCase(ModuleName) then - begin - Result := True; - BaseAddr := Pointer(md.modBaseAddr); - BaseSize := md.modBaseSize; - Break; - end; - end; - end; - CloseHandle(hSnap); -end; - -{procedure FindMem(Mem: Pointer; MemSz: DWORD; Buf: Pointer; BufSz: DWORD; - From: DWORD; var A: IntArray); -var - I: Integer; -begin - SetLength(A, 0); - I:=From; - if From>0 then - Inc(PByte(Mem), From); - while I < MemSz - BufSz + 1 do - begin - if (not IsBadReadPtr(Mem, BufSz)) and (CompareMem(Mem, Buf, BufSz)) then - begin - SetLength(A, Length(A)+1); - A[Length(A)-1] := I; - end; - Inc(I); - Inc(PByte(Mem)); - end; -end;} - -function GetModuleVersion(const ModuleName: TFileName; var FileVersion: FILE_VERSION): Boolean; -type - VS_VERSIONINFO = record - wLength, wValueLength, wType: Word; - szKey: Array[1..16] of WideChar; - Padding1: Word; - Value: VS_FIXEDFILEINFO; - Padding2, Children: Word; - end; - PVS_VERSIONINFO = ^VS_VERSIONINFO; -const - VFF_DEBUG = 1; - VFF_PRERELEASE = 2; - VFF_PRIVATE = 8; - VFF_SPECIAL = 32; -var - hMod: HMODULE; - hResourceInfo: HRSRC; - VersionInfo: PVS_VERSIONINFO; -begin - Result := False; - - if ModuleName = '' then - hMod := GetModuleHandle(nil) - else - hMod := GetModuleHandle(PWideChar(ModuleName)); - if hMod = 0 then - Exit; - - hResourceInfo := FindResource(hMod, PWideChar(1), PWideChar($10)); - if hResourceInfo = 0 then - Exit; - - VersionInfo := Pointer(LoadResource(hMod, hResourceInfo)); - if VersionInfo = nil then - Exit; - - FileVersion.Version.dw := VersionInfo.Value.dwFileVersionMS; - FileVersion.Release := Word(VersionInfo.Value.dwFileVersionLS shr 16); - FileVersion.Build := Word(VersionInfo.Value.dwFileVersionLS); - FileVersion.bDebug := (VersionInfo.Value.dwFileFlags and VFF_DEBUG) = VFF_DEBUG; - FileVersion.bPrerelease := (VersionInfo.Value.dwFileFlags and VFF_PRERELEASE) = VFF_PRERELEASE; - FileVersion.bPrivate := (VersionInfo.Value.dwFileFlags and VFF_PRIVATE) = VFF_PRIVATE; - FileVersion.bSpecial := (VersionInfo.Value.dwFileFlags and VFF_SPECIAL) = VFF_SPECIAL; - - Result := True; -end; - -function GetFileVersion(const FileName: TFileName; var FileVersion: FILE_VERSION): Boolean; -type - VS_VERSIONINFO = record - wLength, wValueLength, wType: Word; - szKey: Array[1..16] of WideChar; - Padding1: Word; - Value: VS_FIXEDFILEINFO; - Padding2, Children: Word; - end; - PVS_VERSIONINFO = ^VS_VERSIONINFO; -const - VFF_DEBUG = 1; - VFF_PRERELEASE = 2; - VFF_PRIVATE = 8; - VFF_SPECIAL = 32; -var - hFile: HMODULE; - hResourceInfo: HRSRC; - VersionInfo: PVS_VERSIONINFO; -begin - Result := False; - - hFile := LoadLibraryEx(PWideChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE); - if hFile = 0 then - Exit; - - hResourceInfo := FindResource(hFile, PWideChar(1), PWideChar($10)); - if hResourceInfo = 0 then - Exit; - - VersionInfo := Pointer(LoadResource(hFile, hResourceInfo)); - if VersionInfo = nil then - Exit; - - FileVersion.Version.dw := VersionInfo.Value.dwFileVersionMS; - FileVersion.Release := Word(VersionInfo.Value.dwFileVersionLS shr 16); - FileVersion.Build := Word(VersionInfo.Value.dwFileVersionLS); - FileVersion.bDebug := (VersionInfo.Value.dwFileFlags and VFF_DEBUG) = VFF_DEBUG; - FileVersion.bPrerelease := (VersionInfo.Value.dwFileFlags and VFF_PRERELEASE) = VFF_PRERELEASE; - FileVersion.bPrivate := (VersionInfo.Value.dwFileFlags and VFF_PRIVATE) = VFF_PRIVATE; - FileVersion.bSpecial := (VersionInfo.Value.dwFileFlags and VFF_SPECIAL) = VFF_SPECIAL; - - Result := True; -end; - -function OverrideSL(ValueName: String; var Value: DWORD): Boolean; -begin - Result := True; - // Allow Remote Connections - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowRemoteConnections' then begin - Value := 1; - Exit; - end; - // Allow Multiple Sessions - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowMultipleSessions' then begin - Value := 1; - Exit; - end; - // Allow Multiple Sessions (Application Server Mode) - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowAppServerMode' then begin - Value := 1; - Exit; - end; - // Allow Multiple Monitors - if ValueName = 'TerminalServices-RemoteConnectionManager-AllowMultimon' then begin - Value := 1; - Exit; - end; - // Max User Sessions (0 = unlimited) - if ValueName = 'TerminalServices-RemoteConnectionManager-MaxUserSessions' then begin - Value := 0; - Exit; - end; - // Max Debug Sessions (Win 8, 0 = unlimited) - if ValueName = 'TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions' then begin - Value := 0; - Exit; - end; - // Max Sessions - // 0 - logon not possible even from console - // 1 - only one active user (console or remote) - // 2 - allow concurrent sessions - if ValueName = 'TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions' then begin - Value := 2; - Exit; - end; - // Allow Advanced Compression with RDP 7 Protocol - if ValueName = 'TerminalServices-RDP-7-Advanced-Compression-Allowed' then begin - Value := 1; - Exit; - end; - // IsTerminalTypeLocalOnly = 0 - if ValueName = 'TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly' then begin - Value := 0; - Exit; - end; - // Max Sessions (hard limit) - if ValueName = 'TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions' then begin - Value := 1000; - Exit; - end; - // Allow Easy Print - if ValueName = 'TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed' then begin - Value := 1; - Exit; - end; - Result := False; -end; - -function New_SLGetWindowsInformationDWORD(pwszValueName: PWideChar; - pdwValue: PDWORD): HRESULT; stdcall; -var - dw: DWORD; -begin - // wrapped SLGetWindowsInformationDWORD function - // termsrv.dll will call this function instead of original SLC.dll - - // Override SL Policy - - WriteLog('Policy query: ' + pwszValueName); - if OverrideSL(pwszValueName, dw) then begin - pdwValue^ := dw; - Result := S_OK; - WriteLog('Rewrite: ' + IntToStr(pdwValue^)); - Exit; - end; - - // If the requested value name is not defined above - - // revert to original SL Policy function - WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, - @Old_SLGetWindowsInformationDWORD, SizeOf(OldCode), bw); - - // get result - Result := SLGetWindowsInformationDWORD(pwszValueName, pdwValue); - if Result = S_OK then - WriteLog('Result: ' + IntToStr(pdwValue^)) - else - WriteLog('Failed'); - // wrap it back - WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, - @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); -end; - -function New_Win8SL(pwszValueName: PWideChar; pdwValue: PDWORD): HRESULT; register; -var - dw: DWORD; -begin - // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll - // for Windows 8 support - - // Override SL Policy - - WriteLog('Policy query: ' + pwszValueName); - if OverrideSL(pwszValueName, dw) then begin - pdwValue^ := dw; - Result := S_OK; - WriteLog('Rewrite: ' + IntToStr(pdwValue^)); - Exit; - end; - - // If the requested value name is not defined above - // use function from SLC.dll - - Result := SLGetWindowsInformationDWORD(pwszValueName, pdwValue); - if Result = S_OK then - WriteLog('Result: ' + IntToStr(pdwValue^)) - else - WriteLog('Failed'); -end; - -function New_Win8SL_CP(eax: DWORD; pdwValue: PDWORD; ecx: DWORD; pwszValueName: PWideChar): HRESULT; register; -begin - // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll - // for Windows 8 Consumer Preview support - - Result := New_Win8SL(pwszValueName, pdwValue); -end; - -function New_CSLQuery_Initialize: HRESULT; stdcall; -var - bServerSku, - bRemoteConnAllowed, - bFUSEnabled, - bAppServerAllowed, - bMultimonAllowed, - lMaxUserSessions, - ulMaxDebugSessions, - bInitialized: PDWORD; -begin - bServerSku := nil; - bRemoteConnAllowed := nil; - bFUSEnabled := nil; - bAppServerAllowed := nil; - bMultimonAllowed := nil; - lMaxUserSessions := nil; - ulMaxDebugSessions := nil; - bInitialized := nil; - WriteLog('> CSLQuery::Initialize'); - if (FV.Release = 9431) and (FV.Build = 0) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $A22A8); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $A22AC); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $A22B0); - bInitialized := Pointer(Cardinal(TermSrvBase) + $A22B4); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $A22B8); - bServerSku := Pointer(Cardinal(TermSrvBase) + $A22BC); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $A22C0); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $A22C4); - end; - if (FV.Release = 9600) and (FV.Build = 16384) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $C02A8); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $C02AC); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $C02B0); - bInitialized := Pointer(Cardinal(TermSrvBase) + $C02B4); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $C02B8); - bServerSku := Pointer(Cardinal(TermSrvBase) + $C02BC); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $C02C0); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $C02C4); - end; - if (FV.Release = 9600) and (FV.Build = 17095) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $C12A8); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $C12AC); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $C12B0); - bInitialized := Pointer(Cardinal(TermSrvBase) + $C12B4); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $C12B8); - bServerSku := Pointer(Cardinal(TermSrvBase) + $C12BC); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $C12C0); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $C12C4); - end; - if (FV.Release = 9841) and (FV.Build = 0) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $BF9F0); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $BF9F4); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $BF9F8); - bInitialized := Pointer(Cardinal(TermSrvBase) + $BF9FC); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $BFA00); - bServerSku := Pointer(Cardinal(TermSrvBase) + $BFA04); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $BFA08); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $BFA0C); - end; - if (FV.Release = 9860) and (FV.Build = 0) then begin - bFUSEnabled := Pointer(Cardinal(TermSrvBase) + $BF7E0); - lMaxUserSessions := Pointer(Cardinal(TermSrvBase) + $BF7E4); - bAppServerAllowed := Pointer(Cardinal(TermSrvBase) + $BF7E8); - bInitialized := Pointer(Cardinal(TermSrvBase) + $BF7EC); - bMultimonAllowed := Pointer(Cardinal(TermSrvBase) + $BF7F0); - bServerSku := Pointer(Cardinal(TermSrvBase) + $BF7F4); - ulMaxDebugSessions := Pointer(Cardinal(TermSrvBase) + $BF7F8); - bRemoteConnAllowed := Pointer(Cardinal(TermSrvBase) + $BF7FC); - end; - if bServerSku <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bServerSku), 1)+'] bServerSku = 1'); - bServerSku^ := 1; - end; - if bRemoteConnAllowed <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bRemoteConnAllowed), 1)+'] bRemoteConnAllowed = 1'); - bRemoteConnAllowed^ := 1; - end; - if bFUSEnabled <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bFUSEnabled), 1)+'] bFUSEnabled = 1'); - bFUSEnabled^ := 1; - end; - if bAppServerAllowed <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bAppServerAllowed), 1)+'] bAppServerAllowed = 1'); - bAppServerAllowed^ := 1; - end; - if bMultimonAllowed <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bMultimonAllowed), 1)+'] bMultimonAllowed = 1'); - bMultimonAllowed^ := 1; - end; - if lMaxUserSessions <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(lMaxUserSessions), 1)+'] lMaxUserSessions = 0'); - lMaxUserSessions^ := 0; - end; - if ulMaxDebugSessions <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(ulMaxDebugSessions), 1)+'] ulMaxDebugSessions = 0'); - ulMaxDebugSessions^ := 0; - end; - if bInitialized <> nil then begin - WriteLog('[0x'+IntToHex(DWORD(bInitialized), 1)+'] bInitialized = 1'); - bInitialized^ := 1; - end; - Result := S_OK; -end; - -procedure HookFunctions; -var - V: DWORD; - TS_Handle, SLC_Handle: THandle; - TermSrvSize: DWORD; - SignPtr: Pointer; - Results: IntArray; - Jump: far_jmp; - MovJump: mov_far_jmp; - nop: DWORD; - b: Byte; -begin - { hook function ^^ - (called once) } - IsHooked := True; - nop := $90909090; - TSMain := nil; - TSGlobals := nil; - SLGetWindowsInformationDWORD := nil; - WriteLog('init'); - - // load termsrv.dll and get functions - TS_Handle := LoadLibrary('termsrv.dll'); - if TS_Handle = 0 then begin - WriteLog('Error: Failed to load Terminal Services library'); - Exit; - end; - WriteLog('Base addr: 0x'+IntToHex(TS_Handle, 8)); - TSMain := GetProcAddress(TS_Handle, 'ServiceMain'); - WriteLog('SvcMain: termsrv.dll+0x'+IntToHex(Cardinal(@TSMain) - TS_Handle, 1)); - TSGlobals := GetProcAddress(TS_Handle, 'SvchostPushServiceGlobals'); - WriteLog('SvcGlobals: termsrv.dll+0x'+IntToHex(Cardinal(@TSGlobals) - TS_Handle, 1)); - - V := 0; - // check termsrv version - if GetModuleVersion('termsrv.dll', FV) then - V := Byte(FV.Version.w.Minor) or (Byte(FV.Version.w.Major) shl 8) - else begin - // check NT version - // V := GetVersion; // deprecated - // V := ((V and $FF) shl 8) or ((V and $FF00) shr 8); - end; - if V = 0 then begin - WriteLog('Error: Failed to detect Terminal Services version'); - Exit; - end; - - WriteLog('Version: '+IntToStr(FV.Version.w.Major)+'.'+IntToStr(FV.Version.w.Minor)); - WriteLog('Release: '+IntToStr(FV.Release)); - WriteLog('Build: '+IntToStr(FV.Build)); - - // temporarily freeze threads - WriteLog('freeze'); - StopThreads(); - - if (V = $0600) then begin - // Windows Vista - // uses SL Policy API (slc.dll) - - // load slc.dll and hook function - SLC_Handle := LoadLibrary('slc.dll'); - SLGetWindowsInformationDWORD := GetProcAddress(SLC_Handle, 'SLGetWindowsInformationDWORD'); - - if @SLGetWindowsInformationDWORD <> nil then - begin - // rewrite original function to call our function (make hook) - - WriteLog('Hook SLGetWindowsInformationDWORD'); - Stub_SLGetWindowsInformationDWORD.PushOp := $68; - Stub_SLGetWindowsInformationDWORD.PushArg := @New_SLGetWindowsInformationDWORD; - Stub_SLGetWindowsInformationDWORD.RetOp := $C3; - ReadProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, - @Old_SLGetWindowsInformationDWORD, SizeOf(OldCode), bw); - WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, - @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); - end; - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release = 6000) and (FV.Build = 16386) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F320000 - .text:6F3360B9 lea eax, [ebp+VersionInformation] - .text:6F3360BF inc ebx <- nop - .text:6F3360C0 push eax ; lpVersionInformation - .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F3360CB mov [esi], ebx - .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $160BF); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $15CD8); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6001) and (FV.Build = 18000) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6E800000 - .text:6E8185DE lea eax, [ebp+VersionInformation] - .text:6E8185E4 inc ebx <- nop - .text:6E8185E5 push eax ; lpVersionInformation - .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6E8185F0 mov [esi], ebx - .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $185E4); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FD8); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6002) and (FV.Build = 18005) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F580000 - .text:6F597FA2 lea eax, [ebp+VersionInformation] - .text:6F597FA8 inc ebx <- nop - .text:6F597FA9 push eax ; lpVersionInformation - .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FB4 mov [esi], ebx - .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FA8); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $179C0); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6002) and (FV.Build = 19214) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F580000 - .text:6F597FBE lea eax, [ebp+VersionInformation] - .text:6F597FC4 inc ebx <- nop - .text:6F597FC5 push eax ; lpVersionInformation - .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FD0 mov [esi], ebx - .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FC4); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $179B8); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - if (FV.Release = 6002) and (FV.Build = 23521) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F580000 - .text:6F597FAE lea eax, [ebp+VersionInformation] - .text:6F597FB4 inc ebx <- nop - .text:6F597FB5 push eax ; lpVersionInformation - .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FC0 mov [esi], ebx - .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $17FB4); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $179CC); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_edx_ecx[0], - SizeOf(CDefPolicy_Query_edx_ecx), bw); - end; - end; - end; - if (V = $0601) then begin - // Windows 7 - // uses SL Policy API (slc.dll) - - // load slc.dll and hook function - SLC_Handle := LoadLibrary('slc.dll'); - SLGetWindowsInformationDWORD := GetProcAddress(SLC_Handle, 'SLGetWindowsInformationDWORD'); - - if @SLGetWindowsInformationDWORD <> nil then - begin - // rewrite original function to call our function (make hook) - - WriteLog('Hook SLGetWindowsInformationDWORD'); - Stub_SLGetWindowsInformationDWORD.PushOp := $68; - Stub_SLGetWindowsInformationDWORD.PushArg := @New_SLGetWindowsInformationDWORD; - Stub_SLGetWindowsInformationDWORD.RetOp := $C3; - ReadProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, - @Old_SLGetWindowsInformationDWORD, SizeOf(OldCode), bw); - WriteProcessMemory(GetCurrentProcess, @SLGetWindowsInformationDWORD, - @Stub_SLGetWindowsInformationDWORD, SizeOf(far_jmp), bw); - end; - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release = 7600) and (FV.Build = 16385) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2F9E1F lea eax, [ebp+VersionInformation] - .text:6F2F9E25 inc ebx <- nop - .text:6F2F9E26 push eax ; lpVersionInformation - .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2F9E31 mov [esi], ebx - .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $19E25); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $196F3); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 17514) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA497 lea eax, [ebp+VersionInformation] - .text:6F2FA49D inc ebx <- nop - .text:6F2FA49E push eax ; lpVersionInformation - .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4A9 mov [esi], ebx - .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A49D); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19D53); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 18540) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA4DF lea eax, [ebp+VersionInformation] - .text:6F2FA4E5 inc ebx <- nop - .text:6F2FA4E6 push eax ; lpVersionInformation - .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4F1 mov [esi], ebx - .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4E5); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19D9F); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 22750) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19E21); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 18637) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA4D7 lea eax, [ebp+VersionInformation] - .text:6F2FA4DD inc ebx <- nop - .text:6F2FA4DE push eax ; lpVersionInformation - .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4E9 mov [esi], ebx - .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A4DD); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19DBB); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - if (FV.Release = 7601) and (FV.Build = 22843) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A655); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19E25); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - end; - end; - end; - if V = $0602 then begin - // Windows 8 - // uses SL Policy internal unexported function - - // load slc.dll and get function - // (will be used on intercepting undefined values) - SLC_Handle := LoadLibrary('slc.dll'); - SLGetWindowsInformationDWORD := GetProcAddress(SLC_Handle, 'SLGetWindowsInformationDWORD'); - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // SLGetWindowsInformationDWORDWrapper - - if (FV.Release = 8102) and (FV.Build = 0) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1000F7E5 lea eax, [esp+150h+VersionInformation] - .text:1000F7E9 inc esi <- nop - .text:1000F7EA push eax ; lpVersionInformation - .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1000F7F3 mov [edi], esi - .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $F7E9); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $E47C); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1B909); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 8250) and (FV.Build = 0) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:100159C5 lea eax, [esp+150h+VersionInformation] - .text:100159C9 inc esi <- nop - .text:100159CA push eax ; lpVersionInformation - .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:100159D3 mov [edi], esi - .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $159C9); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13520); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1A0A9); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL_CP; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 8400) and (FV.Build = 0) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1001547E lea eax, [esp+150h+VersionInformation] - .text:10015482 inc esi <- nop - .text:10015483 push eax ; lpVersionInformation - .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001548C mov [edi], esi - .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $15482); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13E48); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19629); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 9200) and (FV.Build = 16384) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1001554E lea eax, [esp+150h+VersionInformation] - .text:10015552 inc esi <- nop - .text:10015553 push eax ; lpVersionInformation - .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001555C mov [edi], esi - .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $15552); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13F08); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19559); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 9200) and (FV.Build = 17048) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:1002058E lea eax, [esp+150h+VersionInformation] - .text:10020592 inc esi <- nop - .text:10020593 push eax ; lpVersionInformation - .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1002059C mov [edi], esi - .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $20592); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1F408); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $17059); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - if (FV.Release = 9200) and (FV.Build = 21166) then begin - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10015576 lea eax, [esp+150h+VersionInformation] - .text:1001557A inc esi <- nop - .text:1001557B push eax ; lpVersionInformation - .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:10015584 mov [edi], esi - .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $1557A); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $13F30); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_esi[0], - SizeOf(CDefPolicy_Query_eax_esi), bw); - - WriteLog('Hook SLGetWindowsInformationDWORDWrapper'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $19581); - MovJump.MovOp := $89; // mov eax, ecx - MovJump.MovArg := $C8; // __msfastcall compatibility - MovJump.PushOp := $68; - MovJump.PushArg := @New_Win8SL; - MovJump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @MovJump, SizeOf(mov_far_jmp), bw); - end; - end; - end; - if V = $0603 then begin - // Windows 8.1 - // uses SL Policy internal inline code - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release = 9431) and (FV.Build = 0) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:1008A609 test eax, eax - .text:1008A60B js short loc_1008A628 - .text:1008A60D cmp [ebp+var_8], 0 - .text:1008A611 jz short loc_1008A628 <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $8A611); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:100306A4 lea eax, [esp+150h+VersionInformation] - .text:100306A8 inc ebx <- nop - .text:100306A9 mov [edi], ebx - .text:100306AB push eax ; lpVersionInformation - .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $306A8); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $2EA25); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $196B0); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - if (FV.Release = 9600) and (FV.Build = 16384) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A2721 test eax, eax - .text:100A2723 js short loc_100A2740 - .text:100A2725 cmp [ebp+var_8], 0 - .text:100A2729 jz short loc_100A2740 <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $A2729); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10018024 lea eax, [esp+150h+VersionInformation] - .text:10018028 inc ebx <- nop - .text:10018029 mov [edi], ebx - .text:1001802B push eax ; lpVersionInformation - .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $18028); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $16115); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $1CEB0); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - if (FV.Release = 9600) and (FV.Build = 17095) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A36C9 test eax, eax - .text:100A36CB js short loc_100A36E8 - .text:100A36CD cmp [ebp+var_8], 0 - .text:100A36D1 jz short loc_100A36E8 <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $A36D1); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10036BA5 lea eax, [esp+150h+VersionInformation] - .text:10036BA9 inc ebx <- nop - .text:10036BAA mov [edi], ebx - .text:10036BAC push eax ; lpVersionInformation - .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $36BA9); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $37529); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $117F1); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - - end; - end; - if V = $0604 then begin - // Windows 10 - // uses SL Policy internal inline code - - if GetModuleAddress('termsrv.dll', GetCurrentProcessId, TermSrvBase, TermSrvSize) then begin - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release = 9841) and (FV.Build = 0) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:1009569B call sub_100B7EE5 - .text:100956A0 test eax, eax - .text:100956A2 js short loc_100956BF - .text:100956A4 cmp [ebp+var_C], 0 - .text:100956A8 jz short loc_100956BF <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $956A8); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10030121 lea eax, [esp+150h+VersionInformation] - .text:10030125 inc ebx <- nop - .text:10030126 mov [edi], ebx - .text:10030128 push eax ; lpVersionInformation - .text:10030129 call ds:GetVersionExW - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $30125); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $3B989); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $46A68); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - - if (FV.Release = 9860) and (FV.Build = 0) then begin - WriteLog('Patch CEnforcementCore::GetInstanceOfTSLicense'); - { - .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100962C0 test eax, eax - .text:100962C2 js short loc_100962DF - .text:100962C4 cmp [ebp+var_C], 0 - .text:100962C8 jz short loc_100962DF <- jmp - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $962C8); - b := $EB; - WriteProcessMemory(GetCurrentProcess, SignPtr, @b, 1, bw); - - WriteLog('Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled'); - { - .text:10030841 lea eax, [esp+150h+VersionInformation] - .text:10030845 inc ebx <- nop - .text:10030846 mov [edi], ebx - .text:10030848 push eax ; lpVersionInformation - .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - } - SignPtr := Pointer(Cardinal(TermSrvBase) + $30845); - WriteProcessMemory(GetCurrentProcess, SignPtr, @nop, 1, bw); - - WriteLog('Patch CDefPolicy::Query'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $3BEC9); - WriteProcessMemory(GetCurrentProcess, SignPtr, - @CDefPolicy_Query_eax_ecx[0], - SizeOf(CDefPolicy_Query_eax_ecx), bw); - - WriteLog('Hook CSLQuery::Initialize'); - SignPtr := Pointer(Cardinal(TermSrvBase) + $46F18); - Jump.PushOp := $68; - Jump.PushArg := @New_CSLQuery_Initialize; - Jump.RetOp := $C3; - WriteProcessMemory(GetCurrentProcess, SignPtr, - @Jump, SizeOf(far_jmp), bw); - end; - - end; - end; - - // unfreeze threads - WriteLog('resume'); - RunThreads(); -end; - -function TermServiceMain(dwArgc: DWORD; lpszArgv: PWideChar): DWORD; stdcall; -begin - // wrap ServiceMain function - WriteLog('> ServiceMain'); - if not IsHooked then - HookFunctions; - Result := 0; - if @TSMain <> nil then - Result := TSMain(dwArgc, lpszArgv); -end; - -function TermServiceGlobals(lpGlobalData: Pointer): DWORD; stdcall; -begin - // wrap SvchostPushServiceGlobals function - WriteLog('> SvchostPushServiceGlobals'); - if not IsHooked then - HookFunctions; - Result := 0; - if @TSGlobals <> nil then - Result := TSGlobals(lpGlobalData); -end; - -// export section - -exports - TermServiceMain index 1 name 'ServiceMain'; -exports - TermServiceGlobals index 2 name 'SvchostPushServiceGlobals'; - -begin - // DllMain procedure is not used -end. \ No newline at end of file diff --git a/src-x86-x64-Fusix/RDPWrap-old.cpp b/src-x86-x64-Fusix/RDPWrap-old.cpp deleted file mode 100644 index e424029..0000000 --- a/src-x86-x64-Fusix/RDPWrap-old.cpp +++ /dev/null @@ -1,2523 +0,0 @@ -/* - Copyright 2014 Stas'M Corp. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "stdafx.h" - -typedef struct -{ - union - { - struct - { - WORD Minor; - WORD Major; - } wVersion; - DWORD dwVersion; - }; - WORD Release; - WORD Build; -} FILE_VERSION; - -#ifdef _WIN64 -typedef unsigned long long PLATFORM_DWORD; -struct FARJMP -{ // x64 far jump | opcode | assembly - BYTE MovOp; // 48 mov rax, ptr - BYTE MovRegArg; // B8 - DWORD64 MovArg; // PTR - BYTE PushRaxOp; // 50 push rax - BYTE RetOp; // C3 retn -}; -// x64 signatures -char CDefPolicy_Query_eax_rcx_jmp[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x38, 0x06, 0x00, 0x00, 0x90, 0xEB}; -char CDefPolicy_Query_eax_rdi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x87, 0x38, 0x06, 0x00, 0x00, 0x90}; -char CDefPolicy_Query_eax_rcx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x38, 0x06, 0x00, 0x00, 0x90}; - -/* -termsrv.dll 6.0.6000.16386 - -Original -.text:000007FF7573C88F mov eax, [rcx+638h] -.text:000007FF7573C895 cmp [rcx+63Ch], eax -.text:000007FF7573C89B jnz short loc_7FF7573C8B3 -_______________ - -Changed -.text:000007FF7573C88F mov eax, 100h -.text:000007FF7573C894 mov [rcx+638h], eax -.text:000007FF7573C89A nop -.text:000007FF7573C89B jmp short loc_7FF7573C8B3 -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6001.18000 - -Original -.text:000007FF76285BD7 mov eax, [rcx+638h] -.text:000007FF76285BDD cmp [rcx+63Ch], eax -.text:000007FF76285BE3 jnz short loc_7FF76285BFB -_______________ - -Changed -.text:000007FF76285BD7 mov eax, 100h -.text:000007FF76285BDC mov [rcx+638h], eax -.text:000007FF76285BE2 nop -.text:000007FF76285BE3 jmp short loc_7FF76285BFB -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6002.18005 - -Original -.text:000007FF76725E83 mov eax, [rcx+638h] -.text:000007FF76725E89 cmp [rcx+63Ch], eax -.text:000007FF76725E8F jz short loc_7FF76725EA7 -_______________ - -Changed -.text:000007FF76725E83 mov eax, 100h -.text:000007FF76725E88 mov [rcx+638h], eax -.text:000007FF76725E8E nop -.text:000007FF76725E8F jmp short loc_7FF76725EA7 -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6002.19214 - -Original -.text:000007FF75B25FF7 mov eax, [rcx+638h] -.text:000007FF75B25FFD cmp [rcx+63Ch], eax -.text:000007FF75B26003 jnz short loc_7FF75B2601B -_______________ - -Changed -.text:000007FF75B25FF7 mov eax, 100h -.text:000007FF75B25FFC mov [rcx+638h], eax -.text:000007FF75B26002 nop -.text:000007FF75B26003 jmp short loc_7FF75B2601B -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.0.6002.23521 - -Original -.text:000007FF75B269CB mov eax, [rcx+638h] -.text:000007FF75B269D1 cmp [rcx+63Ch], eax -.text:000007FF75B269D7 jnz short loc_7FF75B269EF -_______________ - -Changed -.text:000007FF75B269CB mov eax, 100h -.text:000007FF75B269D0 mov [rcx+638h], eax -.text:000007FF75B269D6 nop -.text:000007FF75B269D7 jmp short loc_7FF75B269EF -char CDefPolicy_Query_eax_rcx_jmp[] - -termsrv.dll 6.1.7600.16385 - -Original -.text:000007FF75A97AD2 cmp [rdi+63Ch], eax -.text:000007FF75A97AD8 jz loc_7FF75AA4978 -_______________ - -Changed -.text:000007FF75A97AD2 mov eax, 100h -.text:000007FF75A97AD7 mov [rdi+638h], eax -.text:000007FF75A97ADD nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.17514 - -Original -.text:000007FF75A97D8A cmp [rdi+63Ch], eax -.text:000007FF75A97D90 jz loc_7FF75AA40F4 -_______________ - -Changed -.text:000007FF75A97D8A mov eax, 100h -.text:000007FF75A97D8F mov [rdi+638h], eax -.text:000007FF75A97D95 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.18540 - -Original -.text:000007FF75A97C82 cmp [rdi+63Ch], eax -.text:000007FF75A97C88 jz loc_7FF75AA3FBD -_______________ - -Changed -.text:000007FF75A97C82 mov eax, 100h -.text:000007FF75A97C87 mov [rdi+638h], eax -.text:000007FF75A97C8D nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.22750 - -Original -.text:000007FF75A97C92 cmp [rdi+63Ch], eax -.text:000007FF75A97C98 jz loc_7FF75AA40A2 -_______________ - -Changed -.text:000007FF75A97C92 mov eax, 100h -.text:000007FF75A97C97 mov [rdi+638h], eax -.text:000007FF75A97C9D nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.18637 - -Original -.text:000007FF75A97DC6 cmp [rdi+63Ch], eax -.text:000007FF75A97DCC jz loc_7FF75AA40BD -_______________ - -Changed -.text:000007FF75A97DC6 mov eax, 100h -.text:000007FF75A97DCB mov [rdi+638h], eax -.text:000007FF75A97DD1 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.1.7601.22843 - -Original -.text:000007FF75A97D6E cmp [rdi+63Ch], eax -.text:000007FF75A97D74 jz loc_7FF75AA4182 -_______________ - -Changed -.text:000007FF75A97D6E mov eax, 100h -.text:000007FF75A97D73 mov [rdi+638h], eax -.text:000007FF75A97D79 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.8102.0 - -Original -.text:000000018000D3E6 cmp [rdi+63Ch], eax -.text:000000018000D3EC jz loc_180027792 -_______________ - -Changed -.text:000000018000D3E6 mov eax, 100h -.text:000000018000D3EB mov [rdi+638h], eax -.text:000000018000D3F1 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.8250.0 - -Original -.text:000000018001187A cmp [rdi+63Ch], eax -.text:0000000180011880 jz loc_1800273A2 -_______________ - -Changed -.text:000000018001187A mov eax, 100h -.text:000000018001187F mov [rdi+638h], eax -.text:0000000180011885 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.8400.0 - -Original -.text:000000018001F102 cmp [rdi+63Ch], eax -.text:000000018001F108 jz loc_18003A02E -_______________ - -Changed -.text:000000018001F102 mov eax, 100h -.text:000000018001F107 mov [rdi+638h], eax -.text:000000018001F10D nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.9200.16384 - -Original -.text:000000018002A31A cmp [rdi+63Ch], eax -.text:000000018002A320 jz loc_18003A0F9 -_______________ - -Changed -.text:000000018002A31A mov eax, 100h -.text:000000018002A31F mov [rdi+638h], eax -.text:000000018002A325 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.9200.17048 - -Original -.text:000000018001F206 cmp [rdi+63Ch], eax -.text:000000018001F20C jz loc_18003A1B4 -_______________ - -Changed -.text:000000018001F206 mov eax, 100h -.text:000000018001F20B mov [rdi+638h], eax -.text:000000018001F211 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.2.9200.21166 - -Original -.text:000000018002A3B6 cmp [rdi+63Ch], eax -.text:000000018002A3BC jz loc_18003A174 -_______________ - -Changed -.text:000000018002A3B6 mov eax, 100h -.text:000000018002A3BB mov [rdi+638h], eax -.text:000000018002A3C1 nop -char CDefPolicy_Query_eax_rdi[] - -termsrv.dll 6.3.9431.0 - -Original -.text:00000001800350FD cmp [rcx+63Ch], eax -.text:0000000180035103 jz loc_18004F6AE -_______________ - -Changed -.text:00000001800350FD mov eax, 100h -.text:0000000180035102 mov [rcx+638h], eax -.text:0000000180035108 nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.3.9600.16384 - -Original -.text:0000000180057829 cmp [rcx+63Ch], eax -.text:000000018005782F jz loc_18005E850 -_______________ - -Changed -.text:0000000180057829 mov eax, 100h -.text:000000018005782E mov [rcx+638h], eax -.text:0000000180057834 nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.3.9600.17095 - -Original -.text:000000018001F6A1 cmp [rcx+63Ch], eax -.text:000000018001F6A7 jz loc_18007284B -_______________ - -Changed -.text:000000018001F6A1 mov eax, 100h -.text:000000018001F6A6 mov [rcx+638h], eax -.text:000000018001F6AC nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.4.9841.0 - -Original -.text:000000018000C125 cmp [rcx+63Ch], eax -.text:000000018000C12B jz sub_18003BABC -_______________ - -Changed -.text:000000018000C125 mov eax, 100h -.text:000000018000C12A mov [rcx+638h], eax -.text:000000018000C130 nop -char CDefPolicy_Query_eax_rcx[] - -termsrv.dll 6.4.9860.0 - -Original -.text:000000018000B9F5 cmp [rcx+63Ch], eax -.text:000000018000B9FB jz sub_18003B9C8 -_______________ - -Changed -.text:000000018000B9F5 mov eax, 100h -.text:000000018000B9FA mov [rcx+638h], eax -.text:000000018000BA00 nop -char CDefPolicy_Query_eax_rcx[] -*/ - -#else -typedef unsigned long PLATFORM_DWORD; -struct FARJMP -{ // x86 far jump | opcode | assembly - BYTE PushOp; // 68 push ptr - DWORD PushArg; // PTR - BYTE RetOp; // C3 retn -}; -// x86 signatures -char CDefPolicy_Query_edx_ecx[] = {0xBA, 0x00, 0x01, 0x00, 0x00, 0x89, 0x91, 0x20, 0x03, 0x00, 0x00, 0x5E, 0x90}; -char CDefPolicy_Query_eax_esi[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x86, 0x20, 0x03, 0x00, 0x00, 0x90}; -char CDefPolicy_Query_eax_ecx[] = {0xB8, 0x00, 0x01, 0x00, 0x00, 0x89, 0x81, 0x20, 0x03, 0x00, 0x00, 0x90}; - -/* -termsrv.dll 6.0.6000.16386 - -Original -.text:6F335CD8 cmp edx, [ecx+320h] -.text:6F335CDE pop esi -.text:6F335CDF jz loc_6F3426F1 -_______________ - -Changed -.text:6F335CD8 mov edx, 100h -.text:6F335CDD mov [ecx+320h], edx -.text:6F335CE3 pop esi -.text:6F335CE4 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6001.18000 - -Original -.text:6E817FD8 cmp edx, [ecx+320h] -.text:6E817FDE pop esi -.text:6E817FDF jz loc_6E826F16 -_______________ - -Changed -.text:6E817FD8 mov edx, 100h -.text:6E817FDD mov [ecx+320h], edx -.text:6E817FE3 pop esi -.text:6E817FE4 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6002.18005 - -Original -.text:6F5979C0 cmp edx, [ecx+320h] -.text:6F5979C6 pop esi -.text:6F5979C7 jz loc_6F5A6F26 -_______________ - -Changed -.text:6F5979C0 mov edx, 100h -.text:6F5979C5 mov [ecx+320h], edx -.text:6F5979CB pop esi -.text:6F5979CC nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6002.19214 - -Original -.text:6F5979B8 cmp edx, [ecx+320h] -.text:6F5979BE pop esi -.text:6F5979BF jz loc_6F5A6F3E -_______________ - -Changed -.text:6F5979B8 mov edx, 100h -.text:6F5979BD mov [ecx+320h], edx -.text:6F5979C3 pop esi -.text:6F5979C4 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.0.6002.23521 - -Original -.text:6F5979CC cmp edx, [ecx+320h] -.text:6F5979D2 pop esi -.text:6F5979D3 jz loc_6F5A6F2E -_______________ - -Changed -.text:6F5979CC mov edx, 100h -.text:6F5979D1 mov [ecx+320h], edx -.text:6F5979D7 pop esi -.text:6F5979D8 nop -char CDefPolicy_Query_edx_ecx[] - -termsrv.dll 6.1.7600.16385 - -Original -.text:6F2F96F3 cmp eax, [esi+320h] -.text:6F2F96F9 jz loc_6F30E256 -_______________ - -Changed -.text:6F2F96F3 mov eax, 100h -.text:6F2F96F8 mov [esi+320h], eax -.text:6F2F96FE nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.17514 - -Original -.text:6F2F9D53 cmp eax, [esi+320h] -.text:6F2F9D59 jz loc_6F30B25E -_______________ - -Changed -.text:6F2F9D53 mov eax, 100h -.text:6F2F9D58 mov [esi+320h], eax -.text:6F2F9D5E nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.18540 - -Original -.text:6F2F9D9F cmp eax, [esi+320h] -.text:6F2F9DA5 jz loc_6F30B2AE -_______________ - -Changed -.text:6F2F9D9F mov eax, 100h -.text:6F2F9DA4 mov [esi+320h], eax -.text:6F2F9DAA nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.22750 - -Original -.text:6F2F9E21 cmp eax, [esi+320h] -.text:6F2F9E27 jz loc_6F30B6CE -_______________ - -Changed -.text:6F2F9E21 mov eax, 100h -.text:6F2F9E26 mov [esi+320h], eax -.text:6F2F9E2C nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.18637 - -Original -.text:6F2F9DBB cmp eax, [esi+320h] -.text:6F2F9DC1 jz loc_6F30B2A6 -_______________ - -Changed -.text:6F2F9DBB mov eax, 100h -.text:6F2F9DC0 mov [esi+320h], eax -.text:6F2F9DC6 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.1.7601.22843 - -Original -.text:6F2F9E25 cmp eax, [esi+320h] -.text:6F2F9E2B jz loc_6F30B6D6 -_______________ - -Changed -.text:6F2F9E25 mov eax, 100h -.text:6F2F9E2A mov [esi+320h], eax -.text:6F2F9E30 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.8102.0 - -Original -.text:1000E47C cmp eax, [esi+320h] -.text:1000E482 jz loc_1002D775 -_______________ - -Changed -.text:1000E47C mov eax, 100h -.text:1000E481 mov [esi+320h], eax -.text:1000E487 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.8250.0 - -Original -.text:10013520 cmp eax, [esi+320h] -.text:10013526 jz loc_1002DB85 -_______________ - -Changed -.text:10013520 mov eax, 100h -.text:10013525 mov [esi+320h], eax -.text:1001352B nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.8400.0 - -Original -.text:10013E48 cmp eax, [esi+320h] -.text:10013E4E jz loc_1002E079 -_______________ - -Changed -.text:10013E48 mov eax, 100h -.text:10013E4D mov [esi+320h], eax -.text:10013E53 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.9200.16384 - -Original -.text:10013F08 cmp eax, [esi+320h] -.text:10013F0E jz loc_1002E161 -_______________ - -Changed -.text:10013F08 mov eax, 100h -.text:10013F0D mov [esi+320h], eax -.text:10013F13 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.9200.17048 - -Original -.text:1001F408 cmp eax, [esi+320h] -.text:1001F40E jz loc_1002E201 -_______________ - -Changed -.text:1001F408 mov eax, 100h -.text:1001F40D mov [esi+320h], eax -.text:1001F413 nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.2.9200.21166 - -Original -.text:10013F30 cmp eax, [esi+320h] -.text:10013F36 jz loc_1002E189 -_______________ - -Changed -.text:10013F30 mov eax, 100h -.text:10013F35 mov [esi+320h], eax -.text:10013F3B nop -char CDefPolicy_Query_eax_esi[] - -termsrv.dll 6.3.9431.0 - -Original -.text:1002EA25 cmp eax, [ecx+320h] -.text:1002EA2B jz loc_100348C1 -_______________ - -Changed -.text:1002EA25 mov eax, 100h -.text:1002EA2A mov [ecx+320h], eax -.text:1002EA30 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.3.9600.16384 - -Original -.text:10016115 cmp eax, [ecx+320h] -.text:1001611B jz loc_10034DE1 -_______________ - -Changed -.text:10016115 mov eax, 100h -.text:1001611A mov [ecx+320h], eax -.text:10016120 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.3.9600.17095 - -Original -.text:10037529 cmp eax, [ecx+320h] -.text:1003752F jz loc_10043662 -_______________ - -Changed -.text:10037529 mov eax, 100h -.text:1003752E mov [ecx+320h], eax -.text:10037534 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.4.9841.0 - -Original -.text:1003B989 cmp eax, [ecx+320h] -.text:1003B98F jz loc_1005E809 -_______________ - -Changed -.text:1003B989 mov eax, 100h -.text:1003B98E mov [ecx+320h], eax -.text:1003B994 nop -char CDefPolicy_Query_eax_ecx[] - -termsrv.dll 6.4.9860.0 - -Original -.text:1003BEC9 cmp eax, [ecx+320h] -.text:1003BECF jz loc_1005EE1A -_______________ - -Changed -.text:1003BEC9 mov eax, 100h -.text:1003BECE mov [ecx+320h], eax -.text:1003BED4 nop -char CDefPolicy_Query_eax_ecx[] -*/ - -#endif - -FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; -SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; - -HMODULE hTermSrv; -HMODULE hSLC; -PLATFORM_DWORD TermSrvBase; -FILE_VERSION FV; -SERVICEMAIN _ServiceMain; -SVCHOSTPUSHSERVICEGLOBALS _SvchostPushServiceGlobals; -bool AlreadyHooked = false; - -void WriteToLog(LPSTR Text) -{ - DWORD dwBytesOfWritten; - - HANDLE hFile = CreateFile(L"\\rdpwrap.txt", GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if (hFile == INVALID_HANDLE_VALUE) return; - - SetFilePointer(hFile, 0, 0, FILE_END); - WriteFile(hFile, Text, strlen(Text), &dwBytesOfWritten, NULL); - CloseHandle(hFile); -} - -PLATFORM_DWORD SearchAddressBySignature(char *StartPosition, PLATFORM_DWORD Size, char *Signature, int SignatureSize) -{ - PLATFORM_DWORD AddressReturn = -1; - - for (PLATFORM_DWORD i = 0; i < Size; i++) - { - for (int j = 0; StartPosition[i+j] == Signature[j] && j < SignatureSize; j++) - { - if (j == SignatureSize-1) AddressReturn = (PLATFORM_DWORD)&StartPosition[i]; - } - } - - return AddressReturn; -} - -bool GetModuleCodeSectionInfo(HMODULE hModule, PLATFORM_DWORD *BaseAddr, PLATFORM_DWORD *BaseSize) -{ - PIMAGE_DOS_HEADER pDosHeader; - PIMAGE_FILE_HEADER pFileHeader; - PIMAGE_OPTIONAL_HEADER pOptionalHeader; - - if (hModule == NULL) return false; - - pDosHeader = (PIMAGE_DOS_HEADER)hModule; - pFileHeader = (PIMAGE_FILE_HEADER)(((PBYTE)hModule)+pDosHeader->e_lfanew+4); - pOptionalHeader = (PIMAGE_OPTIONAL_HEADER)(pFileHeader+1); - - *BaseAddr = (PLATFORM_DWORD)hModule; - *BaseSize = (PLATFORM_DWORD)pOptionalHeader->SizeOfCode; - - if (*BaseAddr <= 0 || *BaseSize <= 0) return false; - return true; -} - -void SetThreadsState(bool Resume) -{ - HANDLE h, hThread; - DWORD CurrTh, CurrPr; - THREADENTRY32 Thread; - - CurrTh = GetCurrentThreadId(); - CurrPr = GetCurrentProcessId(); - - h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); - if (h != INVALID_HANDLE_VALUE) - { - Thread.dwSize = sizeof(THREADENTRY32); - Thread32First(h, &Thread); - do - { - if (Thread.th32ThreadID != CurrTh && Thread.th32OwnerProcessID == CurrPr) - { - hThread = OpenThread(THREAD_SUSPEND_RESUME, false, Thread.th32ThreadID); - if (hThread != INVALID_HANDLE_VALUE) - { - if (Resume) ResumeThread(hThread); - else SuspendThread(hThread); - CloseHandle(hThread); - } - } - } while (Thread32Next(h, &Thread)); - CloseHandle(h); - } -} - -BOOL __stdcall GetModuleVersion(LPCWSTR lptstrModuleName, FILE_VERSION *FileVersion) -{ - typedef struct - { - WORD wLength; - WORD wValueLength; - WORD wType; - WCHAR szKey[16]; - WORD Padding1; - VS_FIXEDFILEINFO Value; - WORD Padding2; - WORD Children; - } VS_VERSIONINFO; - - HMODULE hMod = GetModuleHandle(lptstrModuleName); - if(!hMod) - { - return false; - } - - HRSRC hResourceInfo = FindResourceW(hMod, (LPCWSTR)1, (LPCWSTR)0x10); - if(!hResourceInfo) - { - return false; - } - - VS_VERSIONINFO *VersionInfo = (VS_VERSIONINFO*)LoadResource(hMod, hResourceInfo); - if(!VersionInfo) - { - return false; - } - - FileVersion->dwVersion = VersionInfo->Value.dwFileVersionMS; - FileVersion->Release = (WORD)(VersionInfo->Value.dwFileVersionLS >> 16); - FileVersion->Build = (WORD)VersionInfo->Value.dwFileVersionLS; - - return true; -} - -BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion) -{ - typedef struct - { - WORD wLength; - WORD wValueLength; - WORD wType; - WCHAR szKey[16]; - WORD Padding1; - VS_FIXEDFILEINFO Value; - WORD Padding2; - WORD Children; - } VS_VERSIONINFO; - - HMODULE hFile = LoadLibraryExW(lptstrFilename, NULL, LOAD_LIBRARY_AS_DATAFILE); - if(!hFile) - { - return false; - } - - HRSRC hResourceInfo = FindResourceW(hFile, (LPCWSTR)1, (LPCWSTR)0x10); - if(!hResourceInfo) - { - return false; - } - - VS_VERSIONINFO *VersionInfo = (VS_VERSIONINFO*)LoadResource(hFile, hResourceInfo); - if(!VersionInfo) - { - return false; - } - - FileVersion->dwVersion = VersionInfo->Value.dwFileVersionMS; - FileVersion->Release = (WORD)(VersionInfo->Value.dwFileVersionLS >> 16); - FileVersion->Build = (WORD)VersionInfo->Value.dwFileVersionLS; - - return true; -} - -bool OverrideSL(LPWSTR ValueName, DWORD *Value) -{ - // Allow Remote Connections - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowRemoteConnections") == 0) - { - *Value = 1; - return true; - } - // Allow Multiple Sessions - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowMultipleSessions") == 0) - { - *Value = 1; - return true; - } - // Allow Multiple Sessions (Application Server Mode) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowAppServerMode") == 0) - { - *Value = 1; - return true; - } - // Allow Multiple Monitors - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-AllowMultimon") == 0) - { - *Value = 1; - return true; - } - // Max User Sessions (0 = unlimited) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-MaxUserSessions") == 0) - { - *Value = 0; - return true; - } - // Max Debug Sessions (Win 8, 0 = unlimited) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions") == 0) - { - *Value = 0; - return true; - } - // Max Sessions - // 0 - logon not possible even from console - // 1 - only one active user (console or remote) - // 2 - allow concurrent sessions - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions") == 0) - { - *Value = 2; - return true; - } - // Allow Advanced Compression with RDP 7 Protocol - if (wcscmp(ValueName, L"TerminalServices-RDP-7-Advanced-Compression-Allowed") == 0) - { - *Value = 1; - return true; - } - // IsTerminalTypeLocalOnly = 0 - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly") == 0) - { - *Value = 0; - return true; - } - // Max Sessions (hard limit) - if (wcscmp(ValueName, L"TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions") == 0) - { - *Value = 1000; - return true; - } - return false; -} - -HRESULT WINAPI New_SLGetWindowsInformationDWORD(PWSTR pwszValueName, DWORD *pdwValue) -{ - // wrapped SLGetWindowsInformationDWORD function - // termsrv.dll will call this function instead of original SLC.dll - - // Override SL Policy - - extern FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; - extern SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; - - char *Log; - DWORD dw; - SIZE_T bw; - HRESULT Result; - - Log = new char[1024]; - wsprintfA(Log, "Policy query: %S\r\n", pwszValueName); - WriteToLog(Log); - delete[] Log; - - if (OverrideSL(pwszValueName, &dw)) - { - *pdwValue = dw; - - Log = new char[1024]; - wsprintfA(Log, "Rewrite: %i\r\n", dw); - WriteToLog(Log); - delete[] Log; - - return S_OK; - } - - WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); - Result = _SLGetWindowsInformationDWORD(pwszValueName, pdwValue); - if (Result == S_OK) - { - Log = new char[1024]; - wsprintfA(Log, "Result: %i\r\n", dw); - WriteToLog(Log); - delete[] Log; - } else { - WriteToLog("Failed\r\n"); - } - WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); - - return Result; -} - -HRESULT __fastcall New_Win8SL(PWSTR pwszValueName, DWORD *pdwValue) -{ - // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll - // for Windows 8 support - - // Override SL Policy - - extern SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; - - char *Log; - DWORD dw; - HRESULT Result; - - Log = new char[1024]; - wsprintfA(Log, "Policy query: %S\r\n", pwszValueName); - WriteToLog(Log); - delete[] Log; - - if (OverrideSL(pwszValueName, &dw)) - { - *pdwValue = dw; - - Log = new char[1024]; - wsprintfA(Log, "Rewrite: %i\r\n", dw); - WriteToLog(Log); - delete[] Log; - - return S_OK; - } - - Result = _SLGetWindowsInformationDWORD(pwszValueName, pdwValue); - if (Result == S_OK) - { - Log = new char[1024]; - wsprintfA(Log, "Result: %i\r\n", dw); - WriteToLog(Log); - delete[] Log; - } else { - WriteToLog("Failed\r\n"); - } - - return Result; -} - -#ifndef _WIN64 -HRESULT __fastcall New_Win8SL_CP(DWORD arg1, DWORD *pdwValue, PWSTR pwszValueName, DWORD arg4) -{ - // wrapped unexported function SLGetWindowsInformationDWORDWrapper in termsrv.dll - // for Windows 8 Consumer Preview support - - return New_Win8SL(pwszValueName, pdwValue); -} -#endif - -HRESULT WINAPI New_CSLQuery_Initialize() -{ - extern PLATFORM_DWORD TermSrvBase; - extern FILE_VERSION FV; - - char *Log; - DWORD *bServerSku = NULL; - DWORD *bRemoteConnAllowed = NULL; - DWORD *bFUSEnabled = NULL; - DWORD *bAppServerAllowed = NULL; - DWORD *bMultimonAllowed = NULL; - DWORD *lMaxUserSessions = NULL; - DWORD *ulMaxDebugSessions = NULL; - DWORD *bInitialized = NULL; - - WriteToLog("> CSLQuery::Initialize\r\n"); - - if (FV.Release == 9431 && FV.Build == 0) - { - #ifdef _WIN64 - bFUSEnabled = (DWORD*)(TermSrvBase + 0xC4490); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC4494); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC4498); - bInitialized = (DWORD*)(TermSrvBase + 0xC449C); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC44A0); - bServerSku = (DWORD*)(TermSrvBase + 0xC44A4); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC44A8); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC44AC); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xA22A8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xA22AC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xA22B0); - bInitialized = (DWORD*)(TermSrvBase + 0xA22B4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xA22B8); - bServerSku = (DWORD*)(TermSrvBase + 0xA22BC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xA22C0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xA22C4); - #endif - } - if (FV.Release == 9600 && FV.Build == 16384) - { - #ifdef _WIN64 - bServerSku = (DWORD*)(TermSrvBase + 0xE6494); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xE6498); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xE649C); - bFUSEnabled = (DWORD*)(TermSrvBase + 0xE64A0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xE64A4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xE64A8); - bInitialized = (DWORD*)(TermSrvBase + 0xE64AC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xE64B0); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xC02A8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC02AC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC02B0); - bInitialized = (DWORD*)(TermSrvBase + 0xC02B4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC02B8); - bServerSku = (DWORD*)(TermSrvBase + 0xC02BC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC02C0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC02C4); - #endif - /* __ARM_ARCH_7 - bFUSEnabled = (DWORD*)(TermSrvBase + 0x?); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0x?); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0x?); - bInitialized = (DWORD*)(TermSrvBase + 0x?); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0x?); - bServerSku = (DWORD*)(TermSrvBase + 0x?); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0x?); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0x?); - */ - } - if (FV.Release == 9600 && FV.Build == 17095) - { - #ifdef _WIN64 - bServerSku = (DWORD*)(TermSrvBase + 0xE4494); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xE4498); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xE449C); - bFUSEnabled = (DWORD*)(TermSrvBase + 0xE44A0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xE44A4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xE44A8); - bInitialized = (DWORD*)(TermSrvBase + 0xE44AC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xE44B0); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xC12A8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xC12AC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xC12B0); - bInitialized = (DWORD*)(TermSrvBase + 0xC12B4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xC12B8); - bServerSku = (DWORD*)(TermSrvBase + 0xC12BC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xC12C0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xC12C4); - #endif - } - if (FV.Release == 9841 && FV.Build == 0) - { - #ifdef _WIN64 - bFUSEnabled = (DWORD*)(TermSrvBase + 0xECFF8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xECFFC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xED000); - bInitialized = (DWORD*)(TermSrvBase + 0xED004); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xED008); - bServerSku = (DWORD*)(TermSrvBase + 0xED00C); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xED010); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xED014); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xBF9F0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xBF9F4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xBF9F8); - bInitialized = (DWORD*)(TermSrvBase + 0xBF9FC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xBFA00); - bServerSku = (DWORD*)(TermSrvBase + 0xBFA04); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xBFA08); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xBFA0C); - #endif - } - if (FV.Release == 9860 && FV.Build == 0) - { - #ifdef _WIN64 - bFUSEnabled = (DWORD*)(TermSrvBase + 0xECBD8); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xECBDC); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xECBE0); - bInitialized = (DWORD*)(TermSrvBase + 0xECBE4); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xECBE8); - bServerSku = (DWORD*)(TermSrvBase + 0xECBEC); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xECBF0); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xECBF4); - #else - bFUSEnabled = (DWORD*)(TermSrvBase + 0xBF7E0); - lMaxUserSessions = (DWORD*)(TermSrvBase + 0xBF7E4); - bAppServerAllowed = (DWORD*)(TermSrvBase + 0xBF7E8); - bInitialized = (DWORD*)(TermSrvBase + 0xBF7EC); - bMultimonAllowed = (DWORD*)(TermSrvBase + 0xBF7F0); - bServerSku = (DWORD*)(TermSrvBase + 0xBF7F4); - ulMaxDebugSessions = (DWORD*)(TermSrvBase + 0xBF7F8); - bRemoteConnAllowed = (DWORD*)(TermSrvBase + 0xBF7FC); - #endif - } - if (bServerSku) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] bServerSku = 1\r\n", bServerSku); - WriteToLog(Log); - delete[] Log; - - *bServerSku = 1; - } - if (bRemoteConnAllowed) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] bRemoteConnAllowed = 1\r\n", bRemoteConnAllowed); - WriteToLog(Log); - delete[] Log; - - *bRemoteConnAllowed = 1; - } - if (bFUSEnabled) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] bFUSEnabled = 1\r\n", bFUSEnabled); - WriteToLog(Log); - delete[] Log; - - *bFUSEnabled = 1; - } - if (bAppServerAllowed) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] bAppServerAllowed = 1\r\n", bAppServerAllowed); - WriteToLog(Log); - delete[] Log; - - *bAppServerAllowed = 1; - } - if (bMultimonAllowed) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] bMultimonAllowed = 1\r\n", bMultimonAllowed); - WriteToLog(Log); - delete[] Log; - - *bMultimonAllowed = 1; - } - if (lMaxUserSessions) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] lMaxUserSessions = 0\r\n", lMaxUserSessions); - WriteToLog(Log); - delete[] Log; - - *lMaxUserSessions = 0; - } - if (ulMaxDebugSessions) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] ulMaxDebugSessions = 0\r\n", ulMaxDebugSessions); - WriteToLog(Log); - delete[] Log; - - *ulMaxDebugSessions = 0; - } - if (bInitialized) - { - Log = new char[1024]; - wsprintfA(Log, "[0x%p] bInitialized = 1\r\n", bInitialized); - WriteToLog(Log); - delete[] Log; - - *bInitialized = 1; - } - return S_OK; -} - -void Hook() -{ - extern FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD; - extern SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD; - extern HMODULE hTermSrv; - extern HMODULE hSLC; - extern PLATFORM_DWORD TermSrvBase; - extern FILE_VERSION FV; - - AlreadyHooked = true; - - bool Result; - char *Log; - SIZE_T bw; - WORD Ver = 0; - PLATFORM_DWORD TermSrvSize, SignPtr; - FARJMP Jump; - BYTE b; - - WriteToLog("init\r\n"); - - hTermSrv = LoadLibrary(L"termsrv.dll"); - if (hTermSrv == 0) - { - WriteToLog("Error: Failed to load Terminal Services library\r\n"); - return; - } - _ServiceMain = (SERVICEMAIN)GetProcAddress(hTermSrv, "ServiceMain"); - _SvchostPushServiceGlobals = (SVCHOSTPUSHSERVICEGLOBALS)GetProcAddress(hTermSrv, "SvchostPushServiceGlobals"); - - Log = new char[1024]; - wsprintfA(Log, "Base addr: 0x%p\r\n", hTermSrv); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "SvcMain: termsrv.dll+0x%p\r\n", (PLATFORM_DWORD)_ServiceMain - (PLATFORM_DWORD)hTermSrv); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "SvcGlobals: termsrv.dll+0x%p\r\n", (PLATFORM_DWORD)_SvchostPushServiceGlobals - (PLATFORM_DWORD)hTermSrv); - WriteToLog(Log); - delete[] Log; - - // check termsrv version - if (GetModuleVersion(L"termsrv.dll", &FV)) - { - Ver = (BYTE)FV.wVersion.Minor | ((BYTE)FV.wVersion.Major << 8); - } else { - // check NT version - // Ver = GetVersion(); // deprecated - // Ver = ((Ver & 0xFF) << 8) | ((Ver & 0xFF00) >> 8); - } - if (Ver == 0) - { - WriteToLog("Error: Failed to detect Terminal Services version\r\n"); - return; - } - - Log = new char[1024]; - wsprintfA(Log, "Version: %d.%d\r\n", FV.wVersion.Major, FV.wVersion.Minor); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "Release: %d\r\n", FV.Release); - WriteToLog(Log); - delete[] Log; - - Log = new char[1024]; - wsprintfA(Log, "Build: %d\r\n", FV.Build); - WriteToLog(Log); - delete[] Log; - - // temporarily freeze threads - WriteToLog("freeze\r\n"); - SetThreadsState(false); - - if (Ver == 0x0600) - { - // Windows Vista - // uses SL Policy API (slc.dll) - - // load slc.dll and hook function - hSLC = LoadLibrary(L"slc.dll"); - _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); - if (_SLGetWindowsInformationDWORD != INVALID_HANDLE_VALUE) - { - // rewrite original function to call our function (make hook) - - WriteToLog("Hook SLGetWindowsInformationDWORD\r\n"); - #ifdef _WIN64 - Stub_SLGetWindowsInformationDWORD.MovOp = 0x48; - Stub_SLGetWindowsInformationDWORD.MovRegArg = 0xB8; - Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; - Stub_SLGetWindowsInformationDWORD.PushRaxOp = 0x50; - Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; - #else - Stub_SLGetWindowsInformationDWORD.PushOp = 0x68; - Stub_SLGetWindowsInformationDWORD.PushArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; - Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; - #endif - - ReadProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); - WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); - } - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release == 6000 && FV.Build == 16386) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF756E0000 - .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75745E3D mov ebx, 1 <- 0 - .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75745E4A mov [rdi], ebx - .text:000007FF75745E4C call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65E3E); - b = 0; - #else - /* Imagebase: 6F320000 - .text:6F3360B9 lea eax, [ebp+VersionInformation] - .text:6F3360BF inc ebx <- nop - .text:6F3360C0 push eax ; lpVersionInformation - .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F3360CB mov [esi], ebx - .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x160BF); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x5C88F); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15CD8); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6001 && FV.Build == 18000) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF76220000 - .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF76290DB9 mov ebx, 1 <- 0 - .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF76290DC6 mov [rdi], ebx - .text:000007FF76290DC8 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70DBA); - b = 0; - #else - /* Imagebase: 6E800000 - .text:6E8185DE lea eax, [ebp+VersionInformation] - .text:6E8185E4 inc ebx <- nop - .text:6E8185E5 push eax ; lpVersionInformation - .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6E8185F0 mov [esi], ebx - .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x185E4); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65BD7); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FD8); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6002 && FV.Build == 18005) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF766C0000 - .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF76730FF5 mov ebx, 1 <- 0 - .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF76731002 mov [rdi], ebx - .text:000007FF76731004 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x70FF6); - b = 0; - #else - /* Imagebase: 6F580000 - .text:6F597FA2 lea eax, [ebp+VersionInformation] - .text:6F597FA8 inc ebx <- nop - .text:6F597FA9 push eax ; lpVersionInformation - .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FB4 mov [esi], ebx - .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FA8); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65E83); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179C0); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6002 && FV.Build == 19214) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75AC0000 - .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75B312A9 mov ebx, 1 <- 0 - .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75B312B6 mov [rdi], ebx - .text:000007FF75B312B8 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x712AA); - b = 0; - #else - /* Imagebase: 6F580000 - .text:6F597FBE lea eax, [ebp+VersionInformation] - .text:6F597FC4 inc ebx <- nop - .text:6F597FC5 push eax ; lpVersionInformation - .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FD0 mov [esi], ebx - .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FC4); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x65FF7); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179B8); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - if (FV.Release == 6002 && FV.Build == 23521) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75AC0000 - .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75B31EA9 mov ebx, 1 <- 0 - .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75B31EB6 mov [rdi], ebx - .text:000007FF75B31EB8 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x71EAA); - b = 0; - #else - /* Imagebase: 6F580000 - .text:6F597FAE lea eax, [ebp+VersionInformation] - .text:6F597FB4 inc ebx <- nop - .text:6F597FB5 push eax ; lpVersionInformation - .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F597FC0 mov [esi], ebx - .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17FB4); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x669CB); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx_jmp, sizeof(CDefPolicy_Query_eax_rcx_jmp), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x179CC); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_edx_ecx, sizeof(CDefPolicy_Query_edx_ecx), &bw); - #endif - } - } - } - if (Ver == 0x0601) - { - // Windows 7 - // uses SL Policy API (slc.dll) - - // load slc.dll and hook function - hSLC = LoadLibrary(L"slc.dll"); - _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); - if (_SLGetWindowsInformationDWORD != INVALID_HANDLE_VALUE) - { - // rewrite original function to call our function (make hook) - - WriteToLog("Hook SLGetWindowsInformationDWORD\r\n"); - #ifdef _WIN64 - Stub_SLGetWindowsInformationDWORD.MovOp = 0x48; - Stub_SLGetWindowsInformationDWORD.MovRegArg = 0xB8; - Stub_SLGetWindowsInformationDWORD.MovArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; - Stub_SLGetWindowsInformationDWORD.PushRaxOp = 0x50; - Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; - #else - Stub_SLGetWindowsInformationDWORD.PushOp = 0x68; - Stub_SLGetWindowsInformationDWORD.PushArg = (PLATFORM_DWORD)New_SLGetWindowsInformationDWORD; - Stub_SLGetWindowsInformationDWORD.RetOp = 0xC3; - #endif - - ReadProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Old_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); - WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw); - } - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - - if (FV.Release == 7600 && FV.Build == 16385) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A97D95 mov ebx, 1 <- 0 - .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A97DA2 mov [rdi], ebx - .text:000007FF75A97DA4 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D96); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2F9E1F lea eax, [ebp+VersionInformation] - .text:6F2F9E25 inc ebx <- nop - .text:6F2F9E26 push eax ; lpVersionInformation - .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2F9E31 mov [esi], ebx - .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E25); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17AD2); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x196F3); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 17514) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A980E1 mov ebx, 1 <- 0 - .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A980EE mov [rdi], ebx - .text:000007FF75A980F0 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180E2); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA497 lea eax, [ebp+VersionInformation] - .text:6F2FA49D inc ebx <- nop - .text:6F2FA49E push eax ; lpVersionInformation - .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4A9 mov [esi], ebx - .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A49D); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D8A); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19D53); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 18540) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A98005 mov ebx, 1 <- 0 - .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A98012 mov [rdi], ebx - .text:000007FF75A98014 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18006); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA4DF lea eax, [ebp+VersionInformation] - .text:6F2FA4E5 inc ebx <- nop - .text:6F2FA4E6 push eax ; lpVersionInformation - .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4F1 mov [esi], ebx - .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4E5); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17C82); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19D9F); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 22750) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A97E8D mov ebx, 1 <- 0 - .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A97E9A mov [rdi], ebx - .text:000007FF75A97E9C call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17E8E); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17C92); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E21); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 18637) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A980F9 mov ebx, 1 <- 0 - .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A98106 mov [rdi], ebx - .text:000007FF75A98108 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x180FA); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA4D7 lea eax, [ebp+VersionInformation] - .text:6F2FA4DD inc ebx <- nop - .text:6F2FA4DE push eax ; lpVersionInformation - .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA4E9 mov [esi], ebx - .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A4DD); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17DC6); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19DBB); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - if (FV.Release == 7601 && FV.Build == 22843) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* Imagebase: 7FF75A80000 - .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation - .text:000007FF75A97F95 mov ebx, 1 <- 0 - .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000007FF75A97FA2 mov [rdi], ebx - .text:000007FF75A97FA4 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17F96); - b = 0; - #else - /* Imagebase: 6F2E0000 - .text:6F2FA64F lea eax, [ebp+VersionInformation] - .text:6F2FA655 inc ebx <- nop - .text:6F2FA656 push eax ; lpVersionInformation - .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:6F2FA661 mov [esi], ebx - .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A655); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17D6E); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19E25); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - } - } - } - if (Ver == 0x0602) - { - // Windows 8 - // uses SL Policy internal unexported function - - // load slc.dll and get function - // (will be used on intercepting undefined values) - hSLC = LoadLibrary(L"slc.dll"); - _SLGetWindowsInformationDWORD = (SLGETWINDOWSINFORMATIONDWORD)GetProcAddress(hSLC, "SLGetWindowsInformationDWORD"); - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // SLGetWindowsInformationDWORDWrapper - - if (FV.Release == 8102 && FV.Build == 0) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:000000018000D83F mov ebx, 1 <- 0 - .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018000D84C mov [rdi], ebx - .text:000000018000D84E call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xD840); - b = 0; - #else - /* - .text:1000F7E5 lea eax, [esp+150h+VersionInformation] - .text:1000F7E9 inc esi <- nop - .text:1000F7EA push eax ; lpVersionInformation - .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1000F7F3 mov [edi], esi - .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xF7E9); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xD3E6); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xE47C); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A484); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1B909); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 8250 && FV.Build == 0) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:0000000180011E73 mov ebx, 1 <- 0 - .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180011E80 mov [rdi], ebx - .text:0000000180011E82 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11E74); - b = 0; - #else - /* - .text:100159C5 lea eax, [esp+150h+VersionInformation] - .text:100159C9 inc esi <- nop - .text:100159CA push eax ; lpVersionInformation - .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:100159D3 mov [edi], esi - .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x159C9); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1187A); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13520); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18FAC); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1A0A9); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL_CP; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 8400 && FV.Build == 0) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:0000000180020823 mov ebx, 1 <- 0 - .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180020830 mov [rdi], ebx - .text:0000000180020832 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20824); - b = 0; - #else - /* - .text:1001547E lea eax, [esp+150h+VersionInformation] - .text:10015482 inc esi <- nop - .text:10015483 push eax ; lpVersionInformation - .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001548C mov [edi], esi - .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15482); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F102); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13E48); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2492C); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19629); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9200 && FV.Build == 16384) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:000000018002BAA7 mov ebx, 1 <- 0 - .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018002BAB4 mov [rdi], ebx - .text:000000018002BAB6 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAA8); - b = 0; - #else - /* - .text:1001554E lea eax, [esp+150h+VersionInformation] - .text:10015552 inc esi <- nop - .text:10015553 push eax ; lpVersionInformation - .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1001555C mov [edi], esi - .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x15552); - b = 0x90; - #endif - /* __ARM_ARCH_7 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x?); // unknown - */ - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2A31A); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13F08); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - /* __ARM_ARCH_7 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x?); // unknown - */ - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21FA8); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19559); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - /* __ARM_ARCH_7 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x5F934); - // hook opcodes? - Don't know how to make far jump on ARM platform - */ - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9200 && FV.Build == 17048) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:0000000180020947 mov ebx, 1 <- 0 - .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180020954 mov [rdi], ebx - .text:0000000180020956 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20948); - b = 0; - #else - /* - .text:1002058E lea eax, [esp+150h+VersionInformation] - .text:10020592 inc esi <- nop - .text:10020593 push eax ; lpVersionInformation - .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:1002059C mov [edi], esi - .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20592); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F206); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F408); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x24570); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x17059); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9200 && FV.Build == 21166) - { - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation - .text:000000018002BAF7 mov ebx, 1 <- 0 - .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018002BB04 mov [rdi], ebx - .text:000000018002BB06 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2BAF8); - b = 0; - #else - /* - .text:10015576 lea eax, [esp+150h+VersionInformation] - .text:1001557A inc esi <- nop - .text:1001557B push eax ; lpVersionInformation - .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:10015584 mov [edi], esi - .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1557A); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2A3B6); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rdi, sizeof(CDefPolicy_Query_eax_rdi), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x13F30); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_esi, sizeof(CDefPolicy_Query_eax_esi), &bw); - #endif - - WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21FD0); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_Win8SL; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x19581); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_Win8SL; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - } - } - if (Ver == 0x0603) - { - // Windows 8.1 - // uses SL Policy internal inline code - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release == 9431 && FV.Build == 0) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:000000018009F718 test eax, eax - .text:000000018009F71A js short loc_18009F73B - .text:000000018009F71C cmp [rsp+48h+arg_18], 0 - .text:000000018009F721 jz short loc_18009F73B <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x9F721); - #else - /* - .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:1008A609 test eax, eax - .text:1008A60B js short loc_1008A628 - .text:1008A60D cmp [ebp+var_8], 0 - .text:1008A611 jz short loc_1008A628 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x8A611); - #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:00000001800367F8 mov ebx, 1 <- 0 - .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180036805 mov [rdi], ebx - .text:0000000180036807 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x367F9); - b = 0; - #else - /* - .text:100306A4 lea eax, [esp+150h+VersionInformation] - .text:100306A8 inc ebx <- nop - .text:100306A9 mov [edi], ebx - .text:100306AB push eax ; lpVersionInformation - .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x306A8); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x350FD); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2EA25); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x2F9C0); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x196B0); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9600 && FV.Build == 16384) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:000000018008181F cmp [rsp+48h+arg_18], 0 - .text:0000000180081824 jz loc_180031DEF <- nop + jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81824); - b = 0x90; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81825); - b = 0xE9; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - #else - /* - .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A2721 test eax, eax - .text:100A2723 js short loc_100A2740 - .text:100A2725 cmp [ebp+var_8], 0 - .text:100A2729 jz short loc_100A2740 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA2729); - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - #endif - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180020240 mov ebx, 1 <- 0 - .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:000000018002024D mov [rdi], ebx - .text:000000018002024F call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x20241); - b = 0; - #else - /* - .text:10018024 lea eax, [esp+150h+VersionInformation] - .text:10018028 inc ebx <- nop - .text:10018029 mov [edi], ebx - .text:1001802B push eax ; lpVersionInformation - .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x18028); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x57829); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x16115); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x554C0); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1CEB0); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9600 && FV.Build == 17095) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:00000001800B9150 test eax, eax - .text:00000001800B9152 js short loc_1800B9173 - .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 - .text:00000001800B9159 jz short loc_1800B9173 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xB9159); - #else - /* - .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100A36C9 test eax, eax - .text:100A36CB js short loc_100A36E8 - .text:100A36CD cmp [ebp+var_8], 0 - .text:100A36D1 jz short loc_100A36E8 <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xA36D1); - #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180021828 mov ebx, 1 <- 0 - .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180021835 mov [rdi], ebx - .text:0000000180021837 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x21829); - b = 0; - #else - /* - .text:10036BA5 lea eax, [esp+150h+VersionInformation] - .text:10036BA9 inc ebx <- nop - .text:10036BAA mov [edi], ebx - .text:10036BAC push eax ; lpVersionInformation - .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x36BA9); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1F6A1); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x37529); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3B110); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x117F1); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - } - } - if (Ver == 0x0604) - { - // Windows 10 - // uses SL Policy internal inline code - - if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize)) - { - // Patch functions: - // CEnforcementCore::GetInstanceOfTSLicense - // CSessionArbitrationHelper::IsSingleSessionPerUserEnabled - // CDefPolicy::Query - // Hook function: - // CSLQuery::Initialize - - if (FV.Release == 9841 && FV.Build == 0) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:0000000180081133 call sub_1800A9048 - .text:0000000180081138 test eax, eax - .text:000000018008113A js short loc_18008115B - .text:000000018008113C cmp [rsp+58h+arg_18], 0 - .text:0000000180081141 jz short loc_18008115B <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81141); - #else - /* - .text:1009569B call sub_100B7EE5 - .text:100956A0 test eax, eax - .text:100956A2 js short loc_100956BF - .text:100956A4 cmp [ebp+var_C], 0 - .text:100956A8 jz short loc_100956BF <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x956A8); - #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180012158 mov ebx, 1 <- 0 - .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180012165 mov [rdi], ebx - .text:0000000180012167 call cs:GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x12159); - b = 0; - #else - /* - .text:10030121 lea eax, [esp+150h+VersionInformation] - .text:10030125 inc ebx <- nop - .text:10030126 mov [edi], ebx - .text:10030128 push eax ; lpVersionInformation - .text:10030129 call ds:GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30125); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xC125); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3B989); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1EA50); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x46A68); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - if (FV.Release == 9860 && FV.Build == 0) - { - WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n"); - #ifdef _WIN64 - /* - .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:0000000180081088 test eax, eax - .text:000000018008108A js short loc_1800810AB - .text:000000018008108C cmp [rsp+58h+arg_18], 0 - .text:0000000180081091 jz short loc_1800810AB <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x81091); - #else - /* - .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) - .text:100962C0 test eax, eax - .text:100962C2 js short loc_100962DF - .text:100962C4 cmp [ebp+var_C], 0 - .text:100962C8 jz short loc_100962DF <- jmp - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x962C8); - #endif - b = 0xEB; - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n"); - #ifdef _WIN64 - /* - .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation - .text:0000000180011AA8 mov ebx, 1 <- 0 - .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch - .text:0000000180011AB5 mov [rdi], ebx - .text:0000000180011AB7 call cs:__imp_GetVersionExW - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x11AA9); - b = 0; - #else - /* - .text:10030841 lea eax, [esp+150h+VersionInformation] - .text:10030845 inc ebx <- nop - .text:10030846 mov [edi], ebx - .text:10030848 push eax ; lpVersionInformation - .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) - */ - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x30845); - b = 0x90; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &b, sizeof(b), &bw); - - WriteToLog("Patch CDefPolicy::Query\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0xB9F5); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_rcx, sizeof(CDefPolicy_Query_eax_rcx), &bw); - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x3BEC9); - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &CDefPolicy_Query_eax_ecx, sizeof(CDefPolicy_Query_eax_ecx), &bw); - #endif - - WriteToLog("Hook CSLQuery::Initialize\r\n"); - #ifdef _WIN64 - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x1EB00); - Jump.MovOp = 0x48; - Jump.MovRegArg = 0xB8; - Jump.MovArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.PushRaxOp = 0x50; - Jump.RetOp = 0xC3; - #else - SignPtr = (PLATFORM_DWORD)(TermSrvBase + 0x46F18); - Jump.PushOp = 0x68; - Jump.PushArg = (PLATFORM_DWORD)New_CSLQuery_Initialize; - Jump.RetOp = 0xC3; - #endif - WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw); - } - } - } - WriteToLog("resume\r\n"); - SetThreadsState(true); - return; -} - -void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) -{ - WriteToLog("> ServiceMain\r\n"); - if (!AlreadyHooked) Hook(); - - if (_ServiceMain != NULL) _ServiceMain(dwArgc, lpszArgv); -} - -void WINAPI SvchostPushServiceGlobals(void *lpGlobalData) -{ - WriteToLog("> SvchostPushServiceGlobals\r\n"); - if (!AlreadyHooked) Hook(); - - if (_SvchostPushServiceGlobals != NULL) _SvchostPushServiceGlobals(lpGlobalData); -} \ No newline at end of file From 6c2747a08f506931deef367bc48fb57369e37ad2 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 21:25:57 +0300 Subject: [PATCH 048/208] Preparing for release --- res/rdpwrap.ini | 86 +++++++++++++++++++++++++++++- src-installer/RDPWInst.dpr | 84 +++++++++-------------------- src-installer/RDPWInstResource.rc | 4 -- src-installer/resource.res | Bin 353628 -> 435504 bytes technical.txt | 9 +++- 5 files changed, 117 insertions(+), 66 deletions(-) delete mode 100644 src-installer/RDPWInstResource.rc diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 5fe0c87..90f7315 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2014-11-25 +Updated=2014-12-10 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1205,6 +1205,71 @@ SLInitHook.x64=1 SLInitOffset.x64=1EB00 SLInitFunc.x64=New_CSLQuery_Initialize +[6.4.9879.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A9CBB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A9CC0 test eax, eax +; .text:100A9CC2 js short loc_100A9CDF +; .text:100A9CC4 cmp [ebp+var_C], 0 +; .text:100A9CC8 jz short loc_100A9CDF <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9CC8 +LocalOnlyCode.x86=jmpshort +; .text:0000000180095603 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:0000000180095608 test eax, eax +; .text:000000018009560A js short loc_18009562B +; .text:000000018009560C cmp [rsp+58h+arg_18], 0 +; .text:0000000180095611 jz short loc_18009562B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95611 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10030C51 lea eax, [esp+150h+VersionInformation] +; .text:10030C55 inc ebx <- nop +; .text:10030C56 mov [edi], ebx +; .text:10030C58 push eax ; lpVersionInformation +; .text:10030C59 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=30C55 +SingleUserCode.x86=nop +; .text:0000000180016A2E call memset_0 +; .text:0000000180016A33 mov ebx, 1 <- 0 +; .text:0000000180016A38 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180016A40 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180016A45 mov [rdi], ebx +; .text:0000000180016A47 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=16A34 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1002DAB9 cmp eax, [ecx+320h] +; .text:1002DABF jz loc_1006C38A +; Changed +; .text:1002DAB9 mov eax, 100h +; .text:1002DABE mov [ecx+320h], eax +; .text:1002DAC4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DAB9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018001BDC5 cmp [rcx+63Ch], eax +; .text:000000018001BDCB jz sub_180045540 +; Changed +; .text:000000018001BDC5 mov eax, 100h +; .text:000000018001BDCA mov [rcx+638h], eax +; .text:000000018001BDD0 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BDC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=41132 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24750 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1328,3 +1393,22 @@ bMultimonAllowed.x64 =ECBE8 bServerSku.x64 =ECBEC ulMaxDebugSessions.x64=ECBF0 bRemoteConnAllowed.x64=ECBF4 + +[6.4.9879.0-SLInit] +bFUSEnabled.x86 =C27D8 +lMaxUserSessions.x86 =C27DC +bAppServerAllowed.x86 =C27E0 +bInitialized.x86 =C27E4 +bMultimonAllowed.x86 =C27E8 +bServerSku.x86 =C27EC +ulMaxDebugSessions.x86=C27F0 +bRemoteConnAllowed.x86=C27F4 + +bFUSEnabled.x64 =EDBF0 +lMaxUserSessions.x64 =EDBF4 +bAppServerAllowed.x64 =EDBF8 +bInitialized.x64 =EDBFC +bMultimonAllowed.x64 =EDC00 +bServerSku.x64 =EDC04 +ulMaxDebugSessions.x64=EDC08 +bRemoteConnAllowed.x64=EDC0C diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 34f402b..ed41840 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -600,6 +600,7 @@ begin Writeln('[*] Path: ', ExtractFilePath(ExpandPath(WrapPath))); Halt(0); end; + ExtractRes('config', ExtractFilePath(ExpandPath(WrapPath)) + 'rdpwrap.ini'); case Arch of 32: begin ExtractRes('rdpw32', ExpandPath(WrapPath)); @@ -617,14 +618,27 @@ end; procedure DeleteFiles; var Code: DWORD; + FullPath, Path: String; begin - if not DeleteFile(PWideChar(ExpandPath(TermServicePath))) then + FullPath := ExpandPath(TermServicePath); + Path := ExtractFilePath(FullPath); + + if not DeleteFile(PWideChar(Path + 'rdpwrap.ini')) then begin Code := GetLastError; Writeln('[-] DeleteFile error (code ', Code, ').'); Exit; end; - Writeln('[+] Removed file: ', ExpandPath(TermServicePath)); + Writeln('[+] Removed file: ', FullPath); + + if not DeleteFile(PWideChar(FullPath)) then + begin + Code := GetLastError; + Writeln('[-] DeleteFile error (code ', Code, ').'); + Exit; + end; + Writeln('[+] Removed file: ', FullPath); + if not RemoveDirectory(PWideChar(ExtractFilePath(ExpandPath(TermServicePath)))) then begin Code := GetLastError; @@ -683,11 +697,12 @@ end; procedure CheckTermsrvVersion; var SuppLvl: Byte; + VerTxt: String; begin GetFileVersion(ExpandPath(TermServicePath), FV); - Writeln('[*] Terminal Services version: ', - Format('%d.%d.%d.%d', - [FV.Version.w.Major, FV.Version.w.Minor, FV.Release, FV.Build])); + VerTxt := Format('%d.%d.%d.%d', + [FV.Version.w.Major, FV.Version.w.Minor, FV.Release, FV.Build]); + Writeln('[*] Terminal Services version: ', VerTxt); if (FV.Version.w.Major = 5) and (FV.Version.w.Minor = 1) then begin @@ -716,60 +731,11 @@ begin Writeln('[!] This version of Terminal Services may crash on logon attempt.'); Writeln('It''s recommended to upgrade to Service Pack 1 or higher.'); end; - if (FV.Release = 6000) and (FV.Build = 16386) then - SuppLvl := 2; - if (FV.Release = 6001) and (FV.Build = 18000) then - SuppLvl := 2; - if (FV.Release = 6002) and (FV.Build = 18005) then - SuppLvl := 2; - if (FV.Release = 6002) and (FV.Build = 19214) then - SuppLvl := 2; - if (FV.Release = 6002) and (FV.Build = 23521) then - SuppLvl := 2; end; - if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 1) then begin + if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 1) then SuppLvl := 1; - if (FV.Release = 7600) and (FV.Build = 16385) then - SuppLvl := 2; - if (FV.Release = 7601) and (FV.Build = 17514) then - SuppLvl := 2; - if (FV.Release = 7601) and (FV.Build = 18540) then - SuppLvl := 2; - if (FV.Release = 7601) and (FV.Build = 22750) then - SuppLvl := 2; - if (FV.Release = 7601) and (FV.Build = 18637) then - SuppLvl := 2; - if (FV.Release = 7601) and (FV.Build = 22843) then - SuppLvl := 2; - end; - if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 2) then begin - if (FV.Release = 8102) and (FV.Build = 0) then - SuppLvl := 2; - if (FV.Release = 8250) and (FV.Build = 0) then - SuppLvl := 2; - if (FV.Release = 8400) and (FV.Build = 0) then - SuppLvl := 2; - if (FV.Release = 9200) and (FV.Build = 16384) then - SuppLvl := 2; - if (FV.Release = 9200) and (FV.Build = 17048) then - SuppLvl := 2; - if (FV.Release = 9200) and (FV.Build = 21166) then - SuppLvl := 2; - end; - if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 3) then begin - if (FV.Release = 9431) and (FV.Build = 0) then - SuppLvl := 2; - if (FV.Release = 9600) and (FV.Build = 16384) then - SuppLvl := 2; - if (FV.Release = 9600) and (FV.Build = 17095) then - SuppLvl := 2; - end; - if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 4) then begin - if (FV.Release = 9841) and (FV.Build = 0) then - SuppLvl := 2; - if (FV.Release = 9860) and (FV.Build = 0) then - SuppLvl := 2; - end; + if Pos('[' + VerTxt + ']', ExtractResText('config')) > 0 then + SuppLvl := 2; case SuppLvl of 0: begin Writeln('[-] This version of Terminal Services is not supported.'); @@ -915,7 +881,7 @@ end; var I: Integer; begin - Writeln('RDP Wrapper Library v1.4'); + Writeln('RDP Wrapper Library v1.5'); Writeln('Installer v2.2'); Writeln('Copyright (C) Stas''M Corp. 2014'); Writeln(''); @@ -941,7 +907,7 @@ begin if ParamStr(1) = '-l' then begin - Writeln(ExtractResText('LICENSE')); + Writeln(ExtractResText('license')); Exit; end; diff --git a/src-installer/RDPWInstResource.rc b/src-installer/RDPWInstResource.rc deleted file mode 100644 index a0a5a20..0000000 --- a/src-installer/RDPWInstResource.rc +++ /dev/null @@ -1,4 +0,0 @@ -rdpclip64 RCData "..\\rdpclip-x64.exe" -rdpclip32 RCData "..\\rdpclip-x86.exe" -rdpw32 RCData "..\\v1.2-x86-binarymaster\\rdpwrap.dll" -rdpw64 RCData "..\\v1.2-x86-x64-Fusix\\rdpw64.dll" diff --git a/src-installer/resource.res b/src-installer/resource.res index 5f44448f08ac935e35955525cde9df0acb4edaca..560f5f62327df7185435c905faa93a60312b7688 100644 GIT binary patch delta 161028 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 E15g~x9RL6T delta 82453 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 dA(POnO=nBNJjb9oBPgC{kD9IVaBD%M Date: Wed, 10 Dec 2014 22:09:07 +0300 Subject: [PATCH 049/208] Pre-release fixes --- src-installer/RDPWInst.dpr | 2 +- src-installer/resource.res | Bin 435504 -> 435504 bytes src-x86-binarymaster/rdpwrap.dpr | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index ed41840..6f934f5 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -629,7 +629,7 @@ begin Writeln('[-] DeleteFile error (code ', Code, ').'); Exit; end; - Writeln('[+] Removed file: ', FullPath); + Writeln('[+] Removed file: ', Path + 'rdpwrap.ini'); if not DeleteFile(PWideChar(FullPath)) then begin diff --git a/src-installer/resource.res b/src-installer/resource.res index 560f5f62327df7185435c905faa93a60312b7688..b03066d41ff843dbfe53d6aaff2122b14f2d3916 100644 GIT binary patch delta 2923 zcmZuz4^R}>9p1gi0j3})104cX&q6wk($4NeQyc!|4OV=^a*2{@=_am+P%fR`!V1^!|yRvu+{JtXnY)PkMqUO!=&d zQPt#Arv0XpH1!3{3hJk)OgZedI&0W;gDvsg9yV=!k6o`m-;935Hma@7=!bLqJ}P9$ z&zf~zv7K}+zv~OA?>8gS89xGW`Gl@d9E)QZ#WqMD`&`#uwn3%LPfQw>`+bY3$lOG6 zzg@8%wR_h9;@b+3?me3yV~BJGxU!>~B@+UFy{>B=w2KMyI{Ij<>m3k`HjURLX#pA& z0wb2jFkb19LhVp(yo;C zX)MDqt{A?j6Zhkfz1(=j@svcrl^^Fqjw`3-b}8d(h9 z@^oJxWYDbVz--Q>uB!`LP^PnphKPFK9Lq3{MhKO%&LoeyAH?MNyVOOeqtAfd0Mi`g zZ3A{k;5`5jP}pt2dm?ZLz<;4|y#aS9wyv@WVcN1I zW0NH;i40}v0v*OsOIOtN)awisFsbPv7}>;nv%zZAcDiv{*BkvwjrG7fmH|f=zYRl- z&UZWmK`H6&ht1Ig)oPIFlc`>#bx~F2HMPAJ{n$ANcsuzTo(?zgn_?Xryt=8@PNx1$ z$z(`aud~r60{5FJ`i_a+kkB<6@$e0#d60(>{;jJWttfZtuZ(d@9&Do6AU6P6ubaR` zO=ftW=I9}+RlOC>b0)yq(Q8^F8>Mk(TYUv5M6YR#z;!d*>Y@SHh2g!mpqbfOM=5iJ zB8qL=2dAAO#dI%~O@|M0(RjG(^AWuWh@Jed57>ay+Y5CIpM!6NAPyS zwNaaGEM#Ppt!;yT;kJDhx&9}*o@OX0j5iXU%r@gF{u6NY#Z^P`G_>z|Uj2WLstreN z(UMVTkXoV)we;m#cz?&yX;-wPRfeN#s2(`-M<+WB;~6!YqK?YLj?%`W937_xh^kSQ z?xaO3iPk(}II4;`TKhmp1@}2Rc8J#KD)<6Nwb8k<3`a?g2VgsBhk+r-;4TN%TDv5v!qXPdHni=c6@iU(lhxNK8C%93yEU{}VSuw4kg2NFQ5DN58k3VK+Y zZTQFy`{<0$Q3>;g%52w8Qh9RNLnvCYLw#yD%E-0`BNo;`qk(K#JDuj_SE z3Ve2%8Z&8AUvr~*u?ZJ|c}e|;8$FRyN!ttVQzfWB*oQLW+?2Uh|6+RWkjp;@e5G70WJIV`C%h9OZc}gX zLpxc`Q@0KV@yoas@5PMw`e=Ebp0u1vUd_H5jZ0<>JCHEXx z$yIapTsx<7N4RnBDtD9nhBNcYyp_-4ALlFiYQC9&mEX_*f%ox4{AqrKzs%p@zvj)t zLqe9YP*^P3gyq7za$&u&S$Iis3T?uE;h^wW;f!!iD9l@t*DdymgW?%+M4T_>N}^OO z*`>cr!%{#RlO`nw=4!#2*ot#8hbyoHSK=yMjkm&l>#*CHZ4d5MZ+?OfE%+2BK>zpQ zVz_uNfwOQaTpE|jSz$6cTrS6P`P?F|kSpSrssFr!KJ>W9(a&R(W|B4H7TktA)QQVz zo*FZTENa>n)WZ7J?knhy3R+7>nvf}2g=`^5$Q3vtUsxm*3Cn~M!7eAbAL64>f`&(_`4Sp>AF$`gtIvN4LgP`x<$5Y%wMeqZ@|3N(W WKmH={FplRILCJ}p_^#L-^M3*K=Wcxf delta 2819 zcmZ`)4^R}>8Q%r&K@fABNir;k$7Gr z0~<}5d@p&R%yg4q=($y9difY%NPa1xAM+LDO#%HV!S&gEjy~~*u4|T$oJ+?1UF5ic zWcwI{S6&K!wPP4Srr@zs4r=?vh=%5i^ChzcPoduD}!SD{NX6dr}tbq8}!B0!$ z`lmUnTn4V7%Nw5tK}WT&du!R02w2zVVk6fP5cE1OmdAO!SWGGG_-r)y2xkjGyo`>y zb^TAxu$C?Ma~2P=*u~<-WRHkaW>o;(!UT_Xn$Ik?Y6Wdxp5r+B`iHu%m$%v4$$*F+ z{z;(`wrZB6e#Gcg%yq$0&EoYz$kE4Y*eSd;4-A-fe;X|5<-Pz%5)mad)1JY`Q<%H; zFyB@Lp;piw=P?}uCGGhO+pO7EXTVJWvjwQnfSW>aBfxG3?=#@W5L^%N2Ml%^aJ^=6 z`D2)+sfIZBN2@8U5f86m378u|{FPT-hpb z6%%bDH_T{`Jr!sxf;=HVUrTx=f2m%bN^?d z36`C(5d8xdKEA4xn`V@iS8D9D9Ax(~vCJSh09ma^fQj<7;3?z6x7bP^$c9dt1}&|Z z?+8`5cDxsKXk5L#HUw9V_X0KGsvx|p5;WuO@F`WOdt4?ab=smiM>#XH?HV9D6BA^ zP<%&5vQd(~HXPg74}0vY08^~1c76u`aC<8=jGTo!rMM0%793lb(~*O$esPdMSpR7F zTF;L=pv=L)zcLi_&WAbp#U)+0JBK5)*^x>(%~1v$TYc-oHJAICBStVsqi62t=nH4K zqn8XvTOnKE$Q8cUUtvEZCuaerMTR50Z!}!e!x9kYsMK(jbs^043x*>`Fh|Arb!556 z(W&=Xj&6W2aI`9Xt;a7t8Z6-+sK2)nD0&K>sUSNUF3TmYPoPKa+(mdQSprsH1`HF+xR5CuprQeA!Kq z2}sr!Z!23N4O}IFt)6hn4pR6eO0{!+AzLyGCT#upLdX_?balwUSAhuwNV8l912qR& zZd$;G*T$54;hxh)P#SZ`$`vb$cE;O&1+Oa2!SWrvC9_{+SEkOH)UyTjcBh?%^?nn( zK@S?-e!AdQ2DbX673Wrt2ro&l+(g^R@daom8e$9~mlvRC5*PQwc+owoETZJ0)aVMvq@E*d@{n!mX$XpR zp=f8im%V#9bMh&>_`CL0l;KPROO}l+!Tn{ zk?HwpJKyAK$w$RWT3k!wi z!djt3_>JHYG~u9dS~xFU6aFRK7GlI{;tWw1*NP=#rMN?^7vC1$qEGz0*e#wDuZlOs z+af1Tmu5+GrCcdbvPy+gk+k~PQn|EEs+V?2ZBnPyC*_#)&DC-poc(?IsLU&|N}4iT z5tO~kdvI#MauQBVm0@K};czUDhm$VEi?J2Ih<}Dx;g{gNm2l!(yaU(cM$+#@bIGJy zC<{mGYtb}Qx{x7clEZaq#MA6R5{kR4uN$8+liaC6zb9|iArtQ=yXw&G)KPH^%tuKv zQmhm&B}&OshLkB~NrE(w9C4sL^1TBs^;mz4+9P)-@KF&{UF5+AG=u%mX+SwCQ(bRb zphe)r! Date: Wed, 10 Dec 2014 23:19:31 +0300 Subject: [PATCH 050/208] More pre-release fixes --- src-x86-x64-Fusix/IniFile.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 8364cca..8b48c07 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -164,6 +164,8 @@ bool INI_FILE::FillVariable(INI_SECTION_VARIABLE *Variable, char *Str, DWORD Str if (Str[i] == '"' || Str[i] == '\'') Quotes = !Quotes; if (Str[i] == '=' && !Quotes) { + memset(Variable->VariableName, 0, MAX_STRING_LEN); + memset(Variable->VariableValue, 0, MAX_STRING_LEN); memcpy(Variable->VariableName, Str, i); memcpy(Variable->VariableValue, &(Str[i + 1]), StrSize - (i - 1)); StrTrim(Variable->VariableName); @@ -252,6 +254,7 @@ bool INI_FILE::Parse() { CurrentSectionNum++; CurrentVariableNum = 0; + memset(IniData.Section[CurrentSectionNum].SectionName, 0, MAX_STRING_LEN); memcpy(IniData.Section[CurrentSectionNum].SectionName, &(CurrentString[1]), (CurrentStringSize - 2)); continue; } @@ -271,7 +274,10 @@ PINI_SECTION INI_FILE::GetSection(char *SectionName) { for (DWORD i = 0; i < IniData.SectionCount; i++) { - if (memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + if ( + (strlen(IniData.Section[i].SectionName) == strlen(SectionName)) && + (memcmp(IniData.Section[i].SectionName, SectionName, strlen(SectionName)) == 0) + ) { return &IniData.Section[i]; } @@ -307,7 +313,10 @@ bool INI_FILE::GetVariableInSectionPrivate(char *SectionName, char *VariableName // Find variable for (DWORD i = 0; i < Section->VariablesCount; i++) { - if (memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) + if ( + (strlen(Section->Variables[i].VariableName) == strlen(VariableName)) && + (memcmp(Section->Variables[i].VariableName, VariableName, strlen(VariableName)) == 0) + ) { Variable = &(Section->Variables[i]); break; From 43c7e7fb57dc5dd1c00df45d00203b6ff0385d2e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 10 Dec 2014 23:25:01 +0300 Subject: [PATCH 051/208] Update resource --- src-installer/resource.res | Bin 435504 -> 435504 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src-installer/resource.res b/src-installer/resource.res index b03066d41ff843dbfe53d6aaff2122b14f2d3916..8bcc9dd10466c18d591998d2b7034726c3b241ae 100644 GIT binary patch delta 22866 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 U{ze~9{zhYqRvy3grY7wF0o~c>6#xJL From 742fd143eac4ef9ea4d2e146013445d58ab087a2 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 11 Dec 2014 00:45:50 +0300 Subject: [PATCH 052/208] Delete old binaries New binaries will be in releases --- bin/RDPCheck.exe | Bin 1043968 -> 0 bytes bin/RDPConf.exe | Bin 1017856 -> 0 bytes bin/RDPWInst.exe | Bin 653312 -> 0 bytes bin/install.bat | 8 -------- bin/uninstall.bat | 4 ---- res/rdpw32.dll | Bin 86528 -> 0 bytes res/rdpw64.dll | Bin 99328 -> 0 bytes res/rdpwrap.dll | Bin 70656 -> 0 bytes 8 files changed, 12 deletions(-) delete mode 100644 bin/RDPCheck.exe delete mode 100644 bin/RDPConf.exe delete mode 100644 bin/RDPWInst.exe delete mode 100644 bin/install.bat delete mode 100644 bin/uninstall.bat delete mode 100644 res/rdpw32.dll delete mode 100644 res/rdpw64.dll delete mode 100644 res/rdpwrap.dll diff --git a/bin/RDPCheck.exe b/bin/RDPCheck.exe deleted file mode 100644 index 5f622989ed241307d809cadb27ae5d0a3bdad2ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1043968 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ℑ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%0Ayo`;TJDslSgmkY)5K#=a(~~kj+bhudzJC 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�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⋘PJM=MR>eQ$I9EI-1yx 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 z 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

DhDOA#5w&z=uWIQzFLan{=~h%RS}h$I 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 z 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 VTTxj)5M8&z=*3l3u`m43{{oQx%j*CD diff --git a/bin/RDPWInst.exe b/bin/RDPWInst.exe deleted file mode 100644 index 1a5025078ca63d38b12ae2a5915014290ffc7f5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653312 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%0DU9*Tv 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

5?tIsBV%nNw)^H{UN{ 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 X<{F*J7gAu=-4bl^%)3L* z-+vWkjr-7omL8TXaZ>s0`>k>BreR9osy~IG4R=+DN;-QpGy%`n2Q?st7JY*(u&ty) zFTm2N6;mwL2i+6E^?9>rpH;uV@$(T@J&qdL-Pk??aUY7b?u=}*MD9Z?@NBL1c_eHz zd0e?u{J)v(m*!(SzQOZd!SPnZ<`#s~WLfQg)`b@Jlw{mw-q%hn+eVo8bu=CsVTo)t z@B7>mi8~wTfn&zAX>sqmcUNQ8*6ht9g0BAH*jQkW+)+?#eU=i?5e&WRv)JSLsFWs@ z@3tjItX%Bw#?nKqT&%>o+mM^*a1=Y1y(D_9FV@a`4!_Qazn5y~y$BCG-I17unfDTv zUx%^4tS9a-p_S1?#9p*`W^d--&q;}f%ruq{hyUjatdZLhx!2)-tH=60xL9}9S{pkC z7MPE}4zXB&voTx-MriwbbjK(!4R<@B>ks7NbLM>> z!6S5q9m?@KTfKQ}0wt49-Rv~K(oOA|Ve{8s1Nu2oc2*z8 z&Trg}fI~mM8z12Ff;xuN%_3jdrAAt645*E`vUtg0@7-j5K6qi_=Bj6e@Aj`y*YPcV zsT*NdFy5&RTbEf;G{QX0UYQ%QvK9bX%|kF~J?{`cpWSZUR~z>O051SrN9Q zPaF(8!ew@2|1J6vl)tM^&@Fw-#@p)m9?$yZHxF(%*~A%geQcg42ow&sYcbaa_s2>z zuqoLR39aRnCI4cM{)X(uA zyU$-W|FQuyGBh7v`HI+!jiJ#qVi&e+!uZ2g%e8pJy|@hvx%g4_F|*-OG{d;bnpWyO zj1bcD(5b*?z!X%f-QJ=2z>^PX4&8mI&J5*LBcg2b;T_m-aCqZ{3lqi^qZb`OAjZkErgr)_mMc`sOAakBe!htRR#x zKHG2*0S8pF!a%LOvdqzl4pYZki5OXzh;~9z|K~q{RR!5Nz+m5j2zS z3fa*|>lkPAtRCHpcvw7ljz$K7;$CAaWHAAWEytd{ShX9A2`2g+UO;R7@U3&uhjm{O zz^d&OH$F4VgITXL+~b*I_FNw0O&GgyZ?Js8Pv2X10s9;~f2QKQuWUTFES zUlS+hr|7&XXvB8(f&A{oy4gG{j*IQWE+m}&Kug}2=)7ymJrw3Rl7pN_Q=12Y2QPn9 zU1RXf3$8xAbn0=E8HWbd^foglfRZ~68LcQG)T%w+tBFw_*3i5wYt)6|np0{la zeU{0^n5`^zy{{ah^)GX2{Ywt5e<>s-H!Y6E;vu@Jl-3|Y8G_CT@-d|CNuOZB^%(?9 zOo(Gw*IQmI%A5qt=-qm^5UdxTB*E%fM8{NgD5)|EsY>um6)u6qVdPkAg%vOs{SF9L z0-6#?(_ZhKFuxRyAt`D=(xgKvLb0@AT}ThsZyaI4$sxg6w-DJ=wY@@04W|jK7<`lC zef$ZNHKq&FWA?O*gAD^~%x-Tn`cWh~1H6C1S_ufvVeA>e;?73OXtZ*eLUfI`jBhY^ z?-A94q=xEH-LM2(@=01Ib`Z5k)D7I&vfPy~`D~hHh@by(hWZq` z%O^=?hJmSd1BaSD+wjSQAx(@m=`n@eEN}x{!wBp6 zBX@bCMw@H<*G-79VxG)eJ3TDZ=+QKR+l?=Rn4GmHZzsDq$vKLo z56-YBUp7zhXnfBby(VkjFwL6WN`vlJc6ozvY1PBi^f0S_Pu;*PBLxvu9QqD_^P)xN(VY zgyaQ%LnBInx)}Rq_KGESk^6`NM*r0ZT<=+HMK0si0pypu+8JZd8?ftIuIn<2lO!P{ za?NPfx@ zhZp3@HIlG4?yyFK-|RN*Nk~E1_}F9^QT#T~J=F8Xk*@fUrZbV2q`^%B#u%d85=+BT zk?cq)_i3xb3=H*X68(DRig=~hM<}H1*8&fLe&>BsM$CY6#MOL=BgtG9HL~HgJV5E?u1U;3>6F} z?F(?;LxI87SYSAa6*7&u)~%|^7-)!W`NHrDIyg=3Pa(Lf$xl2>HwV?xY8;#&VA#|| ztkb~M(`=Ztzwt;|WOIR`w9y~LQG=sd1IwlYv%!VH9EX4o!ciHtB*Nq%)SX}B&77VggwaYVBLJSXPqQp)?L=i%;ZD6<4~y$ltd zvEyUWuFAEXq`^otisP6MV|Qmzt-p786dgx==t-YVYl=THdzzqov(yYQ8)i1(GP8BK zIATeZcW(_3lR9?ejvL($eF8Q)b_}s3M!UicuhEfC9U-DyR%66zeHeI<0`G{W##n)& z!sW{h9r_&_x{S@0iAk=%ozg0k$GSt!-R9tqbE%6t4-pbydaThvm+`}w#6nGO1jL$X z+S>uG>Ac+eEh2Yn6~!p+6}wV+dbh8P)0uf}XaKRCWg3&xQ&Gg-r{R6=P1` z=Zf5-O%f`~rjF5Op%UvD290cAeCfi?Bhdnm4CMaOP135K@tNMvJMB$~lNIF5w0 ziIKa}BnP7jthg8rCe)YVXe;sg@W84Wqir}74IL>$;c6)wx#_{s?X^;q7KYQZZwM3p z&)He%f8t2CM*je3?ype8G|_zVhbycx%FjvO>l-s7kmP!&S=)PV1(^*AZA zKSTBH12>oTLEJN(*vJ(7(tMR={jur;F(TB69>nW)|9MDD4*I?TKH4ywFv>_=UK z=4U6=dlyn?@|t-l0W}J_5r^9K9+iFmfT)+W&!yKq;vpoV0fC}LzV88*gmY0?*M=eD z7EgHX?B}5H&Kn9%srh+OhrT8ig^lLnQiz(N`mcxqGTcy&4PP1#Br;fbLWeqv z9PLci>k=$Ac_HmLqMHkq>pO<(*WrrB&XsU96l>z3Qv&CUuz$SmJm>isQ3qon{;nHa z;KY1p3f7@glXn}uwEvvAz;&E?RTprB`+WFyXRxQ=!V`{UKF1p+{J7%UbKstWh$Ckg zu(LJF*`KjMloBu#uIfX;uO?OBF_K*s`(p4KJDUt=J5u$bSfAE@Ck7A5#{JN5w<8_1 zzd?`2(}XR4!+)=7jqNdw-Y~OJ_|^s6%&!sew5s+T6u_5oZU5{wnzdNeoKe(d%)p-b zs4ri^>LB-K+??L6Z*Dwcv>3MTtIc@SeEdDb>N0!=kl9P4!F|Lt2=@4U#EWJDR%gKu z>V^)_?9b48pz*;B%}J~+n*D4#rjNxe&0sh|Q-Yb9w7LnkIGVB&xYoTF^E3T0KQoQy zXF_dt?mo3v1Bo?sSa`+!jC-#+Zd4ENf89{E9DP~*ddpB%j$h_id8+0u!yPnr^Rk$!!8V2^1Hg@B z2Tn*^-hMs#Lrpm!y8PYM%fEIHhMc(vLg0*)d*86LWZ`U=d!TT(BFr6WNh%0-hggy> zaQ(sTIfXiW5F0lvp09Bj$$T^zqtol$$fx&ds%8`pl2{RzuE%*HD91i{Fn$ktJ)EiR`oS$epW)068a8tLGhb>5+GWIp$}) zVB0og-`AL(iR==SGmW*&!P9y$E$)E31$@zFz%K$3lQa0dMQ%frhDCDLgJN>#ppYBv zIi_iuHaRWRrKV*LVLY1LMAI@Kpm+}9=SYal5&Zt3AbFcR0u9I!DkCv1LwsrSR}aa; z`n}m7@$W;jRAps>a-n-Anv1ubeZlE|IC~c9>=*}dsK64LaX+H^r7*3ve&(?ruC=yv zHK0uRrel<3R&f0A&;~@K!|a>D`P%Gx8_SAoXMcvnC!eNDRNX}CSU)`{bhrWAM z6P%&!MzxE|Va7~l)m*^_EoIdV`ejMpW4MEE`!jFh*~>SUgu~a@?I~mp*&n8A!T_oX z{ZJDkL``TPBOL5<50VZrA!13gf9DRx|KqM#%%1P55|};5NKG^ka+O}U{4a< zs83KGy3_S1a7d1?25jRRFc3AMg@!u&s0M7a)b>ZfTm#H;-=<+#aaz?^LDk1rZo~Pd zo9Xz5xNoTfnDyULONQ`P)=;J*D^U|>%bFmXee-K#e$t|Emes&gy@RX4ej2vW6eW&Z z;A(&|8dU?VQ=ToWfiTA9~Kp$0TSP{0^r1!eWC))mK6XO zolsP3ty28a<5c25`wZg$u@wK4Lj2P_Ru=yxzxdO%q!fQMK0bd}{;fXw7u_PrLbDTh zR~-L<*1mh*#?<2uo_hSc0|y5{{H>91iSLM%d?D|C@$VQ$eutt@u4XJ*;6?rQSRX}c zJzr3(M-J_D4PR%`cT!0WEJ(_DKrHjFv-L%vw|!EVSgZJT{UB=NA&TF4++Rb9WU0&i z)?%31DMqKb1RQlkeE9UoQ>+~!=K|yf`hbe{1-IBquv*q@Ma3GeFUiz zFwRBAxiL93oyXfOpJqRbYC~xNIl8qk4duI%12VWjb1OUW2g2Wv(7ZI z$34gm=wna=%HKk$5+*>EAm;BoQ6bO(c(z;gd!X8&o9-a}&>viZz`%(*rihv~?mMKM z1Q%Ig{kqW`W2vzp4NkzZdl~uzNY9EeWNG^)Xy}kt<~2e1Kk4#iH+S?kS58cFN11m7 zCBP^>`C$21^sf(m;rlbxstvJRe861!xgLwUnk+S0dP_}y3{(iTnD|`kPkuLxnzM&S z(|{NK$_Dzb(!CJ##LW=fz&^np#;lJL>t{vD%O(wFJqkSobogw2Ej2glAq?opLFe3l z#W68?%2NgDbTO7U6L$fUqO6Bu@|g@TIFn&C8Fr6(+<;>-#=Kw@+i`GqGDe^#o9A;| z)$$b0ZK#^O>ld(hg?c}qPbW!LZ8y>GDxa&`j1+8n_84ntW1nJ1V(skMs^t|r_keUy zbtRIHV^VPjxA${o%36%Q6FnKR-my2GfswctSa5GYvI6n)g&UJ#hJs^!@KMc2W7wfqc`x8-G^AfWOb^w}oF#xw8@?=k3I zPERBxjU)RM`1qqFHzbO1>v~#XnuvY4dRTZ+n!-JurQ~Pi$)FhoM897TV-#%ynQ`qiKto)-b)7>Elf6neJiwIn$F&!xlDHeMicGSf5H65Es_pgEa}?&CGG9+(_cyR*gs1847=~`t~WN#)roKtCP;sU6D3`c zn{Uc3E-uTVbdR3%?N5)BeR?m|EHfyrfKq0z)g&%C$VLOmk{>{9UT$YsL7}wA3=EwW7$C z=`72$mzP630b8e5ivPvhcx_yOOE|_et+?Dw#V3)#)0}oYnO|*pU6)(zwkvm8fjF(S z$W@eETy(2F)rntuxy4!bJSsnHg>awhwCB3)*2OqI(OQA?_ax4;m*hGM%ba#$Mh?L= zyAW>kvs}4(i>`L(I&*PAqn+JLD@R#baduIO-5KaU&=BTxa*JHk%ACDCq(U?ofN!~$ zT3l9c?`2Ej%Xs-Mh!2_j;zi*oLvr7fkI!aWvAevGbA1kS#6HzsP+)hW1mr`RnqIWP znd@9Sr_f%iA~wtJayv`m3Yneib~=$=%%sdY!(FmKq?tItKD}%q<+IN|t+b%bS;F;> z^LJ^vp(>2yYJi4-QpE3F)| zRg{04MS5yRuEQ5^Mq_KRNddmnCcuoMloL0G^}F~kApF~z2a$Lj5}<^WBN|=>(987 z@c_mxjAIxld@tRr#%(=g9O5LNPR2OBNjy0}NcY1Sw=h1Bu?bTJ)Q*l|oWt0}IH6nG zk7T@_@%fC`>SX&ZYqh3zF<#2{F+tM)R>p~pzh|7yxSMef<5}7jS_1yYX?>BG@tR31 zKnqo-Y^3lHK3r-x2ruZlN_$wcFa4ZA2 zg<7HD>p+-!@J}%y?j~R-Y~5&M$*l`vQyhCfiht67fj@CwjFdSMUa2pXo?%G-W06BD ze{!`2B7QC{R=WtXEJQrZK^GvF#LRCkau^R4fC-RpDLk3lD3;M5&or)?C0OA0+3LRw|Ps5t3hW z{2Ud(|BAengLA&%ZNmRj5$_@qc9C|gNR15FADWWSahhL#etLe9>@4{&hSyV`RL-jM zKRxy&8%oAbkN^09`kIP5mkrk{9cSX@uctD<$7^GK*- zq^U4VkRw!MrA;p4K(b6_PJP7)#H$dTsP!OzR94h>P-tY9i+2HJgxX-TH)%`Zo1}^C zs1+{u`H&@f>1lO9rN`gCt9V?_-e|0~DhS{c=LGL0?pAiAgdF@LzpBRLZ2(sC3P*T!dQ+ z*;RE;$(O%{e;)M%J$zt$#!c5hF{}ui$m2`#i+Bb;8Hib);6&fR z0>sp$T?aFgBKcKG)#C7HIxVK@aJ4|h%Ly5zC(B)`Wk6Ywjj`n%d%l)k=+>q=i?pm< z7un_K!WrxZg`0Bv0e7YHmy8wsIE4iu{0g^%cP<80jHc(7YSZisw2WM*W_CD1muk}y z_H=i#W_B;c*vO&H%yVfo$`)%DyBq?;55}NN$)8jF08{wSD+C3PA{t|ZhZx6zk4O-B zxy!||zZuvte`haK6`t~~!liGC-;DfE2Y-t9G;m%3N;RIw`(`1(5>pJP zb2^DqS(rf=f@Z;=19YZnOElEUGSq4;tAII`tmIF!Dy2|{L$ywsz!4r9ZXR+=J~Di2 z^W-DL_YGr3e5h?zkBkp}Wu!pJc**ZL_0%a%^vHOYA+6F(##er4{H|2|dzzaOOL{Vy z((erXU4}f($N!}P@gWoXy970p+|VC=!=wqhl&)=>4Xs9rXglbOrygoUkBYrZ%Q?ncj^2j7P3yvin<+lkw=6%wW6-dl+Z$kMap!>Ff}nvV4A`-lW7i92h(LtYnZNOx}NDqrdyc4!nB!b3)8om zwlaO6X&ci|nR=OaGX0*Z7A4aW%ruN?6jLM9flOnV4r6L!I+|%L(@U5pFrC0Ok?AC+ zDNHR)ZA{adW-`rYI+y89Ommp#Gc9CV%+$fu#k7KH4byc@*E8M7w3%ru(@v(wzB0cO zm}W9{FkQ>Eo@pynt)KK~VrpYr$h3m#GNv_5*D-yCX*1JSre3CD2FX8`X(rPOrt6uu zFzsX-W0d|;v$?wz3dMz`=ugn2Y$>9qQu`8NNWb&##deonn~dLAq02J~i&aPB_hcB1#CzjB z>9WjWcjiJ>N+=%gE(VQ@!|!;!^cyb@Vu9VoXmK@d3|_F(CV>a_q^<(J1T^*{-0BPZ zGrY_2UI0(a@Z)0G$Kj2~dl}v_c&~z|NnmgRelNrOGrT#A3tYJiitQJ|FFiSn7xcoE zNf&B4uB8rpS%Gq<s;sA{WJeS@6eiyJf|r5!}oCywD#G{=%0-X z@hNh;+{lUiqH;%ZE;?OMv70apq0(tDH2p|aWWM{|`SZ%;k5Z1`{_jR9C$G%0^lX_% z>2~M4OinQ?Ac`r+YSVINWoM^}SioMEt4}I=;xjWQ`B!o+3&gIVmQz+zT4W*_Dla0b z$nj^AtSNzoO7ZJ$f8)F!E^;rYA4`P}`a$Wgja%f}z#-=n^} z#FSbuF=l`|DgkE^hzgXx~vv_;{J-Tdoz5={ z*haJJwyM?Dx8G4yyT)^8-7oH1d-pxRy!XCe-M{XEUqATJ!;d_={;|iOc=9(-J-y+# zzx(|&fB56G8=w2r^Dn%(X>YrstD2+x4;VP;oO5Fa4;eaa_<18tBhMc-ddvkE#$I%B+$HgsUY0O+ z-1rHXUvXt((!}IRldqbRlDhx{fr5pFMK>=hE-5W@+~O>Exfd^~SbFP?H_iLm{G7Af z|9si<6)XRz)Bism{(n3F%~Mk?)@fJU(xzXNo-t!)=C!l3va!!>?)5jw{6D+>zeWD5 z%FuSX9B-=i7+%J-?unjG#%k?W7vm6Vt%Y47{f9C(GVa4ThH)5U6XS5kv5b}WJAtuU zJC?{eiruF$?#tN5xF6$8##k0Cp1F+GdXXH)YQ0Dyr2)#9xSc3^^Dc}k`0X2`jU-|hq3#5#={vmFg}lQGh?;hq=m7G?OPd- zWZcGBtvB&99>w;Zj7Kx>Voc+0@mwj(o5tewgfZrBs%B)2VYql=7}I#39us34&(jmj zn8xn(Brv8iKRtSF(KlODB~2yeHdpl z4r83dIGk};s0=@nv4icS7*{gx%Xls0evH>MHZb1E*vPnnaWrG4fA7y&>EG#?QhHk0 z{XoWTj0Z99WPA=|ElI{dhOv?HV8$lKLl`G89?Cd{@i4}jjE6JMVSFBA2jdZpD;b*@ zuVp-v@p{JRGv3H}6ypZQqZzj_9>che@db=K8DGd)n<&$N5o06ciy503$1zS|d(n3D;Q5;T*LTs#_Jeg!FU7XD;d`_PGsE7IEis9WO`>YHZs1Bv5D~<#tDpXV4T9(&N!3tBE~t4iy1o@uVP%u zSjQcZwTy!qt9i9PjMuY$IOC0sBN#U@j$+)x*vPnz@c_o1j0ZB-Cd>Rdhq00I5XL6P z!x<+szJ#%jaWdl^##b?RFivG$$#@atb&Pe~q1wQh?wzKmo^c<>&5Xktw=#}k>}4Fq zxQp=+#$i{<^y1P>@t7DdVw}KO#~rj3#=(p;8TVnF!#JF=gK-4oO2$!)*D@Z$cs=7} z#v2*yxP#ZgIGAw@<35br7>6_NWE{a*nyD;N)9T*Ek-@p{HO?oe)I9L~6baRlQQ#zPplF-~UO#aL&OhH(Vr zSjNeW6B+A9OaC_IpYdGfpK+n`&$vSQkCpywlz+zSlz+w>l>1Ah`+DV`akFyIxK+7N zknX+8J>xFro^hC2re8Nfx{qNT&N!BF1mi^IK2f^2DSO6qmHi}XU#RRES19`wX|p#3<4VT+8LwshTgK}dzr=VWH7Wvr#j{AgyJ!2N19PBOAR-3>rbEaOEIYHD1j#&IcZpU3uU z+^)v;nQYHupye=L&h8zIH!J?V^Z+$%Z)N*19tQ?9UdQ%oT(g1k9c*u8_exJt&-N^a zS`6DOy+JeEKhFMJ8Q;y=%UF$@x)?vt_F)#8zrSa!#xZK#7Q^-)wl{J3eHh2Gy&8wb zvV9oaC$jw$jBSkHVmz1eGmHxv?_ylR_#VbJjJGge$M|)|8yLU9xSsL5jGGy^Fm7dh z4P!6k2F6{C4=_&P^o27Hv&#J2$2f-Z2aIDGA7q@!_zlK3#xF9S%eawoA>+3hS1^8( zaSh`?FkZ*_BgPvT|B`V%<2J_4jOh$5dRiIpkx=t8KEk+*@nObc(`5QTWE{iz5aU?J zI~Z$Re@8J+WP3G^PGozf_pq^jvEtA6N{=#^?F$t@E}sa-g>0YBcrN?DlyL>ymorXb z|B;Mq*#2I|>lpur@dn0!WL(cUgK;zCO^jO^zoIb5N9k3(Y+u9nO7EfcG+k`3^b9tR zZxp)^yIPiq(tG4Ef29YCVS5+5-@yL4+oQ#@{j+SJ$XMw;GTD7!wzskUOvbSsUM%Ce zY=1LjrAHgVxRC90m3!vjk8uUt^JiAeVS5AH*RcJ4jMp)~mT@7wH!|M9_Olpga(v?% z*R#Eov4ic$GHz!33gw>dCo*nj``eU%4nLZ)(j!e_>}B`0jJp_TF|J_#;~0n8Wce;- zY-IZ}jAPh-p>ogmqZ!AteF5V{#=l^k!tUc3+t|K@@m$7Lj9b_}mH>&TknL}0+`#t9 zj4RlFHRD3IPhecb_75{&$9M_j4UFB4>lx2xT*3L>pK&wW|B7)d<7~!W#`iO>Wd8#g zcd>mP<8>V0D;S5R$?{mixQ6`?WE{ix*D+qp_JbJ5vi%&!iHz4VwlThw@m$7_GA?Ai zf$=)#e-7gcwx7#*J=>qlxQ6YoXRP$1lNhgK`)bA;7(dOpp7CPkpYcPCH*$D`8Mm_i zjf|C^+^1J(`+Q~3_%+61(`9~dV;sYHBjZ@c^^6l4?`CXcypwS~$8QMZxom$EW7Ti} zgmEF;H!-ec{3_#hjGtn>k?{kJ8#uh7jGNj1*Nj^k&tqK4@;08am+fy=nC(*-cd`8% z#v9l^k#X2HGXE+WZ)E!<#xZQaig7c?cNpVXw*ML9M8>6zTiE?@#x}N}&v-3|cRAy^ zY`=`Lm;IX<7qa~V#;t6B9^(qO&tY7{{3j^P_Kz@L&-mwzP3-Ci)a?Sibw3C4z+Nn!VId=9)dJ9w8lF-gJdT8GjJ+u>po+6}#9yj}= zeF^lG`_d)DD;B#dG?+?U!11NMu=Eu2-h*7^96ff9R|)gYMNZJOi2c#dK6+@s9X)ie z1wD({{UYX9jy+2BxS22QjiiTmZ_`8jwdtYVv69O8)BYxUN__bu?Mv8vA*YY>n{uoi z;Zcszo=Da9l7Etqc*ua603MQ)cx@_ne#wXAC0?_#lxWy@t_Cb^2o zt_L{ScOk=NbynbNggTxRQk)cTY$|z z{^iJRvRC;*avG0aMK+EP$tz*SkK~r(r}&ZlQhF`yp5&PJt@z7}@@uN5zQ-ij6rRdo zyGWna7e2{(JYshp^CNjDtn!cKp2Ab{A^DGo>ly5x>H(!MgE7?y!Z+Z5I{dm={-}Ng z$_>?%c=%H3B6sodrP5I$^2LvD75@F0>Q|t9s%IouDqpF-ksPUVqk2c_Q1LDi>CEt@ zllHy_$_3R=il53ys;9J{N69(WSHh}ZP`xFr!l(L6<MLQJSX4WAq)O_D0ngxo^uKKl&a~ zXsW+T-y;f5l?#1;0{zSO!EawG(jVA9ko(L4IU#;oFzG4ZvR?b!vA}weD%x84J(F_g zum4icruy9d#NWN_)y_gTvAnZltKKuM?!C)+1KG8}(9DZ`=N-SP?K+p}Eh)B*pO zN%EyV;eqj=9)PKyUFSa}z~-Iq@3KHDcp(!JSNuF`#aKzxY*4Zi)E(!Hu}s=i$lU{CHd1KJ_Vk5u1x zUh+2wq@V0(`|5?XpW4fRW-t3|eexmWqgqYM58{{Q`)*5Y3y=e{pAqogC!Fa^zrVjP zzw{&*^vLh(t)TLe@ytbdfp`JF&Ve|ed#fs+>^!0qLc$m2A!P0@`tDBL5e|UU8uD zL_A`z_{;vY8f{U3n&gJgaFCB|PZoefJie@cKC+)pr79oU&(8DZGsPtyxvcU@_Pg`Z zOOcOk=j7gZGLhK7-&^NOblQS^WPQuU*F6v~@Wof! ztI?*a&w0N1OM8EMBrfvBPvV<>U+&o_4l+D{c}u(yauvwG&?h(2z67Tw1=`bDEP+^! z8Wn#!qpGKU&-gifax3{$uO`sFyO%wk2BYk$pF}5gDNOxVe|qFNg3bbyj~w?YtpVu` zsK2g8$x@F%`K|cL@1tLS6jtq!#PnbBr|)O6PadUxi8v#HT*!W`KYp^G?XQ<|-043L zL5?2+?TJ6tTlvU-iPB0)y+=HxQPl@IPNFkQJF$)6m*(SP~KalO(WNqthF z{K$U3(lU`fg&*ji`1{)fIS%v3N9qZbR*Lj7B=26(3c9=)@(`MXB+T-#qYpDEqDD$oDh3m*zd)lYFYs zDZPYMYzfnNolcEa@u4`73;E@i<7|I^)5#`*@+BvxBTBmUv7@dP<~N~C^C6W>Kgd6J|&b1nn^$S<|+B%x+-ktYHEm`^I{e`WX? zXr1VbP=s{T8FrL5I#Wl+TgutLGJHC-$l=RT${jk@$=|1?GWb`9?@vFKpR76m{P3v! zD=Pg# zSK|Hq@|j7;jW0Fb;dOnnX4#j}Dd;dN5=OJ^(#Em5vkP zQXP;S+os|xuDJ>7kClSuysiHV<%Uu%S{wgJUBpnDG_-qm;qNc{{s{Q__ zQHNY7(wkrG?K+lT`8xzQwC%ccD>&|Cg3-@ zAs*@pj34p+N1nmha2hcIC*s}{>Zn+OTczN6@aQmYkjtPA%I~KQ%I>QTx+l7g>{4Ji zG9*X~nGmJ57&Yw*ECO{QUL#>1hzFk+su}VPnqfje&2Ueo;7fjW1~TshbI@^-4&AvC z+PV3CwR5whv~$M|=!|YNwDfI=bjUCwwe{y{+PyKF_CALZhzD1MY85V{=0F(Xe+tT^ z_+_g2A?)=-kd6y9E#?Lpzd)>upfrbS5#vG~y3imkbX-sZyJ41pJ34X|0yyv8k>g)Oz5Kx7-w)0FOtn=S83XB@jl97zKq{T@zyhr z4v4$*b7Km|iFlQtTk-obygom}BD7)1lVQlKVa}LN#J;6}gHeR3(=;v8ihC+Bh}@^b zF!j|;+ec_7*LgU%Z@6ZfFibP)Vzj}X=e7-M(KHoq3;gJ@;NWlUFABdO#YCpUvb-Zv z-VvH%7Rq~gls4QIsSVGM(1vG+Yr`jmX~V|}t_?bD)b2YWT4rrieMW6q_UUOH93QC-&A(O~nw_Z) zoiI}ys++D2?CjrWbZDB8Y07jwln>FyP|fJ-qZz^1I4-J9mG4(r>=&JbcIabrDIejU zWM@{8PhKYFYT9bN@$8OeD>Is9O!0d#U(=q$8^wz-WtsL7@~GTQgd*&2ywjLhG^PF1 zNTeS$A9;Yh8$4@Jr*i)-7Nq|UlP${q;4u-}IoZ+LITMW9InMr_#HT zAmZjko?=7lK;-8@(6ULbQ`ruR4nr62!X#~off{1@Sg>s-vfZY#x={M16(Z(3Gb0PcZ&hoc0ir+&}jf{d) z^Iqns>l38)(LE^q6A$rPeX_!I7goultB4IZKsag5M93@ zt>3ta1X%~7Q3s5gVL$xF_qC32^@mJGBThzbKx)5xB09s`LR*3xf;j&K9}y$Lij?u0f(M}uhiJ}~q>EOJQc^m~ff;^#ak{ltATPRP0 z;CADEn)X+`f8sn@j^BNMrD^XmjuvqXN1BiisMjhluY;Rryx%H!Qto~BA@^(AP`pa+ zMZ73Z{SiMQFK8#TLm)4~+Q9xsM|54@;Pw+}v`X&>Poqw3Efe6J=% zYJB;oKVjD1T18Z z#-R`fw9E93QfYho3DjAkV3qAfF^ z4Emuh>x*(gdE7Io?QCh@`&;BIUX^B@DC20&_$NrABQ$d`4ua@AVW8IcsQix8JltR$ z9uav|ww)xO!Yn>Y8{rzHjmRIUjhN718}TRK_dt9@=aRpRBk`>`PaCEisGTW~*1?Tv z2W|u9Hc+M{f_o&Q#PW#qA+42v>3E+F=*dnP$n_` z2e#3-Pkf6%9f0p~wAO!rWTr^Z`QS4GGN}uA<+gUm+j z{MEXEq^0K*1lS4ln7p2LMsmh|JJqj?fzev#Mb_$3ed$1Vu}R9-Ph$t$vk5IjSQHwC zO>ZHv18)W1mT{V9LKwH>_dR%#bK2DGSyn5JDtnAt&pMvayuu&6;`wkPcywyo+ya04 zx?tuwD(!p!|Ia<2GN1l)&!^0X|J(O`Ht~&wbXnaTEh2>Pt;;Mc!nKG_P5U}T+%8Dg z+DdsFp}gi!8yJK!Jl`QG?=wt8-_96d$_L%UxKrJGh|3KNp^z9qE~_-xQC?VvUdW0N z>3jURX+=20PwUdpbl6L!nWp_dm^67Me3c^B3xs63%VD3-4p#bn&#+g3TM31qQI_v6 zw##_p+kTgB8qV4WpE5Ue5OcIY>eHdLQW*V5f% Z_ZMOf@GU1G+w3(V-bmPn-7p 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 N7c6`G*MF-A{sq}2QK|p{ diff --git a/bin/install.bat b/bin/install.bat deleted file mode 100644 index e33e2f8..0000000 --- a/bin/install.bat +++ /dev/null @@ -1,8 +0,0 @@ -@echo off -RDPWInst -i -echo ______________________________________________________________ -echo. -echo You can check RDP functionality with RDPCheck program. -echo Also you can configure advanced settings with RDPConf program. -echo. -pause diff --git a/bin/uninstall.bat b/bin/uninstall.bat deleted file mode 100644 index ace7aa5..0000000 --- a/bin/uninstall.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -RDPWInst -u -echo. -pause diff --git a/res/rdpw32.dll b/res/rdpw32.dll deleted file mode 100644 index 6bc21c83ada1f75dc88c0c980d039a6d8dff9663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86528 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®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 XrW&2e7gAu=-4tx` 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%0A;( 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 Date: Thu, 11 Dec 2014 01:18:05 +0300 Subject: [PATCH 053/208] Configurator updated --- src-rdpconfig/MainUnit.dfm | 7 +++++ src-rdpconfig/MainUnit.pas | 53 ++++++++++++++++++++++++++++++++++++- src-rdpconfig/resource.res | Bin 12936 -> 12936 bytes 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src-rdpconfig/MainUnit.dfm b/src-rdpconfig/MainUnit.dfm index f342a77..49a9004 100644 --- a/src-rdpconfig/MainUnit.dfm +++ b/src-rdpconfig/MainUnit.dfm @@ -196,6 +196,13 @@ object MainForm: TMainForm Height = 13 Caption = 'ver.' end + object lsSuppVer: TLabel + Left = 182 + Top = 55 + Width = 70 + Height = 13 + Caption = '[support level]' + end end object Timer: TTimer Interval = 250 diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index 306a7b7..8feeccf 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -46,6 +46,7 @@ type lsWrapVer: TLabel; bLicense: TButton; gbDiag: TGroupBox; + lsSuppVer: TLabel; procedure FormCreate(Sender: TObject); procedure cbAllowTSConnectionsClick(Sender: TObject); procedure seRDPPortChange(Sender: TObject); @@ -88,6 +89,7 @@ var Ready: Boolean = False; Arch: Byte; OldWow64RedirectionValue: LongBool; + INI: String; function WinStationEnumerateW(hServer: THandle; var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall; @@ -440,11 +442,29 @@ begin Reg.Free; end; +function CheckSupport(FV: FILE_VERSION): Byte; +var + VerTxt: String; +begin + Result := 0; + if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 0) then + Result := 1; + if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 1) then + Result := 1; + VerTxt := Format('%d.%d.%d.%d', + [FV.Version.w.Major, FV.Version.w.Minor, FV.Release, FV.Build]); + if Pos('[' + VerTxt + ']', INI) > 0 then + Result := 2; +end; + procedure TMainForm.TimerTimer(Sender: TObject); var - WrapperPath: String; + WrapperPath, INIPath: String; FV: FILE_VERSION; + L: TStringList; + CheckSupp: Boolean; begin + CheckSupp := False; case IsWrapperInstalled(WrapperPath) of -1: begin lsWrapper.Caption := 'Unknown'; @@ -457,6 +477,10 @@ begin 1: begin lsWrapper.Caption := 'Installed'; lsWrapper.Font.Color := clGreen; + CheckSupp := True; + INIPath := ExtractFilePath(ExpandPath(WrapperPath)) + 'rdpwrap.ini'; + if not FileExists(INIPath) then + CheckSupp := False; end; 2: begin lsWrapper.Caption := '3rd-party'; @@ -529,6 +553,33 @@ begin IntToStr(FV.Release)+'.'+ IntToStr(FV.Build); lsTSVer.Font.Color := clWindowText; + lsSuppVer.Visible := CheckSupp; + if CheckSupp then begin + if INI = '' then begin + L := TStringList.Create; + try + L.LoadFromFile(INIPath); + except + + end; + INI := L.Text; + L.Free; + end; + case CheckSupport(FV) of + 0: begin + lsSuppVer.Caption := '[not supported]'; + lsSuppVer.Font.Color := clRed; + end; + 1: begin + lsSuppVer.Caption := '[supported partially]'; + lsSuppVer.Font.Color := clOlive; + end; + 2: begin + lsSuppVer.Caption := '[fully supported]'; + lsSuppVer.Font.Color := clGreen; + end; + end; + end; end; end; diff --git a/src-rdpconfig/resource.res b/src-rdpconfig/resource.res index 883012d4552a667bc99ecb17ced65686f59fde37..f75051114072514b6b787bad79a65815be990e87 100644 GIT binary patch delta 36 pcmeB3?MU5lMw^q7fsp|OST|qQmS$u$-273en~~9UbFCgX3jn#R36cN+ delta 36 pcmeB3?MU5lMw^p?fsp|OST Date: Thu, 11 Dec 2014 01:42:25 +0300 Subject: [PATCH 054/208] Update README.md For new release --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 490d9fe..a06f848 100644 --- a/README.md +++ b/README.md @@ -57,12 +57,24 @@ Files description:
RDPWInst.exeRDP Wrapper Library installer/uninstaller RDPCheck.exeLocal RDP Checker (you can check the RDP is working) +RDPConf.exeRDP Wrapper Configuration install.batQuick install batch file uninstall.batQuick uninstall batch file
Change log:

+2014.12.11
+• Version 1.5
+• Added INI config support
+• Configuration is stored in INI file now
+• We can extend version support without building new binaries
+• Added support for Windows 8.1 with KB3000850
+• Added support for Windows 10 Technical Preview Update 2
+• Installer updated
+• RDP Config updated
+• Diagnostics feature added to RDP Config
+
2014.11.14
• Version 1.4
• Added support for Windows 10 Technical Preview Update 1
@@ -145,8 +157,10 @@ Change log:
6.3.9431.0 (Windows 8.1 Preview)
6.3.9600.16384 (Windows 8.1 / Server 2012 R2)
6.3.9600.17095 (Windows 8.1 with KB2959626)
+• 6.3.9600.17415 (Windows 8.1 with KB3000850)
6.4.9841.0 (Windows 10 Technical Preview)
6.4.9860.0 (Windows 10 Technical Preview Update 1)
+• 6.4.9879.0 (Windows 10 Technical Preview Update 2)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
From 33e3e3664cad4ed356d4750def9fac725b9fe88a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 11 Dec 2014 01:52:25 +0300 Subject: [PATCH 055/208] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a06f848..691726f 100644 --- a/README.md +++ b/README.md @@ -193,14 +193,14 @@ Change log:
• Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386 : RDP works, but termsrv.dll crashes on logon attempt)

Installation instructions:
-1. Download and unpack files
+1. Download latest release binaries and unpack files
2. Run Command Prompt (cmd) as administrator
-3. Change directory to /bin (where binaries and batch files are placed)
+3. Change directory to where you extracted the files
4. Type install.bat and press Enter
5. See command output for details

To uninstall:
1. Run Command Prompt as administrator
-2. Change directory to /bin
+2. Change directory to where you extracted the files
3. Type uninstall.bat and press Enter
4. See command output for details
From 5a37f663bc2c1e762eea7cb8d366a03d14f4e447 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 11 Dec 2014 22:44:05 +0300 Subject: [PATCH 056/208] Updates discovered --- technical.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/technical.txt b/technical.txt index 12286bc..81c0989 100644 --- a/technical.txt +++ b/technical.txt @@ -3,7 +3,12 @@ RDP Wrapper Library project by Stas'M Terminal Services supported versions 6.0.X.X (Windows Vista, any) [policy hook only] 6.0.6000.16386 (Windows Vista) [policy hook + extended patch] +6.0.6000.20723 (Windows Vista with KB944917) [todo] 6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] +6.0.6001.22286 (Windows Vista SP1 with KB958612) [todo] +6.0.6001.22357 (Windows Vista SP1 with KB958612 v2) [todo] +6.0.6001.22323 (Windows Vista SP1 with KB960742) [todo] +6.0.6001.22392 (Windows Vista SP1 with KB968680) [todo] 6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] 6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] 6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] @@ -12,16 +17,27 @@ Terminal Services supported versions 6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] 6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] 6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] +6.0.6002.22790 (Windows Vista SP2 with KB2672601) [todo] 6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] 6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] 6.1.X.X (Windows 7, any) [policy hook only] +6.1.7100.0 (Windows 7 Release Candidate) [todo] 6.1.7600.16385 (Windows 7) [policy hook + extended patch] +6.1.7600.20661 (Windows 7 with KB951422) [todo] +6.1.7600.21085 (Windows 7 with KB951422 v2) [todo] +6.1.7600.20621 (Windows 7 with KB979470) [todo] 6.1.7600.20890 (Windows 7 with KB2479710) [todo] 6.1.7600.21316 (Windows 7 with KB2750090) [todo] +6.1.7600.21420 (Windows 7 with KB2800789) [todo] 6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] +6.1.7601.21855 (Windows 7 SP1 with KB951422 v2) [todo] 6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] 6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] 6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] +6.1.7601.22213 (Windows 7 SP1 with KB2800789) [todo] +6.1.7601.22476 (Windows 7 SP1 with KB2870165) [todo] +6.1.7601.22435 (Windows 7 SP1 with KB2878424) [todo] +6.1.7601.22477 (Windows 7 SP1 with KB2896256) [todo] 6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] From 657ee646d5ad902caed22f716a87034ef518cec7 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 13 Dec 2014 14:39:58 +0300 Subject: [PATCH 057/208] Config: update policy values --- res/rdpwrap.ini | 10 ++++++++-- technical.txt | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 90f7315..c60341a 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2014-12-10 +Updated=2014-12-13 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -31,8 +31,14 @@ TerminalServices-RDP-7-Advanced-Compression-Allowed=1 TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 ; Max Sessions (hard limit) TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 -; EasyPrint +; Allow EasyPrint TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 +; Allow PnP Redirection +TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 +; Allow Media Foundation plugins +TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 +; Allow DWM Remoting +TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 [PatchCodes] nop=90 diff --git a/technical.txt b/technical.txt index 81c0989..62134f6 100644 --- a/technical.txt +++ b/technical.txt @@ -61,6 +61,9 @@ Known failures Source code changelog (rdpwrap library): +2014.12.13 : +- Added more policy values to INI file + 2014.12.10 : - C++ version seems to work well now! - added support for termsrv.dll 6.4.9879.0 From 513a7a1ebf6daeccfc98adec64a95eeea21f455e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 24 Jan 2015 20:36:45 +0300 Subject: [PATCH 058/208] 10.0.9926.0 x64 contributed by v-yadli --- res/rdpwrap.ini | 41 ++++++++++++++++++++++++++++++++++++++++- technical.txt | 7 +++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index c60341a..bc3bf18 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2014-12-13 +Updated=2015-01-22 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1276,6 +1276,34 @@ SLInitHook.x64=1 SLInitOffset.x64=24750 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.9926.0] +; x64 contributed by v-yadli +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +;;;OFFSET = 0x61 +;;;BASE = 0x95F90 +LocalOnlyOffset.x64=95FF1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +;;;OFFSET = 0x43 +;;;BASE = 0x12F90 +;;;;instruction = 0xBB 0x01 0x00 0x00 0x00 +;;; ^^^ +1 offset +SingleUserOffset.x64=12A34 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +;;; +;;;BASE = 0xBDF0 +;;;OFFSET = 0x15 +DefPolicyOffset.x64=BE05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24EC0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1418,3 +1446,14 @@ bMultimonAllowed.x64 =EDC00 bServerSku.x64 =EDC04 ulMaxDebugSessions.x64=EDC08 bRemoteConnAllowed.x64=EDC0C + +[10.0.9926.0-SLInit] +; x64 contributed by v-yadli +bFUSEnabled.x64 =EEBF0 +lMaxUserSessions.x64 =EEBF4 +bAppServerAllowed.x64 =EEBF8 +bInitialized.x64 =EEBFC +bMultimonAllowed.x64 =EEC00 +bServerSku.x64 =EEC04 +ulMaxDebugSessions.x64=EEC08 +bRemoteConnAllowed.x64=EEC0C diff --git a/technical.txt b/technical.txt index 62134f6..b5125df 100644 --- a/technical.txt +++ b/technical.txt @@ -55,12 +55,19 @@ Terminal Services supported versions 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] 6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview Update 2) [init hook + extended patch] +10.0.9926.0 (Windows 10 Technical Preview Update 3) [init hook + extended patch] [!todo x86] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2015.01.24 : +- Researching Windows 10 Technical Preview Update 3 (10.0.9926.0 x86) + +2015.01.22 : +- v-yadli contributed offsets for version 10.0.9926.0 (x64) + 2014.12.13 : - Added more policy values to INI file From ca36e9f49fcdbecd0659d1a05498bba431591f41 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 27 Jan 2015 14:25:29 +0300 Subject: [PATCH 059/208] Support for 10.0.9926.0 (x86) --- .gitignore | 14 ++++++++++---- res/rdpwrap.ini | 26 +++++++++++++++++++++++++- src-x86-binarymaster/rdpwrap.dproj | 8 ++++---- technical.txt | 7 ++++--- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 4081324..f0d086f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,12 @@ -# Unnecessary files - -*.~pas -*.dproj.local +# Delphi local files (user-specific info) +*.local *.identcache + +# Delphi history and backups +__history/ +*.~* + +# Compiled binaries *.dcu +*.exe +*.dll diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index bc3bf18..5f83a5a 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2015-01-22 +Updated=2015-01-26 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1277,6 +1277,22 @@ SLInitOffset.x64=24750 SLInitFunc.x64=New_CSLQuery_Initialize [10.0.9926.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8C28 +LocalOnlyCode.x86=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=31725 +SingleUserCode.x86=nop +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CF99 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=3F140 +SLInitFunc.x86=New_CSLQuery_Initialize ; x64 contributed by v-yadli ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x64=1 @@ -1448,6 +1464,14 @@ ulMaxDebugSessions.x64=EDC08 bRemoteConnAllowed.x64=EDC0C [10.0.9926.0-SLInit] +bFUSEnabled.x86 =C17D8 +lMaxUserSessions.x86 =C17DC +bAppServerAllowed.x86 =C17E0 +bInitialized.x86 =C17E4 +bMultimonAllowed.x86 =C17E8 +bServerSku.x86 =C17EC +ulMaxDebugSessions.x86=C17F0 +bRemoteConnAllowed.x86=C17F4 ; x64 contributed by v-yadli bFUSEnabled.x64 =EEBF0 lMaxUserSessions.x64 =EEBF4 diff --git a/src-x86-binarymaster/rdpwrap.dproj b/src-x86-binarymaster/rdpwrap.dproj index 36208c0..2b81a43 100644 --- a/src-x86-binarymaster/rdpwrap.dproj +++ b/src-x86-binarymaster/rdpwrap.dproj @@ -42,14 +42,14 @@ Base - - Cfg_2 - Base - Cfg_1 Base + + Cfg_2 + Base + diff --git a/technical.txt b/technical.txt index b5125df..f9563fc 100644 --- a/technical.txt +++ b/technical.txt @@ -55,15 +55,16 @@ Terminal Services supported versions 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] 6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview Update 2) [init hook + extended patch] -10.0.9926.0 (Windows 10 Technical Preview Update 3) [init hook + extended patch] [!todo x86] +10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): -2015.01.24 : -- Researching Windows 10 Technical Preview Update 3 (10.0.9926.0 x86) +2015.01.26 : +- Researching Windows 10 Pro Technical Preview (10.0.9926.0 x86) +- added support for termsrv.dll 10.0.9926.0 (x86) 2015.01.22 : - v-yadli contributed offsets for version 10.0.9926.0 (x64) From 782dc346a9c60abc5817d4acae8d3f77d163ad63 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 23 Mar 2015 15:28:50 +0300 Subject: [PATCH 060/208] New build has been discovered, obtaining files --- technical.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/technical.txt b/technical.txt index f9563fc..b6eb369 100644 --- a/technical.txt +++ b/technical.txt @@ -53,15 +53,19 @@ Terminal Services supported versions 6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] 6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] -6.4.9860.0 (Windows 10 Technical Preview Update 1) [init hook + extended patch] -6.4.9879.0 (Windows 10 Technical Preview Update 2) [init hook + extended patch] +6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] +6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] 10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] +10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [!todo] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2015.03.20 : +- New build 10.0.10041.0 was released, obtaining files... + 2015.01.26 : - Researching Windows 10 Pro Technical Preview (10.0.9926.0 x86) - added support for termsrv.dll 10.0.9926.0 (x86) From fd565338979fde947c05bd7118635c6476259e6c Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 23 Mar 2015 18:13:24 +0300 Subject: [PATCH 061/208] Add support for 10.0.10041.0 --- res/rdpwrap.ini | 86 ++++++++++++++++++++++++++++++++++++++++++++++++- technical.txt | 12 ++++--- 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 5f83a5a..3feaf5c 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2015-01-26 +Updated=2015-03-23 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1320,6 +1320,71 @@ SLInitHook.x64=1 SLInitOffset.x64=24EC0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.10041.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A9D7B call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A9D80 test eax, eax +; .text:100A9D82 js short loc_100A9D9F +; .text:100A9D84 cmp [ebp+var_C], 0 +; .text:100A9D88 jz short loc_100A9D9F <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9D88 +LocalOnlyCode.x86=jmpshort +; .text:0000000180097133 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:0000000180097138 test eax, eax +; .text:000000018009713A js short loc_18009715B +; .text:000000018009713C cmp [rsp+58h+arg_18], 0 +; .text:0000000180097141 jz short loc_18009715B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=97141 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10032211 lea eax, [esp+150h+VersionInformation] +; .text:10032215 inc ebx <- nop +; .text:10032216 mov [edi], ebx +; .text:10032218 push eax ; lpVersionInformation +; .text:10032219 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=32215 +SingleUserCode.x86=nop +; .text:0000000180015C5E call memset_0 +; .text:0000000180015C63 mov ebx, 1 <- 0 +; .text:0000000180015C68 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180015C70 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180015C75 mov [rdi], ebx +; .text:0000000180015C77 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=15C64 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1002DFC9 cmp eax, [ecx+320h] +; .text:1002DFCF jz loc_10056550 +; Changed +; .text:1002DFC9 mov eax, 100h +; .text:1002DFCE mov [ecx+320h], eax +; .text:1002DFD4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DFC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018000B795 cmp [rcx+63Ch], eax +; .text:000000018000B79B jz sub_18003A79A +; Changed +; .text:000000018000B795 mov eax, 100h +; .text:000000018000B79A mov [rcx+638h], eax +; .text:000000018000B7A0 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B795 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46960 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E40 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1481,3 +1546,22 @@ bMultimonAllowed.x64 =EEC00 bServerSku.x64 =EEC04 ulMaxDebugSessions.x64=EEC08 bRemoteConnAllowed.x64=EEC0C + +[10.0.10041.0-SLInit] +bFUSEnabled.x86 =C5F60 +lMaxUserSessions.x86 =C5F64 +bAppServerAllowed.x86 =C5F68 +bInitialized.x86 =C5F6C +bMultimonAllowed.x86 =C5F70 +bServerSku.x86 =C5F74 +ulMaxDebugSessions.x86=C5F78 +bRemoteConnAllowed.x86=C5F7C + +bFUSEnabled.x64 =F3448 +lMaxUserSessions.x64 =F344C +bAppServerAllowed.x64 =F3450 +bInitialized.x64 =F3454 +bMultimonAllowed.x64 =F3458 +bServerSku.x64 =F345C +ulMaxDebugSessions.x64=F3460 +bRemoteConnAllowed.x64=F3464 diff --git a/technical.txt b/technical.txt index b6eb369..0c49cd5 100644 --- a/technical.txt +++ b/technical.txt @@ -56,25 +56,29 @@ Terminal Services supported versions 6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] 10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] -10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [!todo] +10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2015.03.23 : +- researching Windows 10 Pro Technical Preview UP1 +- added support for termsrv.dll 10.0.10041.0 + 2015.03.20 : -- New build 10.0.10041.0 was released, obtaining files... +- new build 10.0.10041.0 was released, obtaining files... 2015.01.26 : -- Researching Windows 10 Pro Technical Preview (10.0.9926.0 x86) +- researching Windows 10 Pro Technical Preview (10.0.9926.0 x86) - added support for termsrv.dll 10.0.9926.0 (x86) 2015.01.22 : - v-yadli contributed offsets for version 10.0.9926.0 (x64) 2014.12.13 : -- Added more policy values to INI file +- added more policy values to INI file 2014.12.10 : - C++ version seems to work well now! From 867c271cb3f53db8708c252f6250d0668a5fee3b Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 23 Jun 2015 20:03:14 +0300 Subject: [PATCH 062/208] Readme: Update issues section --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 691726f..4af77a8 100644 --- a/README.md +++ b/README.md @@ -189,8 +189,11 @@ Change log:
• Windows 8.1 Enterprise
• Windows 10 Technical Preview

-Working partially:
-• Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386 : RDP works, but termsrv.dll crashes on logon attempt)
+Known issues:
+• RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386)
+• If Terminal Services hangs at startup, try to add rdpwrap.dll to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
+sc config TermService type= own
+• RDP Wrapper Installer can be removed by AVG Free Antivirus after reboot - add it to exclusions.

Installation instructions:
1. Download latest release binaries and unpack files
From 97d0b920540894a3c0b8b8161f4e8c5e35f62a3e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 16 Jul 2015 21:43:08 +0300 Subject: [PATCH 063/208] Update tech log --- technical.txt | 117 ++++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 56 deletions(-) diff --git a/technical.txt b/technical.txt index 0c49cd5..c615952 100644 --- a/technical.txt +++ b/technical.txt @@ -1,68 +1,73 @@ RDP Wrapper Library project by Stas'M Terminal Services supported versions -6.0.X.X (Windows Vista, any) [policy hook only] -6.0.6000.16386 (Windows Vista) [policy hook + extended patch] -6.0.6000.20723 (Windows Vista with KB944917) [todo] -6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] -6.0.6001.22286 (Windows Vista SP1 with KB958612) [todo] -6.0.6001.22357 (Windows Vista SP1 with KB958612 v2) [todo] -6.0.6001.22323 (Windows Vista SP1 with KB960742) [todo] -6.0.6001.22392 (Windows Vista SP1 with KB968680) [todo] -6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] -6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] -6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] -6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] -6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] -6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] -6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] -6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] -6.0.6002.22790 (Windows Vista SP2 with KB2672601) [todo] -6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] -6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] -6.1.X.X (Windows 7, any) [policy hook only] -6.1.7100.0 (Windows 7 Release Candidate) [todo] -6.1.7600.16385 (Windows 7) [policy hook + extended patch] -6.1.7600.20661 (Windows 7 with KB951422) [todo] -6.1.7600.21085 (Windows 7 with KB951422 v2) [todo] -6.1.7600.20621 (Windows 7 with KB979470) [todo] -6.1.7600.20890 (Windows 7 with KB2479710) [todo] -6.1.7600.21316 (Windows 7 with KB2750090) [todo] -6.1.7600.21420 (Windows 7 with KB2800789) [todo] -6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] -6.1.7601.21855 (Windows 7 SP1 with KB951422 v2) [todo] -6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] -6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] -6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] -6.1.7601.22213 (Windows 7 SP1 with KB2800789) [todo] -6.1.7601.22476 (Windows 7 SP1 with KB2870165) [todo] -6.1.7601.22435 (Windows 7 SP1 with KB2878424) [todo] -6.1.7601.22477 (Windows 7 SP1 with KB2896256) [todo] -6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] -6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] -6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] -6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] -6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] -6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] -6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] -6.2.9200.16384 (Windows 8) [policy hook + extended patch] -6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] -6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] -6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] -6.3.9600.16384 (Windows 8.1) [init hook + extended patch] -6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] -6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] -6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] -6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] -6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] -10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] -10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [init hook + extended patch] +6.0.X.X (Windows Vista, any) [policy hook only] +6.0.6000.16386 (Windows Vista) [policy hook + extended patch] +6.0.6000.20723 (Windows Vista with KB944917) [todo] +6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] +6.0.6001.22286 (Windows Vista SP1 with KB958612) [todo] +6.0.6001.22357 (Windows Vista SP1 with KB958612 v2) [todo] +6.0.6001.22323 (Windows Vista SP1 with KB960742) [todo] +6.0.6001.22392 (Windows Vista SP1 with KB968680) [todo] +6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] +6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] +6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] +6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] +6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] +6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] +6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] +6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] +6.0.6002.22790 (Windows Vista SP2 with KB2672601) [todo] +6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] +6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] +6.1.X.X (Windows 7, any) [policy hook only] +6.1.7100.0 (Windows 7 Release Candidate) [todo] +6.1.7600.16385 (Windows 7) [policy hook + extended patch] +6.1.7600.20661 (Windows 7 with KB951422) [todo] +6.1.7600.21085 (Windows 7 with KB951422 v2) [todo] +6.1.7600.20621 (Windows 7 with KB979470) [todo] +6.1.7600.20890 (Windows 7 with KB2479710) [todo] +6.1.7600.21316 (Windows 7 with KB2750090) [todo] +6.1.7600.21420 (Windows 7 with KB2800789) [todo] +6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] +6.1.7601.21855 (Windows 7 SP1 with KB951422 v2) [todo] +6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] +6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] +6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] +6.1.7601.22213 (Windows 7 SP1 with KB2800789) [todo] +6.1.7601.22476 (Windows 7 SP1 with KB2870165) [todo] +6.1.7601.22435 (Windows 7 SP1 with KB2878424) [todo] +6.1.7601.22477 (Windows 7 SP1 with KB2896256) [todo] +6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] +6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] +6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] +6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] +6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] +6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] +6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] +6.2.9200.16384 (Windows 8) [policy hook + extended patch] +6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] +6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] +6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] +6.3.9600.16384 (Windows 8.1) [init hook + extended patch] +6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] +6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] +6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] +6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] +6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] +10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] +10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [init hook + extended patch] +10.0.10240.16384 (Windows 10 Pro RTM) [!todo] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2015.07.16 : +- obtained files from build 10.0.10240.16384 +- researching Windows 10 Pro RTM + 2015.03.23 : - researching Windows 10 Pro Technical Preview UP1 - added support for termsrv.dll 10.0.10041.0 From 09bfc748f4313300523e9837550e7cb3bc730c0a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 16 Jul 2015 21:48:52 +0300 Subject: [PATCH 064/208] Update readme --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 4af77a8..7541be9 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,8 @@ Change log:
6.4.9841.0 (Windows 10 Technical Preview)
6.4.9860.0 (Windows 10 Technical Preview Update 1)
6.4.9879.0 (Windows 10 Technical Preview Update 2)
+• 10.0.9926.0 (Windows 10 Pro Technical Preview)
+• 10.0.10041.0 (Windows 10 Pro Technical Preview Update 1)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
@@ -184,10 +186,14 @@ Change log:
• Windows 8 Enterprise
• Windows 8.1 Preview
• Windows 8.1
+• Windows 8.1 Connected (with Bing)
+• Windows 8.1 Connected Single Language (with Bing)
+• Windows 8.1 Single Language
• Windows 8.1 Single Language
• Windows 8.1 Pro
• Windows 8.1 Enterprise
• Windows 10 Technical Preview
+• Windows 10 Pro Technical Preview

Known issues:
• RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386)
From 6f23a18a243b2b139af8db433f9706f5637a5f5d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 16 Jul 2015 22:07:21 +0300 Subject: [PATCH 065/208] Update INI Move comments to KB file Actual INI now have smaller size --- res/rdpwrap-ini-kb.txt | 1576 ++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 844 --------------------- 2 files changed, 1576 insertions(+), 844 deletions(-) create mode 100644 res/rdpwrap-ini-kb.txt diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt new file mode 100644 index 0000000..dc58532 --- /dev/null +++ b/res/rdpwrap-ini-kb.txt @@ -0,0 +1,1576 @@ +[Main] +; Last updated date +Updated=2015-03-23 +; Address to log file (RDP Wrapper will write it, if exists) +LogFile=\rdpwrap.txt +; Hook SLPolicy API on Windows NT 6.0 +SLPolicyHookNT60=1 +; Hook SLPolicy API on Windows NT 6.1 +SLPolicyHookNT61=1 + +[SLPolicy] +; Allow Remote Connections +TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 +; Allow Multiple Sessions +TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 +; Allow Multiple Sessions (Application Server Mode) +TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 +; Allow Multiple Monitors +TerminalServices-RemoteConnectionManager-AllowMultimon=1 +; Max User Sessions (0 = unlimited) +TerminalServices-RemoteConnectionManager-MaxUserSessions=0 +; Max Debug Sessions (Windows 8, 0 = unlimited) +TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 +; Max Sessions +; 0 - logon not possible even from console +; 1 - only one active user (console or remote) +; 2 - allow concurrent sessions +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 +; Allow Advanced Compression with RDP 7 Protocol +TerminalServices-RDP-7-Advanced-Compression-Allowed=1 +; IsTerminalTypeLocalOnly = 0 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 +; Max Sessions (hard limit) +TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 +; Allow EasyPrint +TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 +; Allow PnP Redirection +TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 +; Allow Media Foundation plugins +TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 +; Allow DWM Remoting +TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 + +[PatchCodes] +nop=90 +Zero=00 +jmpshort=EB +nopjmp=90E9 +CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 +CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB +CDefPolicy_Query_eax_esi=B80001000089862003000090 +CDefPolicy_Query_eax_rdi=B80001000089873806000090 +CDefPolicy_Query_eax_ecx=B80001000089812003000090 +CDefPolicy_Query_eax_rcx=B80001000089813806000090 + +[6.0.6000.16386] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F320000 +; .text:6F3360B9 lea eax, [ebp+VersionInformation] +; .text:6F3360BF inc ebx <- nop +; .text:6F3360C0 push eax ; lpVersionInformation +; .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F3360CB mov [esi], ebx +; .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=160BF +SingleUserCode.x86=nop +; Imagebase: 7FF756E0000 +; .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75745E3D mov ebx, 1 <- 0 +; .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75745E4A mov [rdi], ebx +; .text:000007FF75745E4C call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=65E3E +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F335CD8 cmp edx, [ecx+320h] +; .text:6F335CDE pop esi +; .text:6F335CDF jz loc_6F3426F1 +; Changed +; .text:6F335CD8 mov edx, 100h +; .text:6F335CDD mov [ecx+320h], edx +; .text:6F335CE3 pop esi +; .text:6F335CE4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=15CD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF7573C88F mov eax, [rcx+638h] +; .text:000007FF7573C895 cmp [rcx+63Ch], eax +; .text:000007FF7573C89B jnz short loc_7FF7573C8B3 +; Changed +; .text:000007FF7573C88F mov eax, 100h +; .text:000007FF7573C894 mov [rcx+638h], eax +; .text:000007FF7573C89A nop +; .text:000007FF7573C89B jmp short loc_7FF7573C8B3 +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=5C88F +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6001.18000] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6E800000 +; .text:6E8185DE lea eax, [ebp+VersionInformation] +; .text:6E8185E4 inc ebx <- nop +; .text:6E8185E5 push eax ; lpVersionInformation +; .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6E8185F0 mov [esi], ebx +; .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=185E4 +SingleUserCode.x86=nop +; Imagebase: 7FF76220000 +; .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF76290DB9 mov ebx, 1 <- 0 +; .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF76290DC6 mov [rdi], ebx +; .text:000007FF76290DC8 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=70DBA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6E817FD8 cmp edx, [ecx+320h] +; .text:6E817FDE pop esi +; .text:6E817FDF jz loc_6E826F16 +; Changed +; .text:6E817FD8 mov edx, 100h +; .text:6E817FDD mov [ecx+320h], edx +; .text:6E817FE3 pop esi +; .text:6E817FE4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=17FD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF76285BD7 mov eax, [rcx+638h] +; .text:000007FF76285BDD cmp [rcx+63Ch], eax +; .text:000007FF76285BE3 jnz short loc_7FF76285BFB +; Changed +; .text:000007FF76285BD7 mov eax, 100h +; .text:000007FF76285BDC mov [rcx+638h], eax +; .text:000007FF76285BE2 nop +; .text:000007FF76285BE3 jmp short loc_7FF76285BFB +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65BD7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.18005] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F580000 +; .text:6F597FA2 lea eax, [ebp+VersionInformation] +; .text:6F597FA8 inc ebx <- nop +; .text:6F597FA9 push eax ; lpVersionInformation +; .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F597FB4 mov [esi], ebx +; .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FA8 +SingleUserCode.x86=nop +; Imagebase: 7FF766C0000 +; .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF76730FF5 mov ebx, 1 <- 0 +; .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF76731002 mov [rdi], ebx +; .text:000007FF76731004 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=70FF6 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F5979C0 cmp edx, [ecx+320h] +; .text:6F5979C6 pop esi +; .text:6F5979C7 jz loc_6F5A6F26 +; Changed +; .text:6F5979C0 mov edx, 100h +; .text:6F5979C5 mov [ecx+320h], edx +; .text:6F5979CB pop esi +; .text:6F5979CC nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179C0 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF76725E83 mov eax, [rcx+638h] +; .text:000007FF76725E89 cmp [rcx+63Ch], eax +; .text:000007FF76725E8F jz short loc_7FF76725EA7 +; Changed +; .text:000007FF76725E83 mov eax, 100h +; .text:000007FF76725E88 mov [rcx+638h], eax +; .text:000007FF76725E8E nop +; .text:000007FF76725E8F jmp short loc_7FF76725EA7 +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65E83 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.19214] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F580000 +; .text:6F597FBE lea eax, [ebp+VersionInformation] +; .text:6F597FC4 inc ebx <- nop +; .text:6F597FC5 push eax ; lpVersionInformation +; .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F597FD0 mov [esi], ebx +; .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FC4 +SingleUserCode.x86=nop +; Imagebase: 7FF75AC0000 +; .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75B312A9 mov ebx, 1 <- 0 +; .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75B312B6 mov [rdi], ebx +; .text:000007FF75B312B8 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=712AA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F5979B8 cmp edx, [ecx+320h] +; .text:6F5979BE pop esi +; .text:6F5979BF jz loc_6F5A6F3E +; Changed +; .text:6F5979B8 mov edx, 100h +; .text:6F5979BD mov [ecx+320h], edx +; .text:6F5979C3 pop esi +; .text:6F5979C4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179B8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF75B25FF7 mov eax, [rcx+638h] +; .text:000007FF75B25FFD cmp [rcx+63Ch], eax +; .text:000007FF75B26003 jnz short loc_7FF75B2601B +; Changed +; .text:000007FF75B25FF7 mov eax, 100h +; .text:000007FF75B25FFC mov [rcx+638h], eax +; .text:000007FF75B26002 nop +; .text:000007FF75B26003 jmp short loc_7FF75B2601B +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65FF7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.23521] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F580000 +; .text:6F597FAE lea eax, [ebp+VersionInformation] +; .text:6F597FB4 inc ebx <- nop +; .text:6F597FB5 push eax ; lpVersionInformation +; .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F597FC0 mov [esi], ebx +; .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FB4 +SingleUserCode.x86=nop +; Imagebase: 7FF75AC0000 +; .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75B31EA9 mov ebx, 1 <- 0 +; .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75B31EB6 mov [rdi], ebx +; .text:000007FF75B31EB8 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=71EAA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F5979CC cmp edx, [ecx+320h] +; .text:6F5979D2 pop esi +; .text:6F5979D3 jz loc_6F5A6F2E +; Changed +; .text:6F5979CC mov edx, 100h +; .text:6F5979D1 mov [ecx+320h], edx +; .text:6F5979D7 pop esi +; .text:6F5979D8 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179CC +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +; Original +; .text:000007FF75B269CB mov eax, [rcx+638h] +; .text:000007FF75B269D1 cmp [rcx+63Ch], eax +; .text:000007FF75B269D7 jnz short loc_7FF75B269EF +; Changed +; .text:000007FF75B269CB mov eax, 100h +; .text:000007FF75B269D0 mov [rcx+638h], eax +; .text:000007FF75B269D6 nop +; .text:000007FF75B269D7 jmp short loc_7FF75B269EF +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=669CB +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.1.7600.16385] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2F9E1F lea eax, [ebp+VersionInformation] +; .text:6F2F9E25 inc ebx <- nop +; .text:6F2F9E26 push eax ; lpVersionInformation +; .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2F9E31 mov [esi], ebx +; .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E25 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A97D95 mov ebx, 1 <- 0 +; .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A97DA2 mov [rdi], ebx +; .text:000007FF75A97DA4 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=17D96 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F96F3 cmp eax, [esi+320h] +; .text:6F2F96F9 jz loc_6F30E256 +; Changed +; .text:6F2F96F3 mov eax, 100h +; .text:6F2F96F8 mov [esi+320h], eax +; .text:6F2F96FE nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196F3 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97AD2 cmp [rdi+63Ch], eax +; .text:000007FF75A97AD8 jz loc_7FF75AA4978 +; Changed +; .text:000007FF75A97AD2 mov eax, 100h +; .text:000007FF75A97AD7 mov [rdi+638h], eax +; .text:000007FF75A97ADD nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17AD2 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.17514] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA497 lea eax, [ebp+VersionInformation] +; .text:6F2FA49D inc ebx <- nop +; .text:6F2FA49E push eax ; lpVersionInformation +; .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA4A9 mov [esi], ebx +; .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A980E1 mov ebx, 1 <- 0 +; .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A980EE mov [rdi], ebx +; .text:000007FF75A980F0 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=180E2 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9D53 cmp eax, [esi+320h] +; .text:6F2F9D59 jz loc_6F30B25E +; Changed +; .text:6F2F9D53 mov eax, 100h +; .text:6F2F9D58 mov [esi+320h], eax +; .text:6F2F9D5E nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97D8A cmp [rdi+63Ch], eax +; .text:000007FF75A97D90 jz loc_7FF75AA40F4 +; Changed +; .text:000007FF75A97D8A mov eax, 100h +; .text:000007FF75A97D8F mov [rdi+638h], eax +; .text:000007FF75A97D95 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D8A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18540] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA4DF lea eax, [ebp+VersionInformation] +; .text:6F2FA4E5 inc ebx <- nop +; .text:6F2FA4E6 push eax ; lpVersionInformation +; .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA4F1 mov [esi], ebx +; .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4E5 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A98005 mov ebx, 1 <- 0 +; .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A98012 mov [rdi], ebx +; .text:000007FF75A98014 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=18006 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9D9F cmp eax, [esi+320h] +; .text:6F2F9DA5 jz loc_6F30B2AE +; Changed +; .text:6F2F9D9F mov eax, 100h +; .text:6F2F9DA4 mov [esi+320h], eax +; .text:6F2F9DAA nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D9F +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97C82 cmp [rdi+63Ch], eax +; .text:000007FF75A97C88 jz loc_7FF75AA3FBD +; Changed +; .text:000007FF75A97C82 mov eax, 100h +; .text:000007FF75A97C87 mov [rdi+638h], eax +; .text:000007FF75A97C8D nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C82 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22750] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA64F lea eax, [ebp+VersionInformation] +; .text:6F2FA655 inc ebx <- nop +; .text:6F2FA656 push eax ; lpVersionInformation +; .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA661 mov [esi], ebx +; .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A97E8D mov ebx, 1 <- 0 +; .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A97E9A mov [rdi], ebx +; .text:000007FF75A97E9C call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E8E +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9E21 cmp eax, [esi+320h] +; .text:6F2F9E27 jz loc_6F30B6CE +; Changed +; .text:6F2F9E21 mov eax, 100h +; .text:6F2F9E26 mov [esi+320h], eax +; .text:6F2F9E2C nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E21 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97C92 cmp [rdi+63Ch], eax +; .text:000007FF75A97C98 jz loc_7FF75AA40A2 +; Changed +; .text:000007FF75A97C92 mov eax, 100h +; .text:000007FF75A97C97 mov [rdi+638h], eax +; .text:000007FF75A97C9D nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C92 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18637] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA4D7 lea eax, [ebp+VersionInformation] +; .text:6F2FA4DD inc ebx <- nop +; .text:6F2FA4DE push eax ; lpVersionInformation +; .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA4E9 mov [esi], ebx +; .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4DD +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A980F9 mov ebx, 1 <- 0 +; .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A98106 mov [rdi], ebx +; .text:000007FF75A98108 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=180FA +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9DBB cmp eax, [esi+320h] +; .text:6F2F9DC1 jz loc_6F30B2A6 +; Changed +; .text:6F2F9DBB mov eax, 100h +; .text:6F2F9DC0 mov [esi+320h], eax +; .text:6F2F9DC6 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19DBB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97DC6 cmp [rdi+63Ch], eax +; .text:000007FF75A97DCC jz loc_7FF75AA40BD +; Changed +; .text:000007FF75A97DC6 mov eax, 100h +; .text:000007FF75A97DCB mov [rdi+638h], eax +; .text:000007FF75A97DD1 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17DC6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22843] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; Imagebase: 6F2E0000 +; .text:6F2FA64F lea eax, [ebp+VersionInformation] +; .text:6F2FA655 inc ebx <- nop +; .text:6F2FA656 push eax ; lpVersionInformation +; .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:6F2FA661 mov [esi], ebx +; .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +; Imagebase: 7FF75A80000 +; .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation +; .text:000007FF75A97F95 mov ebx, 1 <- 0 +; .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000007FF75A97FA2 mov [rdi], ebx +; .text:000007FF75A97FA4 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F96 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:6F2F9E25 cmp eax, [esi+320h] +; .text:6F2F9E2B jz loc_6F30B6D6 +; Changed +; .text:6F2F9E25 mov eax, 100h +; .text:6F2F9E2A mov [esi+320h], eax +; .text:6F2F9E30 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E25 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000007FF75A97D6E cmp [rdi+63Ch], eax +; .text:000007FF75A97D74 jz loc_7FF75AA4182 +; Changed +; .text:000007FF75A97D6E mov eax, 100h +; .text:000007FF75A97D73 mov [rdi+638h], eax +; .text:000007FF75A97D79 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D6E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.2.8102.0] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1000F7E5 lea eax, [esp+150h+VersionInformation] +; .text:1000F7E9 inc esi <- nop +; .text:1000F7EA push eax ; lpVersionInformation +; .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1000F7F3 mov [edi], esi +; .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=F7E9 +SingleUserCode.x86=nop +; .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:000000018000D83F mov ebx, 1 <- 0 +; .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018000D84C mov [rdi], ebx +; .text:000000018000D84E call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=D840 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1000E47C cmp eax, [esi+320h] +; .text:1000E482 jz loc_1002D775 +; Changed +; .text:1000E47C mov eax, 100h +; .text:1000E481 mov [esi+320h], eax +; .text:1000E487 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=E47C +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018000D3E6 cmp [rdi+63Ch], eax +; .text:000000018000D3EC jz loc_180027792 +; Changed +; .text:000000018000D3E6 mov eax, 100h +; .text:000000018000D3EB mov [rdi+638h], eax +; .text:000000018000D3F1 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=D3E6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1B909 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=1A484 +SLPolicyFunc.x64=New_Win8SL + +[6.2.8250.0] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:100159C5 lea eax, [esp+150h+VersionInformation] +; .text:100159C9 inc esi <- nop +; .text:100159CA push eax ; lpVersionInformation +; .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:100159D3 mov [edi], esi +; .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=159C9 +SingleUserCode.x86=nop +; .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:0000000180011E73 mov ebx, 1 <- 0 +; .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180011E80 mov [rdi], ebx +; .text:0000000180011E82 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=11E74 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013520 cmp eax, [esi+320h] +; .text:10013526 jz loc_1002DB85 +; Changed +; .text:10013520 mov eax, 100h +; .text:10013525 mov [esi+320h], eax +; .text:1001352B nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13520 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018001187A cmp [rdi+63Ch], eax +; .text:0000000180011880 jz loc_1800273A2 +; Changed +; .text:000000018001187A mov eax, 100h +; .text:000000018001187F mov [rdi+638h], eax +; .text:0000000180011885 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1187A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1A0A9 +SLPolicyFunc.x86=New_Win8SL_CP +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=18FAC +SLPolicyFunc.x64=New_Win8SL + +[6.2.8400.0] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1001547E lea eax, [esp+150h+VersionInformation] +; .text:10015482 inc esi <- nop +; .text:10015483 push eax ; lpVersionInformation +; .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1001548C mov [edi], esi +; .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=15482 +SingleUserCode.x86=nop +; .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:0000000180020823 mov ebx, 1 <- 0 +; .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180020830 mov [rdi], ebx +; .text:0000000180020832 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=20824 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013E48 cmp eax, [esi+320h] +; .text:10013E4E jz loc_1002E079 +; Changed +; .text:10013E48 mov eax, 100h +; .text:10013E4D mov [esi+320h], eax +; .text:10013E53 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13E48 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018001F102 cmp [rdi+63Ch], eax +; .text:000000018001F108 jz loc_18003A02E +; Changed +; .text:000000018001F102 mov eax, 100h +; .text:000000018001F107 mov [rdi+638h], eax +; .text:000000018001F10D nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F102 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19629 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=2492C +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.16384] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1001554E lea eax, [esp+150h+VersionInformation] +; .text:10015552 inc esi <- nop +; .text:10015553 push eax ; lpVersionInformation +; .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1001555C mov [edi], esi +; .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=15552 +SingleUserCode.x86=nop +; .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:000000018002BAA7 mov ebx, 1 <- 0 +; .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018002BAB4 mov [rdi], ebx +; .text:000000018002BAB6 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAA8 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013F08 cmp eax, [esi+320h] +; .text:10013F0E jz loc_1002E161 +; Changed +; .text:10013F08 mov eax, 100h +; .text:10013F0D mov [esi+320h], eax +; .text:10013F13 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F08 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018002A31A cmp [rdi+63Ch], eax +; .text:000000018002A320 jz loc_18003A0F9 +; Changed +; .text:000000018002A31A mov eax, 100h +; .text:000000018002A31F mov [rdi+638h], eax +; .text:000000018002A325 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A31A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19559 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FA8 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.17048] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:1002058E lea eax, [esp+150h+VersionInformation] +; .text:10020592 inc esi <- nop +; .text:10020593 push eax ; lpVersionInformation +; .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:1002059C mov [edi], esi +; .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=20592 +SingleUserCode.x86=nop +; .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:0000000180020947 mov ebx, 1 <- 0 +; .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180020954 mov [rdi], ebx +; .text:0000000180020956 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=20948 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1001F408 cmp eax, [esi+320h] +; .text:1001F40E jz loc_1002E201 +; Changed +; .text:1001F408 mov eax, 100h +; .text:1001F40D mov [esi+320h], eax +; .text:1001F413 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=1F408 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018001F206 cmp [rdi+63Ch], eax +; .text:000000018001F20C jz loc_18003A1B4 +; Changed +; .text:000000018001F206 mov eax, 100h +; .text:000000018001F20B mov [rdi+638h], eax +; .text:000000018001F211 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F206 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=17059 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=24570 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.21166] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10015576 lea eax, [esp+150h+VersionInformation] +; .text:1001557A inc esi <- nop +; .text:1001557B push eax ; lpVersionInformation +; .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:10015584 mov [edi], esi +; .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=1557A +SingleUserCode.x86=nop +; .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation +; .text:000000018002BAF7 mov ebx, 1 <- 0 +; .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018002BB04 mov [rdi], ebx +; .text:000000018002BB06 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAF8 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10013F30 cmp eax, [esi+320h] +; .text:10013F36 jz loc_1002E189 +; Changed +; .text:10013F30 mov eax, 100h +; .text:10013F35 mov [esi+320h], eax +; .text:10013F3B nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F30 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +; Original +; .text:000000018002A3B6 cmp [rdi+63Ch], eax +; .text:000000018002A3BC jz loc_18003A174 +; Changed +; .text:000000018002A3B6 mov eax, 100h +; .text:000000018002A3BB mov [rdi+638h], eax +; .text:000000018002A3C1 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A3B6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19581 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FD0 +SLPolicyFunc.x64=New_Win8SL + +[6.3.9431.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:1008A609 test eax, eax +; .text:1008A60B js short loc_1008A628 +; .text:1008A60D cmp [ebp+var_8], 0 +; .text:1008A611 jz short loc_1008A628 <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=8A611 +LocalOnlyCode.x86=jmpshort +; .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:000000018009F718 test eax, eax +; .text:000000018009F71A js short loc_18009F73B +; .text:000000018009F71C cmp [rsp+48h+arg_18], 0 +; .text:000000018009F721 jz short loc_18009F73B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9F721 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:100306A4 lea eax, [esp+150h+VersionInformation] +; .text:100306A8 inc ebx <- nop +; .text:100306A9 mov [edi], ebx +; .text:100306AB push eax ; lpVersionInformation +; .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=306A8 +SingleUserCode.x86=nop +; .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:00000001800367F8 mov ebx, 1 <- 0 +; .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180036805 mov [rdi], ebx +; .text:0000000180036807 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=367F9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1002EA25 cmp eax, [ecx+320h] +; .text:1002EA2B jz loc_100348C1 +; Changed +; .text:1002EA25 mov eax, 100h +; .text:1002EA2A mov [ecx+320h], eax +; .text:1002EA30 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2EA25 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:00000001800350FD cmp [rcx+63Ch], eax +; .text:0000000180035103 jz loc_18004F6AE +; Changed +; .text:00000001800350FD mov eax, 100h +; .text:0000000180035102 mov [rcx+638h], eax +; .text:0000000180035108 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=350FD +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=196B0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2F9C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.16384] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A2721 test eax, eax +; .text:100A2723 js short loc_100A2740 +; .text:100A2725 cmp [ebp+var_8], 0 +; .text:100A2729 jz short loc_100A2740 <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A2729 +LocalOnlyCode.x86=jmpshort +; .text:000000018008181F cmp [rsp+48h+arg_18], 0 +; .text:0000000180081824 jz loc_180031DEF <- nop + jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81824 +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10018024 lea eax, [esp+150h+VersionInformation] +; .text:10018028 inc ebx <- nop +; .text:10018029 mov [edi], ebx +; .text:1001802B push eax ; lpVersionInformation +; .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=18028 +SingleUserCode.x86=nop +; .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180020240 mov ebx, 1 <- 0 +; .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:000000018002024D mov [rdi], ebx +; .text:000000018002024F call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=20241 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10016115 cmp eax, [ecx+320h] +; .text:1001611B jz loc_10034DE1 +; Changed +; .text:10016115 mov eax, 100h +; .text:1001611A mov [ecx+320h], eax +; .text:10016120 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=16115 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:0000000180057829 cmp [rcx+63Ch], eax +; .text:000000018005782F jz loc_18005E850 +; Changed +; .text:0000000180057829 mov eax, 100h +; .text:000000018005782E mov [rcx+638h], eax +; .text:0000000180057834 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=57829 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=1CEB0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=554C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17095] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A36C9 test eax, eax +; .text:100A36CB js short loc_100A36E8 +; .text:100A36CD cmp [ebp+var_8], 0 +; .text:100A36D1 jz short loc_100A36E8 <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A36D1 +LocalOnlyCode.x86=jmpshort +; .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:00000001800B9150 test eax, eax +; .text:00000001800B9152 js short loc_1800B9173 +; .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 +; .text:00000001800B9159 jz short loc_1800B9173 <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=B9159 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10036BA5 lea eax, [esp+150h+VersionInformation] +; .text:10036BA9 inc ebx <- nop +; .text:10036BAA mov [edi], ebx +; .text:10036BAC push eax ; lpVersionInformation +; .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=36BA9 +SingleUserCode.x86=nop +; .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180021828 mov ebx, 1 <- 0 +; .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180021835 mov [rdi], ebx +; .text:0000000180021837 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=21829 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:10037529 cmp eax, [ecx+320h] +; .text:1003752F jz loc_10043662 +; Changed +; .text:10037529 mov eax, 100h +; .text:1003752E mov [ecx+320h], eax +; .text:10037534 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=37529 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018001F6A1 cmp [rcx+63Ch], eax +; .text:000000018001F6A7 jz loc_18007284B +; Changed +; .text:000000018001F6A1 mov eax, 100h +; .text:000000018001F6A6 mov [rcx+638h], eax +; .text:000000018001F6AC nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F6A1 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=117F1 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=3B110 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17415] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100B33EB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100B33F0 test eax, eax +; .text:100B33F2 js short loc_100B340F +; .text:100B33F4 cmp [ebp+var_C], 0 +; .text:100B33F8 jz short loc_100B340F <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B33F8 +LocalOnlyCode.x86=jmpshort +; .text:000000018008B2D4 cmp [rsp+58h+arg_18], 0 +; .text:000000018008B2D9 jz loc_180025C39 <- nop + jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B2D9 +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10037111 lea eax, [esp+150h+VersionInformation] +; .text:10037115 inc ebx <- nop +; .text:10037116 mov [edi], ebx +; .text:10037118 push eax ; lpVersionInformation +; .text:10037119 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=37115 +SingleUserCode.x86=nop +; .text:0000000180033CE3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180033CE8 mov ebx, 1 <- 0 +; .text:0000000180033CED mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180033CF5 mov [rdi], ebx +; .text:0000000180033CF7 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=33CE9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1003CFF9 cmp eax, [ecx+320h] +; .text:1003CFFF jz loc_1004A52F +; Changed +; .text:1003CFF9 mov eax, 100h +; .text:1003CFFE mov [ecx+320h], eax +; .text:1003D004 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFF9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:0000000180045825 cmp [rcx+63Ch], eax +; .text:000000018004582B jz loc_180067704 +; Changed +; .text:0000000180045825 mov eax, 100h +; .text:000000018004582A mov [rcx+638h], eax +; .text:0000000180045830 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45825 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=18478 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DBC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9841.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:1009569B call sub_100B7EE5 +; .text:100956A0 test eax, eax +; .text:100956A2 js short loc_100956BF +; .text:100956A4 cmp [ebp+var_C], 0 +; .text:100956A8 jz short loc_100956BF <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=956A8 +LocalOnlyCode.x86=jmpshort +; .text:0000000180081133 call sub_1800A9048 +; .text:0000000180081138 test eax, eax +; .text:000000018008113A js short loc_18008115B +; .text:000000018008113C cmp [rsp+58h+arg_18], 0 +; .text:0000000180081141 jz short loc_18008115B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81141 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10030121 lea eax, [esp+150h+VersionInformation] +; .text:10030125 inc ebx <- nop +; .text:10030126 mov [edi], ebx +; .text:10030128 push eax ; lpVersionInformation +; .text:10030129 call ds:GetVersionExW +SingleUserPatch.x86=1 +SingleUserOffset.x86=30125 +SingleUserCode.x86=nop +; .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180012158 mov ebx, 1 <- 0 +; .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180012165 mov [rdi], ebx +; .text:0000000180012167 call cs:GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=12159 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1003B989 cmp eax, [ecx+320h] +; .text:1003B98F jz loc_1005E809 +; Changed +; .text:1003B989 mov eax, 100h +; .text:1003B98E mov [ecx+320h], eax +; .text:1003B994 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3B989 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018000C125 cmp [rcx+63Ch], eax +; .text:000000018000C12B jz sub_18003BABC +; Changed +; .text:000000018000C125 mov eax, 100h +; .text:000000018000C12A mov [rcx+638h], eax +; .text:000000018000C130 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=C125 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46A68 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EA50 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9860.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100962C0 test eax, eax +; .text:100962C2 js short loc_100962DF +; .text:100962C4 cmp [ebp+var_C], 0 +; .text:100962C8 jz short loc_100962DF <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=962C8 +LocalOnlyCode.x86=jmpshort +; .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:0000000180081088 test eax, eax +; .text:000000018008108A js short loc_1800810AB +; .text:000000018008108C cmp [rsp+58h+arg_18], 0 +; .text:0000000180081091 jz short loc_1800810AB <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81091 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10030841 lea eax, [esp+150h+VersionInformation] +; .text:10030845 inc ebx <- nop +; .text:10030846 mov [edi], ebx +; .text:10030848 push eax ; lpVersionInformation +; .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=30845 +SingleUserCode.x86=nop +; .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180011AA8 mov ebx, 1 <- 0 +; .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180011AB5 mov [rdi], ebx +; .text:0000000180011AB7 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=11AA9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1003BEC9 cmp eax, [ecx+320h] +; .text:1003BECF jz loc_1005EE1A +; Changed +; .text:1003BEC9 mov eax, 100h +; .text:1003BECE mov [ecx+320h], eax +; .text:1003BED4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3BEC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018000B9F5 cmp [rcx+63Ch], eax +; .text:000000018000B9FB jz sub_18003B9C8 +; Changed +; .text:000000018000B9F5 mov eax, 100h +; .text:000000018000B9FA mov [rcx+638h], eax +; .text:000000018000BA00 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B9F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46F18 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EB00 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9879.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A9CBB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A9CC0 test eax, eax +; .text:100A9CC2 js short loc_100A9CDF +; .text:100A9CC4 cmp [ebp+var_C], 0 +; .text:100A9CC8 jz short loc_100A9CDF <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9CC8 +LocalOnlyCode.x86=jmpshort +; .text:0000000180095603 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:0000000180095608 test eax, eax +; .text:000000018009560A js short loc_18009562B +; .text:000000018009560C cmp [rsp+58h+arg_18], 0 +; .text:0000000180095611 jz short loc_18009562B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95611 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10030C51 lea eax, [esp+150h+VersionInformation] +; .text:10030C55 inc ebx <- nop +; .text:10030C56 mov [edi], ebx +; .text:10030C58 push eax ; lpVersionInformation +; .text:10030C59 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=30C55 +SingleUserCode.x86=nop +; .text:0000000180016A2E call memset_0 +; .text:0000000180016A33 mov ebx, 1 <- 0 +; .text:0000000180016A38 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180016A40 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180016A45 mov [rdi], ebx +; .text:0000000180016A47 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=16A34 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1002DAB9 cmp eax, [ecx+320h] +; .text:1002DABF jz loc_1006C38A +; Changed +; .text:1002DAB9 mov eax, 100h +; .text:1002DABE mov [ecx+320h], eax +; .text:1002DAC4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DAB9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018001BDC5 cmp [rcx+63Ch], eax +; .text:000000018001BDCB jz sub_180045540 +; Changed +; .text:000000018001BDC5 mov eax, 100h +; .text:000000018001BDCA mov [rcx+638h], eax +; .text:000000018001BDD0 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BDC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=41132 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24750 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.9926.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8C28 +LocalOnlyCode.x86=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=31725 +SingleUserCode.x86=nop +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CF99 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=3F140 +SLInitFunc.x86=New_CSLQuery_Initialize +; x64 contributed by v-yadli +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +;;;OFFSET = 0x61 +;;;BASE = 0x95F90 +LocalOnlyOffset.x64=95FF1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +;;;OFFSET = 0x43 +;;;BASE = 0x12F90 +;;;;instruction = 0xBB 0x01 0x00 0x00 0x00 +;;; ^^^ +1 offset +SingleUserOffset.x64=12A34 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +;;; +;;;BASE = 0xBDF0 +;;;OFFSET = 0x15 +DefPolicyOffset.x64=BE05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24EC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10041.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:100A9D7B call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:100A9D80 test eax, eax +; .text:100A9D82 js short loc_100A9D9F +; .text:100A9D84 cmp [ebp+var_C], 0 +; .text:100A9D88 jz short loc_100A9D9F <- jmp +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9D88 +LocalOnlyCode.x86=jmpshort +; .text:0000000180097133 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:0000000180097138 test eax, eax +; .text:000000018009713A js short loc_18009715B +; .text:000000018009713C cmp [rsp+58h+arg_18], 0 +; .text:0000000180097141 jz short loc_18009715B <- jmp +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=97141 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10032211 lea eax, [esp+150h+VersionInformation] +; .text:10032215 inc ebx <- nop +; .text:10032216 mov [edi], ebx +; .text:10032218 push eax ; lpVersionInformation +; .text:10032219 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) +SingleUserPatch.x86=1 +SingleUserOffset.x86=32215 +SingleUserCode.x86=nop +; .text:0000000180015C5E call memset_0 +; .text:0000000180015C63 mov ebx, 1 <- 0 +; .text:0000000180015C68 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch +; .text:0000000180015C70 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation +; .text:0000000180015C75 mov [rdi], ebx +; .text:0000000180015C77 call cs:__imp_GetVersionExW +SingleUserPatch.x64=1 +SingleUserOffset.x64=15C64 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +; Original +; .text:1002DFC9 cmp eax, [ecx+320h] +; .text:1002DFCF jz loc_10056550 +; Changed +; .text:1002DFC9 mov eax, 100h +; .text:1002DFCE mov [ecx+320h], eax +; .text:1002DFD4 nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DFC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Original +; .text:000000018000B795 cmp [rcx+63Ch], eax +; .text:000000018000B79B jz sub_18003A79A +; Changed +; .text:000000018000B795 mov eax, 100h +; .text:000000018000B79A mov [rcx+638h], eax +; .text:000000018000B7A0 nop +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B795 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46960 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E40 +SLInitFunc.x64=New_CSLQuery_Initialize + +[SLInit] +; Is server +bServerSku=1 +; Enable listener - allow remote connections +bRemoteConnAllowed=1 +; Allow fast user switching +bFUSEnabled=1 +; Allow RemoteApp server +bAppServerAllowed=1 +; Allow multi monitor +bMultimonAllowed=1 +; Maximum user sessions (0 - unlimited) +lMaxUserSessions=0 +; Maximum debug/glass sessions (0 - unlimited) +ulMaxDebugSessions=0 +; SLInit function is succeeded +bInitialized=1 + +[6.3.9431.0-SLInit] +bFUSEnabled.x86 =A22A8 +lMaxUserSessions.x86 =A22AC +bAppServerAllowed.x86 =A22B0 +bInitialized.x86 =A22B4 +bMultimonAllowed.x86 =A22B8 +bServerSku.x86 =A22BC +ulMaxDebugSessions.x86=A22C0 +bRemoteConnAllowed.x86=A22C4 + +bFUSEnabled.x64 =C4490 +lMaxUserSessions.x64 =C4494 +bAppServerAllowed.x64 =C4498 +bInitialized.x64 =C449C +bMultimonAllowed.x64 =C44A0 +bServerSku.x64 =C44A4 +ulMaxDebugSessions.x64=C44A8 +bRemoteConnAllowed.x64=C44AC + +[6.3.9600.16384-SLInit] +bFUSEnabled.x86 =C02A8 +lMaxUserSessions.x86 =C02AC +bAppServerAllowed.x86 =C02B0 +bInitialized.x86 =C02B4 +bMultimonAllowed.x86 =C02B8 +bServerSku.x86 =C02BC +ulMaxDebugSessions.x86=C02C0 +bRemoteConnAllowed.x86=C02C4 + +bServerSku.x64 =E6494 +ulMaxDebugSessions.x64=E6498 +bRemoteConnAllowed.x64=E649C +bFUSEnabled.x64 =E64A0 +lMaxUserSessions.x64 =E64A4 +bAppServerAllowed.x64 =E64A8 +bInitialized.x64 =E64AC +bMultimonAllowed.x64 =E64B0 + +[6.3.9600.17095-SLInit] +bFUSEnabled.x86 =C12A8 +lMaxUserSessions.x86 =C12AC +bAppServerAllowed.x86 =C12B0 +bInitialized.x86 =C12B4 +bMultimonAllowed.x86 =C12B8 +bServerSku.x86 =C12BC +ulMaxDebugSessions.x86=C12C0 +bRemoteConnAllowed.x86=C12C4 + +bServerSku.x64 =E4494 +ulMaxDebugSessions.x64=E4498 +bRemoteConnAllowed.x64=E449C +bFUSEnabled.x64 =E44A0 +lMaxUserSessions.x64 =E44A4 +bAppServerAllowed.x64 =E44A8 +bInitialized.x64 =E44AC +bMultimonAllowed.x64 =E44B0 + +[6.3.9600.17415-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =F9054 +lMaxUserSessions.x64 =F9058 +bAppServerAllowed.x64 =F905C +bInitialized.x64 =F9060 +bMultimonAllowed.x64 =F9064 +bServerSku.x64 =F9068 +ulMaxDebugSessions.x64=F906C +bRemoteConnAllowed.x64=F9070 + +[6.4.9841.0-SLInit] +bFUSEnabled.x86 =BF9F0 +lMaxUserSessions.x86 =BF9F4 +bAppServerAllowed.x86 =BF9F8 +bInitialized.x86 =BF9FC +bMultimonAllowed.x86 =BFA00 +bServerSku.x86 =BFA04 +ulMaxDebugSessions.x86=BFA08 +bRemoteConnAllowed.x86=BFA0C + +bFUSEnabled.x64 =ECFF8 +lMaxUserSessions.x64 =ECFFC +bAppServerAllowed.x64 =ED000 +bInitialized.x64 =ED004 +bMultimonAllowed.x64 =ED008 +bServerSku.x64 =ED00C +ulMaxDebugSessions.x64=ED010 +bRemoteConnAllowed.x64=ED014 + +[6.4.9860.0-SLInit] +bFUSEnabled.x86 =BF7E0 +lMaxUserSessions.x86 =BF7E4 +bAppServerAllowed.x86 =BF7E8 +bInitialized.x86 =BF7EC +bMultimonAllowed.x86 =BF7F0 +bServerSku.x86 =BF7F4 +ulMaxDebugSessions.x86=BF7F8 +bRemoteConnAllowed.x86=BF7FC + +bFUSEnabled.x64 =ECBD8 +lMaxUserSessions.x64 =ECBDC +bAppServerAllowed.x64 =ECBE0 +bInitialized.x64 =ECBE4 +bMultimonAllowed.x64 =ECBE8 +bServerSku.x64 =ECBEC +ulMaxDebugSessions.x64=ECBF0 +bRemoteConnAllowed.x64=ECBF4 + +[6.4.9879.0-SLInit] +bFUSEnabled.x86 =C27D8 +lMaxUserSessions.x86 =C27DC +bAppServerAllowed.x86 =C27E0 +bInitialized.x86 =C27E4 +bMultimonAllowed.x86 =C27E8 +bServerSku.x86 =C27EC +ulMaxDebugSessions.x86=C27F0 +bRemoteConnAllowed.x86=C27F4 + +bFUSEnabled.x64 =EDBF0 +lMaxUserSessions.x64 =EDBF4 +bAppServerAllowed.x64 =EDBF8 +bInitialized.x64 =EDBFC +bMultimonAllowed.x64 =EDC00 +bServerSku.x64 =EDC04 +ulMaxDebugSessions.x64=EDC08 +bRemoteConnAllowed.x64=EDC0C + +[10.0.9926.0-SLInit] +bFUSEnabled.x86 =C17D8 +lMaxUserSessions.x86 =C17DC +bAppServerAllowed.x86 =C17E0 +bInitialized.x86 =C17E4 +bMultimonAllowed.x86 =C17E8 +bServerSku.x86 =C17EC +ulMaxDebugSessions.x86=C17F0 +bRemoteConnAllowed.x86=C17F4 +; x64 contributed by v-yadli +bFUSEnabled.x64 =EEBF0 +lMaxUserSessions.x64 =EEBF4 +bAppServerAllowed.x64 =EEBF8 +bInitialized.x64 =EEBFC +bMultimonAllowed.x64 =EEC00 +bServerSku.x64 =EEC04 +ulMaxDebugSessions.x64=EEC08 +bRemoteConnAllowed.x64=EEC0C + +[10.0.10041.0-SLInit] +bFUSEnabled.x86 =C5F60 +lMaxUserSessions.x86 =C5F64 +bAppServerAllowed.x86 =C5F68 +bInitialized.x86 =C5F6C +bMultimonAllowed.x86 =C5F70 +bServerSku.x86 =C5F74 +ulMaxDebugSessions.x86=C5F78 +bRemoteConnAllowed.x86=C5F7C + +bFUSEnabled.x64 =F3448 +lMaxUserSessions.x64 =F344C +bAppServerAllowed.x64 =F3450 +bInitialized.x64 =F3454 +bMultimonAllowed.x64 =F3458 +bServerSku.x64 =F345C +ulMaxDebugSessions.x64=F3460 +bRemoteConnAllowed.x64=F3464 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 3feaf5c..311c207 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -8,36 +8,19 @@ SLPolicyHookNT60=1 SLPolicyHookNT61=1 [SLPolicy] -; Allow Remote Connections TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 -; Allow Multiple Sessions TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 -; Allow Multiple Sessions (Application Server Mode) TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 -; Allow Multiple Monitors TerminalServices-RemoteConnectionManager-AllowMultimon=1 -; Max User Sessions (0 = unlimited) TerminalServices-RemoteConnectionManager-MaxUserSessions=0 -; Max Debug Sessions (Windows 8, 0 = unlimited) TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 -; Max Sessions -; 0 - logon not possible even from console -; 1 - only one active user (console or remote) -; 2 - allow concurrent sessions TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 -; Allow Advanced Compression with RDP 7 Protocol TerminalServices-RDP-7-Advanced-Compression-Allowed=1 -; IsTerminalTypeLocalOnly = 0 TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 -; Max Sessions (hard limit) TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 -; Allow EasyPrint TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 -; Allow PnP Redirection TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 -; Allow Media Foundation plugins TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 -; Allow DWM Remoting TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 [PatchCodes] @@ -53,539 +36,172 @@ CDefPolicy_Query_eax_ecx=B80001000089812003000090 CDefPolicy_Query_eax_rcx=B80001000089813806000090 [6.0.6000.16386] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F320000 -; .text:6F3360B9 lea eax, [ebp+VersionInformation] -; .text:6F3360BF inc ebx <- nop -; .text:6F3360C0 push eax ; lpVersionInformation -; .text:6F3360C1 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F3360CB mov [esi], ebx -; .text:6F3360CD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=160BF SingleUserCode.x86=nop -; Imagebase: 7FF756E0000 -; .text:000007FF75745E38 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75745E3D mov ebx, 1 <- 0 -; .text:000007FF75745E42 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75745E4A mov [rdi], ebx -; .text:000007FF75745E4C call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=65E3E SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F335CD8 cmp edx, [ecx+320h] -; .text:6F335CDE pop esi -; .text:6F335CDF jz loc_6F3426F1 -; Changed -; .text:6F335CD8 mov edx, 100h -; .text:6F335CDD mov [ecx+320h], edx -; .text:6F335CE3 pop esi -; .text:6F335CE4 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=15CD8 DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -; Original -; .text:000007FF7573C88F mov eax, [rcx+638h] -; .text:000007FF7573C895 cmp [rcx+63Ch], eax -; .text:000007FF7573C89B jnz short loc_7FF7573C8B3 -; Changed -; .text:000007FF7573C88F mov eax, 100h -; .text:000007FF7573C894 mov [rcx+638h], eax -; .text:000007FF7573C89A nop -; .text:000007FF7573C89B jmp short loc_7FF7573C8B3 DefPolicyPatch.x64=1 DefPolicyOffset.x64=5C88F DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp [6.0.6001.18000] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6E800000 -; .text:6E8185DE lea eax, [ebp+VersionInformation] -; .text:6E8185E4 inc ebx <- nop -; .text:6E8185E5 push eax ; lpVersionInformation -; .text:6E8185E6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6E8185F0 mov [esi], ebx -; .text:6E8185F2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=185E4 SingleUserCode.x86=nop -; Imagebase: 7FF76220000 -; .text:000007FF76290DB4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF76290DB9 mov ebx, 1 <- 0 -; .text:000007FF76290DBE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF76290DC6 mov [rdi], ebx -; .text:000007FF76290DC8 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=70DBA SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6E817FD8 cmp edx, [ecx+320h] -; .text:6E817FDE pop esi -; .text:6E817FDF jz loc_6E826F16 -; Changed -; .text:6E817FD8 mov edx, 100h -; .text:6E817FDD mov [ecx+320h], edx -; .text:6E817FE3 pop esi -; .text:6E817FE4 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=17FD8 DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -; Original -; .text:000007FF76285BD7 mov eax, [rcx+638h] -; .text:000007FF76285BDD cmp [rcx+63Ch], eax -; .text:000007FF76285BE3 jnz short loc_7FF76285BFB -; Changed -; .text:000007FF76285BD7 mov eax, 100h -; .text:000007FF76285BDC mov [rcx+638h], eax -; .text:000007FF76285BE2 nop -; .text:000007FF76285BE3 jmp short loc_7FF76285BFB DefPolicyPatch.x64=1 DefPolicyOffset.x64=65BD7 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp [6.0.6002.18005] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F580000 -; .text:6F597FA2 lea eax, [ebp+VersionInformation] -; .text:6F597FA8 inc ebx <- nop -; .text:6F597FA9 push eax ; lpVersionInformation -; .text:6F597FAA mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F597FB4 mov [esi], ebx -; .text:6F597FB6 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=17FA8 SingleUserCode.x86=nop -; Imagebase: 7FF766C0000 -; .text:000007FF76730FF0 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF76730FF5 mov ebx, 1 <- 0 -; .text:000007FF76730FFA mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF76731002 mov [rdi], ebx -; .text:000007FF76731004 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=70FF6 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F5979C0 cmp edx, [ecx+320h] -; .text:6F5979C6 pop esi -; .text:6F5979C7 jz loc_6F5A6F26 -; Changed -; .text:6F5979C0 mov edx, 100h -; .text:6F5979C5 mov [ecx+320h], edx -; .text:6F5979CB pop esi -; .text:6F5979CC nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=179C0 DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -; Original -; .text:000007FF76725E83 mov eax, [rcx+638h] -; .text:000007FF76725E89 cmp [rcx+63Ch], eax -; .text:000007FF76725E8F jz short loc_7FF76725EA7 -; Changed -; .text:000007FF76725E83 mov eax, 100h -; .text:000007FF76725E88 mov [rcx+638h], eax -; .text:000007FF76725E8E nop -; .text:000007FF76725E8F jmp short loc_7FF76725EA7 DefPolicyPatch.x64=1 DefPolicyOffset.x64=65E83 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp [6.0.6002.19214] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F580000 -; .text:6F597FBE lea eax, [ebp+VersionInformation] -; .text:6F597FC4 inc ebx <- nop -; .text:6F597FC5 push eax ; lpVersionInformation -; .text:6F597FC6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F597FD0 mov [esi], ebx -; .text:6F597FD2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=17FC4 SingleUserCode.x86=nop -; Imagebase: 7FF75AC0000 -; .text:000007FF75B312A4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75B312A9 mov ebx, 1 <- 0 -; .text:000007FF75B312AE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75B312B6 mov [rdi], ebx -; .text:000007FF75B312B8 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=712AA SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F5979B8 cmp edx, [ecx+320h] -; .text:6F5979BE pop esi -; .text:6F5979BF jz loc_6F5A6F3E -; Changed -; .text:6F5979B8 mov edx, 100h -; .text:6F5979BD mov [ecx+320h], edx -; .text:6F5979C3 pop esi -; .text:6F5979C4 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=179B8 DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -; Original -; .text:000007FF75B25FF7 mov eax, [rcx+638h] -; .text:000007FF75B25FFD cmp [rcx+63Ch], eax -; .text:000007FF75B26003 jnz short loc_7FF75B2601B -; Changed -; .text:000007FF75B25FF7 mov eax, 100h -; .text:000007FF75B25FFC mov [rcx+638h], eax -; .text:000007FF75B26002 nop -; .text:000007FF75B26003 jmp short loc_7FF75B2601B DefPolicyPatch.x64=1 DefPolicyOffset.x64=65FF7 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp [6.0.6002.23521] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F580000 -; .text:6F597FAE lea eax, [ebp+VersionInformation] -; .text:6F597FB4 inc ebx <- nop -; .text:6F597FB5 push eax ; lpVersionInformation -; .text:6F597FB6 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F597FC0 mov [esi], ebx -; .text:6F597FC2 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=17FB4 SingleUserCode.x86=nop -; Imagebase: 7FF75AC0000 -; .text:000007FF75B31EA4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75B31EA9 mov ebx, 1 <- 0 -; .text:000007FF75B31EAE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75B31EB6 mov [rdi], ebx -; .text:000007FF75B31EB8 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=71EAA SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F5979CC cmp edx, [ecx+320h] -; .text:6F5979D2 pop esi -; .text:6F5979D3 jz loc_6F5A6F2E -; Changed -; .text:6F5979CC mov edx, 100h -; .text:6F5979D1 mov [ecx+320h], edx -; .text:6F5979D7 pop esi -; .text:6F5979D8 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=179CC DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -; Original -; .text:000007FF75B269CB mov eax, [rcx+638h] -; .text:000007FF75B269D1 cmp [rcx+63Ch], eax -; .text:000007FF75B269D7 jnz short loc_7FF75B269EF -; Changed -; .text:000007FF75B269CB mov eax, 100h -; .text:000007FF75B269D0 mov [rcx+638h], eax -; .text:000007FF75B269D6 nop -; .text:000007FF75B269D7 jmp short loc_7FF75B269EF DefPolicyPatch.x64=1 DefPolicyOffset.x64=669CB DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp [6.1.7600.16385] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F2E0000 -; .text:6F2F9E1F lea eax, [ebp+VersionInformation] -; .text:6F2F9E25 inc ebx <- nop -; .text:6F2F9E26 push eax ; lpVersionInformation -; .text:6F2F9E27 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F2F9E31 mov [esi], ebx -; .text:6F2F9E33 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=19E25 SingleUserCode.x86=nop -; Imagebase: 7FF75A80000 -; .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75A97D95 mov ebx, 1 <- 0 -; .text:000007FF75A97D9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75A97DA2 mov [rdi], ebx -; .text:000007FF75A97DA4 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=17D96 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F2F96F3 cmp eax, [esi+320h] -; .text:6F2F96F9 jz loc_6F30E256 -; Changed -; .text:6F2F96F3 mov eax, 100h -; .text:6F2F96F8 mov [esi+320h], eax -; .text:6F2F96FE nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=196F3 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000007FF75A97AD2 cmp [rdi+63Ch], eax -; .text:000007FF75A97AD8 jz loc_7FF75AA4978 -; Changed -; .text:000007FF75A97AD2 mov eax, 100h -; .text:000007FF75A97AD7 mov [rdi+638h], eax -; .text:000007FF75A97ADD nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=17AD2 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.1.7601.17514] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F2E0000 -; .text:6F2FA497 lea eax, [ebp+VersionInformation] -; .text:6F2FA49D inc ebx <- nop -; .text:6F2FA49E push eax ; lpVersionInformation -; .text:6F2FA49F mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F2FA4A9 mov [esi], ebx -; .text:6F2FA4AB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=1A49D SingleUserCode.x86=nop -; Imagebase: 7FF75A80000 -; .text:000007FF75A980DC lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75A980E1 mov ebx, 1 <- 0 -; .text:000007FF75A980E6 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75A980EE mov [rdi], ebx -; .text:000007FF75A980F0 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=180E2 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F2F9D53 cmp eax, [esi+320h] -; .text:6F2F9D59 jz loc_6F30B25E -; Changed -; .text:6F2F9D53 mov eax, 100h -; .text:6F2F9D58 mov [esi+320h], eax -; .text:6F2F9D5E nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=19D53 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000007FF75A97D8A cmp [rdi+63Ch], eax -; .text:000007FF75A97D90 jz loc_7FF75AA40F4 -; Changed -; .text:000007FF75A97D8A mov eax, 100h -; .text:000007FF75A97D8F mov [rdi+638h], eax -; .text:000007FF75A97D95 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=17D8A DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.1.7601.18540] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F2E0000 -; .text:6F2FA4DF lea eax, [ebp+VersionInformation] -; .text:6F2FA4E5 inc ebx <- nop -; .text:6F2FA4E6 push eax ; lpVersionInformation -; .text:6F2FA4E7 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F2FA4F1 mov [esi], ebx -; .text:6F2FA4F3 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=1A4E5 SingleUserCode.x86=nop -; Imagebase: 7FF75A80000 -; .text:000007FF75A98000 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75A98005 mov ebx, 1 <- 0 -; .text:000007FF75A9800A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75A98012 mov [rdi], ebx -; .text:000007FF75A98014 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=18006 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F2F9D9F cmp eax, [esi+320h] -; .text:6F2F9DA5 jz loc_6F30B2AE -; Changed -; .text:6F2F9D9F mov eax, 100h -; .text:6F2F9DA4 mov [esi+320h], eax -; .text:6F2F9DAA nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=19D9F DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000007FF75A97C82 cmp [rdi+63Ch], eax -; .text:000007FF75A97C88 jz loc_7FF75AA3FBD -; Changed -; .text:000007FF75A97C82 mov eax, 100h -; .text:000007FF75A97C87 mov [rdi+638h], eax -; .text:000007FF75A97C8D nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=17C82 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.1.7601.22750] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F2E0000 -; .text:6F2FA64F lea eax, [ebp+VersionInformation] -; .text:6F2FA655 inc ebx <- nop -; .text:6F2FA656 push eax ; lpVersionInformation -; .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F2FA661 mov [esi], ebx -; .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=1A655 SingleUserCode.x86=nop -; Imagebase: 7FF75A80000 -; .text:000007FF75A97E88 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75A97E8D mov ebx, 1 <- 0 -; .text:000007FF75A97E92 mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75A97E9A mov [rdi], ebx -; .text:000007FF75A97E9C call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=17E8E SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F2F9E21 cmp eax, [esi+320h] -; .text:6F2F9E27 jz loc_6F30B6CE -; Changed -; .text:6F2F9E21 mov eax, 100h -; .text:6F2F9E26 mov [esi+320h], eax -; .text:6F2F9E2C nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=19E21 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000007FF75A97C92 cmp [rdi+63Ch], eax -; .text:000007FF75A97C98 jz loc_7FF75AA40A2 -; Changed -; .text:000007FF75A97C92 mov eax, 100h -; .text:000007FF75A97C97 mov [rdi+638h], eax -; .text:000007FF75A97C9D nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=17C92 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.1.7601.18637] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F2E0000 -; .text:6F2FA4D7 lea eax, [ebp+VersionInformation] -; .text:6F2FA4DD inc ebx <- nop -; .text:6F2FA4DE push eax ; lpVersionInformation -; .text:6F2FA4DF mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F2FA4E9 mov [esi], ebx -; .text:6F2FA4EB call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=1A4DD SingleUserCode.x86=nop -; Imagebase: 7FF75A80000 -; .text:000007FF75A980F4 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75A980F9 mov ebx, 1 <- 0 -; .text:000007FF75A980FE mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75A98106 mov [rdi], ebx -; .text:000007FF75A98108 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=180FA SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F2F9DBB cmp eax, [esi+320h] -; .text:6F2F9DC1 jz loc_6F30B2A6 -; Changed -; .text:6F2F9DBB mov eax, 100h -; .text:6F2F9DC0 mov [esi+320h], eax -; .text:6F2F9DC6 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=19DBB DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000007FF75A97DC6 cmp [rdi+63Ch], eax -; .text:000007FF75A97DCC jz loc_7FF75AA40BD -; Changed -; .text:000007FF75A97DC6 mov eax, 100h -; .text:000007FF75A97DCB mov [rdi+638h], eax -; .text:000007FF75A97DD1 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=17DC6 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.1.7601.22843] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; Imagebase: 6F2E0000 -; .text:6F2FA64F lea eax, [ebp+VersionInformation] -; .text:6F2FA655 inc ebx <- nop -; .text:6F2FA656 push eax ; lpVersionInformation -; .text:6F2FA657 mov [ebp+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:6F2FA661 mov [esi], ebx -; .text:6F2FA663 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=1A655 SingleUserCode.x86=nop -; Imagebase: 7FF75A80000 -; .text:000007FF75A97F90 lea rcx, [rsp+198h+VersionInformation] ; lpVersionInformation -; .text:000007FF75A97F95 mov ebx, 1 <- 0 -; .text:000007FF75A97F9A mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000007FF75A97FA2 mov [rdi], ebx -; .text:000007FF75A97FA4 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=17F96 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:6F2F9E25 cmp eax, [esi+320h] -; .text:6F2F9E2B jz loc_6F30B6D6 -; Changed -; .text:6F2F9E25 mov eax, 100h -; .text:6F2F9E2A mov [esi+320h], eax -; .text:6F2F9E30 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=19E25 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000007FF75A97D6E cmp [rdi+63Ch], eax -; .text:000007FF75A97D74 jz loc_7FF75AA4182 -; Changed -; .text:000007FF75A97D6E mov eax, 100h -; .text:000007FF75A97D73 mov [rdi+638h], eax -; .text:000007FF75A97D79 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=17D6E DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.2.8102.0] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:1000F7E5 lea eax, [esp+150h+VersionInformation] -; .text:1000F7E9 inc esi <- nop -; .text:1000F7EA push eax ; lpVersionInformation -; .text:1000F7EB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:1000F7F3 mov [edi], esi -; .text:1000F7F5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=F7E9 SingleUserCode.x86=nop -; .text:000000018000D83A lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation -; .text:000000018000D83F mov ebx, 1 <- 0 -; .text:000000018000D844 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000000018000D84C mov [rdi], ebx -; .text:000000018000D84E call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=D840 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1000E47C cmp eax, [esi+320h] -; .text:1000E482 jz loc_1002D775 -; Changed -; .text:1000E47C mov eax, 100h -; .text:1000E481 mov [esi+320h], eax -; .text:1000E487 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=E47C DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000000018000D3E6 cmp [rdi+63Ch], eax -; .text:000000018000D3EC jz loc_180027792 -; Changed -; .text:000000018000D3E6 mov eax, 100h -; .text:000000018000D3EB mov [rdi+638h], eax -; .text:000000018000D3F1 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=D3E6 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -; Hook SLGetWindowsInformationDWORDWrapper SLPolicyInternal.x86=1 SLPolicyOffset.x86=1B909 SLPolicyFunc.x86=New_Win8SL @@ -594,46 +210,18 @@ SLPolicyOffset.x64=1A484 SLPolicyFunc.x64=New_Win8SL [6.2.8250.0] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:100159C5 lea eax, [esp+150h+VersionInformation] -; .text:100159C9 inc esi <- nop -; .text:100159CA push eax ; lpVersionInformation -; .text:100159CB mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:100159D3 mov [edi], esi -; .text:100159D5 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=159C9 SingleUserCode.x86=nop -; .text:0000000180011E6E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation -; .text:0000000180011E73 mov ebx, 1 <- 0 -; .text:0000000180011E78 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180011E80 mov [rdi], ebx -; .text:0000000180011E82 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=11E74 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:10013520 cmp eax, [esi+320h] -; .text:10013526 jz loc_1002DB85 -; Changed -; .text:10013520 mov eax, 100h -; .text:10013525 mov [esi+320h], eax -; .text:1001352B nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=13520 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000000018001187A cmp [rdi+63Ch], eax -; .text:0000000180011880 jz loc_1800273A2 -; Changed -; .text:000000018001187A mov eax, 100h -; .text:000000018001187F mov [rdi+638h], eax -; .text:0000000180011885 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=1187A DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -; Hook SLGetWindowsInformationDWORDWrapper SLPolicyInternal.x86=1 SLPolicyOffset.x86=1A0A9 SLPolicyFunc.x86=New_Win8SL_CP @@ -642,46 +230,18 @@ SLPolicyOffset.x64=18FAC SLPolicyFunc.x64=New_Win8SL [6.2.8400.0] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:1001547E lea eax, [esp+150h+VersionInformation] -; .text:10015482 inc esi <- nop -; .text:10015483 push eax ; lpVersionInformation -; .text:10015484 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:1001548C mov [edi], esi -; .text:1001548E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=15482 SingleUserCode.x86=nop -; .text:000000018002081E lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation -; .text:0000000180020823 mov ebx, 1 <- 0 -; .text:0000000180020828 mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180020830 mov [rdi], ebx -; .text:0000000180020832 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=20824 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:10013E48 cmp eax, [esi+320h] -; .text:10013E4E jz loc_1002E079 -; Changed -; .text:10013E48 mov eax, 100h -; .text:10013E4D mov [esi+320h], eax -; .text:10013E53 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=13E48 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000000018001F102 cmp [rdi+63Ch], eax -; .text:000000018001F108 jz loc_18003A02E -; Changed -; .text:000000018001F102 mov eax, 100h -; .text:000000018001F107 mov [rdi+638h], eax -; .text:000000018001F10D nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=1F102 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -; Hook SLGetWindowsInformationDWORDWrapper SLPolicyInternal.x86=1 SLPolicyOffset.x86=19629 SLPolicyFunc.x86=New_Win8SL @@ -690,46 +250,18 @@ SLPolicyOffset.x64=2492C SLPolicyFunc.x64=New_Win8SL [6.2.9200.16384] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:1001554E lea eax, [esp+150h+VersionInformation] -; .text:10015552 inc esi <- nop -; .text:10015553 push eax ; lpVersionInformation -; .text:10015554 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:1001555C mov [edi], esi -; .text:1001555E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=15552 SingleUserCode.x86=nop -; .text:000000018002BAA2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation -; .text:000000018002BAA7 mov ebx, 1 <- 0 -; .text:000000018002BAAC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000000018002BAB4 mov [rdi], ebx -; .text:000000018002BAB6 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=2BAA8 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:10013F08 cmp eax, [esi+320h] -; .text:10013F0E jz loc_1002E161 -; Changed -; .text:10013F08 mov eax, 100h -; .text:10013F0D mov [esi+320h], eax -; .text:10013F13 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=13F08 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000000018002A31A cmp [rdi+63Ch], eax -; .text:000000018002A320 jz loc_18003A0F9 -; Changed -; .text:000000018002A31A mov eax, 100h -; .text:000000018002A31F mov [rdi+638h], eax -; .text:000000018002A325 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=2A31A DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -; Hook SLGetWindowsInformationDWORDWrapper SLPolicyInternal.x86=1 SLPolicyOffset.x86=19559 SLPolicyFunc.x86=New_Win8SL @@ -738,46 +270,18 @@ SLPolicyOffset.x64=21FA8 SLPolicyFunc.x64=New_Win8SL [6.2.9200.17048] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:1002058E lea eax, [esp+150h+VersionInformation] -; .text:10020592 inc esi <- nop -; .text:10020593 push eax ; lpVersionInformation -; .text:10020594 mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:1002059C mov [edi], esi -; .text:1002059E call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=20592 SingleUserCode.x86=nop -; .text:0000000180020942 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation -; .text:0000000180020947 mov ebx, 1 <- 0 -; .text:000000018002094C mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180020954 mov [rdi], ebx -; .text:0000000180020956 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=20948 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1001F408 cmp eax, [esi+320h] -; .text:1001F40E jz loc_1002E201 -; Changed -; .text:1001F408 mov eax, 100h -; .text:1001F40D mov [esi+320h], eax -; .text:1001F413 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=1F408 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000000018001F206 cmp [rdi+63Ch], eax -; .text:000000018001F20C jz loc_18003A1B4 -; Changed -; .text:000000018001F206 mov eax, 100h -; .text:000000018001F20B mov [rdi+638h], eax -; .text:000000018001F211 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=1F206 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -; Hook SLGetWindowsInformationDWORDWrapper SLPolicyInternal.x86=1 SLPolicyOffset.x86=17059 SLPolicyFunc.x86=New_Win8SL @@ -786,46 +290,18 @@ SLPolicyOffset.x64=24570 SLPolicyFunc.x64=New_Win8SL [6.2.9200.21166] -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10015576 lea eax, [esp+150h+VersionInformation] -; .text:1001557A inc esi <- nop -; .text:1001557B push eax ; lpVersionInformation -; .text:1001557C mov [esp+154h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:10015584 mov [edi], esi -; .text:10015586 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=1557A SingleUserCode.x86=nop -; .text:000000018002BAF2 lea rcx, [rsp+180h+VersionInformation] ; lpVersionInformation -; .text:000000018002BAF7 mov ebx, 1 <- 0 -; .text:000000018002BAFC mov [rsp+180h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000000018002BB04 mov [rdi], ebx -; .text:000000018002BB06 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=2BAF8 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:10013F30 cmp eax, [esi+320h] -; .text:10013F36 jz loc_1002E189 -; Changed -; .text:10013F30 mov eax, 100h -; .text:10013F35 mov [esi+320h], eax -; .text:10013F3B nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=13F30 DefPolicyCode.x86=CDefPolicy_Query_eax_esi -; Original -; .text:000000018002A3B6 cmp [rdi+63Ch], eax -; .text:000000018002A3BC jz loc_18003A174 -; Changed -; .text:000000018002A3B6 mov eax, 100h -; .text:000000018002A3BB mov [rdi+638h], eax -; .text:000000018002A3C1 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=2A3B6 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -; Hook SLGetWindowsInformationDWORDWrapper SLPolicyInternal.x86=1 SLPolicyOffset.x86=19581 SLPolicyFunc.x86=New_Win8SL @@ -834,62 +310,24 @@ SLPolicyOffset.x64=21FD0 SLPolicyFunc.x64=New_Win8SL [6.3.9431.0] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:1008A609 test eax, eax -; .text:1008A60B js short loc_1008A628 -; .text:1008A60D cmp [ebp+var_8], 0 -; .text:1008A611 jz short loc_1008A628 <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=8A611 LocalOnlyCode.x86=jmpshort -; .text:000000018009F713 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:000000018009F718 test eax, eax -; .text:000000018009F71A js short loc_18009F73B -; .text:000000018009F71C cmp [rsp+48h+arg_18], 0 -; .text:000000018009F721 jz short loc_18009F73B <- jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=9F721 LocalOnlyCode.x64=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:100306A4 lea eax, [esp+150h+VersionInformation] -; .text:100306A8 inc ebx <- nop -; .text:100306A9 mov [edi], ebx -; .text:100306AB push eax ; lpVersionInformation -; .text:100306AC call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=306A8 SingleUserCode.x86=nop -; .text:00000001800367F3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:00000001800367F8 mov ebx, 1 <- 0 -; .text:00000001800367FD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180036805 mov [rdi], ebx -; .text:0000000180036807 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=367F9 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1002EA25 cmp eax, [ecx+320h] -; .text:1002EA2B jz loc_100348C1 -; Changed -; .text:1002EA25 mov eax, 100h -; .text:1002EA2A mov [ecx+320h], eax -; .text:1002EA30 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=2EA25 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:00000001800350FD cmp [rcx+63Ch], eax -; .text:0000000180035103 jz loc_18004F6AE -; Changed -; .text:00000001800350FD mov eax, 100h -; .text:0000000180035102 mov [rcx+638h], eax -; .text:0000000180035108 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=350FD DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=196B0 SLInitFunc.x86=New_CSLQuery_Initialize @@ -898,59 +336,24 @@ SLInitOffset.x64=2F9C0 SLInitFunc.x64=New_CSLQuery_Initialize [6.3.9600.16384] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:100A271C call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:100A2721 test eax, eax -; .text:100A2723 js short loc_100A2740 -; .text:100A2725 cmp [ebp+var_8], 0 -; .text:100A2729 jz short loc_100A2740 <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A2729 LocalOnlyCode.x86=jmpshort -; .text:000000018008181F cmp [rsp+48h+arg_18], 0 -; .text:0000000180081824 jz loc_180031DEF <- nop + jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=81824 LocalOnlyCode.x64=nopjmp -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10018024 lea eax, [esp+150h+VersionInformation] -; .text:10018028 inc ebx <- nop -; .text:10018029 mov [edi], ebx -; .text:1001802B push eax ; lpVersionInformation -; .text:1001802C call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=18028 SingleUserCode.x86=nop -; .text:000000018002023B lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:0000000180020240 mov ebx, 1 <- 0 -; .text:0000000180020245 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:000000018002024D mov [rdi], ebx -; .text:000000018002024F call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=20241 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:10016115 cmp eax, [ecx+320h] -; .text:1001611B jz loc_10034DE1 -; Changed -; .text:10016115 mov eax, 100h -; .text:1001611A mov [ecx+320h], eax -; .text:10016120 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=16115 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:0000000180057829 cmp [rcx+63Ch], eax -; .text:000000018005782F jz loc_18005E850 -; Changed -; .text:0000000180057829 mov eax, 100h -; .text:000000018005782E mov [rcx+638h], eax -; .text:0000000180057834 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=57829 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=1CEB0 SLInitFunc.x86=New_CSLQuery_Initialize @@ -959,62 +362,24 @@ SLInitOffset.x64=554C0 SLInitFunc.x64=New_CSLQuery_Initialize [6.3.9600.17095] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:100A36C4 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:100A36C9 test eax, eax -; .text:100A36CB js short loc_100A36E8 -; .text:100A36CD cmp [ebp+var_8], 0 -; .text:100A36D1 jz short loc_100A36E8 <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A36D1 LocalOnlyCode.x86=jmpshort -; .text:00000001800B914B call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:00000001800B9150 test eax, eax -; .text:00000001800B9152 js short loc_1800B9173 -; .text:00000001800B9154 cmp [rsp+48h+arg_18], 0 -; .text:00000001800B9159 jz short loc_1800B9173 <- jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=B9159 LocalOnlyCode.x64=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10036BA5 lea eax, [esp+150h+VersionInformation] -; .text:10036BA9 inc ebx <- nop -; .text:10036BAA mov [edi], ebx -; .text:10036BAC push eax ; lpVersionInformation -; .text:10036BAD call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=36BA9 SingleUserCode.x86=nop -; .text:0000000180021823 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:0000000180021828 mov ebx, 1 <- 0 -; .text:000000018002182D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180021835 mov [rdi], ebx -; .text:0000000180021837 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=21829 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:10037529 cmp eax, [ecx+320h] -; .text:1003752F jz loc_10043662 -; Changed -; .text:10037529 mov eax, 100h -; .text:1003752E mov [ecx+320h], eax -; .text:10037534 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=37529 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:000000018001F6A1 cmp [rcx+63Ch], eax -; .text:000000018001F6A7 jz loc_18007284B -; Changed -; .text:000000018001F6A1 mov eax, 100h -; .text:000000018001F6A6 mov [rcx+638h], eax -; .text:000000018001F6AC nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=1F6A1 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=117F1 SLInitFunc.x86=New_CSLQuery_Initialize @@ -1023,59 +388,24 @@ SLInitOffset.x64=3B110 SLInitFunc.x64=New_CSLQuery_Initialize [6.3.9600.17415] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:100B33EB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:100B33F0 test eax, eax -; .text:100B33F2 js short loc_100B340F -; .text:100B33F4 cmp [ebp+var_C], 0 -; .text:100B33F8 jz short loc_100B340F <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=B33F8 LocalOnlyCode.x86=jmpshort -; .text:000000018008B2D4 cmp [rsp+58h+arg_18], 0 -; .text:000000018008B2D9 jz loc_180025C39 <- nop + jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=8B2D9 LocalOnlyCode.x64=nopjmp -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10037111 lea eax, [esp+150h+VersionInformation] -; .text:10037115 inc ebx <- nop -; .text:10037116 mov [edi], ebx -; .text:10037118 push eax ; lpVersionInformation -; .text:10037119 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=37115 SingleUserCode.x86=nop -; .text:0000000180033CE3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:0000000180033CE8 mov ebx, 1 <- 0 -; .text:0000000180033CED mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180033CF5 mov [rdi], ebx -; .text:0000000180033CF7 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=33CE9 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1003CFF9 cmp eax, [ecx+320h] -; .text:1003CFFF jz loc_1004A52F -; Changed -; .text:1003CFF9 mov eax, 100h -; .text:1003CFFE mov [ecx+320h], eax -; .text:1003D004 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=3CFF9 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:0000000180045825 cmp [rcx+63Ch], eax -; .text:000000018004582B jz loc_180067704 -; Changed -; .text:0000000180045825 mov eax, 100h -; .text:000000018004582A mov [rcx+638h], eax -; .text:0000000180045830 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=45825 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=18478 SLInitFunc.x86=New_CSLQuery_Initialize @@ -1084,62 +414,24 @@ SLInitOffset.x64=5DBC0 SLInitFunc.x64=New_CSLQuery_Initialize [6.4.9841.0] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:1009569B call sub_100B7EE5 -; .text:100956A0 test eax, eax -; .text:100956A2 js short loc_100956BF -; .text:100956A4 cmp [ebp+var_C], 0 -; .text:100956A8 jz short loc_100956BF <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=956A8 LocalOnlyCode.x86=jmpshort -; .text:0000000180081133 call sub_1800A9048 -; .text:0000000180081138 test eax, eax -; .text:000000018008113A js short loc_18008115B -; .text:000000018008113C cmp [rsp+58h+arg_18], 0 -; .text:0000000180081141 jz short loc_18008115B <- jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=81141 LocalOnlyCode.x64=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10030121 lea eax, [esp+150h+VersionInformation] -; .text:10030125 inc ebx <- nop -; .text:10030126 mov [edi], ebx -; .text:10030128 push eax ; lpVersionInformation -; .text:10030129 call ds:GetVersionExW SingleUserPatch.x86=1 SingleUserOffset.x86=30125 SingleUserCode.x86=nop -; .text:0000000180012153 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:0000000180012158 mov ebx, 1 <- 0 -; .text:000000018001215D mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180012165 mov [rdi], ebx -; .text:0000000180012167 call cs:GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=12159 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1003B989 cmp eax, [ecx+320h] -; .text:1003B98F jz loc_1005E809 -; Changed -; .text:1003B989 mov eax, 100h -; .text:1003B98E mov [ecx+320h], eax -; .text:1003B994 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=3B989 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:000000018000C125 cmp [rcx+63Ch], eax -; .text:000000018000C12B jz sub_18003BABC -; Changed -; .text:000000018000C125 mov eax, 100h -; .text:000000018000C12A mov [rcx+638h], eax -; .text:000000018000C130 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=C125 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=46A68 SLInitFunc.x86=New_CSLQuery_Initialize @@ -1148,62 +440,24 @@ SLInitOffset.x64=1EA50 SLInitFunc.x64=New_CSLQuery_Initialize [6.4.9860.0] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:100962BB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:100962C0 test eax, eax -; .text:100962C2 js short loc_100962DF -; .text:100962C4 cmp [ebp+var_C], 0 -; .text:100962C8 jz short loc_100962DF <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=962C8 LocalOnlyCode.x86=jmpshort -; .text:0000000180081083 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:0000000180081088 test eax, eax -; .text:000000018008108A js short loc_1800810AB -; .text:000000018008108C cmp [rsp+58h+arg_18], 0 -; .text:0000000180081091 jz short loc_1800810AB <- jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=81091 LocalOnlyCode.x64=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10030841 lea eax, [esp+150h+VersionInformation] -; .text:10030845 inc ebx <- nop -; .text:10030846 mov [edi], ebx -; .text:10030848 push eax ; lpVersionInformation -; .text:10030849 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=30845 SingleUserCode.x86=nop -; .text:0000000180011AA3 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:0000000180011AA8 mov ebx, 1 <- 0 -; .text:0000000180011AAD mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180011AB5 mov [rdi], ebx -; .text:0000000180011AB7 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=11AA9 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1003BEC9 cmp eax, [ecx+320h] -; .text:1003BECF jz loc_1005EE1A -; Changed -; .text:1003BEC9 mov eax, 100h -; .text:1003BECE mov [ecx+320h], eax -; .text:1003BED4 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=3BEC9 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:000000018000B9F5 cmp [rcx+63Ch], eax -; .text:000000018000B9FB jz sub_18003B9C8 -; Changed -; .text:000000018000B9F5 mov eax, 100h -; .text:000000018000B9FA mov [rcx+638h], eax -; .text:000000018000BA00 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=B9F5 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=46F18 SLInitFunc.x86=New_CSLQuery_Initialize @@ -1212,63 +466,24 @@ SLInitOffset.x64=1EB00 SLInitFunc.x64=New_CSLQuery_Initialize [6.4.9879.0] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:100A9CBB call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:100A9CC0 test eax, eax -; .text:100A9CC2 js short loc_100A9CDF -; .text:100A9CC4 cmp [ebp+var_C], 0 -; .text:100A9CC8 jz short loc_100A9CDF <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A9CC8 LocalOnlyCode.x86=jmpshort -; .text:0000000180095603 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:0000000180095608 test eax, eax -; .text:000000018009560A js short loc_18009562B -; .text:000000018009560C cmp [rsp+58h+arg_18], 0 -; .text:0000000180095611 jz short loc_18009562B <- jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=95611 LocalOnlyCode.x64=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10030C51 lea eax, [esp+150h+VersionInformation] -; .text:10030C55 inc ebx <- nop -; .text:10030C56 mov [edi], ebx -; .text:10030C58 push eax ; lpVersionInformation -; .text:10030C59 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=30C55 SingleUserCode.x86=nop -; .text:0000000180016A2E call memset_0 -; .text:0000000180016A33 mov ebx, 1 <- 0 -; .text:0000000180016A38 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180016A40 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:0000000180016A45 mov [rdi], ebx -; .text:0000000180016A47 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=16A34 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1002DAB9 cmp eax, [ecx+320h] -; .text:1002DABF jz loc_1006C38A -; Changed -; .text:1002DAB9 mov eax, 100h -; .text:1002DABE mov [ecx+320h], eax -; .text:1002DAC4 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=2DAB9 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:000000018001BDC5 cmp [rcx+63Ch], eax -; .text:000000018001BDCB jz sub_180045540 -; Changed -; .text:000000018001BDC5 mov eax, 100h -; .text:000000018001BDCA mov [rcx+638h], eax -; .text:000000018001BDD0 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=1BDC5 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=41132 SLInitFunc.x86=New_CSLQuery_Initialize @@ -1277,107 +492,49 @@ SLInitOffset.x64=24750 SLInitFunc.x64=New_CSLQuery_Initialize [10.0.9926.0] -; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A8C28 LocalOnlyCode.x86=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled SingleUserPatch.x86=1 SingleUserOffset.x86=31725 SingleUserCode.x86=nop -; Patch CDefPolicy::Query DefPolicyPatch.x86=1 DefPolicyOffset.x86=3CF99 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=3F140 SLInitFunc.x86=New_CSLQuery_Initialize -; x64 contributed by v-yadli -; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x64=1 -;;;OFFSET = 0x61 -;;;BASE = 0x95F90 LocalOnlyOffset.x64=95FF1 LocalOnlyCode.x64=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled SingleUserPatch.x64=1 -;;;OFFSET = 0x43 -;;;BASE = 0x12F90 -;;;;instruction = 0xBB 0x01 0x00 0x00 0x00 -;;; ^^^ +1 offset -SingleUserOffset.x64=12A34 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query DefPolicyPatch.x64=1 -;;; -;;;BASE = 0xBDF0 -;;;OFFSET = 0x15 DefPolicyOffset.x64=BE05 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x64=1 SLInitOffset.x64=24EC0 SLInitFunc.x64=New_CSLQuery_Initialize [10.0.10041.0] -; Patch CEnforcementCore::GetInstanceOfTSLicense -; .text:100A9D7B call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:100A9D80 test eax, eax -; .text:100A9D82 js short loc_100A9D9F -; .text:100A9D84 cmp [ebp+var_C], 0 -; .text:100A9D88 jz short loc_100A9D9F <- jmp LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A9D88 LocalOnlyCode.x86=jmpshort -; .text:0000000180097133 call ?IsLicenseTypeLocalOnly@CSLQuery@@SAJAEAU_GUID@@PEAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) -; .text:0000000180097138 test eax, eax -; .text:000000018009713A js short loc_18009715B -; .text:000000018009713C cmp [rsp+58h+arg_18], 0 -; .text:0000000180097141 jz short loc_18009715B <- jmp LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=97141 LocalOnlyCode.x64=jmpshort -; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled -; .text:10032211 lea eax, [esp+150h+VersionInformation] -; .text:10032215 inc ebx <- nop -; .text:10032216 mov [edi], ebx -; .text:10032218 push eax ; lpVersionInformation -; .text:10032219 call ds:__imp__GetVersionExW@4 ; GetVersionExW(x) SingleUserPatch.x86=1 SingleUserOffset.x86=32215 SingleUserCode.x86=nop -; .text:0000000180015C5E call memset_0 -; .text:0000000180015C63 mov ebx, 1 <- 0 -; .text:0000000180015C68 mov [rsp+190h+VersionInformation.dwOSVersionInfoSize], 11Ch -; .text:0000000180015C70 lea rcx, [rsp+190h+VersionInformation] ; lpVersionInformation -; .text:0000000180015C75 mov [rdi], ebx -; .text:0000000180015C77 call cs:__imp_GetVersionExW SingleUserPatch.x64=1 SingleUserOffset.x64=15C64 SingleUserCode.x64=Zero -; Patch CDefPolicy::Query -; Original -; .text:1002DFC9 cmp eax, [ecx+320h] -; .text:1002DFCF jz loc_10056550 -; Changed -; .text:1002DFC9 mov eax, 100h -; .text:1002DFCE mov [ecx+320h], eax -; .text:1002DFD4 nop DefPolicyPatch.x86=1 DefPolicyOffset.x86=2DFC9 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -; Original -; .text:000000018000B795 cmp [rcx+63Ch], eax -; .text:000000018000B79B jz sub_18003A79A -; Changed -; .text:000000018000B795 mov eax, 100h -; .text:000000018000B79A mov [rcx+638h], eax -; .text:000000018000B7A0 nop DefPolicyPatch.x64=1 DefPolicyOffset.x64=B795 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=46960 SLInitFunc.x86=New_CSLQuery_Initialize @@ -1537,7 +694,6 @@ bMultimonAllowed.x86 =C17E8 bServerSku.x86 =C17EC ulMaxDebugSessions.x86=C17F0 bRemoteConnAllowed.x86=C17F4 -; x64 contributed by v-yadli bFUSEnabled.x64 =EEBF0 lMaxUserSessions.x64 =EEBF4 bAppServerAllowed.x64 =EEBF8 From eca971de03f015c2c4645cf0631ccd279b15ebdd Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 16 Jul 2015 22:15:14 +0300 Subject: [PATCH 066/208] Fix previous commit --- res/rdpwrap.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 311c207..11610e6 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -508,6 +508,7 @@ LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=95FF1 LocalOnlyCode.x64=jmpshort SingleUserPatch.x64=1 +SingleUserOffset.x64=12A34 SingleUserCode.x64=Zero DefPolicyPatch.x64=1 DefPolicyOffset.x64=BE05 From adabe322c3cbed132dd87dce7b7a8e3e34dcec53 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 16 Jul 2015 23:17:41 +0300 Subject: [PATCH 067/208] Update apps --- src-installer/RDPWInst.dpr | 33 +++++++++++++++++++++++---------- src-installer/RDPWInst.dproj | 8 ++++---- src-installer/resource.res | Bin 435504 -> 397100 bytes src-rdpcheck/MainUnit.pas | 6 +++--- src-rdpconfig/MainUnit.dfm | 22 ++++++++++++---------- src-rdpconfig/MainUnit.pas | 11 ++++++++++- 6 files changed, 52 insertions(+), 28 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 6f934f5..b4489bd 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1,5 +1,5 @@ { - Copyright 2014 Stas'M Corp. + Copyright 2015 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -282,32 +282,45 @@ var hSvc: THandle; Code: DWORD; pch: PWideChar; + procedure ExitError(Func: String; ErrorCode: DWORD); + begin + if hSC > 0 then + CloseServiceHandle(hSC); + if hSvc > 0 then + CloseServiceHandle(hSvc); + Writeln('[-] ', Func, ' error (code ', ErrorCode, ').'); + end; begin + hSC := 0; + hSvc := 0; Writeln('[*] Starting ', SvcName, '...'); hSC := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT); if hSC = 0 then begin - Code := GetLastError; - Writeln('[-] OpenSCManager error (code ', Code, ').'); + ExitError('OpenSCManager', GetLastError); Exit; end; hSvc := OpenService(hSC, PWideChar(SvcName), SERVICE_START); if hSvc = 0 then begin - CloseServiceHandle(hSC); - Code := GetLastError; - Writeln('[-] OpenService error (code ', Code, ').'); + ExitError('OpenService', GetLastError); Exit; end; pch := nil; if not StartService(hSvc, 0, pch) then begin - CloseServiceHandle(hSvc); - CloseServiceHandle(hSC); Code := GetLastError; - Writeln('[-] StartService error (code ', Code, ').'); - Exit; + if Code = 1056 then begin // Service already started + Sleep(2000); // or SCM hasn't registered killed process + if not StartService(hSvc, 0, pch) then begin + ExitError('StartService', Code); + Exit; + end; + end else begin + ExitError('StartService', Code); + Exit; + end; end; CloseServiceHandle(hSvc); CloseServiceHandle(hSC); diff --git a/src-installer/RDPWInst.dproj b/src-installer/RDPWInst.dproj index 78b7b03..3d44444 100644 --- a/src-installer/RDPWInst.dproj +++ b/src-installer/RDPWInst.dproj @@ -41,14 +41,14 @@ Base - - Cfg_2 - Base - Cfg_1 Base + + Cfg_2 + Base + diff --git a/src-installer/resource.res b/src-installer/resource.res index 8bcc9dd10466c18d591998d2b7034726c3b241ae..402086aa693436be4016e1d63dd72da12edd5cd9 100644 GIT binary patch delta 1744 zcmY*XYfzL`7@pnzHj`W%Bs6wiSXr6Iz46`lrcuGiZVIAEDmr24$ZAXoD3Y3!5}Gtk zCd;EvrAUlsOxk!s(u^s>8m5b5ih`Fi_D{dFv6|5zcFuWqv>#{RbKd8DF6VrE{73uI z15dZR%!f*oxx2;%{j%m)wd9$3$Tb;k1+dj@wKdiyUP?4I)i%^O6)13-WaOFC@1qk~ zoq=oS3{m42T~t}(brO1{y!+=o%(U9Xey25zi`F8xd{fHn8!Hkuwd)cq*E99Py1Ir9 zi5li{!78Vh#mnoOSJyt$b(y@Gi)v%5R$yKeE5V5=Vo~kx2fpe@5P)aO9Xx*o$&Sy!V5B0Sf25raLOEk_hb>?<{(^m5+2DR zylWcaTik?u^ElotxO-<1*6bxL*UvF8^76@hr^0bR)@V5_n-4$h3d21p4ZXWdfn!ys%JXK13$2{WSolpFw z3y42j@qhl*O5$%`Li{^R4W{oySry%B(kmSIprKmDx#d;p*yzKC6|HQ>kF=U>98AoG zWi@3#`l=@IaP8XyKmQtObgXf)86WjUA{@exI;-pBuP z%h>pIEa=?LC}qN;xtlD?4w6O2CuFhqFj@ThDYux8njX&a;Miw8nis7{Tq0WK=fra! zBi`oY#Jh8Xc=adSG5EC?Ri}8oGQrt%nsfYE{3U(9-m}C}`&H)U#-aWsZ zoX)`<_BjJce3vbr;M?zs^TH5uP7Wo-Gu-`w`*<+?6W!~`dGb1ZfxIjiiPw6G=X2xl zOWP+XazGA5qiQH1FGFLOUy2xN1l?WP+*#6;u!`kn#VEXPmkfn%s%aBL%hjpoa17le4vWI-HzN*{f`Kt7 z`@K2ll$3B>hbd*Z#ERl*zvdA2#35Yx;=^<^s^7TmO3c{hT$uG%HG;nGjx_;o99hh+?m@OGH% zXNgt>sWH(qaBs{Z#Wh`Lm&_a=(p|0sajL#P8I4yY4h6A-tgYMYn qDHyvUNtzy#aqCLfI5r#7ZE4$Xr`m3(Ol+CivaltczMZl@d+tBzhlncx delta 40309 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 diff --git a/src-rdpcheck/MainUnit.pas b/src-rdpcheck/MainUnit.pas index 1f0e201..3efe4ca 100644 --- a/src-rdpcheck/MainUnit.pas +++ b/src-rdpcheck/MainUnit.pas @@ -1,5 +1,5 @@ { - Copyright 2014 Stas'M Corp. + Copyright 2015 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -50,7 +50,7 @@ begin RDP.ConnectingText := 'Connecting...'; RDP.ConnectedStatusText := 'Connected.'; RDP.UserName := ''; - RDP.Server := '127.0.0.1'; + RDP.Server := '127.0.0.2'; Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; @@ -133,7 +133,7 @@ begin $2207: ErrStr := 'The smart card is blocked.'; $1C07: ErrStr := 'An incorrect PIN was presented to the smart card.'; $B09: ErrStr := 'Network Level Authentication is required.'; - $708: ErrStr := 'The RDP seems to work, but your client doesn''t support loopback connections. Try to connect to your PC from another device in the network.'; + $708: ErrStr := 'RDP is working, but the client doesn''t allow loopback connections. Try to connect to your PC from another device in the network.'; else ErrStr := 'Unknown code 0x'+IntToHex(discReason, 1); end; if (discReason > 2) then diff --git a/src-rdpconfig/MainUnit.dfm b/src-rdpconfig/MainUnit.dfm index 49a9004..d67ee28 100644 --- a/src-rdpconfig/MainUnit.dfm +++ b/src-rdpconfig/MainUnit.dfm @@ -3,7 +3,7 @@ object MainForm: TMainForm Top = 0 BorderStyle = bsDialog Caption = 'RDP Wrapper Configuration' - ClientHeight = 326 + ClientHeight = 352 ClientWidth = 351 Color = clBtnFace Font.Charset = DEFAULT_CHARSET @@ -27,7 +27,7 @@ object MainForm: TMainForm end object bOK: TButton Left = 10 - Top = 293 + Top = 319 Width = 75 Height = 25 Caption = 'OK' @@ -37,7 +37,7 @@ object MainForm: TMainForm end object bCancel: TButton Left = 91 - Top = 293 + Top = 319 Width = 75 Height = 25 Caption = 'Cancel' @@ -47,7 +47,7 @@ object MainForm: TMainForm end object bApply: TButton Left = 172 - Top = 293 + Top = 319 Width = 75 Height = 25 Caption = 'Apply' @@ -66,7 +66,7 @@ object MainForm: TMainForm end object rgNLA: TRadioGroup Left = 8 - Top = 135 + Top = 132 Width = 335 Height = 73 Caption = 'Security Mode' @@ -88,14 +88,16 @@ object MainForm: TMainForm end object rgShadow: TRadioGroup Left = 8 - Top = 214 + Top = 208 Width = 335 - Height = 73 + Height = 105 Caption = 'Session Shadowing Mode' Items.Strings = ( 'Disable Shadowing' - 'Shadowing will request user'#39's permission' - 'Shadow sessions immediately') + 'Full access with user'#39's permission' + 'Full access without permission' + 'View only with user'#39's permission' + 'View only without permission') TabOrder = 6 OnClick = cbAllowTSConnectionsClick end @@ -112,7 +114,7 @@ object MainForm: TMainForm end object bLicense: TButton Left = 253 - Top = 293 + Top = 319 Width = 87 Height = 25 Caption = 'View license...' diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index 8feeccf..d8608cb 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -1,5 +1,5 @@ { - Copyright 2014 Stas'M Corp. + Copyright 2015 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -439,6 +439,15 @@ begin end; end; Reg.CloseKey; + Reg.OpenKey('\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services', True); + if rgShadow.ItemIndex >= 0 then begin + try + Reg.WriteInteger('Shadow', rgShadow.ItemIndex); + except + + end; + end; + Reg.CloseKey; Reg.Free; end; From 9a7c501ca92873d04d2e5a7ab6659906434c17ab Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 16 Jul 2015 23:32:16 +0300 Subject: [PATCH 068/208] Fix readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 7541be9..0ab2458 100644 --- a/README.md +++ b/README.md @@ -187,9 +187,8 @@ Change log:
• Windows 8.1 Preview
• Windows 8.1
• Windows 8.1 Connected (with Bing)
+• Windows 8.1 Single Language
• Windows 8.1 Connected Single Language (with Bing)
-• Windows 8.1 Single Language
-• Windows 8.1 Single Language
• Windows 8.1 Pro
• Windows 8.1 Enterprise
• Windows 10 Technical Preview
From 5062ff6c75b6a51f30fabfb8d11800f9e729270f Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 01:28:23 +0300 Subject: [PATCH 069/208] Update INI - Added support for build 10.0.10240.16384 - Added HOW TO hints to KB --- res/rdpwrap-ini-kb.txt | 76 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 46 +++++++++++++++++++++++++ 2 files changed, 122 insertions(+) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index dc58532..7bee8a3 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -54,6 +54,11 @@ CDefPolicy_Query_eax_ecx=B80001000089812003000090 CDefPolicy_Query_eax_rcx=B80001000089813806000090 [6.0.6000.16386] +; HOW TO search CSessionArbitrationHelper::IsSingleSessionPerUserEnabled function in IDA Pro: +; 1. Search text: CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; 2. All xrefs will point to this function (in x64 version xref points to subroutine, so you need to go one level up) +; 3. Go to first graph block and find memset, VersionInformation, call GetVersionExW, and so on + ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled ; Imagebase: 6F320000 ; .text:6F3360B9 lea eax, [ebp+VersionInformation] @@ -74,6 +79,11 @@ SingleUserCode.x86=nop SingleUserPatch.x64=1 SingleUserOffset.x64=65E3E SingleUserCode.x64=Zero +; HOW TO search CDefPolicy::Query function in IDA Pro: +; 1. Search text: CDefPolicy::Query +; 2. All xrefs will point to this function (in x64 version xref sometimes points to subroutine, so you need to go one level up) +; 3. Go to first graph block and find cmp/jz instructions on the bottom of block + ; Patch CDefPolicy::Query ; Original ; .text:6F335CD8 cmp edx, [ecx+320h] @@ -835,6 +845,12 @@ SLPolicyOffset.x64=21FD0 SLPolicyFunc.x64=New_Win8SL [6.3.9431.0] +; HOW TO search CEnforcementCore::GetInstanceOfTSLicense function in IDA Pro: +; 1. Search text: CSLQuery::IsLicenseTypeLocalOnly +; 2. All xrefs will point to this function +; 3. Go to function beginning and check ; CODE XREF string, it will point to GetInstanceOfTSLicense function +; 4. Follow CODE XREF, switch to graph view, the next block below is to patch + ; Patch CEnforcementCore::GetInstanceOfTSLicense ; .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) ; .text:1008A609 test eax, eax @@ -890,6 +906,10 @@ DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 DefPolicyOffset.x64=350FD DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; HOW TO search CSLQuery::Initialize function in IDA Pro: +; 1. Search text: CSLQuery::Initialize - SLGetWindowsInformationDWORD failed +; 2. All xrefs will point to this function + ; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=196B0 @@ -1386,6 +1406,36 @@ SLInitHook.x64=1 SLInitOffset.x64=22E40 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.10240.16384] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7D96 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96901 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=32A95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18F74 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2F5B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=22865 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46581 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=250F0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1405,6 +1455,13 @@ ulMaxDebugSessions=0 bInitialized=1 [6.3.9431.0-SLInit] +; HOW TO search SLInit global variables in IDA Pro: +; 1. Search text: The SL policy for ',27h,'Allow Multiple Sessions',27h,' is not defined +; 2. Xref will point to CSLQuery::Initialize function +; 3. Follow xref, look for cmp instruction nearby +; 4. It will be comparsion with CSLQuery::bServerSku constant +; 5. Now it's easy to find other constants + bFUSEnabled.x86 =A22A8 lMaxUserSessions.x86 =A22AC bAppServerAllowed.x86 =A22B0 @@ -1574,3 +1631,22 @@ bMultimonAllowed.x64 =F3458 bServerSku.x64 =F345C ulMaxDebugSessions.x64=F3460 bRemoteConnAllowed.x64=F3464 + +[10.0.10240.16384-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 11610e6..13cee34 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -543,6 +543,32 @@ SLInitHook.x64=1 SLInitOffset.x64=22E40 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.10240.16384] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7D96 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96901 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32A95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18F74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2F5B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=22865 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46581 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=250F0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -695,6 +721,7 @@ bMultimonAllowed.x86 =C17E8 bServerSku.x86 =C17EC ulMaxDebugSessions.x86=C17F0 bRemoteConnAllowed.x86=C17F4 + bFUSEnabled.x64 =EEBF0 lMaxUserSessions.x64 =EEBF4 bAppServerAllowed.x64 =EEBF8 @@ -722,3 +749,22 @@ bMultimonAllowed.x64 =F3458 bServerSku.x64 =F345C ulMaxDebugSessions.x64=F3460 bRemoteConnAllowed.x64=F3464 + +[10.0.10240.16384-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 From fca45f61e724b3fea35cc5fb72f412d07a4f6dc4 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 02:06:27 +0300 Subject: [PATCH 070/208] Update tech log --- technical.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/technical.txt b/technical.txt index c615952..368c6c9 100644 --- a/technical.txt +++ b/technical.txt @@ -57,13 +57,17 @@ Terminal Services supported versions 6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] 10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] 10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [init hook + extended patch] -10.0.10240.16384 (Windows 10 Pro RTM) [!todo] +10.0.10061.0 (Windows 10 Pro Technical Preview UP2) [todo] +10.0.10240.16384 (Windows 10 Pro RTM) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2015.07.17 : +- added support for termsrv.dll 10.0.10240.16384 + 2015.07.16 : - obtained files from build 10.0.10240.16384 - researching Windows 10 Pro RTM From a42b7409468f215195b7ab6ede62edd2bcdd9941 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 02:19:07 +0300 Subject: [PATCH 071/208] More tech details --- technical.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/technical.txt b/technical.txt index 368c6c9..91a82e8 100644 --- a/technical.txt +++ b/technical.txt @@ -67,8 +67,15 @@ Source code changelog (rdpwrap library): 2015.07.17 : - added support for termsrv.dll 10.0.10240.16384 +- added HOW TO hints to KB (so other reverse engineers can do this hard work more easier) 2015.07.16 : +- moved all comments from INI file to Knowledge Base text file +- now INI file have smaller size +- updated RDP checker: changed IP Address to 127.0.0.2 (sometimes client doesn't want to connect .1), updated text message +- updated RDP config: list all possible shadowing modes, also write group policy +- updated installer: added workaround for 1056 error +- updated copyright years in source code - obtained files from build 10.0.10240.16384 - researching Windows 10 Pro RTM From ca71d4ace4d33e2e34a61757d5e9056bf8392dee Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 02:21:51 +0300 Subject: [PATCH 072/208] Small fix --- technical.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/technical.txt b/technical.txt index 91a82e8..b7107ad 100644 --- a/technical.txt +++ b/technical.txt @@ -57,8 +57,9 @@ Terminal Services supported versions 6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] 10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] 10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [init hook + extended patch] -10.0.10061.0 (Windows 10 Pro Technical Preview UP2) [todo] -10.0.10240.16384 (Windows 10 Pro RTM) [init hook + extended patch] +10.0.10049.0 (Windows 10 Pro Technical Preview UP2) [todo] +10.0.10061.0 (Windows 10 Pro Technical Preview UP3) [todo] +10.0.10240.16384 (Windows 10 RTM) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) @@ -77,7 +78,7 @@ Source code changelog (rdpwrap library): - updated installer: added workaround for 1056 error - updated copyright years in source code - obtained files from build 10.0.10240.16384 -- researching Windows 10 Pro RTM +- researching Windows 10 RTM 2015.03.23 : - researching Windows 10 Pro Technical Preview UP1 From efe2872a269bbb56f3f185550e94c6fbdb9c8a34 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 02:29:20 +0300 Subject: [PATCH 073/208] Update INI modification date --- res/rdpwrap-ini-kb.txt | 2 +- res/rdpwrap.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 7bee8a3..d398f44 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2015-03-23 +Updated=2015-07-17 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 13cee34..04f4e89 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2015-03-23 +Updated=2015-07-17 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 From 659ba3dbcf5b13fa0076f8ca48ddb2a65e7b8dff Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 02:35:05 +0300 Subject: [PATCH 074/208] RDPCheck: update text --- src-rdpcheck/MainUnit.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-rdpcheck/MainUnit.pas b/src-rdpcheck/MainUnit.pas index 3efe4ca..a92abce 100644 --- a/src-rdpcheck/MainUnit.pas +++ b/src-rdpcheck/MainUnit.pas @@ -132,7 +132,7 @@ begin $1707: ErrStr := 'Delegation of credentials to the target server is not allowed unless mutual authentication has been achieved.'; $2207: ErrStr := 'The smart card is blocked.'; $1C07: ErrStr := 'An incorrect PIN was presented to the smart card.'; - $B09: ErrStr := 'Network Level Authentication is required.'; + $B09: ErrStr := 'Network Level Authentication is required, run RDPCheck as administrator.'; $708: ErrStr := 'RDP is working, but the client doesn''t allow loopback connections. Try to connect to your PC from another device in the network.'; else ErrStr := 'Unknown code 0x'+IntToHex(discReason, 1); end; From 425fc02fec3b822e1ca13511f374ea0a91dead6a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 02:39:09 +0300 Subject: [PATCH 075/208] New batch scripts --- res/install.bat | 14 ++++++++++++++ res/uninstall.bat | 10 ++++++++++ 2 files changed, 24 insertions(+) create mode 100644 res/install.bat create mode 100644 res/uninstall.bat diff --git a/res/install.bat b/res/install.bat new file mode 100644 index 0000000..9731cfd --- /dev/null +++ b/res/install.bat @@ -0,0 +1,14 @@ +@echo off +if not exist "%~dp0RDPWInst.exe" goto :error +"%~dp0RDPWInst" -i +echo ______________________________________________________________ +echo. +echo You can check RDP functionality with RDPCheck program. +echo Also you can configure advanced settings with RDPConf program. +echo. +goto :anykey +:error +echo [-] Installer executable not found. +echo Please extract all files from the downloaded package or check your anti-virus. +:anykey +pause diff --git a/res/uninstall.bat b/res/uninstall.bat new file mode 100644 index 0000000..1c72289 --- /dev/null +++ b/res/uninstall.bat @@ -0,0 +1,10 @@ +@echo off +if not exist "%~dp0RDPWInst.exe" goto :error +"%~dp0RDPWInst" -u +echo. +goto :anykey +:error +echo [-] Installer executable not found. +echo Please extract all files from the downloaded package or check your anti-virus. +:anykey +pause From 7baa97975270a467c9bd637853f6a45a5c291718 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 03:45:22 +0300 Subject: [PATCH 076/208] Update readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 0ab2458..b0838cf 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ Screenshots:
      +  + 
This solution was inspired by Windows Product Policy Editor, big thanks to kost :)
- binarymaster
@@ -163,6 +165,7 @@ Change log:
6.4.9879.0 (Windows 10 Technical Preview Update 2)
10.0.9926.0 (Windows 10 Pro Technical Preview)
10.0.10041.0 (Windows 10 Pro Technical Preview Update 1)
+• 10.0.10240.16384 (Windows 10 RTM)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
@@ -193,6 +196,7 @@ Change log:
• Windows 8.1 Enterprise
• Windows 10 Technical Preview
• Windows 10 Pro Technical Preview
+• Windows 10 Enterprise

Known issues:
• RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386)
From 8be10a125ba4d8a56cde1080d5adde32f4d5e346 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 18:50:40 +0300 Subject: [PATCH 077/208] Update readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index b0838cf..32967d0 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,10 @@ Building the binaries:
• Adding «Remote Desktop Users» group:
http://superuser.com/questions/680572/

+Tutorial videos:
+• Updating RDP Wrapper INI file manually
+• How to find offsets for new termsrv.dll versions
+
Files description:

@@ -196,6 +200,7 @@ Change log:
• Windows 8.1 Enterprise
• Windows 10 Technical Preview
• Windows 10 Pro Technical Preview
+• Windows 10 Pro
• Windows 10 Enterprise

Known issues:
From 8ac339616550ebf72793c9d36e9f0ddd8cc42311 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 19:06:57 +0300 Subject: [PATCH 078/208] Small readme fix --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 32967d0..990d805 100644 --- a/README.md +++ b/README.md @@ -173,11 +173,11 @@ Change log:

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
-• Windows Vista Home Basic (x86 - Service Pack 1 and higher)
-• Windows Vista Home Premium (x86 - Service Pack 1 and higher)
-• Windows Vista Business (x86 - Service Pack 1 and higher)
-• Windows Vista Enterprise (x86 - Service Pack 1 and higher)
-• Windows Vista Ultimate (x86 - Service Pack 1 and higher)
+• Windows Vista Home Basic
+• Windows Vista Home Premium
+• Windows Vista Business
+• Windows Vista Enterprise
+• Windows Vista Ultimate
• Windows 7 Starter
• Windows 7 Home Basic
• Windows 7 Home Premium
From 80387dcc31cb3d82c055c9b6d2af50c9987378da Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jul 2015 21:59:20 +0300 Subject: [PATCH 079/208] Fix installer: check ImagePath without extension --- src-installer/RDPWInst.dpr | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index b4489bd..4f42b77 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -159,7 +159,8 @@ begin end; TermServiceHost := Reg.ReadString('ImagePath'); Reg.CloseKey; - if Pos('svchost.exe', LowerCase(TermServiceHost)) = 0 then + if (Pos('svchost.exe', LowerCase(TermServiceHost)) = 0) + and (Pos('svchost -k', LowerCase(TermServiceHost)) = 0) then begin Reg.Free; Writeln('[-] TermService is hosted in a custom application (BeTwin, etc.) - unsupported.'); @@ -896,7 +897,7 @@ var begin Writeln('RDP Wrapper Library v1.5'); Writeln('Installer v2.2'); - Writeln('Copyright (C) Stas''M Corp. 2014'); + Writeln('Copyright (C) Stas''M Corp. 2015'); Writeln(''); if (ParamCount < 1) From b9149eef023c309644785ddb566c0a71a45ba153 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 30 Jul 2015 01:09:12 +0300 Subject: [PATCH 080/208] Fix wrong LocalOnly x86 offset --- res/rdpwrap-ini-kb.txt | 4 ++-- res/rdpwrap.ini | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index d398f44..688ec67 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2015-07-17 +Updated=2015-07-30 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1409,7 +1409,7 @@ SLInitFunc.x64=New_CSLQuery_Initialize [10.0.10240.16384] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A7D96 +LocalOnlyOffset.x86=A7D38 LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=96901 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 04f4e89..ac99390 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2015-07-17 +Updated=2015-07-30 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -545,7 +545,7 @@ SLInitFunc.x64=New_CSLQuery_Initialize [10.0.10240.16384] LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A7D96 +LocalOnlyOffset.x86=A7D38 LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=96901 From 946bd7f8a6c20e47663eb7bb843afcd27cf81ea6 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 30 Jul 2015 01:15:55 +0300 Subject: [PATCH 081/208] Update technical --- README.md | 1 + technical.txt | 3 +++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 990d805..a9e98a9 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,7 @@ Change log:
• Windows 8.1 Enterprise
• Windows 10 Technical Preview
• Windows 10 Pro Technical Preview
+• Windows 10 Home
• Windows 10 Pro
• Windows 10 Enterprise

diff --git a/technical.txt b/technical.txt index b7107ad..ce503b3 100644 --- a/technical.txt +++ b/technical.txt @@ -66,6 +66,9 @@ Known failures Source code changelog (rdpwrap library): +2015.07.30 : +- fixed issue with Windows 10 Home x86 (wrong LocalOnly offset was specified in INI file) + 2015.07.17 : - added support for termsrv.dll 10.0.10240.16384 - added HOW TO hints to KB (so other reverse engineers can do this hard work more easier) From 1f8e2b9e65f9764c1e550bee36dfd3329583192b Mon Sep 17 00:00:00 2001 From: WisdomWolf Date: Fri, 31 Jul 2015 23:37:41 -0400 Subject: [PATCH 082/208] corrected CR-LF at end of ini file --- res/rdpwrap.ini | 1540 +++++++++++++++++++++++------------------------ 1 file changed, 770 insertions(+), 770 deletions(-) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index ac99390..5c67d17 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -1,770 +1,770 @@ -; RDP Wrapper Library configuration -; Do not modify without special knowledge - -[Main] -Updated=2015-07-30 -LogFile=\rdpwrap.txt -SLPolicyHookNT60=1 -SLPolicyHookNT61=1 - -[SLPolicy] -TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 -TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 -TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 -TerminalServices-RemoteConnectionManager-AllowMultimon=1 -TerminalServices-RemoteConnectionManager-MaxUserSessions=0 -TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 -TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 -TerminalServices-RDP-7-Advanced-Compression-Allowed=1 -TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 -TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 -TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 -TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 -TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 -TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 - -[PatchCodes] -nop=90 -Zero=00 -jmpshort=EB -nopjmp=90E9 -CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 -CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB -CDefPolicy_Query_eax_esi=B80001000089862003000090 -CDefPolicy_Query_eax_rdi=B80001000089873806000090 -CDefPolicy_Query_eax_ecx=B80001000089812003000090 -CDefPolicy_Query_eax_rcx=B80001000089813806000090 - -[6.0.6000.16386] -SingleUserPatch.x86=1 -SingleUserOffset.x86=160BF -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=65E3E -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=15CD8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=5C88F -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6001.18000] -SingleUserPatch.x86=1 -SingleUserOffset.x86=185E4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=70DBA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=17FD8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65BD7 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.18005] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FA8 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=70FF6 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179C0 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65E83 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.19214] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FC4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=712AA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179B8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65FF7 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.23521] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FB4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=71EAA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179CC -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=669CB -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.1.7600.16385] -SingleUserPatch.x86=1 -SingleUserOffset.x86=19E25 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17D96 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=196F3 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17AD2 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.17514] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A49D -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=180E2 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19D53 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17D8A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.18540] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A4E5 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=18006 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19D9F -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17C82 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.22750] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A655 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17E8E -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19E21 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17C92 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.18637] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A4DD -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=180FA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19DBB -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17DC6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.22843] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A655 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17F96 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19E25 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17D6E -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.2.8102.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=F7E9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=D840 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=E47C -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=D3E6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=1B909 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=1A484 -SLPolicyFunc.x64=New_Win8SL - -[6.2.8250.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=159C9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=11E74 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13520 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1187A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=1A0A9 -SLPolicyFunc.x86=New_Win8SL_CP -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=18FAC -SLPolicyFunc.x64=New_Win8SL - -[6.2.8400.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=15482 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20824 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13E48 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F102 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19629 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=2492C -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.16384] -SingleUserPatch.x86=1 -SingleUserOffset.x86=15552 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=2BAA8 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13F08 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=2A31A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19559 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=21FA8 -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.17048] -SingleUserPatch.x86=1 -SingleUserOffset.x86=20592 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20948 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=1F408 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F206 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=17059 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=24570 -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.21166] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1557A -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=2BAF8 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13F30 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=2A3B6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19581 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=21FD0 -SLPolicyFunc.x64=New_Win8SL - -[6.3.9431.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=8A611 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=9F721 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=306A8 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=367F9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2EA25 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=350FD -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=196B0 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=2F9C0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.16384] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A2729 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81824 -LocalOnlyCode.x64=nopjmp -SingleUserPatch.x86=1 -SingleUserOffset.x86=18028 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20241 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=16115 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=57829 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=1CEB0 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=554C0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.17095] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A36D1 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=B9159 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=36BA9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=21829 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=37529 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F6A1 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=117F1 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=3B110 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.17415] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=B33F8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=8B2D9 -LocalOnlyCode.x64=nopjmp -SingleUserPatch.x86=1 -SingleUserOffset.x86=37115 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=33CE9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3CFF9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=45825 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=18478 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=5DBC0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9841.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=956A8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81141 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30125 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=12159 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3B989 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=C125 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46A68 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=1EA50 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9860.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=962C8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81091 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30845 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=11AA9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3BEC9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=B9F5 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46F18 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=1EB00 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9879.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A9CC8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=95611 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30C55 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=16A34 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2DAB9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1BDC5 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=41132 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=24750 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.9926.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A8C28 -LocalOnlyCode.x86=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=31725 -SingleUserCode.x86=nop -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3CF99 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -SLInitHook.x86=1 -SLInitOffset.x86=3F140 -SLInitFunc.x86=New_CSLQuery_Initialize -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=95FF1 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x64=1 -SingleUserOffset.x64=12A34 -SingleUserCode.x64=Zero -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=BE05 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x64=1 -SLInitOffset.x64=24EC0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.10041.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A9D88 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=97141 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=32215 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=15C64 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2DFC9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=B795 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46960 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=22E40 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.10240.16384] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A7D38 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=96901 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=32A95 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=18F74 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2F5B9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=22865 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46581 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=250F0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[SLInit] -bServerSku=1 -bRemoteConnAllowed=1 -bFUSEnabled=1 -bAppServerAllowed=1 -bMultimonAllowed=1 -lMaxUserSessions=0 -ulMaxDebugSessions=0 -bInitialized=1 - -[6.3.9431.0-SLInit] -bFUSEnabled.x86 =A22A8 -lMaxUserSessions.x86 =A22AC -bAppServerAllowed.x86 =A22B0 -bInitialized.x86 =A22B4 -bMultimonAllowed.x86 =A22B8 -bServerSku.x86 =A22BC -ulMaxDebugSessions.x86=A22C0 -bRemoteConnAllowed.x86=A22C4 - -bFUSEnabled.x64 =C4490 -lMaxUserSessions.x64 =C4494 -bAppServerAllowed.x64 =C4498 -bInitialized.x64 =C449C -bMultimonAllowed.x64 =C44A0 -bServerSku.x64 =C44A4 -ulMaxDebugSessions.x64=C44A8 -bRemoteConnAllowed.x64=C44AC - -[6.3.9600.16384-SLInit] -bFUSEnabled.x86 =C02A8 -lMaxUserSessions.x86 =C02AC -bAppServerAllowed.x86 =C02B0 -bInitialized.x86 =C02B4 -bMultimonAllowed.x86 =C02B8 -bServerSku.x86 =C02BC -ulMaxDebugSessions.x86=C02C0 -bRemoteConnAllowed.x86=C02C4 - -bServerSku.x64 =E6494 -ulMaxDebugSessions.x64=E6498 -bRemoteConnAllowed.x64=E649C -bFUSEnabled.x64 =E64A0 -lMaxUserSessions.x64 =E64A4 -bAppServerAllowed.x64 =E64A8 -bInitialized.x64 =E64AC -bMultimonAllowed.x64 =E64B0 - -[6.3.9600.17095-SLInit] -bFUSEnabled.x86 =C12A8 -lMaxUserSessions.x86 =C12AC -bAppServerAllowed.x86 =C12B0 -bInitialized.x86 =C12B4 -bMultimonAllowed.x86 =C12B8 -bServerSku.x86 =C12BC -ulMaxDebugSessions.x86=C12C0 -bRemoteConnAllowed.x86=C12C4 - -bServerSku.x64 =E4494 -ulMaxDebugSessions.x64=E4498 -bRemoteConnAllowed.x64=E449C -bFUSEnabled.x64 =E44A0 -lMaxUserSessions.x64 =E44A4 -bAppServerAllowed.x64 =E44A8 -bInitialized.x64 =E44AC -bMultimonAllowed.x64 =E44B0 - -[6.3.9600.17415-SLInit] -bFUSEnabled.x86 =D3068 -lMaxUserSessions.x86 =D306C -bAppServerAllowed.x86 =D3070 -bInitialized.x86 =D3074 -bMultimonAllowed.x86 =D3078 -bServerSku.x86 =D307C -ulMaxDebugSessions.x86=D3080 -bRemoteConnAllowed.x86=D3084 - -bFUSEnabled.x64 =F9054 -lMaxUserSessions.x64 =F9058 -bAppServerAllowed.x64 =F905C -bInitialized.x64 =F9060 -bMultimonAllowed.x64 =F9064 -bServerSku.x64 =F9068 -ulMaxDebugSessions.x64=F906C -bRemoteConnAllowed.x64=F9070 - -[6.4.9841.0-SLInit] -bFUSEnabled.x86 =BF9F0 -lMaxUserSessions.x86 =BF9F4 -bAppServerAllowed.x86 =BF9F8 -bInitialized.x86 =BF9FC -bMultimonAllowed.x86 =BFA00 -bServerSku.x86 =BFA04 -ulMaxDebugSessions.x86=BFA08 -bRemoteConnAllowed.x86=BFA0C - -bFUSEnabled.x64 =ECFF8 -lMaxUserSessions.x64 =ECFFC -bAppServerAllowed.x64 =ED000 -bInitialized.x64 =ED004 -bMultimonAllowed.x64 =ED008 -bServerSku.x64 =ED00C -ulMaxDebugSessions.x64=ED010 -bRemoteConnAllowed.x64=ED014 - -[6.4.9860.0-SLInit] -bFUSEnabled.x86 =BF7E0 -lMaxUserSessions.x86 =BF7E4 -bAppServerAllowed.x86 =BF7E8 -bInitialized.x86 =BF7EC -bMultimonAllowed.x86 =BF7F0 -bServerSku.x86 =BF7F4 -ulMaxDebugSessions.x86=BF7F8 -bRemoteConnAllowed.x86=BF7FC - -bFUSEnabled.x64 =ECBD8 -lMaxUserSessions.x64 =ECBDC -bAppServerAllowed.x64 =ECBE0 -bInitialized.x64 =ECBE4 -bMultimonAllowed.x64 =ECBE8 -bServerSku.x64 =ECBEC -ulMaxDebugSessions.x64=ECBF0 -bRemoteConnAllowed.x64=ECBF4 - -[6.4.9879.0-SLInit] -bFUSEnabled.x86 =C27D8 -lMaxUserSessions.x86 =C27DC -bAppServerAllowed.x86 =C27E0 -bInitialized.x86 =C27E4 -bMultimonAllowed.x86 =C27E8 -bServerSku.x86 =C27EC -ulMaxDebugSessions.x86=C27F0 -bRemoteConnAllowed.x86=C27F4 - -bFUSEnabled.x64 =EDBF0 -lMaxUserSessions.x64 =EDBF4 -bAppServerAllowed.x64 =EDBF8 -bInitialized.x64 =EDBFC -bMultimonAllowed.x64 =EDC00 -bServerSku.x64 =EDC04 -ulMaxDebugSessions.x64=EDC08 -bRemoteConnAllowed.x64=EDC0C - -[10.0.9926.0-SLInit] -bFUSEnabled.x86 =C17D8 -lMaxUserSessions.x86 =C17DC -bAppServerAllowed.x86 =C17E0 -bInitialized.x86 =C17E4 -bMultimonAllowed.x86 =C17E8 -bServerSku.x86 =C17EC -ulMaxDebugSessions.x86=C17F0 -bRemoteConnAllowed.x86=C17F4 - -bFUSEnabled.x64 =EEBF0 -lMaxUserSessions.x64 =EEBF4 -bAppServerAllowed.x64 =EEBF8 -bInitialized.x64 =EEBFC -bMultimonAllowed.x64 =EEC00 -bServerSku.x64 =EEC04 -ulMaxDebugSessions.x64=EEC08 -bRemoteConnAllowed.x64=EEC0C - -[10.0.10041.0-SLInit] -bFUSEnabled.x86 =C5F60 -lMaxUserSessions.x86 =C5F64 -bAppServerAllowed.x86 =C5F68 -bInitialized.x86 =C5F6C -bMultimonAllowed.x86 =C5F70 -bServerSku.x86 =C5F74 -ulMaxDebugSessions.x86=C5F78 -bRemoteConnAllowed.x86=C5F7C - -bFUSEnabled.x64 =F3448 -lMaxUserSessions.x64 =F344C -bAppServerAllowed.x64 =F3450 -bInitialized.x64 =F3454 -bMultimonAllowed.x64 =F3458 -bServerSku.x64 =F345C -ulMaxDebugSessions.x64=F3460 -bRemoteConnAllowed.x64=F3464 - -[10.0.10240.16384-SLInit] -bFUSEnabled.x86 =C3F60 -lMaxUserSessions.x86 =C3F64 -bAppServerAllowed.x86 =C3F68 -bInitialized.x86 =C3F6C -bMultimonAllowed.x86 =C3F70 -bServerSku.x86 =C3F74 -ulMaxDebugSessions.x86=C3F78 -bRemoteConnAllowed.x86=C3F7C - -lMaxUserSessions.x64 =F23B0 -bAppServerAllowed.x64 =F23B4 -bServerSku.x64 =F23B8 -bFUSEnabled.x64 =F3460 -bInitialized.x64 =F3464 -bMultimonAllowed.x64 =F3468 -ulMaxDebugSessions.x64=F346C -bRemoteConnAllowed.x64=F3470 +; RDP Wrapper Library configuration +; Do not modify without special knowledge + +[Main] +Updated=2015-07-30 +LogFile=\rdpwrap.txt +SLPolicyHookNT60=1 +SLPolicyHookNT61=1 + +[SLPolicy] +TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 +TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 +TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 +TerminalServices-RemoteConnectionManager-AllowMultimon=1 +TerminalServices-RemoteConnectionManager-MaxUserSessions=0 +TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 +TerminalServices-RDP-7-Advanced-Compression-Allowed=1 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 +TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 +TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 +TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 +TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 +TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 + +[PatchCodes] +nop=90 +Zero=00 +jmpshort=EB +nopjmp=90E9 +CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 +CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB +CDefPolicy_Query_eax_esi=B80001000089862003000090 +CDefPolicy_Query_eax_rdi=B80001000089873806000090 +CDefPolicy_Query_eax_ecx=B80001000089812003000090 +CDefPolicy_Query_eax_rcx=B80001000089813806000090 + +[6.0.6000.16386] +SingleUserPatch.x86=1 +SingleUserOffset.x86=160BF +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=65E3E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=15CD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=5C88F +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6001.18000] +SingleUserPatch.x86=1 +SingleUserOffset.x86=185E4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=70DBA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=17FD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65BD7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.18005] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FA8 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=70FF6 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179C0 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65E83 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.19214] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FC4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=712AA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179B8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65FF7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.23521] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FB4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=71EAA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179CC +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=669CB +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.1.7600.16385] +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E25 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17D96 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196F3 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17AD2 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.17514] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180E2 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D8A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18540] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4E5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18006 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D9F +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C82 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22750] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E8E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E21 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C92 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18637] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4DD +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180FA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19DBB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17DC6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22843] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F96 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E25 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D6E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.2.8102.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=F7E9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=D840 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=E47C +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=D3E6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1B909 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=1A484 +SLPolicyFunc.x64=New_Win8SL + +[6.2.8250.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=159C9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11E74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13520 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1187A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1A0A9 +SLPolicyFunc.x86=New_Win8SL_CP +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=18FAC +SLPolicyFunc.x64=New_Win8SL + +[6.2.8400.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=15482 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20824 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13E48 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F102 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19629 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=2492C +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.16384] +SingleUserPatch.x86=1 +SingleUserOffset.x86=15552 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAA8 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F08 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A31A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19559 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FA8 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.17048] +SingleUserPatch.x86=1 +SingleUserOffset.x86=20592 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20948 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=1F408 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F206 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=17059 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=24570 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.21166] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1557A +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAF8 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F30 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A3B6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19581 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FD0 +SLPolicyFunc.x64=New_Win8SL + +[6.3.9431.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=8A611 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9F721 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=306A8 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=367F9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2EA25 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=350FD +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=196B0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2F9C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.16384] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A2729 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81824 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=18028 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20241 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=16115 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=57829 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=1CEB0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=554C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17095] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A36D1 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=B9159 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36BA9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=21829 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=37529 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F6A1 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=117F1 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=3B110 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17415] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B33F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B2D9 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=37115 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=33CE9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFF9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45825 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=18478 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DBC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9841.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=956A8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30125 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=12159 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3B989 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=C125 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46A68 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EA50 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9860.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=962C8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81091 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30845 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11AA9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3BEC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B9F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46F18 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EB00 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9879.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9CC8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95611 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30C55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16A34 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DAB9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BDC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=41132 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24750 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.9926.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8C28 +LocalOnlyCode.x86=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=31725 +SingleUserCode.x86=nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CF99 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +SLInitHook.x86=1 +SLInitOffset.x86=3F140 +SLInitFunc.x86=New_CSLQuery_Initialize +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95FF1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=12A34 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=BE05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=24EC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10041.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9D88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=97141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=15C64 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DFC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B795 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46960 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E40 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10240.16384] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7D38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96901 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32A95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18F74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2F5B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=22865 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46581 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=250F0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[SLInit] +bServerSku=1 +bRemoteConnAllowed=1 +bFUSEnabled=1 +bAppServerAllowed=1 +bMultimonAllowed=1 +lMaxUserSessions=0 +ulMaxDebugSessions=0 +bInitialized=1 + +[6.3.9431.0-SLInit] +bFUSEnabled.x86 =A22A8 +lMaxUserSessions.x86 =A22AC +bAppServerAllowed.x86 =A22B0 +bInitialized.x86 =A22B4 +bMultimonAllowed.x86 =A22B8 +bServerSku.x86 =A22BC +ulMaxDebugSessions.x86=A22C0 +bRemoteConnAllowed.x86=A22C4 + +bFUSEnabled.x64 =C4490 +lMaxUserSessions.x64 =C4494 +bAppServerAllowed.x64 =C4498 +bInitialized.x64 =C449C +bMultimonAllowed.x64 =C44A0 +bServerSku.x64 =C44A4 +ulMaxDebugSessions.x64=C44A8 +bRemoteConnAllowed.x64=C44AC + +[6.3.9600.16384-SLInit] +bFUSEnabled.x86 =C02A8 +lMaxUserSessions.x86 =C02AC +bAppServerAllowed.x86 =C02B0 +bInitialized.x86 =C02B4 +bMultimonAllowed.x86 =C02B8 +bServerSku.x86 =C02BC +ulMaxDebugSessions.x86=C02C0 +bRemoteConnAllowed.x86=C02C4 + +bServerSku.x64 =E6494 +ulMaxDebugSessions.x64=E6498 +bRemoteConnAllowed.x64=E649C +bFUSEnabled.x64 =E64A0 +lMaxUserSessions.x64 =E64A4 +bAppServerAllowed.x64 =E64A8 +bInitialized.x64 =E64AC +bMultimonAllowed.x64 =E64B0 + +[6.3.9600.17095-SLInit] +bFUSEnabled.x86 =C12A8 +lMaxUserSessions.x86 =C12AC +bAppServerAllowed.x86 =C12B0 +bInitialized.x86 =C12B4 +bMultimonAllowed.x86 =C12B8 +bServerSku.x86 =C12BC +ulMaxDebugSessions.x86=C12C0 +bRemoteConnAllowed.x86=C12C4 + +bServerSku.x64 =E4494 +ulMaxDebugSessions.x64=E4498 +bRemoteConnAllowed.x64=E449C +bFUSEnabled.x64 =E44A0 +lMaxUserSessions.x64 =E44A4 +bAppServerAllowed.x64 =E44A8 +bInitialized.x64 =E44AC +bMultimonAllowed.x64 =E44B0 + +[6.3.9600.17415-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =F9054 +lMaxUserSessions.x64 =F9058 +bAppServerAllowed.x64 =F905C +bInitialized.x64 =F9060 +bMultimonAllowed.x64 =F9064 +bServerSku.x64 =F9068 +ulMaxDebugSessions.x64=F906C +bRemoteConnAllowed.x64=F9070 + +[6.4.9841.0-SLInit] +bFUSEnabled.x86 =BF9F0 +lMaxUserSessions.x86 =BF9F4 +bAppServerAllowed.x86 =BF9F8 +bInitialized.x86 =BF9FC +bMultimonAllowed.x86 =BFA00 +bServerSku.x86 =BFA04 +ulMaxDebugSessions.x86=BFA08 +bRemoteConnAllowed.x86=BFA0C + +bFUSEnabled.x64 =ECFF8 +lMaxUserSessions.x64 =ECFFC +bAppServerAllowed.x64 =ED000 +bInitialized.x64 =ED004 +bMultimonAllowed.x64 =ED008 +bServerSku.x64 =ED00C +ulMaxDebugSessions.x64=ED010 +bRemoteConnAllowed.x64=ED014 + +[6.4.9860.0-SLInit] +bFUSEnabled.x86 =BF7E0 +lMaxUserSessions.x86 =BF7E4 +bAppServerAllowed.x86 =BF7E8 +bInitialized.x86 =BF7EC +bMultimonAllowed.x86 =BF7F0 +bServerSku.x86 =BF7F4 +ulMaxDebugSessions.x86=BF7F8 +bRemoteConnAllowed.x86=BF7FC + +bFUSEnabled.x64 =ECBD8 +lMaxUserSessions.x64 =ECBDC +bAppServerAllowed.x64 =ECBE0 +bInitialized.x64 =ECBE4 +bMultimonAllowed.x64 =ECBE8 +bServerSku.x64 =ECBEC +ulMaxDebugSessions.x64=ECBF0 +bRemoteConnAllowed.x64=ECBF4 + +[6.4.9879.0-SLInit] +bFUSEnabled.x86 =C27D8 +lMaxUserSessions.x86 =C27DC +bAppServerAllowed.x86 =C27E0 +bInitialized.x86 =C27E4 +bMultimonAllowed.x86 =C27E8 +bServerSku.x86 =C27EC +ulMaxDebugSessions.x86=C27F0 +bRemoteConnAllowed.x86=C27F4 + +bFUSEnabled.x64 =EDBF0 +lMaxUserSessions.x64 =EDBF4 +bAppServerAllowed.x64 =EDBF8 +bInitialized.x64 =EDBFC +bMultimonAllowed.x64 =EDC00 +bServerSku.x64 =EDC04 +ulMaxDebugSessions.x64=EDC08 +bRemoteConnAllowed.x64=EDC0C + +[10.0.9926.0-SLInit] +bFUSEnabled.x86 =C17D8 +lMaxUserSessions.x86 =C17DC +bAppServerAllowed.x86 =C17E0 +bInitialized.x86 =C17E4 +bMultimonAllowed.x86 =C17E8 +bServerSku.x86 =C17EC +ulMaxDebugSessions.x86=C17F0 +bRemoteConnAllowed.x86=C17F4 + +bFUSEnabled.x64 =EEBF0 +lMaxUserSessions.x64 =EEBF4 +bAppServerAllowed.x64 =EEBF8 +bInitialized.x64 =EEBFC +bMultimonAllowed.x64 =EEC00 +bServerSku.x64 =EEC04 +ulMaxDebugSessions.x64=EEC08 +bRemoteConnAllowed.x64=EEC0C + +[10.0.10041.0-SLInit] +bFUSEnabled.x86 =C5F60 +lMaxUserSessions.x86 =C5F64 +bAppServerAllowed.x86 =C5F68 +bInitialized.x86 =C5F6C +bMultimonAllowed.x86 =C5F70 +bServerSku.x86 =C5F74 +ulMaxDebugSessions.x86=C5F78 +bRemoteConnAllowed.x86=C5F7C + +bFUSEnabled.x64 =F3448 +lMaxUserSessions.x64 =F344C +bAppServerAllowed.x64 =F3450 +bInitialized.x64 =F3454 +bMultimonAllowed.x64 =F3458 +bServerSku.x64 =F345C +ulMaxDebugSessions.x64=F3460 +bRemoteConnAllowed.x64=F3464 + +[10.0.10240.16384-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 From e6686b3b351d38a66323ef9d73badf6e5cdd4aae Mon Sep 17 00:00:00 2001 From: WisdomWolf Date: Fri, 31 Jul 2015 23:37:41 -0400 Subject: [PATCH 083/208] corrected CR-LF at end of ini file --- res/rdpwrap.ini | 1540 +++++++++++++++++++++++------------------------ 1 file changed, 770 insertions(+), 770 deletions(-) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index ac99390..5c67d17 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -1,770 +1,770 @@ -; RDP Wrapper Library configuration -; Do not modify without special knowledge - -[Main] -Updated=2015-07-30 -LogFile=\rdpwrap.txt -SLPolicyHookNT60=1 -SLPolicyHookNT61=1 - -[SLPolicy] -TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 -TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 -TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 -TerminalServices-RemoteConnectionManager-AllowMultimon=1 -TerminalServices-RemoteConnectionManager-MaxUserSessions=0 -TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 -TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 -TerminalServices-RDP-7-Advanced-Compression-Allowed=1 -TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 -TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 -TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 -TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 -TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 -TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 - -[PatchCodes] -nop=90 -Zero=00 -jmpshort=EB -nopjmp=90E9 -CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 -CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB -CDefPolicy_Query_eax_esi=B80001000089862003000090 -CDefPolicy_Query_eax_rdi=B80001000089873806000090 -CDefPolicy_Query_eax_ecx=B80001000089812003000090 -CDefPolicy_Query_eax_rcx=B80001000089813806000090 - -[6.0.6000.16386] -SingleUserPatch.x86=1 -SingleUserOffset.x86=160BF -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=65E3E -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=15CD8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=5C88F -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6001.18000] -SingleUserPatch.x86=1 -SingleUserOffset.x86=185E4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=70DBA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=17FD8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65BD7 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.18005] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FA8 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=70FF6 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179C0 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65E83 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.19214] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FC4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=712AA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179B8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65FF7 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.23521] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FB4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=71EAA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179CC -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=669CB -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.1.7600.16385] -SingleUserPatch.x86=1 -SingleUserOffset.x86=19E25 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17D96 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=196F3 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17AD2 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.17514] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A49D -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=180E2 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19D53 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17D8A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.18540] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A4E5 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=18006 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19D9F -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17C82 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.22750] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A655 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17E8E -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19E21 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17C92 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.18637] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A4DD -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=180FA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19DBB -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17DC6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.22843] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A655 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17F96 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19E25 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17D6E -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.2.8102.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=F7E9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=D840 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=E47C -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=D3E6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=1B909 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=1A484 -SLPolicyFunc.x64=New_Win8SL - -[6.2.8250.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=159C9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=11E74 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13520 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1187A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=1A0A9 -SLPolicyFunc.x86=New_Win8SL_CP -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=18FAC -SLPolicyFunc.x64=New_Win8SL - -[6.2.8400.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=15482 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20824 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13E48 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F102 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19629 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=2492C -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.16384] -SingleUserPatch.x86=1 -SingleUserOffset.x86=15552 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=2BAA8 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13F08 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=2A31A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19559 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=21FA8 -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.17048] -SingleUserPatch.x86=1 -SingleUserOffset.x86=20592 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20948 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=1F408 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F206 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=17059 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=24570 -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.21166] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1557A -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=2BAF8 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13F30 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=2A3B6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19581 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=21FD0 -SLPolicyFunc.x64=New_Win8SL - -[6.3.9431.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=8A611 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=9F721 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=306A8 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=367F9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2EA25 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=350FD -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=196B0 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=2F9C0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.16384] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A2729 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81824 -LocalOnlyCode.x64=nopjmp -SingleUserPatch.x86=1 -SingleUserOffset.x86=18028 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20241 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=16115 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=57829 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=1CEB0 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=554C0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.17095] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A36D1 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=B9159 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=36BA9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=21829 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=37529 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F6A1 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=117F1 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=3B110 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.17415] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=B33F8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=8B2D9 -LocalOnlyCode.x64=nopjmp -SingleUserPatch.x86=1 -SingleUserOffset.x86=37115 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=33CE9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3CFF9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=45825 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=18478 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=5DBC0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9841.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=956A8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81141 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30125 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=12159 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3B989 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=C125 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46A68 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=1EA50 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9860.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=962C8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81091 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30845 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=11AA9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3BEC9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=B9F5 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46F18 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=1EB00 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9879.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A9CC8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=95611 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30C55 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=16A34 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2DAB9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1BDC5 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=41132 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=24750 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.9926.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A8C28 -LocalOnlyCode.x86=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=31725 -SingleUserCode.x86=nop -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3CF99 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -SLInitHook.x86=1 -SLInitOffset.x86=3F140 -SLInitFunc.x86=New_CSLQuery_Initialize -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=95FF1 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x64=1 -SingleUserOffset.x64=12A34 -SingleUserCode.x64=Zero -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=BE05 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x64=1 -SLInitOffset.x64=24EC0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.10041.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A9D88 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=97141 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=32215 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=15C64 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2DFC9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=B795 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46960 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=22E40 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.10240.16384] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A7D38 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=96901 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=32A95 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=18F74 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2F5B9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=22865 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46581 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=250F0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[SLInit] -bServerSku=1 -bRemoteConnAllowed=1 -bFUSEnabled=1 -bAppServerAllowed=1 -bMultimonAllowed=1 -lMaxUserSessions=0 -ulMaxDebugSessions=0 -bInitialized=1 - -[6.3.9431.0-SLInit] -bFUSEnabled.x86 =A22A8 -lMaxUserSessions.x86 =A22AC -bAppServerAllowed.x86 =A22B0 -bInitialized.x86 =A22B4 -bMultimonAllowed.x86 =A22B8 -bServerSku.x86 =A22BC -ulMaxDebugSessions.x86=A22C0 -bRemoteConnAllowed.x86=A22C4 - -bFUSEnabled.x64 =C4490 -lMaxUserSessions.x64 =C4494 -bAppServerAllowed.x64 =C4498 -bInitialized.x64 =C449C -bMultimonAllowed.x64 =C44A0 -bServerSku.x64 =C44A4 -ulMaxDebugSessions.x64=C44A8 -bRemoteConnAllowed.x64=C44AC - -[6.3.9600.16384-SLInit] -bFUSEnabled.x86 =C02A8 -lMaxUserSessions.x86 =C02AC -bAppServerAllowed.x86 =C02B0 -bInitialized.x86 =C02B4 -bMultimonAllowed.x86 =C02B8 -bServerSku.x86 =C02BC -ulMaxDebugSessions.x86=C02C0 -bRemoteConnAllowed.x86=C02C4 - -bServerSku.x64 =E6494 -ulMaxDebugSessions.x64=E6498 -bRemoteConnAllowed.x64=E649C -bFUSEnabled.x64 =E64A0 -lMaxUserSessions.x64 =E64A4 -bAppServerAllowed.x64 =E64A8 -bInitialized.x64 =E64AC -bMultimonAllowed.x64 =E64B0 - -[6.3.9600.17095-SLInit] -bFUSEnabled.x86 =C12A8 -lMaxUserSessions.x86 =C12AC -bAppServerAllowed.x86 =C12B0 -bInitialized.x86 =C12B4 -bMultimonAllowed.x86 =C12B8 -bServerSku.x86 =C12BC -ulMaxDebugSessions.x86=C12C0 -bRemoteConnAllowed.x86=C12C4 - -bServerSku.x64 =E4494 -ulMaxDebugSessions.x64=E4498 -bRemoteConnAllowed.x64=E449C -bFUSEnabled.x64 =E44A0 -lMaxUserSessions.x64 =E44A4 -bAppServerAllowed.x64 =E44A8 -bInitialized.x64 =E44AC -bMultimonAllowed.x64 =E44B0 - -[6.3.9600.17415-SLInit] -bFUSEnabled.x86 =D3068 -lMaxUserSessions.x86 =D306C -bAppServerAllowed.x86 =D3070 -bInitialized.x86 =D3074 -bMultimonAllowed.x86 =D3078 -bServerSku.x86 =D307C -ulMaxDebugSessions.x86=D3080 -bRemoteConnAllowed.x86=D3084 - -bFUSEnabled.x64 =F9054 -lMaxUserSessions.x64 =F9058 -bAppServerAllowed.x64 =F905C -bInitialized.x64 =F9060 -bMultimonAllowed.x64 =F9064 -bServerSku.x64 =F9068 -ulMaxDebugSessions.x64=F906C -bRemoteConnAllowed.x64=F9070 - -[6.4.9841.0-SLInit] -bFUSEnabled.x86 =BF9F0 -lMaxUserSessions.x86 =BF9F4 -bAppServerAllowed.x86 =BF9F8 -bInitialized.x86 =BF9FC -bMultimonAllowed.x86 =BFA00 -bServerSku.x86 =BFA04 -ulMaxDebugSessions.x86=BFA08 -bRemoteConnAllowed.x86=BFA0C - -bFUSEnabled.x64 =ECFF8 -lMaxUserSessions.x64 =ECFFC -bAppServerAllowed.x64 =ED000 -bInitialized.x64 =ED004 -bMultimonAllowed.x64 =ED008 -bServerSku.x64 =ED00C -ulMaxDebugSessions.x64=ED010 -bRemoteConnAllowed.x64=ED014 - -[6.4.9860.0-SLInit] -bFUSEnabled.x86 =BF7E0 -lMaxUserSessions.x86 =BF7E4 -bAppServerAllowed.x86 =BF7E8 -bInitialized.x86 =BF7EC -bMultimonAllowed.x86 =BF7F0 -bServerSku.x86 =BF7F4 -ulMaxDebugSessions.x86=BF7F8 -bRemoteConnAllowed.x86=BF7FC - -bFUSEnabled.x64 =ECBD8 -lMaxUserSessions.x64 =ECBDC -bAppServerAllowed.x64 =ECBE0 -bInitialized.x64 =ECBE4 -bMultimonAllowed.x64 =ECBE8 -bServerSku.x64 =ECBEC -ulMaxDebugSessions.x64=ECBF0 -bRemoteConnAllowed.x64=ECBF4 - -[6.4.9879.0-SLInit] -bFUSEnabled.x86 =C27D8 -lMaxUserSessions.x86 =C27DC -bAppServerAllowed.x86 =C27E0 -bInitialized.x86 =C27E4 -bMultimonAllowed.x86 =C27E8 -bServerSku.x86 =C27EC -ulMaxDebugSessions.x86=C27F0 -bRemoteConnAllowed.x86=C27F4 - -bFUSEnabled.x64 =EDBF0 -lMaxUserSessions.x64 =EDBF4 -bAppServerAllowed.x64 =EDBF8 -bInitialized.x64 =EDBFC -bMultimonAllowed.x64 =EDC00 -bServerSku.x64 =EDC04 -ulMaxDebugSessions.x64=EDC08 -bRemoteConnAllowed.x64=EDC0C - -[10.0.9926.0-SLInit] -bFUSEnabled.x86 =C17D8 -lMaxUserSessions.x86 =C17DC -bAppServerAllowed.x86 =C17E0 -bInitialized.x86 =C17E4 -bMultimonAllowed.x86 =C17E8 -bServerSku.x86 =C17EC -ulMaxDebugSessions.x86=C17F0 -bRemoteConnAllowed.x86=C17F4 - -bFUSEnabled.x64 =EEBF0 -lMaxUserSessions.x64 =EEBF4 -bAppServerAllowed.x64 =EEBF8 -bInitialized.x64 =EEBFC -bMultimonAllowed.x64 =EEC00 -bServerSku.x64 =EEC04 -ulMaxDebugSessions.x64=EEC08 -bRemoteConnAllowed.x64=EEC0C - -[10.0.10041.0-SLInit] -bFUSEnabled.x86 =C5F60 -lMaxUserSessions.x86 =C5F64 -bAppServerAllowed.x86 =C5F68 -bInitialized.x86 =C5F6C -bMultimonAllowed.x86 =C5F70 -bServerSku.x86 =C5F74 -ulMaxDebugSessions.x86=C5F78 -bRemoteConnAllowed.x86=C5F7C - -bFUSEnabled.x64 =F3448 -lMaxUserSessions.x64 =F344C -bAppServerAllowed.x64 =F3450 -bInitialized.x64 =F3454 -bMultimonAllowed.x64 =F3458 -bServerSku.x64 =F345C -ulMaxDebugSessions.x64=F3460 -bRemoteConnAllowed.x64=F3464 - -[10.0.10240.16384-SLInit] -bFUSEnabled.x86 =C3F60 -lMaxUserSessions.x86 =C3F64 -bAppServerAllowed.x86 =C3F68 -bInitialized.x86 =C3F6C -bMultimonAllowed.x86 =C3F70 -bServerSku.x86 =C3F74 -ulMaxDebugSessions.x86=C3F78 -bRemoteConnAllowed.x86=C3F7C - -lMaxUserSessions.x64 =F23B0 -bAppServerAllowed.x64 =F23B4 -bServerSku.x64 =F23B8 -bFUSEnabled.x64 =F3460 -bInitialized.x64 =F3464 -bMultimonAllowed.x64 =F3468 -ulMaxDebugSessions.x64=F346C -bRemoteConnAllowed.x64=F3470 +; RDP Wrapper Library configuration +; Do not modify without special knowledge + +[Main] +Updated=2015-07-30 +LogFile=\rdpwrap.txt +SLPolicyHookNT60=1 +SLPolicyHookNT61=1 + +[SLPolicy] +TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 +TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 +TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 +TerminalServices-RemoteConnectionManager-AllowMultimon=1 +TerminalServices-RemoteConnectionManager-MaxUserSessions=0 +TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 +TerminalServices-RDP-7-Advanced-Compression-Allowed=1 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 +TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 +TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 +TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 +TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 +TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 + +[PatchCodes] +nop=90 +Zero=00 +jmpshort=EB +nopjmp=90E9 +CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 +CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB +CDefPolicy_Query_eax_esi=B80001000089862003000090 +CDefPolicy_Query_eax_rdi=B80001000089873806000090 +CDefPolicy_Query_eax_ecx=B80001000089812003000090 +CDefPolicy_Query_eax_rcx=B80001000089813806000090 + +[6.0.6000.16386] +SingleUserPatch.x86=1 +SingleUserOffset.x86=160BF +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=65E3E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=15CD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=5C88F +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6001.18000] +SingleUserPatch.x86=1 +SingleUserOffset.x86=185E4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=70DBA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=17FD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65BD7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.18005] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FA8 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=70FF6 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179C0 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65E83 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.19214] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FC4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=712AA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179B8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65FF7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.23521] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FB4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=71EAA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179CC +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=669CB +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.1.7600.16385] +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E25 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17D96 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196F3 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17AD2 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.17514] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180E2 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D8A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18540] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4E5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18006 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D9F +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C82 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22750] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E8E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E21 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C92 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18637] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4DD +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180FA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19DBB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17DC6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22843] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F96 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E25 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D6E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.2.8102.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=F7E9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=D840 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=E47C +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=D3E6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1B909 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=1A484 +SLPolicyFunc.x64=New_Win8SL + +[6.2.8250.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=159C9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11E74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13520 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1187A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1A0A9 +SLPolicyFunc.x86=New_Win8SL_CP +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=18FAC +SLPolicyFunc.x64=New_Win8SL + +[6.2.8400.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=15482 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20824 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13E48 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F102 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19629 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=2492C +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.16384] +SingleUserPatch.x86=1 +SingleUserOffset.x86=15552 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAA8 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F08 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A31A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19559 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FA8 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.17048] +SingleUserPatch.x86=1 +SingleUserOffset.x86=20592 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20948 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=1F408 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F206 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=17059 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=24570 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.21166] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1557A +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAF8 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F30 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A3B6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19581 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FD0 +SLPolicyFunc.x64=New_Win8SL + +[6.3.9431.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=8A611 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9F721 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=306A8 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=367F9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2EA25 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=350FD +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=196B0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2F9C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.16384] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A2729 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81824 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=18028 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20241 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=16115 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=57829 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=1CEB0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=554C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17095] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A36D1 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=B9159 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36BA9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=21829 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=37529 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F6A1 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=117F1 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=3B110 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17415] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B33F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B2D9 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=37115 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=33CE9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFF9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45825 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=18478 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DBC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9841.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=956A8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30125 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=12159 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3B989 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=C125 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46A68 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EA50 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9860.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=962C8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81091 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30845 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11AA9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3BEC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B9F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46F18 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EB00 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9879.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9CC8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95611 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30C55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16A34 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DAB9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BDC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=41132 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24750 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.9926.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8C28 +LocalOnlyCode.x86=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=31725 +SingleUserCode.x86=nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CF99 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +SLInitHook.x86=1 +SLInitOffset.x86=3F140 +SLInitFunc.x86=New_CSLQuery_Initialize +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95FF1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=12A34 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=BE05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=24EC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10041.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9D88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=97141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=15C64 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DFC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B795 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46960 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E40 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10240.16384] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7D38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96901 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32A95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18F74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2F5B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=22865 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46581 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=250F0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[SLInit] +bServerSku=1 +bRemoteConnAllowed=1 +bFUSEnabled=1 +bAppServerAllowed=1 +bMultimonAllowed=1 +lMaxUserSessions=0 +ulMaxDebugSessions=0 +bInitialized=1 + +[6.3.9431.0-SLInit] +bFUSEnabled.x86 =A22A8 +lMaxUserSessions.x86 =A22AC +bAppServerAllowed.x86 =A22B0 +bInitialized.x86 =A22B4 +bMultimonAllowed.x86 =A22B8 +bServerSku.x86 =A22BC +ulMaxDebugSessions.x86=A22C0 +bRemoteConnAllowed.x86=A22C4 + +bFUSEnabled.x64 =C4490 +lMaxUserSessions.x64 =C4494 +bAppServerAllowed.x64 =C4498 +bInitialized.x64 =C449C +bMultimonAllowed.x64 =C44A0 +bServerSku.x64 =C44A4 +ulMaxDebugSessions.x64=C44A8 +bRemoteConnAllowed.x64=C44AC + +[6.3.9600.16384-SLInit] +bFUSEnabled.x86 =C02A8 +lMaxUserSessions.x86 =C02AC +bAppServerAllowed.x86 =C02B0 +bInitialized.x86 =C02B4 +bMultimonAllowed.x86 =C02B8 +bServerSku.x86 =C02BC +ulMaxDebugSessions.x86=C02C0 +bRemoteConnAllowed.x86=C02C4 + +bServerSku.x64 =E6494 +ulMaxDebugSessions.x64=E6498 +bRemoteConnAllowed.x64=E649C +bFUSEnabled.x64 =E64A0 +lMaxUserSessions.x64 =E64A4 +bAppServerAllowed.x64 =E64A8 +bInitialized.x64 =E64AC +bMultimonAllowed.x64 =E64B0 + +[6.3.9600.17095-SLInit] +bFUSEnabled.x86 =C12A8 +lMaxUserSessions.x86 =C12AC +bAppServerAllowed.x86 =C12B0 +bInitialized.x86 =C12B4 +bMultimonAllowed.x86 =C12B8 +bServerSku.x86 =C12BC +ulMaxDebugSessions.x86=C12C0 +bRemoteConnAllowed.x86=C12C4 + +bServerSku.x64 =E4494 +ulMaxDebugSessions.x64=E4498 +bRemoteConnAllowed.x64=E449C +bFUSEnabled.x64 =E44A0 +lMaxUserSessions.x64 =E44A4 +bAppServerAllowed.x64 =E44A8 +bInitialized.x64 =E44AC +bMultimonAllowed.x64 =E44B0 + +[6.3.9600.17415-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =F9054 +lMaxUserSessions.x64 =F9058 +bAppServerAllowed.x64 =F905C +bInitialized.x64 =F9060 +bMultimonAllowed.x64 =F9064 +bServerSku.x64 =F9068 +ulMaxDebugSessions.x64=F906C +bRemoteConnAllowed.x64=F9070 + +[6.4.9841.0-SLInit] +bFUSEnabled.x86 =BF9F0 +lMaxUserSessions.x86 =BF9F4 +bAppServerAllowed.x86 =BF9F8 +bInitialized.x86 =BF9FC +bMultimonAllowed.x86 =BFA00 +bServerSku.x86 =BFA04 +ulMaxDebugSessions.x86=BFA08 +bRemoteConnAllowed.x86=BFA0C + +bFUSEnabled.x64 =ECFF8 +lMaxUserSessions.x64 =ECFFC +bAppServerAllowed.x64 =ED000 +bInitialized.x64 =ED004 +bMultimonAllowed.x64 =ED008 +bServerSku.x64 =ED00C +ulMaxDebugSessions.x64=ED010 +bRemoteConnAllowed.x64=ED014 + +[6.4.9860.0-SLInit] +bFUSEnabled.x86 =BF7E0 +lMaxUserSessions.x86 =BF7E4 +bAppServerAllowed.x86 =BF7E8 +bInitialized.x86 =BF7EC +bMultimonAllowed.x86 =BF7F0 +bServerSku.x86 =BF7F4 +ulMaxDebugSessions.x86=BF7F8 +bRemoteConnAllowed.x86=BF7FC + +bFUSEnabled.x64 =ECBD8 +lMaxUserSessions.x64 =ECBDC +bAppServerAllowed.x64 =ECBE0 +bInitialized.x64 =ECBE4 +bMultimonAllowed.x64 =ECBE8 +bServerSku.x64 =ECBEC +ulMaxDebugSessions.x64=ECBF0 +bRemoteConnAllowed.x64=ECBF4 + +[6.4.9879.0-SLInit] +bFUSEnabled.x86 =C27D8 +lMaxUserSessions.x86 =C27DC +bAppServerAllowed.x86 =C27E0 +bInitialized.x86 =C27E4 +bMultimonAllowed.x86 =C27E8 +bServerSku.x86 =C27EC +ulMaxDebugSessions.x86=C27F0 +bRemoteConnAllowed.x86=C27F4 + +bFUSEnabled.x64 =EDBF0 +lMaxUserSessions.x64 =EDBF4 +bAppServerAllowed.x64 =EDBF8 +bInitialized.x64 =EDBFC +bMultimonAllowed.x64 =EDC00 +bServerSku.x64 =EDC04 +ulMaxDebugSessions.x64=EDC08 +bRemoteConnAllowed.x64=EDC0C + +[10.0.9926.0-SLInit] +bFUSEnabled.x86 =C17D8 +lMaxUserSessions.x86 =C17DC +bAppServerAllowed.x86 =C17E0 +bInitialized.x86 =C17E4 +bMultimonAllowed.x86 =C17E8 +bServerSku.x86 =C17EC +ulMaxDebugSessions.x86=C17F0 +bRemoteConnAllowed.x86=C17F4 + +bFUSEnabled.x64 =EEBF0 +lMaxUserSessions.x64 =EEBF4 +bAppServerAllowed.x64 =EEBF8 +bInitialized.x64 =EEBFC +bMultimonAllowed.x64 =EEC00 +bServerSku.x64 =EEC04 +ulMaxDebugSessions.x64=EEC08 +bRemoteConnAllowed.x64=EEC0C + +[10.0.10041.0-SLInit] +bFUSEnabled.x86 =C5F60 +lMaxUserSessions.x86 =C5F64 +bAppServerAllowed.x86 =C5F68 +bInitialized.x86 =C5F6C +bMultimonAllowed.x86 =C5F70 +bServerSku.x86 =C5F74 +ulMaxDebugSessions.x86=C5F78 +bRemoteConnAllowed.x86=C5F7C + +bFUSEnabled.x64 =F3448 +lMaxUserSessions.x64 =F344C +bAppServerAllowed.x64 =F3450 +bInitialized.x64 =F3454 +bMultimonAllowed.x64 =F3458 +bServerSku.x64 =F345C +ulMaxDebugSessions.x64=F3460 +bRemoteConnAllowed.x64=F3464 + +[10.0.10240.16384-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 From 4bf2866b49a5eead070aff86c89d5e0aa6be0b48 Mon Sep 17 00:00:00 2001 From: WisdomWolf Date: Fri, 31 Jul 2015 23:40:53 -0400 Subject: [PATCH 084/208] added period to last line to preserve CR-LF when viewed on GitHub --- res/rdpwrap.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 5c67d17..94c4aed 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -768,3 +768,4 @@ bInitialized.x64 =F3464 bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 +. \ No newline at end of file From d4d51117110491b34146eed5be9edcb9ade8ccb0 Mon Sep 17 00:00:00 2001 From: WisdomWolf Date: Fri, 31 Jul 2015 23:42:14 -0400 Subject: [PATCH 085/208] maybe underscore? --- res/rdpwrap.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 94c4aed..2144bf6 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -768,4 +768,4 @@ bInitialized.x64 =F3464 bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 -. \ No newline at end of file +_ \ No newline at end of file From e11b3c73548ab1768d0d560ed3e2f20c2508f721 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 7 Aug 2015 04:33:37 +0300 Subject: [PATCH 086/208] Implement simple update routine --- src-installer/RDPWInst.dpr | 139 ++++++++++++++++++++++++++++++++++- src-installer/RDPWInst.dproj | 5 +- 2 files changed, 141 insertions(+), 3 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 4f42b77..a5bee95 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -25,7 +25,8 @@ uses Windows, Classes, WinSvc, - Registry; + Registry, + WinInet; function EnumServicesStatusEx( hSCManager: SC_HANDLE; @@ -892,6 +893,128 @@ begin ExecWait('netsh advfirewall firewall delete rule name="Remote Desktop"'); end; +function CheckINIDate(Filename, Content: String; var Date: Integer): Boolean; +var + Str: TStringList; + I: Integer; +begin + Result := False; + Str := TStringList.Create; + if Filename <> '' then begin + try + Str.LoadFromFile(Filename); + except + Writeln('[-] Failed to read INI file.'); + Exit; + end; + end else + Str.Text := Content; + for I := 0 to Str.Count - 1 do + if Pos('Updated=', Str[I]) = 1 then + Break; + if I >= Str.Count then begin + Writeln('[-] Failed to check INI date.'); + Exit; + end; + Content := StringReplace(Str[I], 'Updated=', '', []); + Content := StringReplace(Content, '-', '', [rfReplaceAll]); + Str.Free; + try + Date := StrToInt(Content); + except + Writeln('[-] Wrong INI date format.'); + Exit; + end; + Result := True; +end; + +function GitINIFile(var Content: String): Boolean; +const + URL = 'https://raw.githubusercontent.com/binarymaster/rdpwrap/master/res/rdpwrap.ini'; +var + NetHandle: HINTERNET; + UrlHandle: HINTERNET; + Str: String; + Buf: Array[0..1023] of Byte; + BytesRead: DWORD; +begin + Result := False; + Content := ''; + NetHandle := InternetOpen('RDP Wrapper Update', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); + if not Assigned(NetHandle) then + Exit; + UrlHandle := InternetOpenUrl(NetHandle, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0); + if not Assigned(UrlHandle) then + begin + InternetCloseHandle(NetHandle); + Exit; + end; + repeat + InternetReadFile(UrlHandle, @Buf[0], SizeOf(Buf), BytesRead); + SetString(Str, PAnsiChar(@Buf[0]), BytesRead); + Content := Content + Str; + until BytesRead = 0; + InternetCloseHandle(UrlHandle); + InternetCloseHandle(NetHandle); + Result := True; +end; + +procedure CheckUpdate; +var + INIPath, S: String; + Str: TStringList; + I, OldDate, NewDate: Integer; +begin + INIPath := ExtractFilePath(ExpandPath(TermServicePath)) + 'rdpwrap.ini'; + if not CheckINIDate(INIPath, '', OldDate) then + Halt(ERROR_ACCESS_DENIED); + Writeln('[*] Current update date: ', + Format('%d.%.2d.%.2d', [OldDate div 10000, OldDate div 100 mod 100, OldDate mod 100])); + + if not GitINIFile(S) then begin + Writeln('[-] Failed to download latest INI from GitHub.'); + Halt(ERROR_ACCESS_DENIED); + end; + if not CheckINIDate('', S, NewDate) then + Halt(ERROR_ACCESS_DENIED); + Writeln('[*] Latest update date: ', + Format('%d.%.2d.%.2d', [NewDate div 10000, NewDate div 100 mod 100, NewDate mod 100])); + + if NewDate = OldDate then + Writeln('[*] Everything is up to date.') + else + if NewDate > OldDate then begin + Writeln('[+] New update is available, updating...'); + + CheckTermsrvProcess; + + Writeln('[*] Terminating service...'); + AddPrivilege('SeDebugPrivilege'); + KillProcess(TermServicePID); + Sleep(1000); + + if Length(ShareSvc) > 0 then + for I := 0 to Length(ShareSvc) - 1 do + SvcStart(ShareSvc[I]); + Sleep(500); + + Str := TStringList.Create; + Str.Text := S; + try + Str.SaveToFile(INIPath); + except + Writeln('[-] Failed to write INI file.'); + Halt(ERROR_ACCESS_DENIED); + end; + Str.Free; + + SvcStart(TermService); + + Writeln('[+] Update completed.'); + end else + Writeln('[*] Your INI file is newer than public file. Are you a developer? :)'); +end; + var I: Integer; begin @@ -904,6 +1027,7 @@ begin or ( (ParamStr(1) <> '-l') and (ParamStr(1) <> '-i') + and (ParamStr(1) <> '-w') and (ParamStr(1) <> '-u') and (ParamStr(1) <> '-r') ) then @@ -914,6 +1038,7 @@ begin Writeln('-l display the license agreement'); Writeln('-i install wrapper to Program Files folder (default)'); Writeln('-i -s install wrapper to System32 folder'); + Writeln('-w get latest update for INI file'); Writeln('-u uninstall wrapper'); Writeln('-r force restart Terminal Services'); Exit; @@ -1032,6 +1157,18 @@ begin Writeln('[+] Successfully uninstalled.'); end; + + if ParamStr(1) = '-w' then + begin + if not Installed then + begin + Writeln('[*] RDP Wrapper Library is not installed.'); + Halt(ERROR_INVALID_FUNCTION); + end; + Writeln('[*] Checking for updates...'); + CheckUpdate; + end; + if ParamStr(1) = '-r' then begin Writeln('[*] Restarting...'); diff --git a/src-installer/RDPWInst.dproj b/src-installer/RDPWInst.dproj index 3d44444..6afda06 100644 --- a/src-installer/RDPWInst.dproj +++ b/src-installer/RDPWInst.dproj @@ -20,8 +20,9 @@ true + ..\bin\ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) - RDPWInst.exe + ..\bin\RDPWInst.exe 00400000 x86 @@ -60,7 +61,7 @@ False True False - -i + -w False From 216255b3b41f72d523111dbbbeea25931820191e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 11 Aug 2015 05:32:35 +0300 Subject: [PATCH 087/208] Pre-release updates --- {res => bin}/install.bat | 0 {res => bin}/uninstall.bat | 0 bin/update.bat | 10 ++++++++++ res/rdpclip-x64.exe | Bin 101376 -> 0 bytes res/rdpclip-x86.exe | Bin 69632 -> 0 bytes res/rdpwrap.ini | 1 - src-installer/RDPWInst.dpr | 18 ++++++++++++++---- src-installer/resource.res | Bin 397100 -> 973380 bytes src-rdpcheck/MainUnit.pas | 1 - src-rdpcheck/RDPCheck.dproj | 19 ++++++++++--------- src-rdpcheck/RDPCheck.res | Bin 165720 -> 165720 bytes src-rdpconfig/RDPConf.dproj | 11 ++++++----- src-rdpconfig/RDPConf.res | Bin 165700 -> 165700 bytes src-rdpconfig/resource.res | Bin 12936 -> 12936 bytes 14 files changed, 40 insertions(+), 20 deletions(-) rename {res => bin}/install.bat (100%) rename {res => bin}/uninstall.bat (100%) create mode 100644 bin/update.bat delete mode 100644 res/rdpclip-x64.exe delete mode 100644 res/rdpclip-x86.exe diff --git a/res/install.bat b/bin/install.bat similarity index 100% rename from res/install.bat rename to bin/install.bat diff --git a/res/uninstall.bat b/bin/uninstall.bat similarity index 100% rename from res/uninstall.bat rename to bin/uninstall.bat diff --git a/bin/update.bat b/bin/update.bat new file mode 100644 index 0000000..f3874aa --- /dev/null +++ b/bin/update.bat @@ -0,0 +1,10 @@ +@echo off +if not exist "%~dp0RDPWInst.exe" goto :error +"%~dp0RDPWInst" -w +echo. +goto :anykey +:error +echo [-] Installer executable not found. +echo Please extract all files from the downloaded package or check your anti-virus. +:anykey +pause diff --git a/res/rdpclip-x64.exe b/res/rdpclip-x64.exe deleted file mode 100644 index bc2fcd4063a341637ae5813e3d010c6ed500840c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101376 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 diff --git a/res/rdpclip-x86.exe b/res/rdpclip-x86.exe deleted file mode 100644 index 4b9bb5b293aa4676024f803ba3548a8b6ffcd123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69632 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 '' then + if not FileExists(ExpandPath('%SystemRoot%\System32\rdpclip.exe')) then + ExtractRes(RDPClipRes, ExpandPath('%SystemRoot%\System32\rdpclip.exe')); end; procedure DeleteFiles; diff --git a/src-installer/resource.res b/src-installer/resource.res index 402086aa693436be4016e1d63dd72da12edd5cd9..4dd12973b891c02e0e9cc5adabea17ed1629574b 100644 GIT binary patch literal 973380 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%0Dv9<5D5Ty2ms&&04xFk%m)Cp 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ḩ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

_^;O31=jR6JZ~XA-)UJ)+Ee_irw`p8M z!-;+GCBA2PcHi@Zek*vTx4Y+`AH{cga&PIKQ|gY)Ja)zNg)e^5b&2|9$7gnqib@~! zce|01w>N8EWK-)rd$YCww`=E(?iZYYc+Ra?){Xiy{u<53UzgnU&F4WoMe&C(G6AGIi|8QT3;IZ<~Pvhn?-gUrQ80z5%Oo0 zN zyAi)&y_C@vnI-|h4lTc{r(fNMtd97j7$Wgk!Po0V8XDnCdBX93EQ=PY!thys-Do7B z)0e6dVl!qm{?9|ING(3T`^OhQJUD)yC`IO6r}jDHH<-f>9klwcA12$aT^dphb;A;H z;r|^(bx|Mr%i0EmJwxj!#6c|su9>Dx%dZhWw+gzB#Wj9=I*cLzFg^d&@yp*oJ)iqu zGk?AOllaX1nIA*`(en$xKz{z|ncqKMpCelPQ-;faTB?P+v@k`p-*PPs*Wy=d*P(mjFx;y}NG{Xes#$5C8iN7H~UAr?1zfYZuviK|J^7r5G zLjL?^^i2F>IDg-L0-mRd-!bPet;;`o$cgo_qc)TA>*m=aJ-$wP#^h=CVb-*1_8GG= z)eT(@cVmWhMP4&RI1T^Dp=SIo@;Gs4T+p2YTGUYWc@m8 z;Wn*)ZSbXAYT6cu@ttR`HvGRCgS@GW#5PD zO+9}(V*g7{`gq9t_Cwur@Rxnd@%$(1$`V44_XNMz(*|<2>umIPK6-l+dV*FKs(*Fie*B`p=`5`d8SIaBzL|L8c>eX2tL1HIIcN7ozgZQS zw=azx?@;|2INrn}u9|m=QIfdhn{k((A1y^<0TGR#S;N2_ef>^^(EB$Nv2SV`0@3fq6CKm0sJ>?VW*q=s5)1m9Kt2y!55l z`$|uHca=r>*FsN8e5x7Q0xgGEa<)ngl9(oK)mOg%c==<4f9bLCj&wWKd*DL-c^l@5 zuXHP}Eb#NJV!iQ=d^Xx5?P)wh+G}9m(%${sOUvpfY>}~JwN)w>Yo2ec1N$I2$N#1O zYQk{e?5~YKaG{lpb+5@o(EB^o`mSS~^qr@`8Ww`jb3|nc}b-$I@vFBy@=^rwz)WX6)<#n|7 zJfo>BKOtO(iy~w=w4Mx;8_Up!FSTVo+h}2Il)Ns~LYo%8s)c*BdcN8~##5@)(&fG$HBESpBDRMI47t+dVO`iR#QHDdObheW#)54<6S>#;d7Un t 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 z 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

MpnfbIcmWmaP_8Lg?X6wDC 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�SwJle?S~(Lybiz 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 e;|V1d;bVdz1ae*`aBCRMu%`v1Qxf&iQV delta 149508 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 diff --git a/src-rdpcheck/MainUnit.pas b/src-rdpcheck/MainUnit.pas index a92abce..3c4655f 100644 --- a/src-rdpcheck/MainUnit.pas +++ b/src-rdpcheck/MainUnit.pas @@ -44,7 +44,6 @@ implementation procedure TFrm.FormCreate(Sender: TObject); var Reg: TRegistry; - Port: Integer; begin RDP.DisconnectedText := 'Disconnected.'; RDP.ConnectingText := 'Connecting...'; diff --git a/src-rdpcheck/RDPCheck.dproj b/src-rdpcheck/RDPCheck.dproj index d88a8c6..c5027ce 100644 --- a/src-rdpcheck/RDPCheck.dproj +++ b/src-rdpcheck/RDPCheck.dproj @@ -20,8 +20,9 @@ true + ..\bin\ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) - RDPCheck.exe + ..\bin\RDPCheck.exe 00400000 x86 @@ -44,14 +45,14 @@ Base - - Cfg_2 - Base - Cfg_1 Base + + Cfg_2 + Base + @@ -68,7 +69,7 @@ True False 2 - 1 + 2 0 0 False @@ -82,13 +83,13 @@ Stas'M Corp. Local RDP Checker - 2.1.0.0 + 2.2.0.0 RDPCheck - Copyright © Stas'M Corp. 2014 + Copyright © Stas'M Corp. 2015 Stas'M Corp. RDPCheck.exe RDP Host Support - 1.3.0.0 + 1.6.0.0 http://stascorp.com diff --git a/src-rdpcheck/RDPCheck.res b/src-rdpcheck/RDPCheck.res index 9ff016ee6b3906b70c5b181ceb47d921e7670f0d..724bf2e49b8575375979394306a4c163414ee2e8 100644 GIT binary patch delta 60 zcmcc7$91ERtD%K)3sYD#3nPO9!}O?TremB;3``6lz_eYng^8Py(P+A9E7NR7)9Dvm OnZ7fcO+VSj)DHjv&JjWY delta 60 zcmcc7$91ERtD%K)3sYD#i>HT6(DbNgremCp3``6lz_?wrg^8Py(QvwHE7NR7lj#>* OnZ7d`Pe0kl)DHkH=@LNz diff --git a/src-rdpconfig/RDPConf.dproj b/src-rdpconfig/RDPConf.dproj index ffc33d8..aa9ab96 100644 --- a/src-rdpconfig/RDPConf.dproj +++ b/src-rdpconfig/RDPConf.dproj @@ -20,8 +20,9 @@ true + ..\bin\ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) - RDPConf.exe + ..\bin\RDPConf.exe 00400000 x86 @@ -47,14 +48,14 @@ Base - - Cfg_2 - Base - Cfg_1 Base + + Cfg_2 + Base + diff --git a/src-rdpconfig/RDPConf.res b/src-rdpconfig/RDPConf.res index db065ef7fddf1b965903ab178d34a20570e4d789..f987dd94f4ec82feef4055d7658181c0a5b91acf 100644 GIT binary patch delta 24 fcmX@o$91HStD%K)3sYD#3nPO9!}h3VrdP}WZYc-# delta 24 fcmX@o$91HStD%K)3sYD#i>HT6(DtZirdP}WcHap5 diff --git a/src-rdpconfig/resource.res b/src-rdpconfig/resource.res index f75051114072514b6b787bad79a65815be990e87..5a18ec83f3934215c6468cf0609a78986b435b51 100644 GIT binary patch delta 41 ucmeB3?MU5lMw^p~fsp|O*fw9)mS$u$n*32`I-}|2PTkLpW}9pExLE-AgbVWk delta 41 ucmeB3?MU5lMw^q7fsp|OST|qQmS$u$ocvK|I-|+tPTkLprkiW^xLE-ACJXKW From 5553d07206325cd667f0cdf4be0425cf389714e5 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 12 Aug 2015 19:39:06 +0300 Subject: [PATCH 088/208] v1.6 release notes --- README.md | 17 +++++++++++++++++ technical.txt | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/README.md b/README.md index a9e98a9..6127101 100644 --- a/README.md +++ b/README.md @@ -66,10 +66,26 @@ Files description:

+
RDPConf.exeRDP Wrapper Configuration
install.batQuick install batch file
uninstall.batQuick uninstall batch file
update.batQuick update batch file

Change log:

+2015.08.12
+• Version 1.6
+• Added support for Windows 10
+• INI file has smaller size now - all comments are moved to KB file
+• Installer updated
+• Added workaround for 1056 error (although it isn't an error)
+• Added update support to installer
+• Newest RDPClip versions are included with installer
+• RDP Checker updated
+• Changed connect IP to 127.0.0.2
+• Updated some text messages
+• RDP Config updated
+• Added all possible shadowing modes
+• Also it will write settings to the group policy
+
2014.12.11
• Version 1.5
• Added INI config support
@@ -205,6 +221,7 @@ Change log:
• Windows 10 Enterprise

Known issues:
+• Beginning with Windows 8 (non-server editions) you can't connect to existing sessions (they will be logged out by system)
• RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386)
• If Terminal Services hangs at startup, try to add rdpwrap.dll to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
sc config TermService type= own
diff --git a/technical.txt b/technical.txt index ce503b3..75981a8 100644 --- a/technical.txt +++ b/technical.txt @@ -66,6 +66,13 @@ Known failures Source code changelog (rdpwrap library): +2015.08.11 : +- embed new rdpclip versions in the installer (for NT 6.0 and 6.1) +- preparing the release + +2015.08.07 : +- added INI update feature to installer + 2015.07.30 : - fixed issue with Windows 10 Home x86 (wrong LocalOnly offset was specified in INI file) From eadebe921b0301afe16b97072bcd47401ce5d60c Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 12 Aug 2015 19:48:13 +0300 Subject: [PATCH 089/208] Update instructions --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6127101..237d677 100644 --- a/README.md +++ b/README.md @@ -229,13 +229,13 @@ Change log:

Installation instructions:
1. Download latest release binaries and unpack files
-2. Run Command Prompt (cmd) as administrator
-3. Change directory to where you extracted the files
-4. Type install.bat and press Enter
-5. See command output for details
+2. Right-click on install.bat and select Run as Administrator
+3. See command output for details

To uninstall:
-1. Run Command Prompt as administrator
-2. Change directory to where you extracted the files
-3. Type uninstall.bat and press Enter
-4. See command output for details
+1. Go to the directory where you extracted the files
+2. Right-click on uninstall.bat and select Run as Administrator
+3. See command output for details
+To update INI file:
+1. Right-click on update.bat and select Run as Administrator
+2. See command output for details
From 00e4c3bf19d642f96bce474e8b1504446f2fff03 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 12 Aug 2015 20:06:31 +0300 Subject: [PATCH 090/208] Update links --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 237d677..638e349 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Building the binaries:
http://superuser.com/questions/680572/

Tutorial videos:
-• Updating RDP Wrapper INI file manually
+• Updating RDP Wrapper INI file manually (now use installer to update INI file)
How to find offsets for new termsrv.dll versions

Files description:
From 0c89dc564f522393cfd3e02444757584625d9cd2 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 12 Aug 2015 20:13:24 +0300 Subject: [PATCH 091/208] More info --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 638e349..6fda7bc 100644 --- a/README.md +++ b/README.md @@ -221,7 +221,8 @@ Change log:
• Windows 10 Enterprise

Known issues:
-• Beginning with Windows 8 (non-server editions) you can't connect to existing sessions (they will be logged out by system)
+• Beginning with Windows 8 (non-server editions) you can't connect to existing sessions (they will be logged out by system) - more info
+• Beginning with Windows 10 you can accidentally lock yourself from PC - more info
• RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386)
• If Terminal Services hangs at startup, try to add rdpwrap.dll to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
sc config TermService type= own
@@ -236,6 +237,7 @@ Change log:
1. Go to the directory where you extracted the files
2. Right-click on uninstall.bat and select Run as Administrator
3. See command output for details
+
To update INI file:
1. Right-click on update.bat and select Run as Administrator
2. See command output for details
From 733e617a1f1937a9dfe250b92d7514dbdfadee2b Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 12 Aug 2015 22:01:19 +0300 Subject: [PATCH 092/208] Forgot about version --- src-installer/RDPWInst.dpr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index db0a3ba..05bf36b 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1028,8 +1028,8 @@ end; var I: Integer; begin - Writeln('RDP Wrapper Library v1.5'); - Writeln('Installer v2.2'); + Writeln('RDP Wrapper Library v1.6'); + Writeln('Installer v2.3'); Writeln('Copyright (C) Stas''M Corp. 2015'); Writeln(''); From 3d1f7c9e6621fc2d472d80e79eacc81cc1e51506 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 14 Nov 2015 15:59:55 +0300 Subject: [PATCH 093/208] Tech update --- README.md | 5 +++++ technical.txt | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/README.md b/README.md index 6fda7bc..dc1ea29 100644 --- a/README.md +++ b/README.md @@ -194,12 +194,14 @@ Change log:
• Windows Vista Business
• Windows Vista Enterprise
• Windows Vista Ultimate
+• Windows Server 2008
• Windows 7 Starter
• Windows 7 Home Basic
• Windows 7 Home Premium
• Windows 7 Professional
• Windows 7 Enterprise
• Windows 7 Ultimate
+• Windows Server 2008 R2
• Windows 8 Developer Preview
• Windows 8 Consumer Preview
• Windows 8 Release Preview
@@ -207,6 +209,7 @@ Change log:
• Windows 8 Single Language
• Windows 8 Pro
• Windows 8 Enterprise
+• Windows Server 2012
• Windows 8.1 Preview
• Windows 8.1
• Windows 8.1 Connected (with Bing)
@@ -214,9 +217,11 @@ Change log:
• Windows 8.1 Connected Single Language (with Bing)
• Windows 8.1 Pro
• Windows 8.1 Enterprise
+• Windows Server 2012 R2
• Windows 10 Technical Preview
• Windows 10 Pro Technical Preview
• Windows 10 Home
+• Windows 10 Home Single Language
• Windows 10 Pro
• Windows 10 Enterprise

diff --git a/technical.txt b/technical.txt index 75981a8..a178c4b 100644 --- a/technical.txt +++ b/technical.txt @@ -60,6 +60,10 @@ Terminal Services supported versions 10.0.10049.0 (Windows 10 Pro Technical Preview UP2) [todo] 10.0.10061.0 (Windows 10 Pro Technical Preview UP3) [todo] 10.0.10240.16384 (Windows 10 RTM) [init hook + extended patch] +10.0.10525.0 (Windows 10 th2_release.150812-1658) [todo] +10.0.10532.0 (Windows 10 th2_release.150822-1406) [todo] +10.0.10547.0 (Windows 10 th2_release.150913-1511) [todo] +10.0.10586.0 (Windows 10 th2_release.151029-1700) [!todo] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) From 741527eccd088d8363247bf492250e4bcc2b23dc Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 14 Nov 2015 16:44:08 +0300 Subject: [PATCH 094/208] Support for build 10.0.10586.0 --- res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 5 ++++- 3 files changed, 100 insertions(+), 3 deletions(-) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 688ec67..c607eee 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2015-07-30 +Updated=2015-11-14 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1436,6 +1436,36 @@ SLInitHook.x64=1 SLInitOffset.x64=250F0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.10586.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7C18 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96AA1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=353B5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=190D4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30B69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=229A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=469DE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=25220 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1650,3 +1680,22 @@ bInitialized.x64 =F3464 bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 + +[10.0.10586.0-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 5c67d17..7c59d08 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2015-07-30 +Updated=2015-11-14 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -569,6 +569,32 @@ SLInitHook.x64=1 SLInitOffset.x64=250F0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.10586.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7C18 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96AA1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=353B5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=190D4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30B69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=229A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=469DE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=25220 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -768,3 +794,22 @@ bInitialized.x64 =F3464 bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 + +[10.0.10586.0-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 diff --git a/technical.txt b/technical.txt index a178c4b..20eb8ed 100644 --- a/technical.txt +++ b/technical.txt @@ -63,13 +63,16 @@ Terminal Services supported versions 10.0.10525.0 (Windows 10 th2_release.150812-1658) [todo] 10.0.10532.0 (Windows 10 th2_release.150822-1406) [todo] 10.0.10547.0 (Windows 10 th2_release.150913-1511) [todo] -10.0.10586.0 (Windows 10 th2_release.151029-1700) [!todo] +10.0.10586.0 (Windows 10 th2_release.151029-1700) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2015.11.14 : +- added support for termsrv.dll 10.0.10586.0 + 2015.08.11 : - embed new rdpclip versions in the installer (for NT 6.0 and 6.1) - preparing the release From b4a0fe1a7af3e755a6e0982b3eaa502a715b1042 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 14 Nov 2015 17:25:15 +0300 Subject: [PATCH 095/208] Update README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dc1ea29..e3a9868 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,7 @@ Change log:
10.0.9926.0 (Windows 10 Pro Technical Preview)
10.0.10041.0 (Windows 10 Pro Technical Preview Update 1)
10.0.10240.16384 (Windows 10 RTM)
+• 10.0.10586.0 (Windows 10 TH2 Release 151029-1700)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
From b0c471660b2e80c0e9ea652d44bd6d454e426fb2 Mon Sep 17 00:00:00 2001 From: fig2k4 Date: Fri, 15 Jan 2016 16:00:36 +0000 Subject: [PATCH 096/208] dwResumeHandle initialized before calling EnumServicesStatusEx() --- src-installer/RDPWInst.dpr | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 05bf36b..dd120a0 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -349,6 +349,8 @@ begin Halt(Code); end; + dwResumeHandle:=0; + SetLength(Svc, 1489); FillChar(Svc[0], sizeof(Svc[0])*Length(Svc), 0); if not EnumServicesStatusEx(hSC, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, From c881f80f60e8b4abefcc3021a860d0f9abf474a3 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 15 Jan 2016 19:22:39 +0300 Subject: [PATCH 097/208] Installer: Update messages --- src-installer/RDPWInst.dpr | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index dd120a0..a2c8251 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -349,7 +349,7 @@ begin Halt(Code); end; - dwResumeHandle:=0; + dwResumeHandle := 0; SetLength(Svc, 1489); FillChar(Svc[0], sizeof(Svc[0])*Length(Svc), 0); @@ -725,6 +725,12 @@ procedure CheckTermsrvVersion; var SuppLvl: Byte; VerTxt: String; + + procedure UpdateMsg; + begin + Writeln('Try running "update.bat" or "RDPWInst -w" to download latest INI file.'); + Writeln('If it doesn''t help, send your termsrv.dll to project developer for support.'); + end; begin GetFileVersion(ExpandPath(TermServicePath), FV); VerTxt := Format('%d.%d.%d.%d', @@ -766,12 +772,12 @@ begin case SuppLvl of 0: begin Writeln('[-] This version of Terminal Services is not supported.'); - Writeln('Send your termsrv.dll to project developer for support.'); + UpdateMsg; end; 1: begin Writeln('[!] This version of Terminal Services is supported partially.'); Writeln('It means you may have some limitations such as only 2 concurrent sessions.'); - Writeln('Send your termsrv.dll to project developer for adding full support.'); + UpdateMsg; end; 2: begin Writeln('[+] This version of Terminal Services is fully supported.'); @@ -1045,7 +1051,7 @@ begin ) then begin Writeln('USAGE:'); - Writeln('RDPWInst.exe [-l|-i[-s]|-u|-r]'); + Writeln('RDPWInst.exe [-l|-i[-s]|-w|-u|-r]'); Writeln(''); Writeln('-l display the license agreement'); Writeln('-i install wrapper to Program Files folder (default)'); From 669c2bd20f45f7ebe4283e7696ad7535acf823de Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 15 Jan 2016 22:57:51 +0300 Subject: [PATCH 098/208] Repository: Add .gitattributes --- .gitattributes | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f9347da --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Plain text (Windows) +*.txt diff=astextplain eol=crlf +*.ini diff=astextplain eol=crlf From fdfbf0e1aa617d9d39ffdcf1b38fdc3d56b67b36 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 15 Jan 2016 22:59:48 +0300 Subject: [PATCH 099/208] Support: Add termsrv 10.0.11082.1000 --- README.md | 9 +- res/rdpwrap-ini-kb.txt | 49 ++ res/rdpwrap.ini | 1675 +++++++++++++++++++++------------------- technical.txt | 5 + 4 files changed, 919 insertions(+), 819 deletions(-) diff --git a/README.md b/README.md index e3a9868..00dbc65 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,7 @@ Change log:
10.0.10041.0 (Windows 10 Pro Technical Preview Update 1)
10.0.10240.16384 (Windows 10 RTM)
10.0.10586.0 (Windows 10 TH2 Release 151029-1700)
+• 10.0.11082.1000 (Windows 10 RS1 Release 151210-2021)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
@@ -239,11 +240,11 @@ Change log:
2. Right-click on install.bat and select Run as Administrator
3. See command output for details

+To update INI file:
+1. Right-click on update.bat and select Run as Administrator
+2. See command output for details
+
To uninstall:
1. Go to the directory where you extracted the files
2. Right-click on uninstall.bat and select Run as Administrator
3. See command output for details
-
-To update INI file:
-1. Right-click on update.bat and select Run as Administrator
-2. See command output for details
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index c607eee..b76b220 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1466,6 +1466,36 @@ SLInitHook.x64=1 SLInitOffset.x64=25220 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.11082.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7C98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96AB1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35405 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=190D4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30BB9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=229A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46A3E +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=25220 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1699,3 +1729,22 @@ bInitialized.x64 =F3464 bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 + +[10.0.11082.1000-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 7c59d08..29a8fe2 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -1,815 +1,860 @@ -; RDP Wrapper Library configuration -; Do not modify without special knowledge - -[Main] -Updated=2015-11-14 -LogFile=\rdpwrap.txt -SLPolicyHookNT60=1 -SLPolicyHookNT61=1 - -[SLPolicy] -TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 -TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 -TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 -TerminalServices-RemoteConnectionManager-AllowMultimon=1 -TerminalServices-RemoteConnectionManager-MaxUserSessions=0 -TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 -TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 -TerminalServices-RDP-7-Advanced-Compression-Allowed=1 -TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 -TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 -TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 -TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 -TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 -TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 - -[PatchCodes] -nop=90 -Zero=00 -jmpshort=EB -nopjmp=90E9 -CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 -CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB -CDefPolicy_Query_eax_esi=B80001000089862003000090 -CDefPolicy_Query_eax_rdi=B80001000089873806000090 -CDefPolicy_Query_eax_ecx=B80001000089812003000090 -CDefPolicy_Query_eax_rcx=B80001000089813806000090 - -[6.0.6000.16386] -SingleUserPatch.x86=1 -SingleUserOffset.x86=160BF -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=65E3E -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=15CD8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=5C88F -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6001.18000] -SingleUserPatch.x86=1 -SingleUserOffset.x86=185E4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=70DBA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=17FD8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65BD7 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.18005] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FA8 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=70FF6 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179C0 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65E83 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.19214] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FC4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=712AA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179B8 -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=65FF7 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.0.6002.23521] -SingleUserPatch.x86=1 -SingleUserOffset.x86=17FB4 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=71EAA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=179CC -DefPolicyCode.x86=CDefPolicy_Query_edx_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=669CB -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp - -[6.1.7600.16385] -SingleUserPatch.x86=1 -SingleUserOffset.x86=19E25 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17D96 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=196F3 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17AD2 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.17514] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A49D -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=180E2 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19D53 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17D8A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.18540] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A4E5 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=18006 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19D9F -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17C82 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.22750] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A655 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17E8E -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19E21 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17C92 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.18637] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A4DD -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=180FA -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19DBB -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17DC6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.1.7601.22843] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A655 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17F96 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19E25 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17D6E -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - -[6.2.8102.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=F7E9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=D840 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=E47C -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=D3E6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=1B909 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=1A484 -SLPolicyFunc.x64=New_Win8SL - -[6.2.8250.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=159C9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=11E74 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13520 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1187A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=1A0A9 -SLPolicyFunc.x86=New_Win8SL_CP -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=18FAC -SLPolicyFunc.x64=New_Win8SL - -[6.2.8400.0] -SingleUserPatch.x86=1 -SingleUserOffset.x86=15482 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20824 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13E48 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F102 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19629 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=2492C -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.16384] -SingleUserPatch.x86=1 -SingleUserOffset.x86=15552 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=2BAA8 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13F08 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=2A31A -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19559 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=21FA8 -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.17048] -SingleUserPatch.x86=1 -SingleUserOffset.x86=20592 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20948 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=1F408 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F206 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=17059 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=24570 -SLPolicyFunc.x64=New_Win8SL - -[6.2.9200.21166] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1557A -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=2BAF8 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=13F30 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=2A3B6 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -SLPolicyInternal.x86=1 -SLPolicyOffset.x86=19581 -SLPolicyFunc.x86=New_Win8SL -SLPolicyInternal.x64=1 -SLPolicyOffset.x64=21FD0 -SLPolicyFunc.x64=New_Win8SL - -[6.3.9431.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=8A611 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=9F721 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=306A8 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=367F9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2EA25 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=350FD -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=196B0 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=2F9C0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.16384] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A2729 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81824 -LocalOnlyCode.x64=nopjmp -SingleUserPatch.x86=1 -SingleUserOffset.x86=18028 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=20241 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=16115 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=57829 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=1CEB0 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=554C0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.17095] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A36D1 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=B9159 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=36BA9 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=21829 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=37529 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1F6A1 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=117F1 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=3B110 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.3.9600.17415] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=B33F8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=8B2D9 -LocalOnlyCode.x64=nopjmp -SingleUserPatch.x86=1 -SingleUserOffset.x86=37115 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=33CE9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3CFF9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=45825 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=18478 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=5DBC0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9841.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=956A8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81141 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30125 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=12159 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3B989 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=C125 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46A68 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=1EA50 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9860.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=962C8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=81091 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30845 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=11AA9 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3BEC9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=B9F5 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46F18 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=1EB00 -SLInitFunc.x64=New_CSLQuery_Initialize - -[6.4.9879.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A9CC8 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=95611 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=30C55 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=16A34 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2DAB9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=1BDC5 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=41132 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=24750 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.9926.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A8C28 -LocalOnlyCode.x86=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=31725 -SingleUserCode.x86=nop -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=3CF99 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -SLInitHook.x86=1 -SLInitOffset.x86=3F140 -SLInitFunc.x86=New_CSLQuery_Initialize -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=95FF1 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x64=1 -SingleUserOffset.x64=12A34 -SingleUserCode.x64=Zero -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=BE05 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x64=1 -SLInitOffset.x64=24EC0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.10041.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A9D88 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=97141 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=32215 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=15C64 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2DFC9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=B795 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46960 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=22E40 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.10240.16384] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A7D38 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=96901 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=32A95 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=18F74 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=2F5B9 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=22865 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=46581 -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=250F0 -SLInitFunc.x64=New_CSLQuery_Initialize - -[10.0.10586.0] -LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A7C18 -LocalOnlyCode.x86=jmpshort -LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=96AA1 -LocalOnlyCode.x64=jmpshort -SingleUserPatch.x86=1 -SingleUserOffset.x86=353B5 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=190D4 -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=30B69 -DefPolicyCode.x86=CDefPolicy_Query_eax_ecx -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=229A5 -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx -SLInitHook.x86=1 -SLInitOffset.x86=469DE -SLInitFunc.x86=New_CSLQuery_Initialize -SLInitHook.x64=1 -SLInitOffset.x64=25220 -SLInitFunc.x64=New_CSLQuery_Initialize - -[SLInit] -bServerSku=1 -bRemoteConnAllowed=1 -bFUSEnabled=1 -bAppServerAllowed=1 -bMultimonAllowed=1 -lMaxUserSessions=0 -ulMaxDebugSessions=0 -bInitialized=1 - -[6.3.9431.0-SLInit] -bFUSEnabled.x86 =A22A8 -lMaxUserSessions.x86 =A22AC -bAppServerAllowed.x86 =A22B0 -bInitialized.x86 =A22B4 -bMultimonAllowed.x86 =A22B8 -bServerSku.x86 =A22BC -ulMaxDebugSessions.x86=A22C0 -bRemoteConnAllowed.x86=A22C4 - -bFUSEnabled.x64 =C4490 -lMaxUserSessions.x64 =C4494 -bAppServerAllowed.x64 =C4498 -bInitialized.x64 =C449C -bMultimonAllowed.x64 =C44A0 -bServerSku.x64 =C44A4 -ulMaxDebugSessions.x64=C44A8 -bRemoteConnAllowed.x64=C44AC - -[6.3.9600.16384-SLInit] -bFUSEnabled.x86 =C02A8 -lMaxUserSessions.x86 =C02AC -bAppServerAllowed.x86 =C02B0 -bInitialized.x86 =C02B4 -bMultimonAllowed.x86 =C02B8 -bServerSku.x86 =C02BC -ulMaxDebugSessions.x86=C02C0 -bRemoteConnAllowed.x86=C02C4 - -bServerSku.x64 =E6494 -ulMaxDebugSessions.x64=E6498 -bRemoteConnAllowed.x64=E649C -bFUSEnabled.x64 =E64A0 -lMaxUserSessions.x64 =E64A4 -bAppServerAllowed.x64 =E64A8 -bInitialized.x64 =E64AC -bMultimonAllowed.x64 =E64B0 - -[6.3.9600.17095-SLInit] -bFUSEnabled.x86 =C12A8 -lMaxUserSessions.x86 =C12AC -bAppServerAllowed.x86 =C12B0 -bInitialized.x86 =C12B4 -bMultimonAllowed.x86 =C12B8 -bServerSku.x86 =C12BC -ulMaxDebugSessions.x86=C12C0 -bRemoteConnAllowed.x86=C12C4 - -bServerSku.x64 =E4494 -ulMaxDebugSessions.x64=E4498 -bRemoteConnAllowed.x64=E449C -bFUSEnabled.x64 =E44A0 -lMaxUserSessions.x64 =E44A4 -bAppServerAllowed.x64 =E44A8 -bInitialized.x64 =E44AC -bMultimonAllowed.x64 =E44B0 - -[6.3.9600.17415-SLInit] -bFUSEnabled.x86 =D3068 -lMaxUserSessions.x86 =D306C -bAppServerAllowed.x86 =D3070 -bInitialized.x86 =D3074 -bMultimonAllowed.x86 =D3078 -bServerSku.x86 =D307C -ulMaxDebugSessions.x86=D3080 -bRemoteConnAllowed.x86=D3084 - -bFUSEnabled.x64 =F9054 -lMaxUserSessions.x64 =F9058 -bAppServerAllowed.x64 =F905C -bInitialized.x64 =F9060 -bMultimonAllowed.x64 =F9064 -bServerSku.x64 =F9068 -ulMaxDebugSessions.x64=F906C -bRemoteConnAllowed.x64=F9070 - -[6.4.9841.0-SLInit] -bFUSEnabled.x86 =BF9F0 -lMaxUserSessions.x86 =BF9F4 -bAppServerAllowed.x86 =BF9F8 -bInitialized.x86 =BF9FC -bMultimonAllowed.x86 =BFA00 -bServerSku.x86 =BFA04 -ulMaxDebugSessions.x86=BFA08 -bRemoteConnAllowed.x86=BFA0C - -bFUSEnabled.x64 =ECFF8 -lMaxUserSessions.x64 =ECFFC -bAppServerAllowed.x64 =ED000 -bInitialized.x64 =ED004 -bMultimonAllowed.x64 =ED008 -bServerSku.x64 =ED00C -ulMaxDebugSessions.x64=ED010 -bRemoteConnAllowed.x64=ED014 - -[6.4.9860.0-SLInit] -bFUSEnabled.x86 =BF7E0 -lMaxUserSessions.x86 =BF7E4 -bAppServerAllowed.x86 =BF7E8 -bInitialized.x86 =BF7EC -bMultimonAllowed.x86 =BF7F0 -bServerSku.x86 =BF7F4 -ulMaxDebugSessions.x86=BF7F8 -bRemoteConnAllowed.x86=BF7FC - -bFUSEnabled.x64 =ECBD8 -lMaxUserSessions.x64 =ECBDC -bAppServerAllowed.x64 =ECBE0 -bInitialized.x64 =ECBE4 -bMultimonAllowed.x64 =ECBE8 -bServerSku.x64 =ECBEC -ulMaxDebugSessions.x64=ECBF0 -bRemoteConnAllowed.x64=ECBF4 - -[6.4.9879.0-SLInit] -bFUSEnabled.x86 =C27D8 -lMaxUserSessions.x86 =C27DC -bAppServerAllowed.x86 =C27E0 -bInitialized.x86 =C27E4 -bMultimonAllowed.x86 =C27E8 -bServerSku.x86 =C27EC -ulMaxDebugSessions.x86=C27F0 -bRemoteConnAllowed.x86=C27F4 - -bFUSEnabled.x64 =EDBF0 -lMaxUserSessions.x64 =EDBF4 -bAppServerAllowed.x64 =EDBF8 -bInitialized.x64 =EDBFC -bMultimonAllowed.x64 =EDC00 -bServerSku.x64 =EDC04 -ulMaxDebugSessions.x64=EDC08 -bRemoteConnAllowed.x64=EDC0C - -[10.0.9926.0-SLInit] -bFUSEnabled.x86 =C17D8 -lMaxUserSessions.x86 =C17DC -bAppServerAllowed.x86 =C17E0 -bInitialized.x86 =C17E4 -bMultimonAllowed.x86 =C17E8 -bServerSku.x86 =C17EC -ulMaxDebugSessions.x86=C17F0 -bRemoteConnAllowed.x86=C17F4 - -bFUSEnabled.x64 =EEBF0 -lMaxUserSessions.x64 =EEBF4 -bAppServerAllowed.x64 =EEBF8 -bInitialized.x64 =EEBFC -bMultimonAllowed.x64 =EEC00 -bServerSku.x64 =EEC04 -ulMaxDebugSessions.x64=EEC08 -bRemoteConnAllowed.x64=EEC0C - -[10.0.10041.0-SLInit] -bFUSEnabled.x86 =C5F60 -lMaxUserSessions.x86 =C5F64 -bAppServerAllowed.x86 =C5F68 -bInitialized.x86 =C5F6C -bMultimonAllowed.x86 =C5F70 -bServerSku.x86 =C5F74 -ulMaxDebugSessions.x86=C5F78 -bRemoteConnAllowed.x86=C5F7C - -bFUSEnabled.x64 =F3448 -lMaxUserSessions.x64 =F344C -bAppServerAllowed.x64 =F3450 -bInitialized.x64 =F3454 -bMultimonAllowed.x64 =F3458 -bServerSku.x64 =F345C -ulMaxDebugSessions.x64=F3460 -bRemoteConnAllowed.x64=F3464 - -[10.0.10240.16384-SLInit] -bFUSEnabled.x86 =C3F60 -lMaxUserSessions.x86 =C3F64 -bAppServerAllowed.x86 =C3F68 -bInitialized.x86 =C3F6C -bMultimonAllowed.x86 =C3F70 -bServerSku.x86 =C3F74 -ulMaxDebugSessions.x86=C3F78 -bRemoteConnAllowed.x86=C3F7C - -lMaxUserSessions.x64 =F23B0 -bAppServerAllowed.x64 =F23B4 -bServerSku.x64 =F23B8 -bFUSEnabled.x64 =F3460 -bInitialized.x64 =F3464 -bMultimonAllowed.x64 =F3468 -ulMaxDebugSessions.x64=F346C -bRemoteConnAllowed.x64=F3470 - -[10.0.10586.0-SLInit] -bFUSEnabled.x86 =C3F60 -lMaxUserSessions.x86 =C3F64 -bAppServerAllowed.x86 =C3F68 -bInitialized.x86 =C3F6C -bMultimonAllowed.x86 =C3F70 -bServerSku.x86 =C3F74 -ulMaxDebugSessions.x86=C3F78 -bRemoteConnAllowed.x86=C3F7C - -lMaxUserSessions.x64 =F23B0 -bAppServerAllowed.x64 =F23B4 -bServerSku.x64 =F23B8 -bFUSEnabled.x64 =F3460 -bInitialized.x64 =F3464 -bMultimonAllowed.x64 =F3468 -ulMaxDebugSessions.x64=F346C -bRemoteConnAllowed.x64=F3470 +; RDP Wrapper Library configuration +; Do not modify without special knowledge + +[Main] +Updated=2016-01-15 +LogFile=\rdpwrap.txt +SLPolicyHookNT60=1 +SLPolicyHookNT61=1 + +[SLPolicy] +TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 +TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 +TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 +TerminalServices-RemoteConnectionManager-AllowMultimon=1 +TerminalServices-RemoteConnectionManager-MaxUserSessions=0 +TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 +TerminalServices-RDP-7-Advanced-Compression-Allowed=1 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 +TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 +TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 +TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 +TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 +TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 + +[PatchCodes] +nop=90 +Zero=00 +jmpshort=EB +nopjmp=90E9 +CDefPolicy_Query_edx_ecx=BA000100008991200300005E90 +CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB +CDefPolicy_Query_eax_esi=B80001000089862003000090 +CDefPolicy_Query_eax_rdi=B80001000089873806000090 +CDefPolicy_Query_eax_ecx=B80001000089812003000090 +CDefPolicy_Query_eax_rcx=B80001000089813806000090 + +[6.0.6000.16386] +SingleUserPatch.x86=1 +SingleUserOffset.x86=160BF +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=65E3E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=15CD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=5C88F +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6001.18000] +SingleUserPatch.x86=1 +SingleUserOffset.x86=185E4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=70DBA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=17FD8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65BD7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.18005] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FA8 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=70FF6 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179C0 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65E83 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.19214] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FC4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=712AA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179B8 +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=65FF7 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.0.6002.23521] +SingleUserPatch.x86=1 +SingleUserOffset.x86=17FB4 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=71EAA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=179CC +DefPolicyCode.x86=CDefPolicy_Query_edx_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=669CB +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx_jmp + +[6.1.7600.16385] +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E25 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17D96 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196F3 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17AD2 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.17514] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180E2 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D8A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18540] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4E5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18006 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D9F +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C82 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22750] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E8E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E21 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C92 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.18637] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A4DD +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180FA +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19DBB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17DC6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22843] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F96 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E25 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D6E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.2.8102.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=F7E9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=D840 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=E47C +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=D3E6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1B909 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=1A484 +SLPolicyFunc.x64=New_Win8SL + +[6.2.8250.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=159C9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11E74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13520 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1187A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=1A0A9 +SLPolicyFunc.x86=New_Win8SL_CP +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=18FAC +SLPolicyFunc.x64=New_Win8SL + +[6.2.8400.0] +SingleUserPatch.x86=1 +SingleUserOffset.x86=15482 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20824 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13E48 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F102 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19629 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=2492C +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.16384] +SingleUserPatch.x86=1 +SingleUserOffset.x86=15552 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAA8 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F08 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A31A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19559 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FA8 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.17048] +SingleUserPatch.x86=1 +SingleUserOffset.x86=20592 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20948 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=1F408 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F206 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=17059 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=24570 +SLPolicyFunc.x64=New_Win8SL + +[6.2.9200.21166] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1557A +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2BAF8 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=13F30 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2A3B6 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +SLPolicyInternal.x86=1 +SLPolicyOffset.x86=19581 +SLPolicyFunc.x86=New_Win8SL +SLPolicyInternal.x64=1 +SLPolicyOffset.x64=21FD0 +SLPolicyFunc.x64=New_Win8SL + +[6.3.9431.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=8A611 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9F721 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=306A8 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=367F9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2EA25 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=350FD +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=196B0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2F9C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.16384] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A2729 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81824 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=18028 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=20241 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=16115 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=57829 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=1CEB0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=554C0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17095] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A36D1 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=B9159 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36BA9 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=21829 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=37529 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1F6A1 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=117F1 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=3B110 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.3.9600.17415] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B33F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B2D9 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=37115 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=33CE9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFF9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45825 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=18478 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DBC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9841.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=956A8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30125 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=12159 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3B989 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=C125 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46A68 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EA50 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9860.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=962C8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=81091 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30845 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11AA9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3BEC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B9F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46F18 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1EB00 +SLInitFunc.x64=New_CSLQuery_Initialize + +[6.4.9879.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9CC8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95611 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30C55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16A34 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DAB9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BDC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=41132 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24750 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.9926.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8C28 +LocalOnlyCode.x86=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=31725 +SingleUserCode.x86=nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CF99 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +SLInitHook.x86=1 +SLInitOffset.x86=3F140 +SLInitFunc.x86=New_CSLQuery_Initialize +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95FF1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=12A34 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=BE05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=24EC0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10041.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9D88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=97141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=15C64 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2DFC9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=B795 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46960 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E40 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10240.16384] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7D38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96901 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32A95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=18F74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2F5B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=22865 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46581 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=250F0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.10586.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7C18 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96AA1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=353B5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=190D4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30B69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=229A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=469DE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=25220 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.11082.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7C98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96AB1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35405 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=190D4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30BB9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=229A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46A3E +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=25220 +SLInitFunc.x64=New_CSLQuery_Initialize + +[SLInit] +bServerSku=1 +bRemoteConnAllowed=1 +bFUSEnabled=1 +bAppServerAllowed=1 +bMultimonAllowed=1 +lMaxUserSessions=0 +ulMaxDebugSessions=0 +bInitialized=1 + +[6.3.9431.0-SLInit] +bFUSEnabled.x86 =A22A8 +lMaxUserSessions.x86 =A22AC +bAppServerAllowed.x86 =A22B0 +bInitialized.x86 =A22B4 +bMultimonAllowed.x86 =A22B8 +bServerSku.x86 =A22BC +ulMaxDebugSessions.x86=A22C0 +bRemoteConnAllowed.x86=A22C4 + +bFUSEnabled.x64 =C4490 +lMaxUserSessions.x64 =C4494 +bAppServerAllowed.x64 =C4498 +bInitialized.x64 =C449C +bMultimonAllowed.x64 =C44A0 +bServerSku.x64 =C44A4 +ulMaxDebugSessions.x64=C44A8 +bRemoteConnAllowed.x64=C44AC + +[6.3.9600.16384-SLInit] +bFUSEnabled.x86 =C02A8 +lMaxUserSessions.x86 =C02AC +bAppServerAllowed.x86 =C02B0 +bInitialized.x86 =C02B4 +bMultimonAllowed.x86 =C02B8 +bServerSku.x86 =C02BC +ulMaxDebugSessions.x86=C02C0 +bRemoteConnAllowed.x86=C02C4 + +bServerSku.x64 =E6494 +ulMaxDebugSessions.x64=E6498 +bRemoteConnAllowed.x64=E649C +bFUSEnabled.x64 =E64A0 +lMaxUserSessions.x64 =E64A4 +bAppServerAllowed.x64 =E64A8 +bInitialized.x64 =E64AC +bMultimonAllowed.x64 =E64B0 + +[6.3.9600.17095-SLInit] +bFUSEnabled.x86 =C12A8 +lMaxUserSessions.x86 =C12AC +bAppServerAllowed.x86 =C12B0 +bInitialized.x86 =C12B4 +bMultimonAllowed.x86 =C12B8 +bServerSku.x86 =C12BC +ulMaxDebugSessions.x86=C12C0 +bRemoteConnAllowed.x86=C12C4 + +bServerSku.x64 =E4494 +ulMaxDebugSessions.x64=E4498 +bRemoteConnAllowed.x64=E449C +bFUSEnabled.x64 =E44A0 +lMaxUserSessions.x64 =E44A4 +bAppServerAllowed.x64 =E44A8 +bInitialized.x64 =E44AC +bMultimonAllowed.x64 =E44B0 + +[6.3.9600.17415-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =F9054 +lMaxUserSessions.x64 =F9058 +bAppServerAllowed.x64 =F905C +bInitialized.x64 =F9060 +bMultimonAllowed.x64 =F9064 +bServerSku.x64 =F9068 +ulMaxDebugSessions.x64=F906C +bRemoteConnAllowed.x64=F9070 + +[6.4.9841.0-SLInit] +bFUSEnabled.x86 =BF9F0 +lMaxUserSessions.x86 =BF9F4 +bAppServerAllowed.x86 =BF9F8 +bInitialized.x86 =BF9FC +bMultimonAllowed.x86 =BFA00 +bServerSku.x86 =BFA04 +ulMaxDebugSessions.x86=BFA08 +bRemoteConnAllowed.x86=BFA0C + +bFUSEnabled.x64 =ECFF8 +lMaxUserSessions.x64 =ECFFC +bAppServerAllowed.x64 =ED000 +bInitialized.x64 =ED004 +bMultimonAllowed.x64 =ED008 +bServerSku.x64 =ED00C +ulMaxDebugSessions.x64=ED010 +bRemoteConnAllowed.x64=ED014 + +[6.4.9860.0-SLInit] +bFUSEnabled.x86 =BF7E0 +lMaxUserSessions.x86 =BF7E4 +bAppServerAllowed.x86 =BF7E8 +bInitialized.x86 =BF7EC +bMultimonAllowed.x86 =BF7F0 +bServerSku.x86 =BF7F4 +ulMaxDebugSessions.x86=BF7F8 +bRemoteConnAllowed.x86=BF7FC + +bFUSEnabled.x64 =ECBD8 +lMaxUserSessions.x64 =ECBDC +bAppServerAllowed.x64 =ECBE0 +bInitialized.x64 =ECBE4 +bMultimonAllowed.x64 =ECBE8 +bServerSku.x64 =ECBEC +ulMaxDebugSessions.x64=ECBF0 +bRemoteConnAllowed.x64=ECBF4 + +[6.4.9879.0-SLInit] +bFUSEnabled.x86 =C27D8 +lMaxUserSessions.x86 =C27DC +bAppServerAllowed.x86 =C27E0 +bInitialized.x86 =C27E4 +bMultimonAllowed.x86 =C27E8 +bServerSku.x86 =C27EC +ulMaxDebugSessions.x86=C27F0 +bRemoteConnAllowed.x86=C27F4 + +bFUSEnabled.x64 =EDBF0 +lMaxUserSessions.x64 =EDBF4 +bAppServerAllowed.x64 =EDBF8 +bInitialized.x64 =EDBFC +bMultimonAllowed.x64 =EDC00 +bServerSku.x64 =EDC04 +ulMaxDebugSessions.x64=EDC08 +bRemoteConnAllowed.x64=EDC0C + +[10.0.9926.0-SLInit] +bFUSEnabled.x86 =C17D8 +lMaxUserSessions.x86 =C17DC +bAppServerAllowed.x86 =C17E0 +bInitialized.x86 =C17E4 +bMultimonAllowed.x86 =C17E8 +bServerSku.x86 =C17EC +ulMaxDebugSessions.x86=C17F0 +bRemoteConnAllowed.x86=C17F4 + +bFUSEnabled.x64 =EEBF0 +lMaxUserSessions.x64 =EEBF4 +bAppServerAllowed.x64 =EEBF8 +bInitialized.x64 =EEBFC +bMultimonAllowed.x64 =EEC00 +bServerSku.x64 =EEC04 +ulMaxDebugSessions.x64=EEC08 +bRemoteConnAllowed.x64=EEC0C + +[10.0.10041.0-SLInit] +bFUSEnabled.x86 =C5F60 +lMaxUserSessions.x86 =C5F64 +bAppServerAllowed.x86 =C5F68 +bInitialized.x86 =C5F6C +bMultimonAllowed.x86 =C5F70 +bServerSku.x86 =C5F74 +ulMaxDebugSessions.x86=C5F78 +bRemoteConnAllowed.x86=C5F7C + +bFUSEnabled.x64 =F3448 +lMaxUserSessions.x64 =F344C +bAppServerAllowed.x64 =F3450 +bInitialized.x64 =F3454 +bMultimonAllowed.x64 =F3458 +bServerSku.x64 =F345C +ulMaxDebugSessions.x64=F3460 +bRemoteConnAllowed.x64=F3464 + +[10.0.10240.16384-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 + +[10.0.10586.0-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 + +[10.0.11082.1000-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 diff --git a/technical.txt b/technical.txt index 20eb8ed..b0d78e1 100644 --- a/technical.txt +++ b/technical.txt @@ -64,12 +64,17 @@ Terminal Services supported versions 10.0.10532.0 (Windows 10 th2_release.150822-1406) [todo] 10.0.10547.0 (Windows 10 th2_release.150913-1511) [todo] 10.0.10586.0 (Windows 10 th2_release.151029-1700) [init hook + extended patch] +10.0.11082.1000 (Windows 10 rs1_release.151210-2021) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2016.01.15 : +- updated messages in the installer +- added support for termsrv.dll 10.0.11082.1000 + 2015.11.14 : - added support for termsrv.dll 10.0.10586.0 From 9c6a8f491411f7dc6870c2ff38b38889bcbc65fb Mon Sep 17 00:00:00 2001 From: fig2k4 Date: Fri, 15 Jan 2016 21:17:20 +0000 Subject: [PATCH 100/208] Support for Delphi XE2 and above --- src-x86-binarymaster/rdpwrap.dpr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-x86-binarymaster/rdpwrap.dpr b/src-x86-binarymaster/rdpwrap.dpr index f7024b2..38b85f6 100644 --- a/src-x86-binarymaster/rdpwrap.dpr +++ b/src-x86-binarymaster/rdpwrap.dpr @@ -73,7 +73,7 @@ const var INI: INIFile; LogFile: String = '\rdpwrap.txt'; - bw: DWORD; + bw: {$if CompilerVersion>=16} NativeUInt {$else} DWORD {$endif}; IsHooked: Boolean = False; // Unhooked import From 103a687689866caa2cfca88c8560cf5ab839996e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 26 Jan 2016 18:37:44 +0300 Subject: [PATCH 101/208] INI: Add support for 10.0.11102.1000 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 00dbc65..7e74150 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,7 @@ Change log:
10.0.10240.16384 (Windows 10 RTM)
10.0.10586.0 (Windows 10 TH2 Release 151029-1700)
10.0.11082.1000 (Windows 10 RS1 Release 151210-2021)
+• 10.0.11102.1000 (Windows 10 RS1 Release 160113-1800)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index b76b220..6fc8849 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2015-11-14 +Updated=2016-01-26 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1496,6 +1496,36 @@ SLInitHook.x64=1 SLInitOffset.x64=25220 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.11102.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D58 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95CD1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35A85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A9C4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30159 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B5D5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=44FD2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D160 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1748,3 +1778,22 @@ bInitialized.x64 =F3464 bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 + +[10.0.11102.1000-SLInit] +bInitialized.x86 =C1F5C +bServerSku.x86 =C1F60 +lMaxUserSessions.x86 =C1F64 +bAppServerAllowed.x86 =C1F68 +bRemoteConnAllowed.x86=C1F6C +bMultimonAllowed.x86 =C1F70 +ulMaxDebugSessions.x86=C1F74 +bFUSEnabled.x86 =C1F78 + +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 +bServerSku.x64 =F244C +lMaxUserSessions.x64 =F2450 +bAppServerAllowed.x64 =F2454 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 29a8fe2..ca39278 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-01-15 +Updated=2016-01-26 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -621,6 +621,32 @@ SLInitHook.x64=1 SLInitOffset.x64=25220 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.11102.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D58 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95CD1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35A85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A9C4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30159 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B5D5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=44FD2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D160 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -858,3 +884,22 @@ bInitialized.x64 =F3464 bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 + +[10.0.11102.1000-SLInit] +bInitialized.x86 =C1F5C +bServerSku.x86 =C1F60 +lMaxUserSessions.x86 =C1F64 +bAppServerAllowed.x86 =C1F68 +bRemoteConnAllowed.x86=C1F6C +bMultimonAllowed.x86 =C1F70 +ulMaxDebugSessions.x86=C1F74 +bFUSEnabled.x86 =C1F78 + +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 +bServerSku.x64 =F244C +lMaxUserSessions.x64 =F2450 +bAppServerAllowed.x64 =F2454 diff --git a/technical.txt b/technical.txt index b0d78e1..a7b37ca 100644 --- a/technical.txt +++ b/technical.txt @@ -65,12 +65,16 @@ Terminal Services supported versions 10.0.10547.0 (Windows 10 th2_release.150913-1511) [todo] 10.0.10586.0 (Windows 10 th2_release.151029-1700) [init hook + extended patch] 10.0.11082.1000 (Windows 10 rs1_release.151210-2021) [init hook + extended patch] +10.0.11102.1000 (Windows 10 rs1_release.160113-1800) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2016.01.26 : +- added support for termsrv.dll 10.0.11102.1000 + 2016.01.15 : - updated messages in the installer - added support for termsrv.dll 10.0.11082.1000 From ff3df89647fa34e815ebc0150fd7181c5da1d33e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 28 Jan 2016 20:52:46 +0300 Subject: [PATCH 102/208] INI: Add support for 10.0.14251.1000 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 55 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++- technical.txt | 4 +++ 4 files changed, 105 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7e74150..adfac2c 100644 --- a/README.md +++ b/README.md @@ -189,6 +189,7 @@ Change log:
10.0.10586.0 (Windows 10 TH2 Release 151029-1700)
10.0.11082.1000 (Windows 10 RS1 Release 151210-2021)
10.0.11102.1000 (Windows 10 RS1 Release 160113-1800)
+• 10.0.14251.1000 (Windows 10 RS1 Release 160124-1059)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 6fc8849..43d9545 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-01-26 +Updated=2016-01-28 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -850,6 +850,10 @@ SLPolicyFunc.x64=New_Win8SL ; 2. All xrefs will point to this function ; 3. Go to function beginning and check ; CODE XREF string, it will point to GetInstanceOfTSLicense function ; 4. Follow CODE XREF, switch to graph view, the next block below is to patch +; Another way: +; 1. Search text: CEnforcementCore::GetInstanceOfTSLicense FAILED - License type me +; 2. All xrefs will point to GetInstanceOfTSLicense +; 3. Follow xref, the previous block above is to patch ; Patch CEnforcementCore::GetInstanceOfTSLicense ; .text:1008A604 call ?IsLicenseTypeLocalOnly@CSLQuery@@SGJAAU_GUID@@PAH@Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) @@ -1526,6 +1530,36 @@ SLInitHook.x64=1 SLInitOffset.x64=D160 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14251.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D58 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95CD1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35A85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A9C4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30159 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B5D5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=44FD2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D160 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1797,3 +1831,22 @@ bFUSEnabled.x64 =F2440 bServerSku.x64 =F244C lMaxUserSessions.x64 =F2450 bAppServerAllowed.x64 =F2454 + +[10.0.14251.1000-SLInit] +bInitialized.x86 =C1F5C +bServerSku.x86 =C1F60 +lMaxUserSessions.x86 =C1F64 +bAppServerAllowed.x86 =C1F68 +bRemoteConnAllowed.x86=C1F6C +bMultimonAllowed.x86 =C1F70 +ulMaxDebugSessions.x86=C1F74 +bFUSEnabled.x86 =C1F78 + +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 +bServerSku.x64 =F244C +lMaxUserSessions.x64 =F2450 +bAppServerAllowed.x64 =F2454 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index ca39278..6a3d7f3 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-01-26 +Updated=2016-01-28 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -647,6 +647,32 @@ SLInitHook.x64=1 SLInitOffset.x64=D160 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14251.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D58 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=95CD1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35A85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A9C4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30159 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B5D5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=44FD2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D160 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -903,3 +929,22 @@ bFUSEnabled.x64 =F2440 bServerSku.x64 =F244C lMaxUserSessions.x64 =F2450 bAppServerAllowed.x64 =F2454 + +[10.0.14251.1000-SLInit] +bInitialized.x86 =C1F5C +bServerSku.x86 =C1F60 +lMaxUserSessions.x86 =C1F64 +bAppServerAllowed.x86 =C1F68 +bRemoteConnAllowed.x86=C1F6C +bMultimonAllowed.x86 =C1F70 +ulMaxDebugSessions.x86=C1F74 +bFUSEnabled.x86 =C1F78 + +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 +bServerSku.x64 =F244C +lMaxUserSessions.x64 =F2450 +bAppServerAllowed.x64 =F2454 diff --git a/technical.txt b/technical.txt index a7b37ca..1160def 100644 --- a/technical.txt +++ b/technical.txt @@ -66,12 +66,16 @@ Terminal Services supported versions 10.0.10586.0 (Windows 10 th2_release.151029-1700) [init hook + extended patch] 10.0.11082.1000 (Windows 10 rs1_release.151210-2021) [init hook + extended patch] 10.0.11102.1000 (Windows 10 rs1_release.160113-1800) [init hook + extended patch] +10.0.14251.1000 (Windows 10 rs1_release.160124-1059) [init hook + extended patch] Known failures 6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) Source code changelog (rdpwrap library): +2016.01.28 : +- added support for termsrv.dll 10.0.14251.1000 + 2016.01.26 : - added support for termsrv.dll 10.0.11102.1000 From 2c007fbb1db5a9ac2441b4bfb07476c497ef333d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 29 Feb 2016 14:37:49 +0300 Subject: [PATCH 103/208] INI: Add support for 10.0.14271.1000 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 7 +++--- 4 files changed, 101 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index adfac2c..e68e445 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,7 @@ Change log:
10.0.11082.1000 (Windows 10 RS1 Release 151210-2021)
10.0.11102.1000 (Windows 10 RS1 Release 160113-1800)
10.0.14251.1000 (Windows 10 RS1 Release 160124-1059)
+• 10.0.14271.1000 (Windows 10 RS1 Release 160218-2310)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 43d9545..e588733 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-01-28 +Updated=2016-02-29 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1560,6 +1560,36 @@ SLInitHook.x64=1 SLInitOffset.x64=D160 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14271.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4CE8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=941E1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35915 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=263F4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF79 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C185 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=47725 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE50 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1850,3 +1880,22 @@ bFUSEnabled.x64 =F2440 bServerSku.x64 =F244C lMaxUserSessions.x64 =F2450 bAppServerAllowed.x64 =F2454 + +[10.0.14271.1000-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =EF3C0 +lMaxUserSessions.x64 =EF3C4 +bAppServerAllowed.x64 =EF3C8 +bInitialized.x64 =F0460 +bRemoteConnAllowed.x64=F0464 +bMultimonAllowed.x64 =F0468 +ulMaxDebugSessions.x64=F046C +bFUSEnabled.x64 =F0470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 6a3d7f3..9a9f23a 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-01-28 +Updated=2016-02-29 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -673,6 +673,32 @@ SLInitHook.x64=1 SLInitOffset.x64=D160 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14271.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4CE8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=941E1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35915 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=263F4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF79 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C185 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=47725 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE50 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -948,3 +974,22 @@ bFUSEnabled.x64 =F2440 bServerSku.x64 =F244C lMaxUserSessions.x64 =F2450 bAppServerAllowed.x64 =F2454 + +[10.0.14271.1000-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =EF3C0 +lMaxUserSessions.x64 =EF3C4 +bAppServerAllowed.x64 =EF3C8 +bInitialized.x64 =F0460 +bRemoteConnAllowed.x64=F0464 +bMultimonAllowed.x64 =F0468 +ulMaxDebugSessions.x64=F046C +bFUSEnabled.x64 =F0470 diff --git a/technical.txt b/technical.txt index 1160def..52d0e27 100644 --- a/technical.txt +++ b/technical.txt @@ -67,12 +67,13 @@ Terminal Services supported versions 10.0.11082.1000 (Windows 10 rs1_release.151210-2021) [init hook + extended patch] 10.0.11102.1000 (Windows 10 rs1_release.160113-1800) [init hook + extended patch] 10.0.14251.1000 (Windows 10 rs1_release.160124-1059) [init hook + extended patch] - -Known failures -6.0.6000.16386 (Windows Vista RTM x86, crashes on logon attempt) +10.0.14271.1000 (Windows 10 rs1_release.160218-2310) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.02.29 : +- added support for termsrv.dll 10.0.14271.1000 + 2016.01.28 : - added support for termsrv.dll 10.0.14251.1000 From 50e745942154afe13bb56f3ca576befc390cef9e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 6 Mar 2016 05:58:29 +0300 Subject: [PATCH 104/208] Repository: Update links --- README.md | 6 +++--- src-installer/RDPWInst.dpr | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e68e445..475420f 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Building the binaries:

Links:
• Official GitHub repository:
-https://github.com/binarymaster/rdpwrap/
+https://github.com/stascorp/rdpwrap/
• Active discussion in the comments here:
Enable remote desktop on Windows 8 core / basic - Andrew Block .net
• MDL Projects and Applications thread here:
@@ -231,8 +231,8 @@ Change log:
• Windows 10 Enterprise

Known issues:
-• Beginning with Windows 8 (non-server editions) you can't connect to existing sessions (they will be logged out by system) - more info
-• Beginning with Windows 10 you can accidentally lock yourself from PC - more info
+• Beginning with Windows 8 (non-server editions) you can't connect to existing sessions (they will be logged out by system) - more info
+• Beginning with Windows 10 you can accidentally lock yourself from PC - more info
• RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386)
• If Terminal Services hangs at startup, try to add rdpwrap.dll to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
sc config TermService type= own
diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index a2c8251..626a932 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -948,7 +948,7 @@ end; function GitINIFile(var Content: String): Boolean; const - URL = 'https://raw.githubusercontent.com/binarymaster/rdpwrap/master/res/rdpwrap.ini'; + URL = 'https://raw.githubusercontent.com/stascorp/rdpwrap/master/res/rdpwrap.ini'; var NetHandle: HINTERNET; UrlHandle: HINTERNET; From fc58cf13c86cc24e9d3118d707a9c3a22157e9a0 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 6 Mar 2016 14:19:32 +0300 Subject: [PATCH 105/208] INI: Add support for 10.0.14279.1000 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 475420f..982718d 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,7 @@ Change log:
10.0.11102.1000 (Windows 10 RS1 Release 160113-1800)
10.0.14251.1000 (Windows 10 RS1 Release 160124-1059)
10.0.14271.1000 (Windows 10 RS1 Release 160218-2310)
+• 10.0.14279.1000 (Windows 10 RS1 Release 160229-1700)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index e588733..1f79171 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-02-29 +Updated=2016-03-06 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1590,6 +1590,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CE50 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14279.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4D28 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=94191 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35915 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=263F4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF79 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C185 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=47725 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE50 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1899,3 +1929,22 @@ bRemoteConnAllowed.x64=F0464 bMultimonAllowed.x64 =F0468 ulMaxDebugSessions.x64=F046C bFUSEnabled.x64 =F0470 + +[10.0.14279.1000-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =EF3C0 +lMaxUserSessions.x64 =EF3C4 +bAppServerAllowed.x64 =EF3C8 +bInitialized.x64 =F0460 +bRemoteConnAllowed.x64=F0464 +bMultimonAllowed.x64 =F0468 +ulMaxDebugSessions.x64=F046C +bFUSEnabled.x64 =F0470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 9a9f23a..47b8db1 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-02-29 +Updated=2016-03-06 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -699,6 +699,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CE50 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14279.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4D28 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=94191 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35915 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=263F4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF79 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C185 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=47725 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE50 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -993,3 +1019,22 @@ bRemoteConnAllowed.x64=F0464 bMultimonAllowed.x64 =F0468 ulMaxDebugSessions.x64=F046C bFUSEnabled.x64 =F0470 + +[10.0.14279.1000-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =EF3C0 +lMaxUserSessions.x64 =EF3C4 +bAppServerAllowed.x64 =EF3C8 +bInitialized.x64 =F0460 +bRemoteConnAllowed.x64=F0464 +bMultimonAllowed.x64 =F0468 +ulMaxDebugSessions.x64=F046C +bFUSEnabled.x64 =F0470 diff --git a/technical.txt b/technical.txt index 52d0e27..5f2f966 100644 --- a/technical.txt +++ b/technical.txt @@ -68,9 +68,13 @@ Terminal Services supported versions 10.0.11102.1000 (Windows 10 rs1_release.160113-1800) [init hook + extended patch] 10.0.14251.1000 (Windows 10 rs1_release.160124-1059) [init hook + extended patch] 10.0.14271.1000 (Windows 10 rs1_release.160218-2310) [init hook + extended patch] +10.0.14279.1000 (Windows 10 rs1_release.160229-1700) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.03.06 : +- added support for termsrv.dll 10.0.14279.1000 + 2016.02.29 : - added support for termsrv.dll 10.0.14271.1000 From a7d7972ca4b03665f9ca48c0f4c1c3a517962371 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 7 Mar 2016 21:15:52 +0300 Subject: [PATCH 106/208] INI: Experimental codes for ARMv7 --- res/rdpwrap-arm-kb.ini | 172 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 res/rdpwrap-arm-kb.ini diff --git a/res/rdpwrap-arm-kb.ini b/res/rdpwrap-arm-kb.ini new file mode 100644 index 0000000..7376c9a --- /dev/null +++ b/res/rdpwrap-arm-kb.ini @@ -0,0 +1,172 @@ +; RDP Wrapper Library configuration +; for Windows RT (ARMv7) + +; This is experimental file + +[Main] +Updated=2016-03-07 +LogFile=\rdpwrap.txt + +[SLPolicy] +TerminalServices-RemoteConnectionManager-AllowRemoteConnections=1 +TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 +TerminalServices-RemoteConnectionManager-AllowAppServerMode=1 +TerminalServices-RemoteConnectionManager-AllowMultimon=1 +TerminalServices-RemoteConnectionManager-MaxUserSessions=0 +TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions=0 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions=2 +TerminalServices-RDP-7-Advanced-Compression-Allowed=1 +TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly=0 +TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions=1000 +TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed=1 +TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed=1 +TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed=1 +TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed=1 + +[PatchCodes] +Zero=00 +bjmp5=05E0 +CDefPolicy_Query_r3_r5=40F20013C5F8203305E0 +CDefPolicy_Query_r3_r0=40F20013C0F8203305E0 + +[6.2.9200.16384] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10066DCC MOV.W R3, #0x11C +; .text:10066DD0 STR R3, [SP,#0x16C+var_13C] +; .text:10066DD2 LDR R3, =__imp_GetVersionExW +; .text:10066DD4 MOVS R4, #1 <- 0 +; .text:10066DD6 ADD R0, SP, #0x16C+var_13C +; .text:10066DD8 LDR R3, [R3] +SingleUserPatch.arm=1 +SingleUserOffset.arm=66DD4 +SingleUserCode.arm=Zero +; Patch CDefPolicy::Query +; Original +; .text:10059164 LDR.W R2, [R5,#0x324] ; D5 F8 24 23 ; [R5,#0x324] -> R2 +; .text:10059168 LDR.W R3, [R5,#0x320] ; D5 F8 20 33 ; [R5,#0x320] -> R3 +; .text:1005916C CMP R2, R3 ; 9A 42 ; compare +; .text:1005916E BNE loc_1005917A ; 04 D1 ; jump if (R2 != R3) +; Changed +; .text:10059164 MOVW R3, #0x100 ; 40 F2 00 13 ; 0x100 -> R3 +; .text:10059168 STR.W R3, [R5,#0x320] ; C5 F8 20 33 ; R3 -> [R5,#0x320] +; .text:1005916C B loc_1005917A ; 05 E0 ; jump +; .text:1005916E BNE loc_1005917A ; 04 D1 ; / never executed / +DefPolicyPatch.arm=1 +DefPolicyOffset.arm=59164 +DefPolicyCode.arm=CDefPolicy_Query_r3_r5 +; Hook SLGetWindowsInformationDWORDWrapper +SLPolicyInternal.arm=1 +SLPolicyOffset.arm=5F934 +SLPolicyFunc.arm=New_Win8SL + +[6.3.9600.16384] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:1008E6C2 BL _IsLicenseTypeLocalOnly_CSLQuery__SAJAAU_GUID__PAH_Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:1008E6C6 CMP R0, #0 +; .text:1008E6C8 BLT loc_1008E6DA +; .text:1008E6CA LDR R3, [SP,#0x20+var_14] +; .text:1008E6CC CBZ R3, loc_1008E6DA ; 2B B1 ; jump if (R3 == 0) +; Changed +; .text:1008E6CC B loc_1008E6DA ; 05 E0 ; jump +LocalOnlyPatch.arm=1 +LocalOnlyOffset.arm=8E6CC +LocalOnlyCode.arm=bjmp5 +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10069E74 MOV.W R3, #0x11C +; .text:10069E78 STR R3, [SP,#0x164+var_13C] +; .text:10069E7A LDR R3, =__imp_GetVersionExW +; .text:10069E7C MOVS R4, #1 <- 0 +; .text:10069E7E ADD R0, SP, #0x164+var_13C +; .text:10069E80 LDR R3, [R3] +SingleUserPatch.arm=1 +SingleUserOffset.arm=69E7C +SingleUserCode.arm=Zero +; Patch CDefPolicy::Query +; Original +; .text:10064D54 LDR.W R2, [R0,#0x324] ; D0 F8 24 23 ; [R0,#0x324] -> R2 +; .text:10064D58 LDR.W R3, [R0,#0x320] ; D0 F8 20 33 ; [R0,#0x320] -> R3 +; .text:10064D5C CMP R2, R3 ; 9A 42 ; compare +; .text:10064D5E BNE loc_10064D6A ; 04 D1 ; jump if (R2 != R3) +; Changed +; .text:10064D54 MOVW R3, #0x100 ; 40 F2 00 13 ; 0x100 -> R3 +; .text:10064D58 STR.W R3, [R0,#0x320] ; C0 F8 20 33 ; R3 -> [R0,#0x320] +; .text:10064D5C B loc_10064D6A ; 05 E0 ; jump +; .text:10064D5E BNE loc_10064D6A ; 04 D1 ; / never executed / +DefPolicyPatch.arm=1 +DefPolicyOffset.arm=64D54 +DefPolicyCode.arm=CDefPolicy_Query_r3_r0 +; Hook CSLQuery::Initialize +SLInitHook.arm=1 +SLInitOffset.arm=32188 +SLInitFunc.arm=New_CSLQuery_Initialize + +[6.3.9600.17095] +; Patch CEnforcementCore::GetInstanceOfTSLicense +; .text:1008E35A BL _IsLicenseTypeLocalOnly_CSLQuery__SAJAAU_GUID__PAH_Z ; CSLQuery::IsLicenseTypeLocalOnly(_GUID &,int *) +; .text:1008E35E CMP R0, #0 +; .text:1008E360 BLT loc_1008E372 +; .text:1008E362 LDR R3, [SP,#0x20+var_14] +; .text:1008E364 CBZ R3, loc_1008E372 ; 2B B1 ; jump if (R3 == 0) +; Changed +; .text:1008E364 B loc_1008E372 ; 05 E0 ; jump +LocalOnlyPatch.arm=1 +LocalOnlyOffset.arm=8E364 +LocalOnlyCode.arm=bjmp5 +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +; .text:10069C2C MOV.W R3, #0x11C +; .text:10069C30 STR R3, [SP,#0x164+var_13C] +; .text:10069C32 LDR R3, =GetVersionExW +; .text:10069C34 MOVS R4, #1 <- 0 +; .text:10069C36 ADD R0, SP, #0x164+var_13C +; .text:10069C38 LDR R3, [R3] +SingleUserPatch.arm=1 +SingleUserOffset.arm=69C34 +SingleUserCode.arm=Zero +; Patch CDefPolicy::Query +; Original +; .text:100649E0 LDR.W R2, [R0,#0x324] ; D0 F8 24 23 ; [R0,#0x324] -> R2 +; .text:100649E4 LDR.W R3, [R0,#0x320] ; D0 F8 20 33 ; [R0,#0x320] -> R3 +; .text:100649E8 CMP R2, R3 ; 9A 42 ; compare +; .text:100649EA BNE loc_100649F6 ; 04 D1 ; jump if (R2 != R3) +; Changed +; .text:100649E0 MOVW R3, #0x100 ; 40 F2 00 13 ; 0x100 -> R3 +; .text:100649E4 STR.W R3, [R0,#0x320] ; C0 F8 20 33 ; R3 -> [R0,#0x320] +; .text:100649E8 B loc_10064D6A ; 05 E0 ; jump +; .text:100649EA BNE loc_10064D6A ; 04 D1 ; / never executed / +DefPolicyPatch.arm=1 +DefPolicyOffset.arm=649E0 +DefPolicyCode.arm=CDefPolicy_Query_r3_r0 +; Hook CSLQuery::Initialize +SLInitHook.arm=1 +SLInitOffset.arm=32E3C +SLInitFunc.arm=New_CSLQuery_Initialize + +[SLInit] +bServerSku=1 +bRemoteConnAllowed=1 +bFUSEnabled=1 +bAppServerAllowed=1 +bMultimonAllowed=1 +lMaxUserSessions=0 +ulMaxDebugSessions=0 +bInitialized=1 + +[6.3.9600.16384-SLInit] +bFUSEnabled.arm =A57E0 +lMaxUserSessions.arm =A57E4 +bAppServerAllowed.arm =A57E8 +bInitialized.arm =A57EC +bMultimonAllowed.arm =A57F0 +bServerSku.arm =A57F4 +ulMaxDebugSessions.arm=A57F8 +bRemoteConnAllowed.arm=A57FC + +[6.3.9600.17095-SLInit] +bFUSEnabled.arm =A67E0 +lMaxUserSessions.arm =A67E4 +bAppServerAllowed.arm =A67E8 +bInitialized.arm =A67EC +bMultimonAllowed.arm =A67F0 +bServerSku.arm =A67F4 +ulMaxDebugSessions.arm=A67F8 +bRemoteConnAllowed.arm=A67FC From 6c58b69306def64c96a1fb2a7cb27b5e104d43ea Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 6 Apr 2016 14:12:47 +0300 Subject: [PATCH 107/208] INI: Add support for 10.0.14295.1000 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 10 +++++++++ 4 files changed, 107 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 982718d..459fa6a 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,7 @@ Change log:
10.0.14251.1000 (Windows 10 RS1 Release 160124-1059)
10.0.14271.1000 (Windows 10 RS1 Release 160218-2310)
10.0.14279.1000 (Windows 10 RS1 Release 160229-1700)
+• 10.0.14295.1000 (Windows 10 RS1 Release 160318-1628)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 1f79171..9938548 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-03-06 +Updated=2016-04-06 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1620,6 +1620,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CE50 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14295.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4D28 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D691 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=25514 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BA35 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=47748 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C860 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1948,3 +1978,22 @@ bRemoteConnAllowed.x64=F0464 bMultimonAllowed.x64 =F0468 ulMaxDebugSessions.x64=F046C bFUSEnabled.x64 =F0470 + +[10.0.14295.1000-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =E73C0 +lMaxUserSessions.x64 =E73C4 +bAppServerAllowed.x64 =E73C8 +bInitialized.x64 =E8460 +bRemoteConnAllowed.x64=E8464 +bMultimonAllowed.x64 =E8468 +ulMaxDebugSessions.x64=E846C +bFUSEnabled.x64 =E8470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 47b8db1..d5fe829 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-03-06 +Updated=2016-04-06 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -725,6 +725,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CE50 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14295.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4D28 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D691 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=25514 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BA35 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=47748 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C860 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1038,3 +1064,22 @@ bRemoteConnAllowed.x64=F0464 bMultimonAllowed.x64 =F0468 ulMaxDebugSessions.x64=F046C bFUSEnabled.x64 =F0470 + +[10.0.14295.1000-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =E73C0 +lMaxUserSessions.x64 =E73C4 +bAppServerAllowed.x64 =E73C8 +bInitialized.x64 =E8460 +bRemoteConnAllowed.x64=E8464 +bMultimonAllowed.x64 =E8468 +ulMaxDebugSessions.x64=E846C +bFUSEnabled.x64 =E8470 diff --git a/technical.txt b/technical.txt index 5f2f966..f1e4c49 100644 --- a/technical.txt +++ b/technical.txt @@ -69,9 +69,19 @@ Terminal Services supported versions 10.0.14251.1000 (Windows 10 rs1_release.160124-1059) [init hook + extended patch] 10.0.14271.1000 (Windows 10 rs1_release.160218-2310) [init hook + extended patch] 10.0.14279.1000 (Windows 10 rs1_release.160229-1700) [init hook + extended patch] +10.0.14295.1000 (Windows 10 rs1_release.160318-1628) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.04.06 : +- added support for termsrv.dll 10.0.14295.1000 + +2016.03.07 : +- added experimental codes for ARMv7 architecture (see rdpwrap-arm-kb.ini) +- Windows RT / termsrv.dll 6.2.9200.16384 +- Windows RT 8.1 / termsrv.dll 6.3.9600.16384 +- Windows RT 8.1 / termsrv.dll 6.3.9600.17095 + 2016.03.06 : - added support for termsrv.dll 10.0.14279.1000 From 37bcdd641410505476d9ebb3d9719f54ef91dd5c Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 14 Apr 2016 19:28:00 +0300 Subject: [PATCH 108/208] INI: Add support for 10.0.14316.1000 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 459fa6a..c9b01bf 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,7 @@ Change log:
10.0.14271.1000 (Windows 10 RS1 Release 160218-2310)
10.0.14279.1000 (Windows 10 RS1 Release 160229-1700)
10.0.14295.1000 (Windows 10 RS1 Release 160318-1628)
+• 10.0.14316.1000 (Windows 10 RS1 Release 160402-2227)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 9938548..978bfa3 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-04-06 +Updated=2016-04-14 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1650,6 +1650,36 @@ SLInitHook.x64=1 SLInitOffset.x64=C860 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14316.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F5F1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=32B55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=26B04 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C1C9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46ABD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC60 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1997,3 +2027,22 @@ bRemoteConnAllowed.x64=E8464 bMultimonAllowed.x64 =E8468 ulMaxDebugSessions.x64=E846C bFUSEnabled.x64 =E8470 + +[10.0.14316.1000-SLInit] +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index d5fe829..6840b4f 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-04-06 +Updated=2016-04-14 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -751,6 +751,32 @@ SLInitHook.x64=1 SLInitOffset.x64=C860 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14316.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F5F1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32B55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=26B04 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C1C9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46ABD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC60 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1083,3 +1109,22 @@ bRemoteConnAllowed.x64=E8464 bMultimonAllowed.x64 =E8468 ulMaxDebugSessions.x64=E846C bFUSEnabled.x64 =E8470 + +[10.0.14316.1000-SLInit] +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 diff --git a/technical.txt b/technical.txt index f1e4c49..f7d739f 100644 --- a/technical.txt +++ b/technical.txt @@ -70,9 +70,13 @@ Terminal Services supported versions 10.0.14271.1000 (Windows 10 rs1_release.160218-2310) [init hook + extended patch] 10.0.14279.1000 (Windows 10 rs1_release.160229-1700) [init hook + extended patch] 10.0.14295.1000 (Windows 10 rs1_release.160318-1628) [init hook + extended patch] +10.0.14316.1000 (Windows 10 rs1_release.160402-2227) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.04.14 : +- added support for termsrv.dll 10.0.14316.1000 + 2016.04.06 : - added support for termsrv.dll 10.0.14295.1000 From d02238218cb3fc812c0939c540fd2d4c76922efd Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sat, 23 Apr 2016 23:07:44 +0800 Subject: [PATCH 109/208] Update immediately after install --- bin/install.bat | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/install.bat b/bin/install.bat index 9731cfd..6163594 100644 --- a/bin/install.bat +++ b/bin/install.bat @@ -1,6 +1,7 @@ @echo off if not exist "%~dp0RDPWInst.exe" goto :error "%~dp0RDPWInst" -i +"%~dp0RDPWInst" -w echo ______________________________________________________________ echo. echo You can check RDP functionality with RDPCheck program. From 69f46c6caf7c620122cd8cb1c785aee4414aaf48 Mon Sep 17 00:00:00 2001 From: Maximo Piva Date: Fri, 29 Apr 2016 01:34:19 -0300 Subject: [PATCH 110/208] INI: Add support for 10.0.14332.1001 --- res/rdpwrap-ini-kb.txt | 45 ++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 978bfa3..f5e5cc7 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1680,6 +1680,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CC60 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14332.1001] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F601 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=357E5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2AE44 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316A9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C025 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4755F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CAD0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2046,3 +2072,22 @@ bRemoteConnAllowed.x64=EA464 bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C bFUSEnabled.x64 =EA470 + +[10.0.14332.1001-SLInit] +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 \ No newline at end of file diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 6840b4f..4c97c4f 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-04-14 +Updated=2016-04-29 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -777,6 +777,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CC60 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14332.1001] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F601 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=357E5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2AE44 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316A9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C025 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4755F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CAD0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1128,3 +1154,22 @@ bRemoteConnAllowed.x64=EA464 bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C bFUSEnabled.x64 =EA470 + +[10.0.14332.1001-SLInit] +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 From 53897b40c7c6dda734f981039a25f347a3386e86 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 8 May 2016 18:39:11 +0300 Subject: [PATCH 111/208] INI: Add support for new builds 10.0.14300.1000 x64 10.0.14328.1000 x86/x64 --- README.md | 3 + res/rdpwrap-ini-kb.txt | 89 +++++++++++++++++++++++- res/rdpwrap.ini | 71 ++++++++++++++++++- technical.txt | 150 ++++++++++++++++++++++------------------- 4 files changed, 239 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index c9b01bf..cdfb828 100644 --- a/README.md +++ b/README.md @@ -193,7 +193,10 @@ Change log:
10.0.14271.1000 (Windows 10 RS1 Release 160218-2310)
10.0.14279.1000 (Windows 10 RS1 Release 160229-1700)
10.0.14295.1000 (Windows 10 RS1 Release 160318-1628)
+• 10.0.14300.1000 (Windows Server 2016 Technical Preview 5)
10.0.14316.1000 (Windows 10 RS1 Release 160402-2227)
+• 10.0.14328.1000 (Windows 10 RS1 Release 160418-1609)
+• 10.0.14332.1001 (Windows 10 RS1 Release 160422-1940)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index f5e5cc7..1b7e167 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-04-14 +Updated=2016-05-08 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1650,6 +1650,24 @@ SLInitHook.x64=1 SLInitOffset.x64=C860 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14300.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F5F1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=26B04 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D125 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC60 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14316.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -1680,25 +1698,60 @@ SLInitHook.x64=1 SLInitOffset.x64=CC60 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14328.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F5F1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=32B55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=26B04 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C1C9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D365 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46ABD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC60 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14332.1001] +; contributed by maxpiva +; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A8E98 LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=8F601 LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled SingleUserPatch.x86=1 SingleUserOffset.x86=357E5 SingleUserCode.x86=nop SingleUserPatch.x64=1 SingleUserOffset.x64=2AE44 SingleUserCode.x64=Zero +; Patch CDefPolicy::Query DefPolicyPatch.x86=1 DefPolicyOffset.x86=316A9 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 DefPolicyOffset.x64=1C025 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=4755F SLInitFunc.x86=New_CSLQuery_Initialize @@ -2054,6 +2107,16 @@ bMultimonAllowed.x64 =E8468 ulMaxDebugSessions.x64=E846C bFUSEnabled.x64 =E8470 +[10.0.14300.1000-SLInit] +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 + [10.0.14316.1000-SLInit] bInitialized.x86 =C4F58 bServerSku.x86 =C4F5C @@ -2073,7 +2136,7 @@ bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C bFUSEnabled.x64 =EA470 -[10.0.14332.1001-SLInit] +[10.0.14328.1000-SLInit] bInitialized.x86 =C4F58 bServerSku.x86 =C4F5C lMaxUserSessions.x86 =C4F60 @@ -2090,4 +2153,24 @@ bInitialized.x64 =EA460 bRemoteConnAllowed.x64=EA464 bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C -bFUSEnabled.x64 =EA470 \ No newline at end of file +bFUSEnabled.x64 =EA470 + +[10.0.14332.1001-SLInit] +; contributed by maxpiva +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 4c97c4f..a38978e 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-04-29 +Updated=2016-05-08 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -751,6 +751,20 @@ SLInitHook.x64=1 SLInitOffset.x64=C860 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14300.1000] +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F5F1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=26B04 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D125 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=CC60 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14316.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A8E88 @@ -777,6 +791,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CC60 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14328.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F5F1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=32B55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=26B04 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C1C9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D365 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46ABD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC60 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14332.1001] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A8E98 @@ -1136,6 +1176,16 @@ bMultimonAllowed.x64 =E8468 ulMaxDebugSessions.x64=E846C bFUSEnabled.x64 =E8470 +[10.0.14300.1000-SLInit] +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 + [10.0.14316.1000-SLInit] bInitialized.x86 =C4F58 bServerSku.x86 =C4F5C @@ -1155,6 +1205,25 @@ bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C bFUSEnabled.x64 =EA470 +[10.0.14328.1000-SLInit] +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bServerSku.x64 =E93C0 +lMaxUserSessions.x64 =E93C4 +bAppServerAllowed.x64 =E93C8 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 + [10.0.14332.1001-SLInit] bInitialized.x86 =C4F58 bServerSku.x86 =C4F5C diff --git a/technical.txt b/technical.txt index f7d739f..a56b5e7 100644 --- a/technical.txt +++ b/technical.txt @@ -1,79 +1,89 @@ RDP Wrapper Library project by Stas'M Terminal Services supported versions -6.0.X.X (Windows Vista, any) [policy hook only] -6.0.6000.16386 (Windows Vista) [policy hook + extended patch] -6.0.6000.20723 (Windows Vista with KB944917) [todo] -6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] -6.0.6001.22286 (Windows Vista SP1 with KB958612) [todo] -6.0.6001.22357 (Windows Vista SP1 with KB958612 v2) [todo] -6.0.6001.22323 (Windows Vista SP1 with KB960742) [todo] -6.0.6001.22392 (Windows Vista SP1 with KB968680) [todo] -6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] -6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] -6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] -6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] -6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] -6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] -6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] -6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] -6.0.6002.22790 (Windows Vista SP2 with KB2672601) [todo] -6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] -6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] -6.1.X.X (Windows 7, any) [policy hook only] -6.1.7100.0 (Windows 7 Release Candidate) [todo] -6.1.7600.16385 (Windows 7) [policy hook + extended patch] -6.1.7600.20661 (Windows 7 with KB951422) [todo] -6.1.7600.21085 (Windows 7 with KB951422 v2) [todo] -6.1.7600.20621 (Windows 7 with KB979470) [todo] -6.1.7600.20890 (Windows 7 with KB2479710) [todo] -6.1.7600.21316 (Windows 7 with KB2750090) [todo] -6.1.7600.21420 (Windows 7 with KB2800789) [todo] -6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] -6.1.7601.21855 (Windows 7 SP1 with KB951422 v2) [todo] -6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] -6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] -6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] -6.1.7601.22213 (Windows 7 SP1 with KB2800789) [todo] -6.1.7601.22476 (Windows 7 SP1 with KB2870165) [todo] -6.1.7601.22435 (Windows 7 SP1 with KB2878424) [todo] -6.1.7601.22477 (Windows 7 SP1 with KB2896256) [todo] -6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] -6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] -6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] -6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] -6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] -6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] -6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] -6.2.9200.16384 (Windows 8) [policy hook + extended patch] -6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] -6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] -6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] -6.3.9600.16384 (Windows 8.1) [init hook + extended patch] -6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] -6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] -6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] -6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] -6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] -10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] -10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [init hook + extended patch] -10.0.10049.0 (Windows 10 Pro Technical Preview UP2) [todo] -10.0.10061.0 (Windows 10 Pro Technical Preview UP3) [todo] -10.0.10240.16384 (Windows 10 RTM) [init hook + extended patch] -10.0.10525.0 (Windows 10 th2_release.150812-1658) [todo] -10.0.10532.0 (Windows 10 th2_release.150822-1406) [todo] -10.0.10547.0 (Windows 10 th2_release.150913-1511) [todo] -10.0.10586.0 (Windows 10 th2_release.151029-1700) [init hook + extended patch] -10.0.11082.1000 (Windows 10 rs1_release.151210-2021) [init hook + extended patch] -10.0.11102.1000 (Windows 10 rs1_release.160113-1800) [init hook + extended patch] -10.0.14251.1000 (Windows 10 rs1_release.160124-1059) [init hook + extended patch] -10.0.14271.1000 (Windows 10 rs1_release.160218-2310) [init hook + extended patch] -10.0.14279.1000 (Windows 10 rs1_release.160229-1700) [init hook + extended patch] -10.0.14295.1000 (Windows 10 rs1_release.160318-1628) [init hook + extended patch] -10.0.14316.1000 (Windows 10 rs1_release.160402-2227) [init hook + extended patch] +6.0.X.X (Windows Vista, any) [policy hook only] +6.0.6000.16386 (Windows Vista) [policy hook + extended patch] +6.0.6000.20723 (Windows Vista with KB944917) [todo] +6.0.6001.18000 (Windows Vista SP1) [policy hook + extended patch] +6.0.6001.22286 (Windows Vista SP1 with KB958612) [todo] +6.0.6001.22357 (Windows Vista SP1 with KB958612 v2) [todo] +6.0.6001.22323 (Windows Vista SP1 with KB960742) [todo] +6.0.6001.22392 (Windows Vista SP1 with KB968680) [todo] +6.0.6001.22565 (Windows Vista SP1 with KB977541) [todo] +6.0.6001.22635 (Windows Vista SP1 with KB970911) [todo] +6.0.6001.22801 (Windows Vista SP1 with KB2381675) [todo] +6.0.6002.18005 (Windows Vista SP2) [policy hook + extended patch] +6.0.6002.22269 (Windows Vista SP2 with KB977541) [todo] +6.0.6002.22340 (Windows Vista SP2 with KB970911) [todo] +6.0.6002.22515 (Windows Vista SP2 with KB2381675) [todo] +6.0.6002.22641 (Windows Vista SP2 with KB2523307) [todo] +6.0.6002.22790 (Windows Vista SP2 with KB2672601) [todo] +6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) [policy hook + extended patch] +6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) [policy hook + extended patch] +6.1.X.X (Windows 7, any) [policy hook only] +6.1.7100.0 (Windows 7 Release Candidate) [todo] +6.1.7600.16385 (Windows 7) [policy hook + extended patch] +6.1.7600.20661 (Windows 7 with KB951422) [todo] +6.1.7600.21085 (Windows 7 with KB951422 v2) [todo] +6.1.7600.20621 (Windows 7 with KB979470) [todo] +6.1.7600.20890 (Windows 7 with KB2479710) [todo] +6.1.7600.21316 (Windows 7 with KB2750090) [todo] +6.1.7600.21420 (Windows 7 with KB2800789) [todo] +6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] +6.1.7601.21855 (Windows 7 SP1 with KB951422 v2) [todo] +6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] +6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] +6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] +6.1.7601.22213 (Windows 7 SP1 with KB2800789) [todo] +6.1.7601.22476 (Windows 7 SP1 with KB2870165) [todo] +6.1.7601.22435 (Windows 7 SP1 with KB2878424) [todo] +6.1.7601.22477 (Windows 7 SP1 with KB2896256) [todo] +6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) [policy hook + extended patch] +6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] +6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] +6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] +6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] +6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] +6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] +6.2.9200.16384 (Windows 8) [policy hook + extended patch] +6.2.9200.17048 (Windows 8 with KB2973501 GDR) [policy hook + extended patch] +6.2.9200.21166 (Windows 8 with KB2973501 LDR) [policy hook + extended patch] +6.3.9431.0 (Windows 8.1 Preview) [init hook + extended patch] +6.3.9600.16384 (Windows 8.1) [init hook + extended patch] +6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] +6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] +6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] +6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] +6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] +10.0.9926.0 (Windows 10 Pro Technical Preview) [init hook + extended patch] +10.0.10041.0 (Windows 10 Pro Technical Preview UP1) [init hook + extended patch] +10.0.10049.0 (Windows 10 Pro Technical Preview UP2) [todo] +10.0.10061.0 (Windows 10 Pro Technical Preview UP3) [todo] +10.0.10240.16384 (Windows 10 RTM) [init hook + extended patch] +10.0.10525.0 (Windows 10 th2_release.150812-1658) [todo] +10.0.10532.0 (Windows 10 th2_release.150822-1406) [todo] +10.0.10547.0 (Windows 10 th2_release.150913-1511) [todo] +10.0.10586.0 (Windows 10 th2_release.151029-1700) [init hook + extended patch] +10.0.11082.1000 (Windows 10 rs1_release.151210-2021) [init hook + extended patch] +10.0.11102.1000 (Windows 10 rs1_release.160113-1800) [init hook + extended patch] +10.0.14251.1000 (Windows 10 rs1_release.160124-1059) [init hook + extended patch] +10.0.14271.1000 (Windows 10 rs1_release.160218-2310) [init hook + extended patch] +10.0.14279.1000 (Windows 10 rs1_release.160229-1700) [init hook + extended patch] +10.0.14295.1000 (Windows 10 rs1_release.160318-1628) [init hook + extended patch] +10.0.14300.1000 (Windows Server 2016 Technical Preview 5) [init hook + extended patch] +10.0.14316.1000 (Windows 10 rs1_release.160402-2227) [init hook + extended patch] +10.0.14328.1000 (Windows 10 rs1_release.160418-1609) [init hook + extended patch] +10.0.14332.1001 (Windows 10 rs1_release.160422-1940) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.05.08 : +- added support for termsrv.dll 10.0.14300.1000 x64 +- added support for termsrv.dll 10.0.14328.1000 + +2016.04.29 : +- added support for termsrv.dll 10.0.14332.1001 by maxpiva + 2016.04.14 : - added support for termsrv.dll 10.0.14316.1000 From bb6d905b8d7f216b9d77f7b924196a1f06db7ecc Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 14 May 2016 20:41:16 +0300 Subject: [PATCH 112/208] INI: Add support for new builds 10.0.14342.1000 x86/x64 --- README.md | 2 ++ res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 102 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cdfb828..be8fd3d 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,7 @@ Change log:
10.0.14316.1000 (Windows 10 RS1 Release 160402-2227)
10.0.14328.1000 (Windows 10 RS1 Release 160418-1609)
10.0.14332.1001 (Windows 10 RS1 Release 160422-1940)
+• 10.0.14342.1000 (Windows 10 RS1 Release 160506-1708)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
@@ -235,6 +236,7 @@ Change log:
• Windows 10 Home Single Language
• Windows 10 Pro
• Windows 10 Enterprise
+• Windows Server 2016 Technical Preview

Known issues:
• Beginning with Windows 8 (non-server editions) you can't connect to existing sessions (they will be logged out by system) - more info
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 1b7e167..8916513 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-05-08 +Updated=2016-05-14 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1759,6 +1759,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CAD0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14342.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8EF31 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=357E5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=26774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316A9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1CEF5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4755F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CA20 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2174,3 +2204,22 @@ bRemoteConnAllowed.x64=EA464 bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C bFUSEnabled.x64 =EA470 + +[10.0.14342.1000-SLInit] +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bInitialized.x64 =E9430 +bRemoteConnAllowed.x64=E9434 +bMultimonAllowed.x64 =E9438 +ulMaxDebugSessions.x64=E943C +bFUSEnabled.x64 =E9440 +bServerSku.x64 =E944C +lMaxUserSessions.x64 =E9450 +bAppServerAllowed.x64 =E9454 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index a38978e..2fc59c0 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-05-08 +Updated=2016-05-14 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -843,6 +843,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CAD0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14342.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8EF31 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=357E5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=26774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316A9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1CEF5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4755F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CA20 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1242,3 +1268,22 @@ bRemoteConnAllowed.x64=EA464 bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C bFUSEnabled.x64 =EA470 + +[10.0.14342.1000-SLInit] +bInitialized.x86 =C4F58 +bServerSku.x86 =C4F5C +lMaxUserSessions.x86 =C4F60 +bAppServerAllowed.x86 =C4F64 +bRemoteConnAllowed.x86=C4F68 +bMultimonAllowed.x86 =C4F6C +ulMaxDebugSessions.x86=C4F70 +bFUSEnabled.x86 =C4F74 + +bInitialized.x64 =E9430 +bRemoteConnAllowed.x64=E9434 +bMultimonAllowed.x64 =E9438 +ulMaxDebugSessions.x64=E943C +bFUSEnabled.x64 =E9440 +bServerSku.x64 =E944C +lMaxUserSessions.x64 =E9450 +bAppServerAllowed.x64 =E9454 diff --git a/technical.txt b/technical.txt index a56b5e7..1f1199e 100644 --- a/technical.txt +++ b/technical.txt @@ -74,9 +74,13 @@ Terminal Services supported versions 10.0.14316.1000 (Windows 10 rs1_release.160402-2227) [init hook + extended patch] 10.0.14328.1000 (Windows 10 rs1_release.160418-1609) [init hook + extended patch] 10.0.14332.1001 (Windows 10 rs1_release.160422-1940) [init hook + extended patch] +10.0.14342.1000 (Windows 10 rs1_release.160506-1708) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.05.14 : +- added support for termsrv.dll 10.0.14342.1000 + 2016.05.08 : - added support for termsrv.dll 10.0.14300.1000 x64 - added support for termsrv.dll 10.0.14328.1000 From d19a8cf733b05dc075b347b088e205200a02eaf6 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 30 May 2016 17:40:06 +0300 Subject: [PATCH 113/208] INI: Add support for new builds (fix #119) 10.0.14352.1002 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index be8fd3d..dfc69bf 100644 --- a/README.md +++ b/README.md @@ -198,6 +198,7 @@ Change log:
10.0.14328.1000 (Windows 10 RS1 Release 160418-1609)
10.0.14332.1001 (Windows 10 RS1 Release 160422-1940)
10.0.14342.1000 (Windows 10 RS1 Release 160506-1708)
+• 10.0.14352.1002 (Windows 10 RS1 Release 160522-1930)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 8916513..fccd20a 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-05-14 +Updated=2016-05-30 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1789,6 +1789,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CA20 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14352.1002] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4474 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D90C +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35465 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24474 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30099 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AC05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=44792 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CDB0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2223,3 +2253,22 @@ bFUSEnabled.x64 =E9440 bServerSku.x64 =E944C lMaxUserSessions.x64 =E9450 bAppServerAllowed.x64 =E9454 + +[10.0.14352.1002-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =E73C0 +lMaxUserSessions.x64 =E73C4 +bAppServerAllowed.x64 =E73C8 +bInitialized.x64 =E8460 +bRemoteConnAllowed.x64=E8464 +bMultimonAllowed.x64 =E8468 +ulMaxDebugSessions.x64=E846C +bFUSEnabled.x64 =E8470 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 2fc59c0..2a7ea31 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-05-14 +Updated=2016-05-30 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -869,6 +869,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CA20 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14352.1002] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4474 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D90C +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35465 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24474 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30099 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AC05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=44792 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CDB0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1287,3 +1313,22 @@ bFUSEnabled.x64 =E9440 bServerSku.x64 =E944C lMaxUserSessions.x64 =E9450 bAppServerAllowed.x64 =E9454 + +[10.0.14352.1002-SLInit] +bInitialized.x86 =C0F5C +bServerSku.x86 =C0F60 +lMaxUserSessions.x86 =C0F64 +bAppServerAllowed.x86 =C0F68 +bRemoteConnAllowed.x86=C0F6C +bMultimonAllowed.x86 =C0F70 +ulMaxDebugSessions.x86=C0F74 +bFUSEnabled.x86 =C0F78 + +bServerSku.x64 =E73C0 +lMaxUserSessions.x64 =E73C4 +bAppServerAllowed.x64 =E73C8 +bInitialized.x64 =E8460 +bRemoteConnAllowed.x64=E8464 +bMultimonAllowed.x64 =E8468 +ulMaxDebugSessions.x64=E846C +bFUSEnabled.x64 =E8470 diff --git a/technical.txt b/technical.txt index 1f1199e..929fb7b 100644 --- a/technical.txt +++ b/technical.txt @@ -75,9 +75,13 @@ Terminal Services supported versions 10.0.14328.1000 (Windows 10 rs1_release.160418-1609) [init hook + extended patch] 10.0.14332.1001 (Windows 10 rs1_release.160422-1940) [init hook + extended patch] 10.0.14342.1000 (Windows 10 rs1_release.160506-1708) [init hook + extended patch] +10.0.14352.1002 (Windows 10 rs1_release.160522-1930) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.05.30 : +- added support for termsrv.dll 10.0.14352.1002 + 2016.05.14 : - added support for termsrv.dll 10.0.14342.1000 From 078e5cd1cbd933740c1ae8de29675351059a571b Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jun 2016 22:09:18 +0300 Subject: [PATCH 114/208] Correct offsets for 14352 (fix #121) --- res/rdpwrap-ini-kb.txt | 6 +++--- res/rdpwrap.ini | 6 +++--- technical.txt | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index fccd20a..9dfecfa 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-05-30 +Updated=2016-06-17 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1792,10 +1792,10 @@ SLInitFunc.x64=New_CSLQuery_Initialize [10.0.14352.1002] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A4474 +LocalOnlyOffset.x86=A4478 LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=8D90C +LocalOnlyOffset.x64=8D911 LocalOnlyCode.x64=jmpshort ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled SingleUserPatch.x86=1 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 2a7ea31..baf54cb 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-05-30 +Updated=2016-06-17 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -871,10 +871,10 @@ SLInitFunc.x64=New_CSLQuery_Initialize [10.0.14352.1002] LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86=A4474 +LocalOnlyOffset.x86=A4478 LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 -LocalOnlyOffset.x64=8D90C +LocalOnlyOffset.x64=8D911 LocalOnlyCode.x64=jmpshort SingleUserPatch.x86=1 SingleUserOffset.x86=35465 diff --git a/technical.txt b/technical.txt index 929fb7b..a109695 100644 --- a/technical.txt +++ b/technical.txt @@ -79,6 +79,8 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2016.06.17 : +- fixed issue with termsrv.dll 10.0.14352.1002 2016.05.30 : - added support for termsrv.dll 10.0.14352.1002 From cabb00fc78ef865b91338ff7db1882fa43e329dc Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 17 Jun 2016 22:11:05 +0300 Subject: [PATCH 115/208] INI: Add support for new builds (fix #123) 10.0.14366.0 x86/x64 10.0.14367.0 x86/x64 --- README.md | 2 + res/rdpwrap-ini-kb.txt | 106 +++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 90 ++++++++++++++++++++++++++++++++++ technical.txt | 5 ++ 4 files changed, 203 insertions(+) diff --git a/README.md b/README.md index dfc69bf..3ca5591 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,8 @@ Change log:
10.0.14332.1001 (Windows 10 RS1 Release 160422-1940)
10.0.14342.1000 (Windows 10 RS1 Release 160506-1708)
10.0.14352.1002 (Windows 10 RS1 Release 160522-1930)
+• 10.0.14366.0 (Windows 10 RS1 Release 160610-1700)
+• 10.0.14367.0 (Windows 10 RS1 Release 160613-1700)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 9dfecfa..519d9a9 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1819,6 +1819,66 @@ SLInitHook.x64=1 SLInitOffset.x64=CDB0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14366.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9088 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FB01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34F65 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=21DE4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316E9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1A855 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4793E +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CCE0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14367.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9088 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FB01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34F65 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=21DE4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316E9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1A855 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4793E +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CCE0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -1845,6 +1905,14 @@ bInitialized=1 ; 4. It will be comparsion with CSLQuery::bServerSku constant ; 5. Now it's easy to find other constants +; Strings to find other values: +; CSLQuery::GetMaxUserSessions +; CSLQuery::IsAppServerInstalled failed: +; CSLQuery::AreRemoteConnectionsAllowed f +; CSLQuery::IsMultimonAllowed +; CSLQuery::GetMaxDebugSessions +; CSLQuery::IsFUSEnabled + bFUSEnabled.x86 =A22A8 lMaxUserSessions.x86 =A22AC bAppServerAllowed.x86 =A22B0 @@ -2272,3 +2340,41 @@ bRemoteConnAllowed.x64=E8464 bMultimonAllowed.x64 =E8468 ulMaxDebugSessions.x64=E846C bFUSEnabled.x64 =E8470 + +[10.0.14366.0-SLInit] +bInitialized.x86 =C4F68 +bServerSku.x86 =C4F6C +lMaxUserSessions.x86 =C4F70 +bAppServerAllowed.x86 =C4F74 +bRemoteConnAllowed.x86=C4F78 +bMultimonAllowed.x86 =C4F7C +ulMaxDebugSessions.x86=C4F80 +bFUSEnabled.x86 =C4F84 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA480 +bRemoteConnAllowed.x64=EA484 +bMultimonAllowed.x64 =EA488 +ulMaxDebugSessions.x64=EA48C +bFUSEnabled.x64 =EA490 + +[10.0.14367.0-SLInit] +bInitialized.x86 =C4F68 +bServerSku.x86 =C4F6C +lMaxUserSessions.x86 =C4F70 +bAppServerAllowed.x86 =C4F74 +bRemoteConnAllowed.x86=C4F78 +bMultimonAllowed.x86 =C4F7C +ulMaxDebugSessions.x86=C4F80 +bFUSEnabled.x86 =C4F84 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA480 +bRemoteConnAllowed.x64=EA484 +bMultimonAllowed.x64 =EA488 +ulMaxDebugSessions.x64=EA48C +bFUSEnabled.x64 =EA490 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index baf54cb..051c4b4 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -895,6 +895,58 @@ SLInitHook.x64=1 SLInitOffset.x64=CDB0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14366.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9088 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FB01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34F65 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=21DE4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316E9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1A855 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4793E +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CCE0 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14367.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9088 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FB01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34F65 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=21DE4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=316E9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1A855 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4793E +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CCE0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1332,3 +1384,41 @@ bRemoteConnAllowed.x64=E8464 bMultimonAllowed.x64 =E8468 ulMaxDebugSessions.x64=E846C bFUSEnabled.x64 =E8470 + +[10.0.14366.0-SLInit] +bInitialized.x86 =C4F68 +bServerSku.x86 =C4F6C +lMaxUserSessions.x86 =C4F70 +bAppServerAllowed.x86 =C4F74 +bRemoteConnAllowed.x86=C4F78 +bMultimonAllowed.x86 =C4F7C +ulMaxDebugSessions.x86=C4F80 +bFUSEnabled.x86 =C4F84 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA480 +bRemoteConnAllowed.x64=EA484 +bMultimonAllowed.x64 =EA488 +ulMaxDebugSessions.x64=EA48C +bFUSEnabled.x64 =EA490 + +[10.0.14367.0-SLInit] +bInitialized.x86 =C4F68 +bServerSku.x86 =C4F6C +lMaxUserSessions.x86 =C4F70 +bAppServerAllowed.x86 =C4F74 +bRemoteConnAllowed.x86=C4F78 +bMultimonAllowed.x86 =C4F7C +ulMaxDebugSessions.x86=C4F80 +bFUSEnabled.x86 =C4F84 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA480 +bRemoteConnAllowed.x64=EA484 +bMultimonAllowed.x64 =EA488 +ulMaxDebugSessions.x64=EA48C +bFUSEnabled.x64 =EA490 diff --git a/technical.txt b/technical.txt index a109695..f3f8455 100644 --- a/technical.txt +++ b/technical.txt @@ -76,11 +76,16 @@ Terminal Services supported versions 10.0.14332.1001 (Windows 10 rs1_release.160422-1940) [init hook + extended patch] 10.0.14342.1000 (Windows 10 rs1_release.160506-1708) [init hook + extended patch] 10.0.14352.1002 (Windows 10 rs1_release.160522-1930) [init hook + extended patch] +10.0.14366.0 (Windows 10 rs1_release.160610-1700) [init hook + extended patch] +10.0.14367.0 (Windows 10 rs1_release.160613-1700) [init hook + extended patch] Source code changelog (rdpwrap library): 2016.06.17 : - fixed issue with termsrv.dll 10.0.14352.1002 +- added support for termsrv.dll 10.0.14366.0 +- added support for termsrv.dll 10.0.14367.0 + 2016.05.30 : - added support for termsrv.dll 10.0.14352.1002 From 533c3978a697f460e12648a39f97858857bf9454 Mon Sep 17 00:00:00 2001 From: kbmorris Date: Sun, 26 Jun 2016 14:36:12 -0400 Subject: [PATCH 116/208] Add support for new x64 architecture builds Add support for 10.0.14372.0 x64 architecture. --- res/rdpwrap.ini | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 051c4b4..3df2b65 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -947,6 +947,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CCE0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14372.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86= +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F931 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86= +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86= +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86= +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1422,3 +1448,22 @@ bRemoteConnAllowed.x64=EA484 bMultimonAllowed.x64 =EA488 ulMaxDebugSessions.x64=EA48C bFUSEnabled.x64 =EA490 + +[10.0.14372.0-SLInit] +bInitialized.x86 = +bServerSku.x86 = +lMaxUserSessions.x86 = +bAppServerAllowed.x86 = +bRemoteConnAllowed.x86= +bMultimonAllowed.x86 = +ulMaxDebugSessions.x86= +bFUSEnabled.x86 = + +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 From f6b125331ea8770a19ecb2ad8b5bcfde28c34089 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 27 Jun 2016 09:44:49 +0300 Subject: [PATCH 117/208] INI: Add support for new builds 10.0.14372.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 52 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 32 +++++++++++++------------- technical.txt | 7 ++++++ 4 files changed, 75 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 3ca5591..ce6b036 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,7 @@ Change log:
10.0.14352.1002 (Windows 10 RS1 Release 160522-1930)
10.0.14366.0 (Windows 10 RS1 Release 160610-1700)
10.0.14367.0 (Windows 10 RS1 Release 160613-1700)
+• 10.0.14372.0 (Windows 10 RS1 Release 160620-2342)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 519d9a9..bfae6ae 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-06-17 +Updated=2016-06-27 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1879,6 +1879,37 @@ SLInitHook.x64=1 SLInitOffset.x64=CCE0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14372.0] +; x64 contributed by kbmorris +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F931 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34635 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=460D2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2378,3 +2409,22 @@ bRemoteConnAllowed.x64=EA484 bMultimonAllowed.x64 =EA488 ulMaxDebugSessions.x64=EA48C bFUSEnabled.x64 =EA490 + +[10.0.14372.0-SLInit] +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 +; x64 contributed by kbmorris +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 3df2b65..d98b65f 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-06-17 +Updated=2016-06-27 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -949,25 +949,25 @@ SLInitFunc.x64=New_CSLQuery_Initialize [10.0.14372.0] LocalOnlyPatch.x86=1 -LocalOnlyOffset.x86= +LocalOnlyOffset.x86=A7698 LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=8F931 LocalOnlyCode.x64=jmpshort SingleUserPatch.x86=1 -SingleUserOffset.x86= +SingleUserOffset.x86=34635 SingleUserCode.x86=nop SingleUserPatch.x64=1 SingleUserOffset.x64=295A4 SingleUserCode.x64=Zero DefPolicyPatch.x86=1 -DefPolicyOffset.x86= +DefPolicyOffset.x86=2FF69 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 DefPolicyOffset.x64=1B295 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx SLInitHook.x86=1 -SLInitOffset.x86= +SLInitOffset.x86=460D2 SLInitFunc.x86=New_CSLQuery_Initialize SLInitHook.x64=1 SLInitOffset.x64=CC10 @@ -1450,20 +1450,20 @@ ulMaxDebugSessions.x64=EA48C bFUSEnabled.x64 =EA490 [10.0.14372.0-SLInit] -bInitialized.x86 = -bServerSku.x86 = -lMaxUserSessions.x86 = -bAppServerAllowed.x86 = -bRemoteConnAllowed.x86= -bMultimonAllowed.x86 = -ulMaxDebugSessions.x86= -bFUSEnabled.x86 = +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 -bServerSku.x64 =EA47C -lMaxUserSessions.x64 =EA480 -bAppServerAllowed.x64 =EA484 bInitialized.x64 =EA460 bRemoteConnAllowed.x64=EA464 bMultimonAllowed.x64 =EA468 ulMaxDebugSessions.x64=EA46C bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 diff --git a/technical.txt b/technical.txt index f3f8455..c5e2a76 100644 --- a/technical.txt +++ b/technical.txt @@ -78,9 +78,16 @@ Terminal Services supported versions 10.0.14352.1002 (Windows 10 rs1_release.160522-1930) [init hook + extended patch] 10.0.14366.0 (Windows 10 rs1_release.160610-1700) [init hook + extended patch] 10.0.14367.0 (Windows 10 rs1_release.160613-1700) [init hook + extended patch] +10.0.14372.0 (Windows 10 rs1_release.160620-2342) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.06.27 : +- added support for termsrv.dll 10.0.14372.0 x86 + +2016.06.26 : +- added support for termsrv.dll 10.0.14372.0 x64 by kbmorris + 2016.06.17 : - fixed issue with termsrv.dll 10.0.14352.1002 - added support for termsrv.dll 10.0.14366.0 From 92bc50b6db8c660666cf8b32bb5a49d599cf8752 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 6 Jul 2016 21:26:53 +0300 Subject: [PATCH 118/208] INI: Add support for new builds (fix #126) 10.0.14379.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ce6b036..baf3904 100644 --- a/README.md +++ b/README.md @@ -202,6 +202,7 @@ Change log:
10.0.14366.0 (Windows 10 RS1 Release 160610-1700)
10.0.14367.0 (Windows 10 RS1 Release 160613-1700)
10.0.14372.0 (Windows 10 RS1 Release 160620-2342)
+• 10.0.14379.0 (Windows 10 RS1 Release 160627-1607)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index bfae6ae..8f3c2ef 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-06-27 +Updated=2016-07-06 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1910,6 +1910,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CC10 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14379.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F941 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34635 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=460D2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2428,3 +2458,22 @@ bFUSEnabled.x64 =EA470 bServerSku.x64 =EA47C lMaxUserSessions.x64 =EA480 bAppServerAllowed.x64 =EA484 + +[10.0.14379.0-SLInit] +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 + +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index d98b65f..ee63102 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-06-27 +Updated=2016-07-06 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -973,6 +973,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CC10 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14379.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F941 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34635 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=460D2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1467,3 +1493,22 @@ bFUSEnabled.x64 =EA470 bServerSku.x64 =EA47C lMaxUserSessions.x64 =EA480 bAppServerAllowed.x64 =EA484 + +[10.0.14379.0-SLInit] +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 + +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 diff --git a/technical.txt b/technical.txt index c5e2a76..24e3cff 100644 --- a/technical.txt +++ b/technical.txt @@ -79,9 +79,13 @@ Terminal Services supported versions 10.0.14366.0 (Windows 10 rs1_release.160610-1700) [init hook + extended patch] 10.0.14367.0 (Windows 10 rs1_release.160613-1700) [init hook + extended patch] 10.0.14372.0 (Windows 10 rs1_release.160620-2342) [init hook + extended patch] +10.0.14379.0 (Windows 10 rs1_release.160627-1607) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.07.06 : +- added support for termsrv.dll 10.0.14379.0 + 2016.06.27 : - added support for termsrv.dll 10.0.14372.0 x86 From 1395ea22bb48df7cb73ed85d4b523982f153ab87 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 15 Jul 2016 21:55:02 +0300 Subject: [PATCH 119/208] INI: Add support for new builds (fix #128) 10.0.14383.0 x86/x64 10.0.14388.0 x86/x64 --- README.md | 2 + res/rdpwrap-ini-kb.txt | 100 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 92 ++++++++++++++++++++++++++++++++++++- technical.txt | 6 +++ 4 files changed, 198 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index baf3904..d45feb8 100644 --- a/README.md +++ b/README.md @@ -203,6 +203,8 @@ Change log:
10.0.14367.0 (Windows 10 RS1 Release 160613-1700)
10.0.14372.0 (Windows 10 RS1 Release 160620-2342)
10.0.14379.0 (Windows 10 RS1 Release 160627-1607)
+• 10.0.14383.0 (Windows 10 RS1 Release 160701-1839)
+• 10.0.14388.0 (Windows 10 RS1 Release 160709-1635)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 8f3c2ef..2f9a60d 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-07-06 +Updated=2016-07-15 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1940,6 +1940,66 @@ SLInitHook.x64=1 SLInitOffset.x64=CC10 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14383.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F941 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34635 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=460D2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14388.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2477,3 +2537,41 @@ bFUSEnabled.x64 =EA470 bServerSku.x64 =EA47C lMaxUserSessions.x64 =EA480 bAppServerAllowed.x64 =EA484 + +[10.0.14383.0-SLInit] +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 + +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 + +[10.0.14388.0-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index ee63102..7c7c133 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-07-06 +Updated=2016-07-15 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -999,6 +999,58 @@ SLInitHook.x64=1 SLInitOffset.x64=CC10 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14383.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F941 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34635 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=460D2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14388.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1512,3 +1564,41 @@ bFUSEnabled.x64 =EA470 bServerSku.x64 =EA47C lMaxUserSessions.x64 =EA480 bAppServerAllowed.x64 =EA484 + +[10.0.14383.0-SLInit] +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 + +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 + +[10.0.14388.0-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 diff --git a/technical.txt b/technical.txt index 24e3cff..9208c9b 100644 --- a/technical.txt +++ b/technical.txt @@ -80,9 +80,15 @@ Terminal Services supported versions 10.0.14367.0 (Windows 10 rs1_release.160613-1700) [init hook + extended patch] 10.0.14372.0 (Windows 10 rs1_release.160620-2342) [init hook + extended patch] 10.0.14379.0 (Windows 10 rs1_release.160627-1607) [init hook + extended patch] +10.0.14383.0 (Windows 10 rs1_release.160701-1839) [init hook + extended patch] +10.0.14388.0 (Windows 10 rs1_release.160709-1635) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.07.15 : +- added support for termsrv.dll 10.0.14383.0 +- added support for termsrv.dll 10.0.14388.0 + 2016.07.06 : - added support for termsrv.dll 10.0.14379.0 From 558925a865589389149f55a7050f2edb6c9a85db Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 22 Jul 2016 21:15:53 +0300 Subject: [PATCH 120/208] INI: Add support for new builds (fix #130) 10.0.14393.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d45feb8..8f1f966 100644 --- a/README.md +++ b/README.md @@ -205,6 +205,7 @@ Change log:
10.0.14379.0 (Windows 10 RS1 Release 160627-1607)
10.0.14383.0 (Windows 10 RS1 Release 160701-1839)
10.0.14388.0 (Windows 10 RS1 Release 160709-1635)
+• 10.0.14393.0 (Windows 10 RS1 Release 160715-1616)

Confirmed working on:
• Windows Vista Starter (x86 - Service Pack 1 and higher)
diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 2f9a60d..bcd0df6 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-07-15 +Updated=2016-07-22 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2000,6 +2000,36 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14393.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2575,3 +2605,22 @@ bRemoteConnAllowed.x64=E8474 bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 + +[10.0.14393.0-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 7c7c133..3010ce5 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-07-15 +Updated=2016-07-22 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1051,6 +1051,32 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14393.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1602,3 +1628,22 @@ bRemoteConnAllowed.x64=E8474 bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 + +[10.0.14393.0-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 diff --git a/technical.txt b/technical.txt index 9208c9b..680fa77 100644 --- a/technical.txt +++ b/technical.txt @@ -82,9 +82,13 @@ Terminal Services supported versions 10.0.14379.0 (Windows 10 rs1_release.160627-1607) [init hook + extended patch] 10.0.14383.0 (Windows 10 rs1_release.160701-1839) [init hook + extended patch] 10.0.14388.0 (Windows 10 rs1_release.160709-1635) [init hook + extended patch] +10.0.14393.0 (Windows 10 rs1_release.160715-1616) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.07.22 : +- added support for termsrv.dll 10.0.14393.0 + 2016.07.15 : - added support for termsrv.dll 10.0.14383.0 - added support for termsrv.dll 10.0.14388.0 From 64e0987053b919988c449217edb8dd389fb0230d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 23 Jul 2016 19:27:33 +0300 Subject: [PATCH 121/208] Installer: Add online install mode --- bin/install.bat | 3 +- src-installer/RDPWInst.dpr | 95 +++++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/bin/install.bat b/bin/install.bat index 6163594..5e6ed34 100644 --- a/bin/install.bat +++ b/bin/install.bat @@ -1,7 +1,6 @@ @echo off if not exist "%~dp0RDPWInst.exe" goto :error -"%~dp0RDPWInst" -i -"%~dp0RDPWInst" -w +"%~dp0RDPWInst" -i -o echo ______________________________________________________________ echo. echo You can check RDP functionality with RDPCheck program. diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 626a932..98125c9 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1,5 +1,5 @@ { - Copyright 2015 Stas'M Corp. + Copyright 2016 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -76,6 +76,7 @@ const TermService = 'TermService'; var Installed: Boolean; + Online: Boolean; WrapPath: String; Arch: Byte; OldWow64RedirectionValue: LongBool; @@ -607,9 +608,41 @@ begin Str.Free; end; +function GitINIFile(var Content: String): Boolean; +const + URL = 'https://raw.githubusercontent.com/stascorp/rdpwrap/master/res/rdpwrap.ini'; +var + NetHandle: HINTERNET; + UrlHandle: HINTERNET; + Str: String; + Buf: Array[0..1023] of Byte; + BytesRead: DWORD; +begin + Result := False; + Content := ''; + NetHandle := InternetOpen('RDP Wrapper Update', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); + if not Assigned(NetHandle) then + Exit; + UrlHandle := InternetOpenUrl(NetHandle, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0); + if not Assigned(UrlHandle) then + begin + InternetCloseHandle(NetHandle); + Exit; + end; + repeat + InternetReadFile(UrlHandle, @Buf[0], SizeOf(Buf), BytesRead); + SetString(Str, PAnsiChar(@Buf[0]), BytesRead); + Content := Content + Str; + until BytesRead = 0; + InternetCloseHandle(UrlHandle); + InternetCloseHandle(NetHandle); + Result := True; +end; + procedure ExtractFiles; var - RDPClipRes: String; + RDPClipRes, S: String; + OnlineINI: TStringList; begin if not DirectoryExists(ExtractFilePath(ExpandPath(WrapPath))) then if ForceDirectories(ExtractFilePath(ExpandPath(WrapPath))) then @@ -619,7 +652,26 @@ begin Writeln('[*] Path: ', ExtractFilePath(ExpandPath(WrapPath))); Halt(0); end; - ExtractRes('config', ExtractFilePath(ExpandPath(WrapPath)) + 'rdpwrap.ini'); + if Online then + begin + Writeln('[*] Downloading latest INI file...'); + OnlineINI := TStringList.Create; + if GitINIFile(S) then begin + OnlineINI.Text := S; + S := ExtractFilePath(ExpandPath(WrapPath)) + 'rdpwrap.ini'; + OnlineINI.SaveToFile(S); + Writeln('[+] Latest INI file -> ', S); + end + else + begin + Writeln('[-] Failed to get online INI file, using built-in.'); + Online := False; + end; + OnlineINI.Free; + end; + if not Online then + ExtractRes('config', ExtractFilePath(ExpandPath(WrapPath)) + 'rdpwrap.ini'); + RDPClipRes := ''; case Arch of 32: begin @@ -946,37 +998,6 @@ begin Result := True; end; -function GitINIFile(var Content: String): Boolean; -const - URL = 'https://raw.githubusercontent.com/stascorp/rdpwrap/master/res/rdpwrap.ini'; -var - NetHandle: HINTERNET; - UrlHandle: HINTERNET; - Str: String; - Buf: Array[0..1023] of Byte; - BytesRead: DWORD; -begin - Result := False; - Content := ''; - NetHandle := InternetOpen('RDP Wrapper Update', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); - if not Assigned(NetHandle) then - Exit; - UrlHandle := InternetOpenUrl(NetHandle, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0); - if not Assigned(UrlHandle) then - begin - InternetCloseHandle(NetHandle); - Exit; - end; - repeat - InternetReadFile(UrlHandle, @Buf[0], SizeOf(Buf), BytesRead); - SetString(Str, PAnsiChar(@Buf[0]), BytesRead); - Content := Content + Str; - until BytesRead = 0; - InternetCloseHandle(UrlHandle); - InternetCloseHandle(NetHandle); - Result := True; -end; - procedure CheckUpdate; var INIPath, S: String; @@ -1038,7 +1059,7 @@ var begin Writeln('RDP Wrapper Library v1.6'); Writeln('Installer v2.3'); - Writeln('Copyright (C) Stas''M Corp. 2015'); + Writeln('Copyright (C) Stas''M Corp. 2016'); Writeln(''); if (ParamCount < 1) @@ -1051,11 +1072,12 @@ begin ) then begin Writeln('USAGE:'); - Writeln('RDPWInst.exe [-l|-i[-s]|-w|-u|-r]'); + Writeln('RDPWInst.exe [-l|-i[-s][-o]|-w|-u|-r]'); Writeln(''); Writeln('-l display the license agreement'); Writeln('-i install wrapper to Program Files folder (default)'); Writeln('-i -s install wrapper to System32 folder'); + Writeln('-i -o online install mode (loads latest INI file)'); Writeln('-w get latest update for INI file'); Writeln('-u uninstall wrapper'); Writeln('-r force restart Terminal Services'); @@ -1103,6 +1125,7 @@ begin CheckTermsrvProcess; Writeln('[*] Extracting files...'); + Online := (ParamStr(2) = '-o') or (ParamStr(3) = '-o'); ExtractFiles; Writeln('[*] Configuring service library...'); From 11be8c683315b6cbf237106db3ddbc1388bffae2 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 23 Jul 2016 19:33:35 +0300 Subject: [PATCH 122/208] Installer: Allow to keep settings on uninstall (fix #106) --- src-installer/RDPWInst.dpr | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 98125c9..497d4e1 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1072,7 +1072,7 @@ begin ) then begin Writeln('USAGE:'); - Writeln('RDPWInst.exe [-l|-i[-s][-o]|-w|-u|-r]'); + Writeln('RDPWInst.exe [-l|-i[-s][-o]|-w|-u[-k]|-r]'); Writeln(''); Writeln('-l display the license agreement'); Writeln('-i install wrapper to Program Files folder (default)'); @@ -1080,6 +1080,7 @@ begin Writeln('-i -o online install mode (loads latest INI file)'); Writeln('-w get latest update for INI file'); Writeln('-u uninstall wrapper'); + Writeln('-u -k uninstall wrapper and keep settings'); Writeln('-r force restart Terminal Services'); Exit; end; @@ -1188,10 +1189,13 @@ begin SvcStart(TermService); Sleep(500); - Writeln('[*] Configuring registry...'); - TSConfigRegistry(False); - Writeln('[*] Configuring firewall...'); - TSConfigFirewall(False); + if ParamStr(2) <> '-k' then + begin + Writeln('[*] Configuring registry...'); + TSConfigRegistry(False); + Writeln('[*] Configuring firewall...'); + TSConfigFirewall(False); + end; if Arch = 64 then RevertWowRedirection; From 2d482b29be3a5f9aa1c4e88bf4d1b7495d3b7670 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 23 Jul 2016 19:56:58 +0300 Subject: [PATCH 123/208] RDPConf: Update firewall rule on port change (fix #86) --- src-rdpconfig/MainUnit.pas | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index d8608cb..3375c65 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -1,5 +1,5 @@ { - Copyright 2015 Stas'M Corp. + Copyright 2016 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -61,6 +61,7 @@ type { Private declarations } public { Public declarations } + function ExecWait(Cmdline: String): Boolean; procedure ReadSettings; procedure WriteSettings; end; @@ -89,6 +90,7 @@ var Ready: Boolean = False; Arch: Byte; OldWow64RedirectionValue: LongBool; + OldPort: Word; INI: String; function WinStationEnumerateW(hServer: THandle; @@ -329,6 +331,29 @@ begin Str.Free; end; +function TMainForm.ExecWait(Cmdline: String): Boolean; +var + si: STARTUPINFO; + pi: PROCESS_INFORMATION; +begin + Result := False; + ZeroMemory(@si, sizeof(si)); + si.cb := sizeof(si); + si.dwFlags := STARTF_USESHOWWINDOW; + si.wShowWindow := SW_HIDE; + UniqueString(Cmdline); + if not CreateProcess(nil, PWideChar(Cmdline), nil, nil, True, 0, nil, nil, si, pi) then begin + MessageBox(Handle, + PWideChar('CreateProcess error (code: ' + IntToStr(GetLastError) + ').'), + 'Error', MB_ICONERROR or MB_OK); + Exit; + end; + CloseHandle(pi.hThread); + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hProcess); + Result := True; +end; + procedure TMainForm.ReadSettings; var Reg: TRegistry; @@ -356,6 +381,7 @@ begin except end; + OldPort := seRDPPort.Value; SecurityLayer := 0; UserAuthentication := 0; try @@ -404,6 +430,11 @@ begin Reg.WriteInteger('PortNumber', seRDPPort.Value); except + end; + if OldPort <> seRDPPort.Value then + begin + OldPort := seRDPPort.Value; + ExecWait('netsh advfirewall firewall set rule name="Remote Desktop" new localport=' + IntToStr(OldPort)); end; case rgNLA.ItemIndex of 0: begin From 3edd0e5300aeddc5078c19088613b6ee96f4fabf Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 23 Jul 2016 22:08:44 +0300 Subject: [PATCH 124/208] RDPConf: Add feature to hide users on logon --- src-rdpconfig/MainUnit.dfm | 161 ++++++++++++++++++++----------------- src-rdpconfig/MainUnit.pas | 16 ++++ 2 files changed, 105 insertions(+), 72 deletions(-) diff --git a/src-rdpconfig/MainUnit.dfm b/src-rdpconfig/MainUnit.dfm index d67ee28..7361f19 100644 --- a/src-rdpconfig/MainUnit.dfm +++ b/src-rdpconfig/MainUnit.dfm @@ -3,8 +3,8 @@ object MainForm: TMainForm Top = 0 BorderStyle = bsDialog Caption = 'RDP Wrapper Configuration' - ClientHeight = 352 - ClientWidth = 351 + ClientHeight = 314 + ClientWidth = 404 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -18,78 +18,53 @@ object MainForm: TMainForm OnDestroy = FormDestroy PixelsPerInch = 96 TextHeight = 13 - object lRDPPort: TLabel - Left = 225 - Top = 103 - Width = 47 - Height = 13 - Caption = 'RDP Port:' - end object bOK: TButton - Left = 10 - Top = 319 + Left = 40 + Top = 281 Width = 75 Height = 25 Caption = 'OK' ModalResult = 1 - TabOrder = 0 + TabOrder = 4 OnClick = bOKClick end object bCancel: TButton - Left = 91 - Top = 319 + Left = 121 + Top = 281 Width = 75 Height = 25 Caption = 'Cancel' ModalResult = 2 - TabOrder = 1 + TabOrder = 5 OnClick = bCancelClick end object bApply: TButton - Left = 172 - Top = 319 + Left = 202 + Top = 281 Width = 75 Height = 25 Caption = 'Apply' Enabled = False - TabOrder = 2 + TabOrder = 6 OnClick = bApplyClick end - object cbSingleSessionPerUser: TCheckBox - Left = 8 - Top = 112 - Width = 130 - Height = 17 - Caption = 'Single Session Per User' - TabOrder = 3 - OnClick = cbAllowTSConnectionsClick - end object rgNLA: TRadioGroup - Left = 8 - Top = 132 - Width = 335 - Height = 73 - Caption = 'Security Mode' - Items.Strings = ( - 'Disable Security (not recommended)' - 'Default Authentication (compatibility with older clients)' - 'Network Level Authentication (best)') - TabOrder = 4 - OnClick = cbAllowTSConnectionsClick - end - object cbAllowTSConnections: TCheckBox - Left = 8 + Left = 202 Top = 89 - Width = 174 - Height = 17 - Caption = 'Enable Remote Desktop Protocol' - TabOrder = 5 + Width = 194 + Height = 73 + Caption = 'Authentication Mode' + Items.Strings = ( + 'GUI Authentication Only' + 'Default RDP Authentication' + 'Network Level Authentication') + TabOrder = 2 OnClick = cbAllowTSConnectionsClick end object rgShadow: TRadioGroup - Left = 8 - Top = 208 - Width = 335 + Left = 202 + Top = 168 + Width = 194 Height = 105 Caption = 'Session Shadowing Mode' Items.Strings = ( @@ -98,36 +73,25 @@ object MainForm: TMainForm 'Full access without permission' 'View only with user'#39's permission' 'View only without permission') - TabOrder = 6 + TabOrder = 3 OnClick = cbAllowTSConnectionsClick end - object seRDPPort: TSpinEdit - Left = 278 - Top = 100 - Width = 62 - Height = 22 - MaxValue = 65535 - MinValue = 0 - TabOrder = 7 - Value = 0 - OnChange = seRDPPortChange - end object bLicense: TButton - Left = 253 - Top = 319 + Left = 283 + Top = 281 Width = 87 Height = 25 Caption = 'View license...' - TabOrder = 8 + TabOrder = 7 OnClick = bLicenseClick end object gbDiag: TGroupBox Left = 8 Top = 6 - Width = 335 + Width = 388 Height = 77 Caption = 'Diagnostics' - TabOrder = 9 + TabOrder = 0 object lListener: TLabel Left = 11 Top = 55 @@ -157,7 +121,7 @@ object MainForm: TMainForm Caption = 'Unknown' end object lsTSVer: TLabel - Left = 206 + Left = 226 Top = 36 Width = 44 Height = 13 @@ -171,14 +135,14 @@ object MainForm: TMainForm Caption = 'Unknown' end object lsWrapVer: TLabel - Left = 206 + Left = 226 Top = 17 Width = 44 Height = 13 Caption = 'Unknown' end object lTSVer: TLabel - Left = 182 + Left = 202 Top = 36 Width = 20 Height = 13 @@ -192,24 +156,77 @@ object MainForm: TMainForm Caption = 'Wrapper state:' end object lWrapVer: TLabel - Left = 182 + Left = 202 Top = 17 Width = 20 Height = 13 Caption = 'ver.' end object lsSuppVer: TLabel - Left = 182 + Left = 202 Top = 55 Width = 70 Height = 13 Caption = '[support level]' end end + object gbGeneral: TGroupBox + Left = 8 + Top = 89 + Width = 188 + Height = 184 + Caption = 'General Settings' + TabOrder = 1 + object lRDPPort: TLabel + Left = 8 + Top = 44 + Width = 47 + Height = 13 + Caption = 'RDP port:' + end + object cbAllowTSConnections: TCheckBox + Left = 8 + Top = 18 + Width = 132 + Height = 17 + Caption = 'Enable Remote Desktop' + TabOrder = 0 + OnClick = cbAllowTSConnectionsClick + end + object cbSingleSessionPerUser: TCheckBox + Left = 8 + Top = 69 + Width = 129 + Height = 17 + Caption = 'Single session per user' + TabOrder = 2 + OnClick = cbAllowTSConnectionsClick + end + object cbHideUsers: TCheckBox + Left = 8 + Top = 92 + Width = 149 + Height = 17 + Caption = 'Hide users on logon screen' + TabOrder = 3 + OnClick = cbAllowTSConnectionsClick + end + object seRDPPort: TSpinEdit + Left = 61 + Top = 41 + Width = 62 + Height = 22 + MaxValue = 65535 + MinValue = 0 + TabOrder = 1 + Value = 0 + OnChange = seRDPPortChange + end + end object Timer: TTimer Interval = 250 OnTimer = TimerTimer - Left = 280 - Top = 19 + Left = 352 + Top = 27 end end diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index 3375c65..c6841d0 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -47,6 +47,8 @@ type bLicense: TButton; gbDiag: TGroupBox; lsSuppVer: TLabel; + cbHideUsers: TCheckBox; + gbGeneral: TGroupBox; procedure FormCreate(Sender: TObject); procedure cbAllowTSConnectionsClick(Sender: TObject); procedure seRDPPortChange(Sender: TObject); @@ -400,6 +402,13 @@ begin rgShadow.ItemIndex := Reg.ReadInteger('Shadow'); except + end; + Reg.CloseKey; + Reg.OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'); + try + cbHideUsers.Checked := Reg.ReadBool('dontdisplaylastusername'); + except + end; Reg.CloseKey; Reg.Free; @@ -477,6 +486,13 @@ begin except end; + end; + Reg.CloseKey; + Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System', True); + try + Reg.WriteBool('dontdisplaylastusername', cbHideUsers.Checked); + except + end; Reg.CloseKey; Reg.Free; From 0e9385490b8211450bdcb35375116cfed05a7f6f Mon Sep 17 00:00:00 2001 From: Stas'M Date: Sun, 24 Jul 2016 01:11:25 +0300 Subject: [PATCH 125/208] README: Replace HTML with Markdown --- README.md | 568 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 299 insertions(+), 269 deletions(-) diff --git a/README.md b/README.md index 8f1f966..e1add70 100644 --- a/README.md +++ b/README.md @@ -1,269 +1,299 @@ -RDP Wrapper Library by Stas'M
-
-The goal of this project is to enable Remote Desktop Host support and concurrent RDP sessions on reduced functionality systems for home usage.
-
-RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update.
-
-Screenshots:
-

-  -  -  -  -  -  -  -  -  -  -  -  -  -

-This solution was inspired by Windows Product Policy Editor, big thanks to kost :)
-- binarymaster
-
-Attention:
-It's recommended to have original termsrv.dll file with the RDP Wrapper installation. If you have modified it before with other patchers, it may become unstable and crash in any moment.
-
-Information:
-• Source code is available, so you can build it on your own
-• RDP Wrapper does not patch termsrv.dll, it loads termsrv with different parameters
-• RDPWInst and RDPChecker can be redistributed without development folder and batch files
-• RDPWInst can be used for unattended installation / deployment
-• Windows 2000, XP and Server 2003 will not be supported
-
-Porting to other platforms:
-• ARM for Windows RT (see links below)
-• IA-64 for Itanium-based Windows Server? Well, I have no idea :)
-
-Building the binaries:
-• x86 Delphi version can be built with Embarcadero RAD Studio 2010
-• x86/x64 C++ version can be built with Microsoft Visual Studio 2013
-
-Links:
-• Official GitHub repository:
-https://github.com/stascorp/rdpwrap/
-• Active discussion in the comments here:
-Enable remote desktop on Windows 8 core / basic - Andrew Block .net
-• MDL Projects and Applications thread here:
-RDP Wrapper Library (works with Windows 8.1 Basic)
-• Some ideas about porting to ARM for Windows RT (post #23):
-[Q] Mod Windows RT to enable Remote Desktop
-• Adding «Remote Desktop Users» group:
-http://superuser.com/questions/680572/
-
-Tutorial videos:
-• Updating RDP Wrapper INI file manually (now use installer to update INI file)
-• How to find offsets for new termsrv.dll versions
-
-Files description:
-
- - - - - - - - - -
RDPWInst.exeRDP Wrapper Library installer/uninstaller
RDPCheck.exeLocal RDP Checker (you can check the RDP is working)
RDPConf.exeRDP Wrapper Configuration
install.batQuick install batch file
uninstall.batQuick uninstall batch file
update.batQuick update batch file

-Change log:
-
-2015.08.12
-• Version 1.6
-• Added support for Windows 10
-• INI file has smaller size now - all comments are moved to KB file
-• Installer updated
-• Added workaround for 1056 error (although it isn't an error)
-• Added update support to installer
-• Newest RDPClip versions are included with installer
-• RDP Checker updated
-• Changed connect IP to 127.0.0.2
-• Updated some text messages
-• RDP Config updated
-• Added all possible shadowing modes
-• Also it will write settings to the group policy
-
-2014.12.11
-• Version 1.5
-• Added INI config support
-• Configuration is stored in INI file now
-• We can extend version support without building new binaries
-• Added support for Windows 8.1 with KB3000850
-• Added support for Windows 10 Technical Preview Update 2
-• Installer updated
-• RDP Config updated
-• Diagnostics feature added to RDP Config
-
-2014.11.14
-• Version 1.4
-• Added support for Windows 10 Technical Preview Update 1
-• Added support for Windows Vista SP2 with KB3003743
-• Added support for Windows 7 SP1 with KB3003743
-• Added new RDP Configuration Program
-
-2014.10.21
-• Installer updated
-• Added feature to install RDP Wrapper to System32 directory
-• Fixed issue in the installer - NLA setting now remains unchanged
-• Local RDP Checker updated
-• SecurityLayer and UserAuthentification values changed on check start
-• RDP Checker restores values on exit
-
-2014.10.20
-• Version 1.3
-• Added support for Windows 10 Technical Preview
-• Added support for Windows 7 with KB2984972
-• Added support for Windows 8 with KB2973501
-• Added extended support for Windows Vista (SP0, SP1 and SP2)
-• Added extended support for Windows 7 (SP0 and SP1)
-• Some improvements in the source code
-• Installer updated to v2.2
-• Fixed installation bug in Vista x64 (wrong expand path)
-• Local RDP Checker updated
-• Added description to error 0x708
-
-2014.07.26
-• Version 1.2
-• Added support for Windows 8 Developer Preview
-• Added support for Windows 8 Consumer Preview
-• Added support for Windows 8 Release Preview
-• Added support for Windows 8.1 Preview
-• Added support for Windows 8.1
-• More details you will see in the source code
-• Installer updated to v2.1
-
-2013.12.09
-• C++ port of RDP Wrapper was made by Fusix
-• x64 architecture is supported now
-• Added new command line installer v2.0
-• Added local RDP checker
-• Source code (C++ port, installer 2.0, local RDP checker) is also included
-
-2013.10.25
-• Version 1.1 source code is available
-
-2013.10.22
-• Version 1.1
-• Stable release
-• Improved wrapper (now it can wrap internal unexported termsrv.dll SL Policy function)
-• Added support for Windows 8 Single Language (tested on Acer Tablet PC with Intel Atom Z2760)
-
-2013.10.19
-• Version 1.0
-• First [beta] version
-• Basic SL Policy wrapper
-
-Supported Terminal Services versions:
-• 6.0.X.X (Windows Vista / Server 2008)
-• 6.0.6000.16386 (Windows Vista)
-• 6.0.6001.18000 (Windows Vista SP1)
-• 6.0.6002.18005 (Windows Vista SP2)
-• 6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR)
-• 6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR)
-• 6.1.X.X (Windows 7 / Server 2008 R2)
-• 6.1.7600.16385 (Windows 7)
-• 6.1.7601.17514 (Windows 7 SP1)
-• 6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR)
-• 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR)
-• 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR)
-• 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR)
-• 6.2.8102.0 (Windows 8 Developer Preview)
-• 6.2.8250.0 (Windows 8 Consumer Preview)
-• 6.2.8400.0 (Windows 8 Release Preview)
-• 6.2.9200.16384 (Windows 8 / Server 2012)
-• 6.2.9200.17048 (Windows 8 with KB2973501 GDR)
-• 6.2.9200.21166 (Windows 8 with KB2973501 LDR)
-• 6.3.9431.0 (Windows 8.1 Preview)
-• 6.3.9600.16384 (Windows 8.1 / Server 2012 R2)
-• 6.3.9600.17095 (Windows 8.1 with KB2959626)
-• 6.3.9600.17415 (Windows 8.1 with KB3000850)
-• 6.4.9841.0 (Windows 10 Technical Preview)
-• 6.4.9860.0 (Windows 10 Technical Preview Update 1)
-• 6.4.9879.0 (Windows 10 Technical Preview Update 2)
-• 10.0.9926.0 (Windows 10 Pro Technical Preview)
-• 10.0.10041.0 (Windows 10 Pro Technical Preview Update 1)
-• 10.0.10240.16384 (Windows 10 RTM)
-• 10.0.10586.0 (Windows 10 TH2 Release 151029-1700)
-• 10.0.11082.1000 (Windows 10 RS1 Release 151210-2021)
-• 10.0.11102.1000 (Windows 10 RS1 Release 160113-1800)
-• 10.0.14251.1000 (Windows 10 RS1 Release 160124-1059)
-• 10.0.14271.1000 (Windows 10 RS1 Release 160218-2310)
-• 10.0.14279.1000 (Windows 10 RS1 Release 160229-1700)
-• 10.0.14295.1000 (Windows 10 RS1 Release 160318-1628)
-• 10.0.14300.1000 (Windows Server 2016 Technical Preview 5)
-• 10.0.14316.1000 (Windows 10 RS1 Release 160402-2227)
-• 10.0.14328.1000 (Windows 10 RS1 Release 160418-1609)
-• 10.0.14332.1001 (Windows 10 RS1 Release 160422-1940)
-• 10.0.14342.1000 (Windows 10 RS1 Release 160506-1708)
-• 10.0.14352.1002 (Windows 10 RS1 Release 160522-1930)
-• 10.0.14366.0 (Windows 10 RS1 Release 160610-1700)
-• 10.0.14367.0 (Windows 10 RS1 Release 160613-1700)
-• 10.0.14372.0 (Windows 10 RS1 Release 160620-2342)
-• 10.0.14379.0 (Windows 10 RS1 Release 160627-1607)
-• 10.0.14383.0 (Windows 10 RS1 Release 160701-1839)
-• 10.0.14388.0 (Windows 10 RS1 Release 160709-1635)
-• 10.0.14393.0 (Windows 10 RS1 Release 160715-1616)
-
-Confirmed working on:
-• Windows Vista Starter (x86 - Service Pack 1 and higher)
-• Windows Vista Home Basic
-• Windows Vista Home Premium
-• Windows Vista Business
-• Windows Vista Enterprise
-• Windows Vista Ultimate
-• Windows Server 2008
-• Windows 7 Starter
-• Windows 7 Home Basic
-• Windows 7 Home Premium
-• Windows 7 Professional
-• Windows 7 Enterprise
-• Windows 7 Ultimate
-• Windows Server 2008 R2
-• Windows 8 Developer Preview
-• Windows 8 Consumer Preview
-• Windows 8 Release Preview
-• Windows 8
-• Windows 8 Single Language
-• Windows 8 Pro
-• Windows 8 Enterprise
-• Windows Server 2012
-• Windows 8.1 Preview
-• Windows 8.1
-• Windows 8.1 Connected (with Bing)
-• Windows 8.1 Single Language
-• Windows 8.1 Connected Single Language (with Bing)
-• Windows 8.1 Pro
-• Windows 8.1 Enterprise
-• Windows Server 2012 R2
-• Windows 10 Technical Preview
-• Windows 10 Pro Technical Preview
-• Windows 10 Home
-• Windows 10 Home Single Language
-• Windows 10 Pro
-• Windows 10 Enterprise
-• Windows Server 2016 Technical Preview
-
-Known issues:
-• Beginning with Windows 8 (non-server editions) you can't connect to existing sessions (they will be logged out by system) - more info
-• Beginning with Windows 10 you can accidentally lock yourself from PC - more info
-• RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386)
-• If Terminal Services hangs at startup, try to add rdpwrap.dll to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
-sc config TermService type= own
-• RDP Wrapper Installer can be removed by AVG Free Antivirus after reboot - add it to exclusions.
-
-Installation instructions:
-1. Download latest release binaries and unpack files
-2. Right-click on install.bat and select Run as Administrator
-3. See command output for details
-
-To update INI file:
-1. Right-click on update.bat and select Run as Administrator
-2. See command output for details
-
-To uninstall:
-1. Go to the directory where you extracted the files
-2. Right-click on uninstall.bat and select Run as Administrator
-3. See command output for details
+# RDP Wrapper Library by Stas'M + +The goal of this project is to enable Remote Desktop Host support and concurrent RDP sessions on reduced functionality systems for home usage. + +RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update. + +Screenshots: + +[pVistaST]: http://stascorp.com/images/rdpwrap/pVistaST.jpg +[pVistaHB]: http://stascorp.com/images/rdpwrap/pVistaHB.jpg +[pWin7ST]: http://stascorp.com/images/rdpwrap/pWin7ST.jpg +[pWin7HB]: http://stascorp.com/images/rdpwrap/pWin7HB.jpg +[pWin8DP]: http://stascorp.com/images/rdpwrap/pWin8DP.jpg +[pWin8CP]: http://stascorp.com/images/rdpwrap/pWin8CP.jpg +[pWin8RP]: http://stascorp.com/images/rdpwrap/pWin8RP.jpg +[pWin8]: http://stascorp.com/images/rdpwrap/pWin8.jpg +[pWin81P]: http://stascorp.com/images/rdpwrap/pWin81P.jpg +[pWin81]: http://stascorp.com/images/rdpwrap/pWin81.jpg +[pWin10TP]: http://stascorp.com/images/rdpwrap/pWin10TP.jpg +[pWin10PTP]: http://stascorp.com/images/rdpwrap/pWin10PTP.jpg +[pWin10]: http://stascorp.com/images/rdpwrap/pWin10.jpg + +[fVistaST]: http://stascorp.com/images/rdpwrap/VistaST.png +[fVistaHB]: http://stascorp.com/images/rdpwrap/VistaHB.png +[fWin7ST]: http://stascorp.com/images/rdpwrap/Win7ST.png +[fWin7HB]: http://stascorp.com/images/rdpwrap/Win7HB.png +[fWin8DP]: http://stascorp.com/images/rdpwrap/Win8DP.png +[fWin8CP]: http://stascorp.com/images/rdpwrap/Win8CP.png +[fWin8RP]: http://stascorp.com/images/rdpwrap/Win8RP.png +[fWin8]: http://stascorp.com/images/rdpwrap/Win8.png +[fWin81P]: http://stascorp.com/images/rdpwrap/Win81P.png +[fWin81]: http://stascorp.com/images/rdpwrap/Win81.png +[fWin10TP]: http://stascorp.com/images/rdpwrap/Win10TP.png +[fWin10PTP]: http://stascorp.com/images/rdpwrap/Win10PTP.png +[fWin10]: http://stascorp.com/images/rdpwrap/Win10.png + +| NT Version | Screenshots | +| ------------- | ----------- | +| Windows Vista | [![Windows Vista Starter][pVistaST]][fVistaST] [![Windows Vista Home Basic][pVistaHB]][fVistaHB] | +| Windows 7 | [![Windows 7 Starter][pWin7ST]][fWin7ST] [![Windows 7 Home Basic][pWin7HB]][fWin7HB] | +| Windows 8 | [![Windows 8 Developer Preview][pWin8DP]][fWin8DP] [![Windows 8 Consumer Preview][pWin8CP]][fWin8CP] [![Windows 8 Release Preview][pWin8RP]][fWin8RP] [![Windows 8][pWin8]][fWin8] | +| Windows 8.1 | [![Windows 8.1 Preview][pWin81P]][fWin81P] [![Windows 8.1][pWin81]][fWin81] | +| Windows 10 | [![Windows 10 Technical Preview][pWin10TP]][fWin10TP] [![Windows 10 Pro Technical Preview][pWin10PTP]][fWin10PTP] [![Windows 10][pWin10]][fWin10] | +--- +[WinPPE]: http://forums.mydigitallife.info/threads/39411-Windows-Product-Policy-Editor + +This solution was inspired by [Windows Product Policy Editor][WinPPE], big thanks to **kost** :) + +— binarymaster + +### Attention: +It's recommended to have original termsrv.dll file with the RDP Wrapper installation. If you have modified it before with other patchers, it may become unstable and crash in any moment. + +### Information: +- Source code is available, so you can build it on your own +- RDP Wrapper does not patch termsrv.dll, it loads termsrv with different parameters +- RDPWInst and RDPChecker can be redistributed without development folder and batch files +- RDPWInst can be used for unattended installation / deployment +- Windows 2000, XP and Server 2003 will not be supported + +### Porting to other platforms: +- **ARM** for Windows RT (see links below) +- **IA-64** for Itanium-based Windows Server? *Well, I have no idea* :) + +### Building the binaries: +- **x86 Delphi version** can be built with *Embarcadero RAD Studio 2010* +- **x86/x64 C++ version** can be built with *Microsoft Visual Studio 2013* + +[andrewblock]: http://andrewblock.net/2013/07/19/enable-remote-desktop-on-windows-8-core/ +[mydigitallife]: http://forums.mydigitallife.info/threads/55935-RDP-Wrapper-Library-(works-with-Windows-8-1-Basic) +[xda-dev]: http://forum.xda-developers.com/showthread.php?t=2093525&page=3 +[yt-updating]: http://www.youtube.com/watch?v=W9BpbEt1yJw +[yt-offsets]: http://www.youtube.com/watch?v=FiD86tmRBtk + +### Links: +- Official GitHub repository: +https://github.com/stascorp/rdpwrap/ +- Active discussion in the comments here: +[Enable remote desktop on Windows 8 core / basic - Andrew Block .net][andrewblock] +- MDL Projects and Applications thread here: +[RDP Wrapper Library (works with Windows 8.1 Basic)][mydigitallife] +- Some ideas about porting to ARM for Windows RT (post #23): +[\[Q\] Mod Windows RT to enable Remote Desktop][xda-dev] +- Adding «Remote Desktop Users» group: +http://superuser.com/questions/680572/ + +### Tutorial videos: +- [~~Updating RDP Wrapper INI file manually~~][yt-updating] (now use installer to update INI file) +- [How to find offsets for new termsrv.dll versions][yt-offsets] + +Files in release package: + +| File name | Description | +| --------- | ----------- | +| `RDPWInst.exe` | RDP Wrapper Library installer/uninstaller | +| `RDPCheck.exe` | Local RDP Checker (you can check the RDP is working) | +| `RDPConf.exe` | RDP Wrapper Configuration | +| `install.bat` | Quick install batch file | +| `uninstall.bat` | Quick uninstall batch file | +| `update.bat` | Quick update batch file | + +Change log: + +#### 2015.08.12 +- Version 1.6 +- Added support for Windows 10 +- INI file has smaller size now - all comments are moved to KB file +- Installer updated +- Added workaround for 1056 error (although it isn't an error) +- Added update support to installer +- Newest RDPClip versions are included with installer +- RDP Checker updated +- Changed connect IP to 127.0.0.2 +- Updated some text messages +- RDP Config updated +- Added all possible shadowing modes +- Also it will write settings to the group policy + +#### 2014.12.11 +- Version 1.5 +- Added INI config support +- Configuration is stored in INI file now +- We can extend version support without building new binaries +- Added support for Windows 8.1 with KB3000850 +- Added support for Windows 10 Technical Preview Update 2 +- Installer updated +- RDP Config updated +- Diagnostics feature added to RDP Config + +#### 2014.11.14 +- Version 1.4 +- Added support for Windows 10 Technical Preview Update 1 +- Added support for Windows Vista SP2 with KB3003743 +- Added support for Windows 7 SP1 with KB3003743 +- Added new RDP Configuration Program + +#### 2014.10.21 +- Installer updated +- Added feature to install RDP Wrapper to System32 directory +- Fixed issue in the installer - NLA setting now remains unchanged +- Local RDP Checker updated +- SecurityLayer and UserAuthentification values changed on check start +- RDP Checker restores values on exit + +#### 2014.10.20 +- Version 1.3 +- Added support for Windows 10 Technical Preview +- Added support for Windows 7 with KB2984972 +- Added support for Windows 8 with KB2973501 +- Added extended support for Windows Vista (SP0, SP1 and SP2) +- Added extended support for Windows 7 (SP0 and SP1) +- Some improvements in the source code +- Installer updated to v2.2 +- Fixed installation bug in Vista x64 (wrong expand path) +- Local RDP Checker updated +- Added description to error 0x708 + +#### 2014.07.26 +- Version 1.2 +- Added support for Windows 8 Developer Preview +- Added support for Windows 8 Consumer Preview +- Added support for Windows 8 Release Preview +- Added support for Windows 8.1 Preview +- Added support for Windows 8.1 +- More details you will see in the source code +- Installer updated to v2.1 + +#### 2013.12.09 +- C++ port of RDP Wrapper was made by Fusix +- x64 architecture is supported now +- Added new command line installer v2.0 +- Added local RDP checker +- Source code (C++ port, installer 2.0, local RDP checker) is also included + +#### 2013.10.25 +- Version 1.1 source code is available + +#### 2013.10.22 +- Version 1.1 +- Stable release +- Improved wrapper (now it can wrap internal unexported termsrv.dll SL Policy function) +- Added support for Windows 8 Single Language (tested on Acer Tablet PC with Intel Atom Z2760) + +#### 2013.10.19 +- Version 1.0 +- First [beta] version +- Basic SL Policy wrapper + +### Supported Terminal Services versions: +- 6.0.X.X (Windows Vista / Server 2008) +- 6.0.6000.16386 (Windows Vista) +- 6.0.6001.18000 (Windows Vista SP1) +- 6.0.6002.18005 (Windows Vista SP2) +- 6.0.6002.19214 (Windows Vista SP2 with KB3003743 GDR) +- 6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) +- 6.1.X.X (Windows 7 / Server 2008 R2) +- 6.1.7600.16385 (Windows 7) +- 6.1.7601.17514 (Windows 7 SP1) +- 6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) +- 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) +- 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) +- 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) +- 6.2.8102.0 (Windows 8 Developer Preview) +- 6.2.8250.0 (Windows 8 Consumer Preview) +- 6.2.8400.0 (Windows 8 Release Preview) +- 6.2.9200.16384 (Windows 8 / Server 2012) +- 6.2.9200.17048 (Windows 8 with KB2973501 GDR) +- 6.2.9200.21166 (Windows 8 with KB2973501 LDR) +- 6.3.9431.0 (Windows 8.1 Preview) +- 6.3.9600.16384 (Windows 8.1 / Server 2012 R2) +- 6.3.9600.17095 (Windows 8.1 with KB2959626) +- 6.3.9600.17415 (Windows 8.1 with KB3000850) +- 6.4.9841.0 (Windows 10 Technical Preview) +- 6.4.9860.0 (Windows 10 Technical Preview Update 1) +- 6.4.9879.0 (Windows 10 Technical Preview Update 2) +- 10.0.9926.0 (Windows 10 Pro Technical Preview) +- 10.0.10041.0 (Windows 10 Pro Technical Preview Update 1) +- 10.0.10240.16384 (Windows 10 RTM) +- 10.0.10586.0 (Windows 10 TH2 Release 151029-1700) +- 10.0.11082.1000 (Windows 10 RS1 Release 151210-2021) +- 10.0.11102.1000 (Windows 10 RS1 Release 160113-1800) +- 10.0.14251.1000 (Windows 10 RS1 Release 160124-1059) +- 10.0.14271.1000 (Windows 10 RS1 Release 160218-2310) +- 10.0.14279.1000 (Windows 10 RS1 Release 160229-1700) +- 10.0.14295.1000 (Windows 10 RS1 Release 160318-1628) +- 10.0.14300.1000 (Windows Server 2016 Technical Preview 5) +- 10.0.14316.1000 (Windows 10 RS1 Release 160402-2227) +- 10.0.14328.1000 (Windows 10 RS1 Release 160418-1609) +- 10.0.14332.1001 (Windows 10 RS1 Release 160422-1940) +- 10.0.14342.1000 (Windows 10 RS1 Release 160506-1708) +- 10.0.14352.1002 (Windows 10 RS1 Release 160522-1930) +- 10.0.14366.0 (Windows 10 RS1 Release 160610-1700) +- 10.0.14367.0 (Windows 10 RS1 Release 160613-1700) +- 10.0.14372.0 (Windows 10 RS1 Release 160620-2342) +- 10.0.14379.0 (Windows 10 RS1 Release 160627-1607) +- 10.0.14383.0 (Windows 10 RS1 Release 160701-1839) +- 10.0.14388.0 (Windows 10 RS1 Release 160709-1635) +- 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) + +### Confirmed working on: +- Windows Vista Starter (x86 - Service Pack 1 and higher) +- Windows Vista Home Basic +- Windows Vista Home Premium +- Windows Vista Business +- Windows Vista Enterprise +- Windows Vista Ultimate +- Windows Server 2008 +- Windows 7 Starter +- Windows 7 Home Basic +- Windows 7 Home Premium +- Windows 7 Professional +- Windows 7 Enterprise +- Windows 7 Ultimate +- Windows Server 2008 R2 +- Windows 8 Developer Preview +- Windows 8 Consumer Preview +- Windows 8 Release Preview +- Windows 8 +- Windows 8 Single Language +- Windows 8 Pro +- Windows 8 Enterprise +- Windows Server 2012 +- Windows 8.1 Preview +- Windows 8.1 +- Windows 8.1 Connected (with Bing) +- Windows 8.1 Single Language +- Windows 8.1 Connected Single Language (with Bing) +- Windows 8.1 Pro +- Windows 8.1 Enterprise +- Windows Server 2012 R2 +- Windows 10 Technical Preview +- Windows 10 Pro Technical Preview +- Windows 10 Home +- Windows 10 Home Single Language +- Windows 10 Pro +- Windows 10 Enterprise +- Windows Server 2016 Technical Preview + +### Known issues: +- Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) +- Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) +- RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386) +- If Terminal Services hangs at startup, try to add **`rdpwrap.dll`** to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command: +`sc config TermService type= own` +- RDP Wrapper Installer can be removed by AVG Free Antivirus after reboot - add it to exclusions. + +Installation instructions: +- Download latest release binaries and unpack files +- Right-click on **`install.bat`** and select Run as Administrator +- See command output for details + +To update INI file: +- Right-click on **`update.bat`** and select Run as Administrator +- See command output for details + +To uninstall: +- Go to the directory where you extracted the files +- Right-click on **`uninstall.bat`** and select Run as Administrator +- See command output for details From 1254ac3b3b30c05566341a7545b3c3327a7e90ef Mon Sep 17 00:00:00 2001 From: Stas'M Date: Sun, 24 Jul 2016 01:21:30 +0300 Subject: [PATCH 126/208] README: Quick fixes --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e1add70..495c2b2 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ The goal of this project is to enable Remote Desktop Host support and concurrent RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update. -Screenshots: - [pVistaST]: http://stascorp.com/images/rdpwrap/pVistaST.jpg [pVistaHB]: http://stascorp.com/images/rdpwrap/pVistaHB.jpg [pWin7ST]: http://stascorp.com/images/rdpwrap/pWin7ST.jpg @@ -74,15 +72,15 @@ It's recommended to have original termsrv.dll file with the RDP Wrapper installa ### Links: - Official GitHub repository: -https://github.com/stascorp/rdpwrap/ +
https://github.com/stascorp/rdpwrap/ - Active discussion in the comments here: -[Enable remote desktop on Windows 8 core / basic - Andrew Block .net][andrewblock] +
[Enable remote desktop on Windows 8 core / basic - Andrew Block .net][andrewblock] - MDL Projects and Applications thread here: -[RDP Wrapper Library (works with Windows 8.1 Basic)][mydigitallife] +
[RDP Wrapper Library (works with Windows 8.1 Basic)][mydigitallife] - Some ideas about porting to ARM for Windows RT (post #23): -[\[Q\] Mod Windows RT to enable Remote Desktop][xda-dev] +
[\[Q\] Mod Windows RT to enable Remote Desktop][xda-dev] - Adding «Remote Desktop Users» group: -http://superuser.com/questions/680572/ +
http://superuser.com/questions/680572/ ### Tutorial videos: - [~~Updating RDP Wrapper INI file manually~~][yt-updating] (now use installer to update INI file) @@ -186,7 +184,9 @@ Change log: - First [beta] version - Basic SL Policy wrapper -### Supported Terminal Services versions: +--- + +#### Supported Terminal Services versions: - 6.0.X.X (Windows Vista / Server 2008) - 6.0.6000.16386 (Windows Vista) - 6.0.6001.18000 (Windows Vista SP1) @@ -237,7 +237,7 @@ Change log: - 10.0.14388.0 (Windows 10 RS1 Release 160709-1635) - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) -### Confirmed working on: +#### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) - Windows Vista Home Basic - Windows Vista Home Premium @@ -276,12 +276,12 @@ Change log: - Windows 10 Enterprise - Windows Server 2016 Technical Preview -### Known issues: +#### Known issues: - Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) - Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) -- RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll 6.0.6000.16386) +- RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) - If Terminal Services hangs at startup, try to add **`rdpwrap.dll`** to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command: -`sc config TermService type= own` +
`sc config TermService type= own` - RDP Wrapper Installer can be removed by AVG Free Antivirus after reboot - add it to exclusions. Installation instructions: From e45fde37c264698b12aae4cb2fd005e29106b2a2 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 1 Aug 2016 16:32:00 +0300 Subject: [PATCH 127/208] Pre-release updates --- README.md | 36 ++++++++++++++++++++++++++++++++++++ src-installer/resource.res | Bin 973380 -> 996464 bytes src-rdpconfig/resource.res | Bin 12936 -> 12936 bytes technical.txt | 9 +++++++++ 4 files changed, 45 insertions(+) diff --git a/README.md b/README.md index 495c2b2..c0f7345 100644 --- a/README.md +++ b/README.md @@ -97,8 +97,44 @@ Files in release package: | `uninstall.bat` | Quick uninstall batch file | | `update.bat` | Quick update batch file | +### Frequently Asked Questions + +> Where can I download the installer or binaries? + +In the [GitHub Releases](https://github.com/stascorp/rdpwrap/releases) section. + +> Is it legal to use this application? + +There is no definitive answer, see [this discussion](https://github.com/stascorp/rdpwrap/issues/26). + +> The installer tries to access the Internet, is it normal behaviour? + +Yes, it works in online mode by default. You may disable it by removing `-o` flag in the `install.bat` file. + +> Config Tool reports version 1.5, but I installed higher version. What's the matter? + +Beginning with version 1.5 the `rdpwrap.dll` is not updated anymore, since all settings are stored in INI file. Deal with it. + +> Config Tool shows `[not supported]` and RDP doesn't work. What can I do? + +Make sure you're connected to the Internet and run `update.bat`. + +> Update doesn't help, it still shows `[not supported]`. + +Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check whether your `termsrv.dll` build is listed here. If you can't find such issue, create a new — specify your build version for adding to support. + Change log: +#### 2016.08.01 +- Version 1.6.1 +- Include updated INI file for latest Windows builds +- Installer updated +- Added online install mode +- Added feature to keep settings on uninstall +- RDP Config updated +- Fixed update firewall rule on RDP port change +- Added feature to hide users on logon + #### 2015.08.12 - Version 1.6 - Added support for Windows 10 diff --git a/src-installer/resource.res b/src-installer/resource.res index 4dd12973b891c02e0e9cc5adabea17ed1629574b..ebdf66da3653c4e06d961c03430c244a3e05e96b 100644 GIT binary patch delta 5253 zcmdT{O>10L81CGAXR4!_G;P|FJB=n0L`yO`_v@T zf)oXpjXjGXZtB*BAT89DP;jLp?V{?k?p(J2z~`KEKjtO~q6s*Glk?s=ci#6o&-*z) z+*^A3=c%n3}ZNVow?f3j=*^z$d#5m@ps?c~=YlR}Am()jOnAZ$&{8h$qfDBL-NBKH^fj z=|-V=+Mdk8I|0C7GlB%rFIj$;xCM4Iap(|q-wm7s`rhkirS4|r$El{pcT$Pm2tsk^ z{kR#&buA99Q1X;Z5`a?bnt0=U0}(hOIWE;9v|}e$94BrFkXMX;QbF9I+~xmL zxsiC{;?fl}+O2$CCynoUDykhZvAEETc&f5SLZ`U8jBJ)_f}_+g3HBTsN$^HY1nFJ2 zSb&S>X=%n$QX|+e(`HzInt65ol(Aj<%{a}p2kQn@+Lt#7lmS=Y!1q~Bei9-g+mho)LN4>bI+ zsw)Vcw62`#lDIF*nVZ*JS~@n=#QW6Kw1fdFa9(hc`Lf_%GgMGsHpx)QiesmSn}v1N zCeKj(=Fgk|Su^+cO*7Y;De;OZLAa4SN5rGkb9aBf@MGg}c~CUJ>ddar^3FvTE)CYMzx)2%f<#?2 z3u19&#cnv_m%+5@Wc2n~+lsM^n{OT$cg{5ph_i#EV�xaxzB5*78&nFEC$xziPK2 z@Uga-SelGs=|DlTlaEXW*RI(Cry%j#gZZ_9Vlh@Y%?P2Z2jv;O4m z(@pucKs;DK@vVea^(+s0DsKlT}Eo0>wZ3x(Dkga zZ_wE=>v&MCW0$PkCI_RpvaZ@?3VhRVS@^7^Je4oZ_PaBD2jlq&Qo)uU4u@^wLD|Bt zZAG~)xfiw|SGMGVv=!~Nr3aPD7Kv;$u|RAt+szn4EFKNyClvX3OpLEJF}G4*Y^~W+ z;Ns$nKHXgF;saC#SqmT_Z&hUO7j8WRjUMiNyc#OKqrtbH+V+QUnJpn2h0GSY7ZD7( ziePzw2*wM(SQ&IJ?5ba=k{7CeVb7)zY8}JNhrwaK_pWeA#Oc`8}A5!+IX8jr9W7i&$g#w>LVEKOMIY7zgBE>p%nl n8}~na+?j4P{OvD(?R?pw+nYai&TfD7TjyTGx$pemIb!?;S0`FC delta 139 zcmezH!sf^p>j?@>UI7!8`q@o&4a{|o4L0s5u-@FBpC`h|(0q7R`{7lLK+FWh%s|Wn z#H>Kf2E^<@%mKulK+FZi+(66&#Jt-Nuj0Gf!pY3Q!~gS7(^h87c-_xh4@%L@~ diff --git a/src-rdpconfig/resource.res b/src-rdpconfig/resource.res index 5a18ec83f3934215c6468cf0609a78986b435b51..9cd36450a4ac2e894b2743929d553a9033280974 100644 GIT binary patch delta 47 xcmeB3?MU5lMw_3Rfsp|O*uXU7=G)q$jEu&UKk7_pG@IP1`<>BnbE6(R3jhv`3;h59 delta 47 wcmeB3?MU5lMw_3Bfsp|O*dX-g+uEXxj7F0`>P%-eo!qJWozY-(qaHg801hY%_y7O^ diff --git a/technical.txt b/technical.txt index 680fa77..d91cfc6 100644 --- a/technical.txt +++ b/technical.txt @@ -86,6 +86,15 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2016.08.01 : +- preparing the release + +2016.07.23 : +- added online install mode to installer +- added feature to keep settings on uninstall +- fixed update firewall rule on port change in config tool +- added feature to hide users on logon + 2016.07.22 : - added support for termsrv.dll 10.0.14393.0 From ef2561fe7902a1ff5620ab242ed62dbab4858e0f Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 2 Aug 2016 14:20:16 +0300 Subject: [PATCH 128/208] Update README (fix #132) --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c0f7345..6e39387 100644 --- a/README.md +++ b/README.md @@ -82,11 +82,11 @@ It's recommended to have original termsrv.dll file with the RDP Wrapper installa - Adding «Remote Desktop Users» group:
http://superuser.com/questions/680572/ -### Tutorial videos: +#### Tutorial videos: - [~~Updating RDP Wrapper INI file manually~~][yt-updating] (now use installer to update INI file) - [How to find offsets for new termsrv.dll versions][yt-offsets] -Files in release package: +### Files in release package: | File name | Description | | --------- | ----------- | @@ -111,6 +111,14 @@ There is no definitive answer, see [this discussion](https://github.com/stascorp Yes, it works in online mode by default. You may disable it by removing `-o` flag in the `install.bat` file. +> What is online install mode? + +Online install mode introduced in version 1.6.1. When you installing RDP Wrapper first time using this mode, it will download [latest INI file](https://github.com/stascorp/rdpwrap/blob/master/res/rdpwrap.ini) from GitHub. See [this discussion](https://github.com/stascorp/rdpwrap/issues/132). + +> What is INI file and why we need it? + +INI file was introduced in version 1.5. It stores system configuration for RDP Wrapper — general wrapping settings, binary patch codes, and per build specific data. When new `termsrv.dll` build comes out, developer adds support for it by updating INI file in repository. + > Config Tool reports version 1.5, but I installed higher version. What's the matter? Beginning with version 1.5 the `rdpwrap.dll` is not updated anymore, since all settings are stored in INI file. Deal with it. @@ -123,7 +131,9 @@ Make sure you're connected to the Internet and run `update.bat`. Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check whether your `termsrv.dll` build is listed here. If you can't find such issue, create a new — specify your build version for adding to support. -Change log: +--- + +### Change log: #### 2016.08.01 - Version 1.6.1 From 13c0932252c2cebc766c9fc49a60901f18b9b60b Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 12 Aug 2016 11:57:41 +0300 Subject: [PATCH 129/208] INI: Add support for new builds (fix #137) 10.0.14385.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6e39387..7dccf62 100644 --- a/README.md +++ b/README.md @@ -280,6 +280,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14372.0 (Windows 10 RS1 Release 160620-2342) - 10.0.14379.0 (Windows 10 RS1 Release 160627-1607) - 10.0.14383.0 (Windows 10 RS1 Release 160701-1839) +- 10.0.14385.0 (Windows 10 RS1 Release 160706-1700) - 10.0.14388.0 (Windows 10 RS1 Release 160709-1635) - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index bcd0df6..56b0bff 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-07-22 +Updated=2016-08-12 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1970,6 +1970,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CC10 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14385.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F941 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34635 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=460D2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14388.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -2587,6 +2617,25 @@ bServerSku.x64 =EA47C lMaxUserSessions.x64 =EA480 bAppServerAllowed.x64 =EA484 +[10.0.14385.0-SLInit] +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 + +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 + [10.0.14388.0-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 3010ce5..cfcecb6 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-07-22 +Updated=2016-08-12 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1025,6 +1025,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CC10 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14385.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F941 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34635 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=295A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B295 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=460D2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CC10 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14388.0] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A6038 @@ -1610,6 +1636,25 @@ bServerSku.x64 =EA47C lMaxUserSessions.x64 =EA480 bAppServerAllowed.x64 =EA484 +[10.0.14385.0-SLInit] +bInitialized.x86 =C3F68 +bServerSku.x86 =C3F6C +lMaxUserSessions.x86 =C3F70 +bAppServerAllowed.x86 =C3F74 +bRemoteConnAllowed.x86=C3F78 +bMultimonAllowed.x86 =C3F7C +ulMaxDebugSessions.x86=C3F80 +bFUSEnabled.x86 =C3F84 + +bInitialized.x64 =EA460 +bRemoteConnAllowed.x64=EA464 +bMultimonAllowed.x64 =EA468 +ulMaxDebugSessions.x64=EA46C +bFUSEnabled.x64 =EA470 +bServerSku.x64 =EA47C +lMaxUserSessions.x64 =EA480 +bAppServerAllowed.x64 =EA484 + [10.0.14388.0-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 diff --git a/technical.txt b/technical.txt index d91cfc6..2ff2bb8 100644 --- a/technical.txt +++ b/technical.txt @@ -81,11 +81,15 @@ Terminal Services supported versions 10.0.14372.0 (Windows 10 rs1_release.160620-2342) [init hook + extended patch] 10.0.14379.0 (Windows 10 rs1_release.160627-1607) [init hook + extended patch] 10.0.14383.0 (Windows 10 rs1_release.160701-1839) [init hook + extended patch] +10.0.14385.0 (Windows 10 rs1_release.160706-1700) [init hook + extended patch] 10.0.14388.0 (Windows 10 rs1_release.160709-1635) [init hook + extended patch] 10.0.14393.0 (Windows 10 rs1_release.160715-1616) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.08.12 : +- added support for termsrv.dll 10.0.14385.0 + 2016.08.01 : - preparing the release From af6a3c7194e92a32e5cf8bb62695c3e904e49e55 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 14 Aug 2016 03:04:17 +0300 Subject: [PATCH 130/208] README: FAQ about RDPCheck (fix #139) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 7dccf62..a74e560 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,10 @@ Make sure you're connected to the Internet and run `update.bat`. Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check whether your `termsrv.dll` build is listed here. If you can't find such issue, create a new — specify your build version for adding to support. +> Why `RDPCheck` doesn't allow to change resolution and other settings? + +`RDPCheck` is a very simple application and only for testing purposes. You need to use Microsoft Remote Desktop Client (`mstsc.exe`) if you want to customize the settings. You can use `127.0.0.1` or `127.0.0.2` address for loopback connection. + --- ### Change log: From a60c7f4351f86c0ba8703217d0863f662ad3021d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 28 Aug 2016 16:32:09 +0300 Subject: [PATCH 131/208] INI: Add support for new builds (fix #141) 6.1.7601.23403 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 18 +++++++++++++++++- res/rdpwrap.ini | 16 +++++++++++++++- technical.txt | 4 ++++ 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a74e560..d54551e 100644 --- a/README.md +++ b/README.md @@ -250,6 +250,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) - 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) - 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) +- 6.1.7601.23403 (Windows 7 SP1 with KB3125574) - 6.2.8102.0 (Windows 8 Developer Preview) - 6.2.8250.0 (Windows 8 Consumer Preview) - 6.2.8400.0 (Windows 8 Release Preview) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 56b0bff..c4287cc 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-08-12 +Updated=2016-08-28 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -556,6 +556,22 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17D6E DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7601.23403] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A65D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F62 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E29 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17CE2 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.2.8102.0] ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled ; .text:1000F7E5 lea eax, [esp+150h+VersionInformation] diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index cfcecb6..cea0f00 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-08-12 +Updated=2016-08-28 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -189,6 +189,20 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17D6E DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7601.23403] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A65D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F62 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E29 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17CE2 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.2.8102.0] SingleUserPatch.x86=1 SingleUserOffset.x86=F7E9 diff --git a/technical.txt b/technical.txt index 2ff2bb8..44de6ca 100644 --- a/technical.txt +++ b/technical.txt @@ -42,6 +42,7 @@ Terminal Services supported versions 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) [policy hook + extended patch] 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] +6.1.7601.23403 (Windows 7 SP1 with KB3125574) [policy hook + extended patch] 6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] 6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] 6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] @@ -87,6 +88,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2016.08.28 : +- added support for termsrv.dll 6.1.7601.23403 + 2016.08.12 : - added support for termsrv.dll 10.0.14385.0 From d556f4373f94d2482261b2b7d4ff1b55bb7735d1 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 28 Aug 2016 16:58:49 +0300 Subject: [PATCH 132/208] INI: Add support for new builds (fix #140) 10.0.14901.1000 x86/x64 10.0.14905.1000 x86/x64 --- README.md | 2 + res/rdpwrap-ini-kb.txt | 98 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 90 ++++++++++++++++++++++++++++++++++++++ technical.txt | 4 ++ 4 files changed, 194 insertions(+) diff --git a/README.md b/README.md index d54551e..8f37188 100644 --- a/README.md +++ b/README.md @@ -288,6 +288,8 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14385.0 (Windows 10 RS1 Release 160706-1700) - 10.0.14388.0 (Windows 10 RS1 Release 160709-1635) - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) +- 10.0.14901.1000 (Windows 10 RS Pre-Release 160805-1700) +- 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index c4287cc..fd16875 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -2076,6 +2076,66 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14901.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14905.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2689,3 +2749,41 @@ bRemoteConnAllowed.x64=E8474 bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 + +[10.0.14901.1000-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 + +[10.0.14905.1000-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index cea0f00..f02e261 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -1117,6 +1117,58 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14901.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14905.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6038 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D781 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1706,3 +1758,41 @@ bRemoteConnAllowed.x64=E8474 bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 + +[10.0.14901.1000-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 + +[10.0.14905.1000-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 diff --git a/technical.txt b/technical.txt index 44de6ca..d022376 100644 --- a/technical.txt +++ b/technical.txt @@ -85,11 +85,15 @@ Terminal Services supported versions 10.0.14385.0 (Windows 10 rs1_release.160706-1700) [init hook + extended patch] 10.0.14388.0 (Windows 10 rs1_release.160709-1635) [init hook + extended patch] 10.0.14393.0 (Windows 10 rs1_release.160715-1616) [init hook + extended patch] +10.0.14901.1000 (Windows 10 rs_prerelease.160805-1700) [init hook + extended patch] +10.0.14905.1000 (Windows 10 rs_prerelease.160811-1739) [init hook + extended patch] Source code changelog (rdpwrap library): 2016.08.28 : - added support for termsrv.dll 6.1.7601.23403 +- added support for termsrv.dll 10.0.14901.1000 +- added support for termsrv.dll 10.0.14905.1000 2016.08.12 : - added support for termsrv.dll 10.0.14385.0 From 59b1924af9f4d510a6974baa7f6d9fd99e61a060 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 3 Sep 2016 14:36:22 +0300 Subject: [PATCH 133/208] INI: Add support for new builds (fix #150) 10.0.14915.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8f37188..dcfcafd 100644 --- a/README.md +++ b/README.md @@ -290,6 +290,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) - 10.0.14901.1000 (Windows 10 RS Pre-Release 160805-1700) - 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) +- 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index fd16875..c6fa1eb 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-08-28 +Updated=2016-09-03 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2136,6 +2136,36 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14915.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6D98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E241 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35E35 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=29EB4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30399 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B4A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46092 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE40 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2787,3 +2817,22 @@ bRemoteConnAllowed.x64=E8474 bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 + +[10.0.14915.1000-SLInit] +bInitialized.x86 =C4F6C +bServerSku.x86 =C4F70 +lMaxUserSessions.x86 =C4F74 +bAppServerAllowed.x86 =C4F78 +bRemoteConnAllowed.x86=C4F7C +bMultimonAllowed.x86 =C4F80 +ulMaxDebugSessions.x86=C4F84 +bFUSEnabled.x86 =C4F88 + +bServerSku.x64 =E93D0 +lMaxUserSessions.x64 =E93D4 +bAppServerAllowed.x64 =E93D8 +bInitialized.x64 =EA470 +bRemoteConnAllowed.x64=EA474 +bMultimonAllowed.x64 =EA478 +ulMaxDebugSessions.x64=EA47C +bFUSEnabled.x64 =EA480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index f02e261..6bc8da0 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-08-28 +Updated=2016-09-03 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1169,6 +1169,32 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14915.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6D98 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E241 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35E35 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=29EB4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30399 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B4A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46092 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE40 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1796,3 +1822,22 @@ bRemoteConnAllowed.x64=E8474 bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 + +[10.0.14915.1000-SLInit] +bInitialized.x86 =C4F6C +bServerSku.x86 =C4F70 +lMaxUserSessions.x86 =C4F74 +bAppServerAllowed.x86 =C4F78 +bRemoteConnAllowed.x86=C4F7C +bMultimonAllowed.x86 =C4F80 +ulMaxDebugSessions.x86=C4F84 +bFUSEnabled.x86 =C4F88 + +bServerSku.x64 =E93D0 +lMaxUserSessions.x64 =E93D4 +bAppServerAllowed.x64 =E93D8 +bInitialized.x64 =EA470 +bRemoteConnAllowed.x64=EA474 +bMultimonAllowed.x64 =EA478 +ulMaxDebugSessions.x64=EA47C +bFUSEnabled.x64 =EA480 diff --git a/technical.txt b/technical.txt index d022376..fb7face 100644 --- a/technical.txt +++ b/technical.txt @@ -87,9 +87,13 @@ Terminal Services supported versions 10.0.14393.0 (Windows 10 rs1_release.160715-1616) [init hook + extended patch] 10.0.14901.1000 (Windows 10 rs_prerelease.160805-1700) [init hook + extended patch] 10.0.14905.1000 (Windows 10 rs_prerelease.160811-1739) [init hook + extended patch] +10.0.14915.1000 (Windows 10 rs_prerelease.160826-1902) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.09.03 : +- added support for termsrv.dll 10.0.14915.1000 + 2016.08.28 : - added support for termsrv.dll 6.1.7601.23403 - added support for termsrv.dll 10.0.14901.1000 From 121f893c0c9adbcbc098628cc2c0822230386465 Mon Sep 17 00:00:00 2001 From: cher-nov Date: Sat, 10 Sep 2016 19:47:50 +1000 Subject: [PATCH 134/208] Installer: Add check for supported Windows version --- src-installer/RDPWInst.dpr | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 497d4e1..3a97730 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1091,6 +1091,13 @@ begin Exit; end; + if not CheckWin32Version(6,0) then + begin + Writeln('[-] Unsupported Windows version:'); + Writeln(' only >= 6.0 (Vista, Server 2008 and newer) are supported.'); + Exit; + end; + if not SupportedArchitecture then begin Writeln('[-] Unsupported processor architecture.'); From 743b53ca169085b67aa8b2efa561e3238efedcc7 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 14 Sep 2016 23:09:20 +0300 Subject: [PATCH 135/208] INI: Add support for new builds (fix #157) 10.0.10586.589 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dcfcafd..73f3a30 100644 --- a/README.md +++ b/README.md @@ -268,6 +268,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.10041.0 (Windows 10 Pro Technical Preview Update 1) - 10.0.10240.16384 (Windows 10 RTM) - 10.0.10586.0 (Windows 10 TH2 Release 151029-1700) +- 10.0.10586.589 (Windows 10 TH2 Release 160906-1759 with KB3185614) - 10.0.11082.1000 (Windows 10 RS1 Release 151210-2021) - 10.0.11102.1000 (Windows 10 RS1 Release 160113-1800) - 10.0.14251.1000 (Windows 10 RS1 Release 160124-1059) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index c6fa1eb..1a0061c 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-09-03 +Updated=2016-09-14 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1486,6 +1486,36 @@ SLInitHook.x64=1 SLInitOffset.x64=25220 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.10586.589] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7BE8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96A51 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=353B5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=190D4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30B69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=229A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=469DE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=25220 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.11082.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -2408,6 +2438,25 @@ bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 +[10.0.10586.589-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 + [10.0.11082.1000-SLInit] bFUSEnabled.x86 =C3F60 lMaxUserSessions.x86 =C3F64 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 6bc8da0..7a83121 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-09-03 +Updated=2016-09-14 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -609,6 +609,32 @@ SLInitHook.x64=1 SLInitOffset.x64=25220 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.10586.589] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7BE8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=96A51 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=353B5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=190D4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30B69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=229A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=469DE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=25220 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.11082.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A7C98 @@ -1414,6 +1440,25 @@ bMultimonAllowed.x64 =F3468 ulMaxDebugSessions.x64=F346C bRemoteConnAllowed.x64=F3470 +[10.0.10586.589-SLInit] +bFUSEnabled.x86 =C3F60 +lMaxUserSessions.x86 =C3F64 +bAppServerAllowed.x86 =C3F68 +bInitialized.x86 =C3F6C +bMultimonAllowed.x86 =C3F70 +bServerSku.x86 =C3F74 +ulMaxDebugSessions.x86=C3F78 +bRemoteConnAllowed.x86=C3F7C + +lMaxUserSessions.x64 =F23B0 +bAppServerAllowed.x64 =F23B4 +bServerSku.x64 =F23B8 +bFUSEnabled.x64 =F3460 +bInitialized.x64 =F3464 +bMultimonAllowed.x64 =F3468 +ulMaxDebugSessions.x64=F346C +bRemoteConnAllowed.x64=F3470 + [10.0.11082.1000-SLInit] bFUSEnabled.x86 =C3F60 lMaxUserSessions.x86 =C3F64 diff --git a/technical.txt b/technical.txt index fb7face..b20b758 100644 --- a/technical.txt +++ b/technical.txt @@ -65,6 +65,7 @@ Terminal Services supported versions 10.0.10532.0 (Windows 10 th2_release.150822-1406) [todo] 10.0.10547.0 (Windows 10 th2_release.150913-1511) [todo] 10.0.10586.0 (Windows 10 th2_release.151029-1700) [init hook + extended patch] +10.0.10586.589 (Windows 10 th2_release.160906-1759) [init hook + extended patch] 10.0.11082.1000 (Windows 10 rs1_release.151210-2021) [init hook + extended patch] 10.0.11102.1000 (Windows 10 rs1_release.160113-1800) [init hook + extended patch] 10.0.14251.1000 (Windows 10 rs1_release.160124-1059) [init hook + extended patch] @@ -91,6 +92,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2016.09.14 : +- added support for termsrv.dll 10.0.10586.589 + 2016.09.03 : - added support for termsrv.dll 10.0.14915.1000 From 73c2583a4692f7875eb51d312dd358f96692e419 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 15 Sep 2016 23:58:24 +0300 Subject: [PATCH 136/208] INI: Add support for new builds (fix #160) 10.0.14926.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 73f3a30..fa2212b 100644 --- a/README.md +++ b/README.md @@ -292,6 +292,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14901.1000 (Windows 10 RS Pre-Release 160805-1700) - 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) - 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) +- 10.0.14926.1000 (Windows 10 RS Pre-Release 160910-1529) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 1a0061c..3bfc0a4 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-09-14 +Updated=2016-09-15 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2196,6 +2196,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CE40 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14926.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6D18 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E071 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35E55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=29EB4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=303B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B4A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=460A2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE40 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2885,3 +2915,22 @@ bRemoteConnAllowed.x64=EA474 bMultimonAllowed.x64 =EA478 ulMaxDebugSessions.x64=EA47C bFUSEnabled.x64 =EA480 + +[10.0.14926.1000-SLInit] +bInitialized.x86 =C4F6C +bServerSku.x86 =C4F70 +lMaxUserSessions.x86 =C4F74 +bAppServerAllowed.x86 =C4F78 +bRemoteConnAllowed.x86=C4F7C +bMultimonAllowed.x86 =C4F80 +ulMaxDebugSessions.x86=C4F84 +bFUSEnabled.x86 =C4F88 + +bServerSku.x64 =E93D0 +lMaxUserSessions.x64 =E93D4 +bAppServerAllowed.x64 =E93D8 +bInitialized.x64 =EA470 +bRemoteConnAllowed.x64=EA474 +bMultimonAllowed.x64 =EA478 +ulMaxDebugSessions.x64=EA47C +bFUSEnabled.x64 =EA480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 7a83121..558d11c 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-09-14 +Updated=2016-09-15 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1221,6 +1221,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CE40 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14926.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6D18 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E071 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35E55 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=29EB4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=303B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B4A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=460A2 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=CE40 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1886,3 +1912,22 @@ bRemoteConnAllowed.x64=EA474 bMultimonAllowed.x64 =EA478 ulMaxDebugSessions.x64=EA47C bFUSEnabled.x64 =EA480 + +[10.0.14926.1000-SLInit] +bInitialized.x86 =C4F6C +bServerSku.x86 =C4F70 +lMaxUserSessions.x86 =C4F74 +bAppServerAllowed.x86 =C4F78 +bRemoteConnAllowed.x86=C4F7C +bMultimonAllowed.x86 =C4F80 +ulMaxDebugSessions.x86=C4F84 +bFUSEnabled.x86 =C4F88 + +bServerSku.x64 =E93D0 +lMaxUserSessions.x64 =E93D4 +bAppServerAllowed.x64 =E93D8 +bInitialized.x64 =EA470 +bRemoteConnAllowed.x64=EA474 +bMultimonAllowed.x64 =EA478 +ulMaxDebugSessions.x64=EA47C +bFUSEnabled.x64 =EA480 diff --git a/technical.txt b/technical.txt index b20b758..5e193ad 100644 --- a/technical.txt +++ b/technical.txt @@ -89,9 +89,13 @@ Terminal Services supported versions 10.0.14901.1000 (Windows 10 rs_prerelease.160805-1700) [init hook + extended patch] 10.0.14905.1000 (Windows 10 rs_prerelease.160811-1739) [init hook + extended patch] 10.0.14915.1000 (Windows 10 rs_prerelease.160826-1902) [init hook + extended patch] +10.0.14926.1000 (Windows 10 rs_prerelease.160910-1529) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.09.15 : +- added support for termsrv.dll 10.0.14926.1000 + 2016.09.14 : - added support for termsrv.dll 10.0.10586.589 From 1bbeee751b1086e708ebf8352291ddf22e1a1b3a Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 27 Sep 2016 18:07:45 +0300 Subject: [PATCH 137/208] INI: Add support for new builds (fix #167) 10.0.14931.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fa2212b..2e1e801 100644 --- a/README.md +++ b/README.md @@ -293,6 +293,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) - 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) - 10.0.14926.1000 (Windows 10 RS Pre-Release 160910-1529) +- 10.0.14931.1000 (Windows 10 RS Pre-Release 160916-1700) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 3bfc0a4..ff0f499 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-09-15 +Updated=2016-09-27 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2226,6 +2226,36 @@ SLInitHook.x64=1 SLInitOffset.x64=CE40 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14931.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4908 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B411 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35705 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=29264 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AD05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=452FD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C7FC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2934,3 +2964,22 @@ bRemoteConnAllowed.x64=EA474 bMultimonAllowed.x64 =EA478 ulMaxDebugSessions.x64=EA47C bFUSEnabled.x64 =EA480 + +[10.0.14931.1000-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E63D0 +lMaxUserSessions.x64 =E63D4 +bAppServerAllowed.x64 =E63D8 +bInitialized.x64 =E7470 +bRemoteConnAllowed.x64=E7474 +bMultimonAllowed.x64 =E7478 +ulMaxDebugSessions.x64=E747C +bFUSEnabled.x64 =E7480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 558d11c..86cb19c 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-09-15 +Updated=2016-09-27 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1247,6 +1247,32 @@ SLInitHook.x64=1 SLInitOffset.x64=CE40 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14931.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4908 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B411 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35705 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=29264 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF69 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AD05 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=452FD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C7FC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1931,3 +1957,22 @@ bRemoteConnAllowed.x64=EA474 bMultimonAllowed.x64 =EA478 ulMaxDebugSessions.x64=EA47C bFUSEnabled.x64 =EA480 + +[10.0.14931.1000-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E63D0 +lMaxUserSessions.x64 =E63D4 +bAppServerAllowed.x64 =E63D8 +bInitialized.x64 =E7470 +bRemoteConnAllowed.x64=E7474 +bMultimonAllowed.x64 =E7478 +ulMaxDebugSessions.x64=E747C +bFUSEnabled.x64 =E7480 diff --git a/technical.txt b/technical.txt index 5e193ad..f9c8d4c 100644 --- a/technical.txt +++ b/technical.txt @@ -90,9 +90,13 @@ Terminal Services supported versions 10.0.14905.1000 (Windows 10 rs_prerelease.160811-1739) [init hook + extended patch] 10.0.14915.1000 (Windows 10 rs_prerelease.160826-1902) [init hook + extended patch] 10.0.14926.1000 (Windows 10 rs_prerelease.160910-1529) [init hook + extended patch] +10.0.14931.1000 (Windows 10 rs_prerelease.160916-1700) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.09.27 : +- added support for termsrv.dll 10.0.14931.1000 + 2016.09.15 : - added support for termsrv.dll 10.0.14926.1000 From ae54efba8e59c0b5d509556604bdcaaff53191bd Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 30 Sep 2016 01:32:31 +0300 Subject: [PATCH 138/208] INI: Add support for new builds (fix #168) 10.0.14936.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2e1e801..e038097 100644 --- a/README.md +++ b/README.md @@ -294,6 +294,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) - 10.0.14926.1000 (Windows 10 RS Pre-Release 160910-1529) - 10.0.14931.1000 (Windows 10 RS Pre-Release 160916-1700) +- 10.0.14936.1000 (Windows 10 RS Pre-Release 160923-1700) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index ff0f499..69c5469 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-09-27 +Updated=2016-09-30 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2256,6 +2256,36 @@ SLInitHook.x64=1 SLInitOffset.x64=C7FC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14936.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A3F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B9A1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35355 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=25174 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BB55 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=44CFE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C62C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -2983,3 +3013,22 @@ bRemoteConnAllowed.x64=E7474 bMultimonAllowed.x64 =E7478 ulMaxDebugSessions.x64=E747C bFUSEnabled.x64 =E7480 + +[10.0.14936.1000-SLInit] +bInitialized.x86 =C0F6C +bServerSku.x86 =C0F70 +lMaxUserSessions.x86 =C0F74 +bAppServerAllowed.x86 =C0F78 +bRemoteConnAllowed.x86=C0F7C +bMultimonAllowed.x86 =C0F80 +ulMaxDebugSessions.x86=C0F84 +bFUSEnabled.x86 =C0F88 + +bInitialized.x64 =E8460 +bRemoteConnAllowed.x64=E8464 +bMultimonAllowed.x64 =E8468 +ulMaxDebugSessions.x64=E846C +bFUSEnabled.x64 =E8470 +bServerSku.x64 =E847C +lMaxUserSessions.x64 =E8480 +bAppServerAllowed.x64 =E8484 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 86cb19c..3728bd9 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-09-27 +Updated=2016-09-30 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1273,6 +1273,32 @@ SLInitHook.x64=1 SLInitOffset.x64=C7FC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14936.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A3F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B9A1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35355 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=25174 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1BB55 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=44CFE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C62C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -1976,3 +2002,22 @@ bRemoteConnAllowed.x64=E7474 bMultimonAllowed.x64 =E7478 ulMaxDebugSessions.x64=E747C bFUSEnabled.x64 =E7480 + +[10.0.14936.1000-SLInit] +bInitialized.x86 =C0F6C +bServerSku.x86 =C0F70 +lMaxUserSessions.x86 =C0F74 +bAppServerAllowed.x86 =C0F78 +bRemoteConnAllowed.x86=C0F7C +bMultimonAllowed.x86 =C0F80 +ulMaxDebugSessions.x86=C0F84 +bFUSEnabled.x86 =C0F88 + +bInitialized.x64 =E8460 +bRemoteConnAllowed.x64=E8464 +bMultimonAllowed.x64 =E8468 +ulMaxDebugSessions.x64=E846C +bFUSEnabled.x64 =E8470 +bServerSku.x64 =E847C +lMaxUserSessions.x64 =E8480 +bAppServerAllowed.x64 =E8484 diff --git a/technical.txt b/technical.txt index f9c8d4c..de434f4 100644 --- a/technical.txt +++ b/technical.txt @@ -91,9 +91,13 @@ Terminal Services supported versions 10.0.14915.1000 (Windows 10 rs_prerelease.160826-1902) [init hook + extended patch] 10.0.14926.1000 (Windows 10 rs_prerelease.160910-1529) [init hook + extended patch] 10.0.14931.1000 (Windows 10 rs_prerelease.160916-1700) [init hook + extended patch] +10.0.14936.1000 (Windows 10 rs_prerelease.160923-1700) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.09.30 : +- added support for termsrv.dll 10.0.14936.1000 + 2016.09.27 : - added support for termsrv.dll 10.0.14931.1000 From 59a3a5b305f8efa444173d171f956517d26d5b26 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 8 Oct 2016 23:47:40 +0300 Subject: [PATCH 139/208] INI: Add support for new builds (fix #172) 10.0.14942.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e038097..91b4e98 100644 --- a/README.md +++ b/README.md @@ -295,6 +295,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14926.1000 (Windows 10 RS Pre-Release 160910-1529) - 10.0.14931.1000 (Windows 10 RS Pre-Release 160916-1700) - 10.0.14936.1000 (Windows 10 RS Pre-Release 160923-1700) +- 10.0.14942.1000 (Windows 10 RS Pre-Release 161003-1929) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 69c5469..039c526 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-09-30 +Updated=2016-10-08 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2286,6 +2286,36 @@ SLInitHook.x64=1 SLInitOffset.x64=C62C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14942.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A3F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9115B +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35355 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=199BD +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1064E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=44CFE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=258EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3032,3 +3062,22 @@ bFUSEnabled.x64 =E8470 bServerSku.x64 =E847C lMaxUserSessions.x64 =E8480 bAppServerAllowed.x64 =E8484 + +[10.0.14942.1000-SLInit] +bInitialized.x86 =C0F6C +bServerSku.x86 =C0F70 +lMaxUserSessions.x86 =C0F74 +bAppServerAllowed.x86 =C0F78 +bRemoteConnAllowed.x86=C0F7C +bMultimonAllowed.x86 =C0F80 +ulMaxDebugSessions.x86=C0F84 +bFUSEnabled.x86 =C0F88 + +bInitialized.x64 =EC460 +bRemoteConnAllowed.x64=EC464 +bMultimonAllowed.x64 =EC468 +ulMaxDebugSessions.x64=EC46C +bFUSEnabled.x64 =EC470 +bServerSku.x64 =EC47C +lMaxUserSessions.x64 =EC480 +bAppServerAllowed.x64 =EC484 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 3728bd9..4712d4b 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-09-30 +Updated=2016-10-08 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1299,6 +1299,32 @@ SLInitHook.x64=1 SLInitOffset.x64=C62C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14942.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A3F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9115B +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35355 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=199BD +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1064E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=44CFE +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=258EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2021,3 +2047,22 @@ bFUSEnabled.x64 =E8470 bServerSku.x64 =E847C lMaxUserSessions.x64 =E8480 bAppServerAllowed.x64 =E8484 + +[10.0.14942.1000-SLInit] +bInitialized.x86 =C0F6C +bServerSku.x86 =C0F70 +lMaxUserSessions.x86 =C0F74 +bAppServerAllowed.x86 =C0F78 +bRemoteConnAllowed.x86=C0F7C +bMultimonAllowed.x86 =C0F80 +ulMaxDebugSessions.x86=C0F84 +bFUSEnabled.x86 =C0F88 + +bInitialized.x64 =EC460 +bRemoteConnAllowed.x64=EC464 +bMultimonAllowed.x64 =EC468 +ulMaxDebugSessions.x64=EC46C +bFUSEnabled.x64 =EC470 +bServerSku.x64 =EC47C +lMaxUserSessions.x64 =EC480 +bAppServerAllowed.x64 =EC484 diff --git a/technical.txt b/technical.txt index de434f4..18b2fb7 100644 --- a/technical.txt +++ b/technical.txt @@ -92,9 +92,13 @@ Terminal Services supported versions 10.0.14926.1000 (Windows 10 rs_prerelease.160910-1529) [init hook + extended patch] 10.0.14931.1000 (Windows 10 rs_prerelease.160916-1700) [init hook + extended patch] 10.0.14936.1000 (Windows 10 rs_prerelease.160923-1700) [init hook + extended patch] +10.0.14942.1000 (Windows 10 rs_prerelease.161003-1929) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.10.08 : +- added support for termsrv.dll 10.0.14942.1000 + 2016.09.30 : - added support for termsrv.dll 10.0.14936.1000 From fe43b60f5c5401b8c6d43eeccf719009f1874ad6 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 19 Oct 2016 20:52:05 +0300 Subject: [PATCH 140/208] INI: Add support for new builds (fix #173) 10.0.14946.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 91b4e98..a69c924 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14931.1000 (Windows 10 RS Pre-Release 160916-1700) - 10.0.14936.1000 (Windows 10 RS Pre-Release 160923-1700) - 10.0.14942.1000 (Windows 10 RS Pre-Release 161003-1929) +- 10.0.14946.1000 (Windows 10 RS Pre-Release 161007-1700) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 039c526..64b4bb3 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-10-08 +Updated=2016-10-19 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2316,6 +2316,36 @@ SLInitHook.x64=1 SLInitOffset.x64=258EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14946.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4018 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=911AB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35355 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=199AD +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1064E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=44CFD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=258DC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3081,3 +3111,22 @@ bFUSEnabled.x64 =EC470 bServerSku.x64 =EC47C lMaxUserSessions.x64 =EC480 bAppServerAllowed.x64 =EC484 + +[10.0.14946.1000-SLInit] +bInitialized.x86 =C0F6C +bServerSku.x86 =C0F70 +lMaxUserSessions.x86 =C0F74 +bAppServerAllowed.x86 =C0F78 +bRemoteConnAllowed.x86=C0F7C +bMultimonAllowed.x86 =C0F80 +ulMaxDebugSessions.x86=C0F84 +bFUSEnabled.x86 =C0F88 + +bInitialized.x64 =EC460 +bRemoteConnAllowed.x64=EC464 +bMultimonAllowed.x64 =EC468 +ulMaxDebugSessions.x64=EC46C +bFUSEnabled.x64 =EC470 +bServerSku.x64 =EC47C +lMaxUserSessions.x64 =EC480 +bAppServerAllowed.x64 =EC484 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 4712d4b..d8bd7b1 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-10-08 +Updated=2016-10-19 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1325,6 +1325,32 @@ SLInitHook.x64=1 SLInitOffset.x64=258EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14946.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A4018 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=911AB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35355 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=199AD +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1064E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=44CFD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=258DC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2066,3 +2092,22 @@ bFUSEnabled.x64 =EC470 bServerSku.x64 =EC47C lMaxUserSessions.x64 =EC480 bAppServerAllowed.x64 =EC484 + +[10.0.14946.1000-SLInit] +bInitialized.x86 =C0F6C +bServerSku.x86 =C0F70 +lMaxUserSessions.x86 =C0F74 +bAppServerAllowed.x86 =C0F78 +bRemoteConnAllowed.x86=C0F7C +bMultimonAllowed.x86 =C0F80 +ulMaxDebugSessions.x86=C0F84 +bFUSEnabled.x86 =C0F88 + +bInitialized.x64 =EC460 +bRemoteConnAllowed.x64=EC464 +bMultimonAllowed.x64 =EC468 +ulMaxDebugSessions.x64=EC46C +bFUSEnabled.x64 =EC470 +bServerSku.x64 =EC47C +lMaxUserSessions.x64 =EC480 +bAppServerAllowed.x64 =EC484 diff --git a/technical.txt b/technical.txt index 18b2fb7..a5f4345 100644 --- a/technical.txt +++ b/technical.txt @@ -93,9 +93,13 @@ Terminal Services supported versions 10.0.14931.1000 (Windows 10 rs_prerelease.160916-1700) [init hook + extended patch] 10.0.14936.1000 (Windows 10 rs_prerelease.160923-1700) [init hook + extended patch] 10.0.14942.1000 (Windows 10 rs_prerelease.161003-1929) [init hook + extended patch] +10.0.14946.1000 (Windows 10 rs_prerelease.161007-1700) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.10.19 : +- added support for termsrv.dll 10.0.14946.1000 + 2016.10.08 : - added support for termsrv.dll 10.0.14942.1000 From 0175a08fd1ed7a42ce46ae32bd783b6e3303f356 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 21 Oct 2016 22:12:56 +0300 Subject: [PATCH 141/208] INI: Add support for new builds (fix #175) 10.0.14951.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a69c924..2582e76 100644 --- a/README.md +++ b/README.md @@ -297,6 +297,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14936.1000 (Windows 10 RS Pre-Release 160923-1700) - 10.0.14942.1000 (Windows 10 RS Pre-Release 161003-1929) - 10.0.14946.1000 (Windows 10 RS Pre-Release 161007-1700) +- 10.0.14951.1000 (Windows 10 RS Pre-Release 161014-1700) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 64b4bb3..370749d 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-10-19 +Updated=2016-10-21 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2346,6 +2346,36 @@ SLInitHook.x64=1 SLInitOffset.x64=258DC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14951.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A78D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=94A6B +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3BA85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1CEDD +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=32629 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11E9E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=3F680 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22EE0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3130,3 +3160,22 @@ bFUSEnabled.x64 =EC470 bServerSku.x64 =EC47C lMaxUserSessions.x64 =EC480 bAppServerAllowed.x64 =EC484 + +[10.0.14951.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EF3D0 +lMaxUserSessions.x64 =EF3D4 +bAppServerAllowed.x64 =EF3D8 +bInitialized.x64 =F0470 +bRemoteConnAllowed.x64=F0474 +bMultimonAllowed.x64 =F0478 +ulMaxDebugSessions.x64=F047C +bFUSEnabled.x64 =F0480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index d8bd7b1..077f8ff 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-10-19 +Updated=2016-10-21 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1351,6 +1351,32 @@ SLInitHook.x64=1 SLInitOffset.x64=258DC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14951.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A78D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=94A6B +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=3BA85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1CEDD +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=32629 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11E9E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=3F680 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22EE0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2111,3 +2137,22 @@ bFUSEnabled.x64 =EC470 bServerSku.x64 =EC47C lMaxUserSessions.x64 =EC480 bAppServerAllowed.x64 =EC484 + +[10.0.14951.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EF3D0 +lMaxUserSessions.x64 =EF3D4 +bAppServerAllowed.x64 =EF3D8 +bInitialized.x64 =F0470 +bRemoteConnAllowed.x64=F0474 +bMultimonAllowed.x64 =F0478 +ulMaxDebugSessions.x64=F047C +bFUSEnabled.x64 =F0480 diff --git a/technical.txt b/technical.txt index a5f4345..85961e2 100644 --- a/technical.txt +++ b/technical.txt @@ -94,9 +94,13 @@ Terminal Services supported versions 10.0.14936.1000 (Windows 10 rs_prerelease.160923-1700) [init hook + extended patch] 10.0.14942.1000 (Windows 10 rs_prerelease.161003-1929) [init hook + extended patch] 10.0.14946.1000 (Windows 10 rs_prerelease.161007-1700) [init hook + extended patch] +10.0.14951.1000 (Windows 10 rs_prerelease.161014-1700) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.10.21 : +- added support for termsrv.dll 10.0.14951.1000 + 2016.10.19 : - added support for termsrv.dll 10.0.14946.1000 From 47830889eb13e4e3ba5130906353685a34ed8326 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 28 Oct 2016 20:51:09 +0300 Subject: [PATCH 142/208] INI: Add support for new builds (fix #177) 10.0.14955.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2582e76..29af703 100644 --- a/README.md +++ b/README.md @@ -298,6 +298,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14942.1000 (Windows 10 RS Pre-Release 161003-1929) - 10.0.14946.1000 (Windows 10 RS Pre-Release 161007-1700) - 10.0.14951.1000 (Windows 10 RS Pre-Release 161014-1700) +- 10.0.14955.1000 (Windows 10 RS Pre-Release 161020-1700) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 370749d..edebe02 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-10-21 +Updated=2016-10-28 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2376,6 +2376,36 @@ SLInitHook.x64=1 SLInitOffset.x64=22EE0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14955.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A78D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=94A6B +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3BA85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1CEDD +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=32629 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11E9E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=3F680 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22EE0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3179,3 +3209,22 @@ bRemoteConnAllowed.x64=F0474 bMultimonAllowed.x64 =F0478 ulMaxDebugSessions.x64=F047C bFUSEnabled.x64 =F0480 + +[10.0.14955.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EF3D0 +lMaxUserSessions.x64 =EF3D4 +bAppServerAllowed.x64 =EF3D8 +bInitialized.x64 =F0470 +bRemoteConnAllowed.x64=F0474 +bMultimonAllowed.x64 =F0478 +ulMaxDebugSessions.x64=F047C +bFUSEnabled.x64 =F0480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 077f8ff..1b94f32 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-10-21 +Updated=2016-10-28 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1377,6 +1377,32 @@ SLInitHook.x64=1 SLInitOffset.x64=22EE0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14955.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A78D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=94A6B +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=3BA85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1CEDD +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=32629 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11E9E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=3F680 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22EE0 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2156,3 +2182,22 @@ bRemoteConnAllowed.x64=F0474 bMultimonAllowed.x64 =F0478 ulMaxDebugSessions.x64=F047C bFUSEnabled.x64 =F0480 + +[10.0.14955.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EF3D0 +lMaxUserSessions.x64 =EF3D4 +bAppServerAllowed.x64 =EF3D8 +bInitialized.x64 =F0470 +bRemoteConnAllowed.x64=F0474 +bMultimonAllowed.x64 =F0478 +ulMaxDebugSessions.x64=F047C +bFUSEnabled.x64 =F0480 diff --git a/technical.txt b/technical.txt index 85961e2..f9be0f3 100644 --- a/technical.txt +++ b/technical.txt @@ -95,9 +95,13 @@ Terminal Services supported versions 10.0.14942.1000 (Windows 10 rs_prerelease.161003-1929) [init hook + extended patch] 10.0.14946.1000 (Windows 10 rs_prerelease.161007-1700) [init hook + extended patch] 10.0.14951.1000 (Windows 10 rs_prerelease.161014-1700) [init hook + extended patch] +10.0.14955.1000 (Windows 10 rs_prerelease.161020-1700) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.10.28 : +- added support for termsrv.dll 10.0.14955.1000 + 2016.10.21 : - added support for termsrv.dll 10.0.14951.1000 From 3cb1ed5944d0d223db58468f797f62ceeac39c56 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 19 Nov 2016 23:33:26 +0300 Subject: [PATCH 143/208] INI: Add support for new builds (fix #181) 10.0.14959.1000 x86/x64 10.0.14965.1001 x86/x64 10.0.14971.1000 x86/x64 --- README.md | 3 + res/rdpwrap-ini-kb.txt | 149 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 137 ++++++++++++++++++++++++++++++++++++- technical.txt | 8 +++ 4 files changed, 295 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 29af703..1969c5a 100644 --- a/README.md +++ b/README.md @@ -299,6 +299,9 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14946.1000 (Windows 10 RS Pre-Release 161007-1700) - 10.0.14951.1000 (Windows 10 RS Pre-Release 161014-1700) - 10.0.14955.1000 (Windows 10 RS Pre-Release 161020-1700) +- 10.0.14959.1000 (Windows 10 RS Pre-Release 161026-1700) +- 10.0.14965.1001 (Windows 10 RS Pre-Release 161104-1700) +- 10.0.14971.1000 (Windows 10 RS Pre-Release 161111-1700) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index edebe02..eef0321 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-10-28 +Updated=2016-11-19 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2406,6 +2406,96 @@ SLInitHook.x64=1 SLInitOffset.x64=22EE0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14959.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A79B8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=934AB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=2EF05 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16A0D +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2A4E9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10A8E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=448A0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26960 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14965.1001] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7868 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9345B +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3BA85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17DFD +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=32A59 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1212E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=3F680 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26610 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14971.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7968 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925FB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36FE5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1803D +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D9A9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11FBE +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46500 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26180 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3228,3 +3318,60 @@ bRemoteConnAllowed.x64=F0474 bMultimonAllowed.x64 =F0478 ulMaxDebugSessions.x64=F047C bFUSEnabled.x64 =F0480 + +[10.0.14959.1000-SLInit] +bInitialized.x86 =C4F68 +bServerSku.x86 =C4F6C +lMaxUserSessions.x86 =C4F70 +bAppServerAllowed.x86 =C4F74 +bRemoteConnAllowed.x86=C4F78 +bMultimonAllowed.x86 =C4F7C +ulMaxDebugSessions.x86=C4F80 +bFUSEnabled.x86 =C4F84 + +bServerSku.x64 =EE3D0 +lMaxUserSessions.x64 =EE3D4 +bAppServerAllowed.x64 =EE3D8 +bInitialized.x64 =EF470 +bRemoteConnAllowed.x64=EF474 +bMultimonAllowed.x64 =EF478 +ulMaxDebugSessions.x64=EF47C +bFUSEnabled.x64 =EF480 + +[10.0.14965.1001-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bInitialized.x64 =EF460 +bRemoteConnAllowed.x64=EF464 +bMultimonAllowed.x64 =EF468 +ulMaxDebugSessions.x64=EF46C +bFUSEnabled.x64 =EF470 +bServerSku.x64 =EF47C +lMaxUserSessions.x64 =EF480 +bAppServerAllowed.x64 =EF484 + +[10.0.14971.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EE3C0 +lMaxUserSessions.x64 =EE3C4 +bAppServerAllowed.x64 =EE3C8 +bInitialized.x64 =EE470 +bRemoteConnAllowed.x64=EE474 +bMultimonAllowed.x64 =EE478 +ulMaxDebugSessions.x64=EE47C +bFUSEnabled.x64 =EE480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 1b94f32..27e0db8 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-10-28 +Updated=2016-11-19 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1403,6 +1403,84 @@ SLInitHook.x64=1 SLInitOffset.x64=22EE0 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14959.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A79B8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=934AB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=2EF05 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16A0D +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2A4E9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10A8E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=448A0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26960 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14965.1001] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7868 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9345B +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=3BA85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17DFD +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=32A59 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1212E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=3F680 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26610 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.14971.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7968 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925FB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36FE5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1803D +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D9A9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11FBE +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46500 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26180 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2201,3 +2279,60 @@ bRemoteConnAllowed.x64=F0474 bMultimonAllowed.x64 =F0478 ulMaxDebugSessions.x64=F047C bFUSEnabled.x64 =F0480 + +[10.0.14959.1000-SLInit] +bInitialized.x86 =C4F68 +bServerSku.x86 =C4F6C +lMaxUserSessions.x86 =C4F70 +bAppServerAllowed.x86 =C4F74 +bRemoteConnAllowed.x86=C4F78 +bMultimonAllowed.x86 =C4F7C +ulMaxDebugSessions.x86=C4F80 +bFUSEnabled.x86 =C4F84 + +bServerSku.x64 =EE3D0 +lMaxUserSessions.x64 =EE3D4 +bAppServerAllowed.x64 =EE3D8 +bInitialized.x64 =EF470 +bRemoteConnAllowed.x64=EF474 +bMultimonAllowed.x64 =EF478 +ulMaxDebugSessions.x64=EF47C +bFUSEnabled.x64 =EF480 + +[10.0.14965.1001-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bInitialized.x64 =EF460 +bRemoteConnAllowed.x64=EF464 +bMultimonAllowed.x64 =EF468 +ulMaxDebugSessions.x64=EF46C +bFUSEnabled.x64 =EF470 +bServerSku.x64 =EF47C +lMaxUserSessions.x64 =EF480 +bAppServerAllowed.x64 =EF484 + +[10.0.14971.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EE3C0 +lMaxUserSessions.x64 =EE3C4 +bAppServerAllowed.x64 =EE3C8 +bInitialized.x64 =EE470 +bRemoteConnAllowed.x64=EE474 +bMultimonAllowed.x64 =EE478 +ulMaxDebugSessions.x64=EE47C +bFUSEnabled.x64 =EE480 diff --git a/technical.txt b/technical.txt index f9be0f3..a5b2deb 100644 --- a/technical.txt +++ b/technical.txt @@ -96,9 +96,17 @@ Terminal Services supported versions 10.0.14946.1000 (Windows 10 rs_prerelease.161007-1700) [init hook + extended patch] 10.0.14951.1000 (Windows 10 rs_prerelease.161014-1700) [init hook + extended patch] 10.0.14955.1000 (Windows 10 rs_prerelease.161020-1700) [init hook + extended patch] +10.0.14959.1000 (Windows 10 rs_prerelease.161026-1700) [init hook + extended patch] +10.0.14965.1001 (Windows 10 rs_prerelease.161104-1700) [init hook + extended patch] +10.0.14971.1000 (Windows 10 rs_prerelease.161111-1700) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.11.19 : +- added support for termsrv.dll 10.0.14959.1000 +- added support for termsrv.dll 10.0.14965.1001 +- added support for termsrv.dll 10.0.14971.1000 + 2016.10.28 : - added support for termsrv.dll 10.0.14955.1000 From e69261a495e63c8dfe8c15713fe2326776fbbcd3 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 23 Dec 2016 21:26:18 +0300 Subject: [PATCH 144/208] INI: Add support for new builds (fix #189) 10.0.14986.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1969c5a..c8d6485 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14959.1000 (Windows 10 RS Pre-Release 161026-1700) - 10.0.14965.1001 (Windows 10 RS Pre-Release 161104-1700) - 10.0.14971.1000 (Windows 10 RS Pre-Release 161111-1700) +- 10.0.14986.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index eef0321..02370c4 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-11-19 +Updated=2016-12-23 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2496,6 +2496,36 @@ SLInitHook.x64=1 SLInitOffset.x64=26180 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14986.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7878 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=926BB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36FA5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17FFD +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D979 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11F7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=464A0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26140 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3375,3 +3405,22 @@ bRemoteConnAllowed.x64=EE474 bMultimonAllowed.x64 =EE478 ulMaxDebugSessions.x64=EE47C bFUSEnabled.x64 =EE480 + +[10.0.14986.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EE3C0 +lMaxUserSessions.x64 =EE3C4 +bAppServerAllowed.x64 =EE3C8 +bInitialized.x64 =EE470 +bRemoteConnAllowed.x64=EE474 +bMultimonAllowed.x64 =EE478 +ulMaxDebugSessions.x64=EE47C +bFUSEnabled.x64 =EE480 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 27e0db8..2a3ca74 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-11-19 +Updated=2016-12-23 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1481,6 +1481,32 @@ SLInitHook.x64=1 SLInitOffset.x64=26180 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14986.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7878 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=926BB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36FA5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17FFD +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D979 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=11F7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=464A0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=26140 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2336,3 +2362,22 @@ bRemoteConnAllowed.x64=EE474 bMultimonAllowed.x64 =EE478 ulMaxDebugSessions.x64=EE47C bFUSEnabled.x64 =EE480 + +[10.0.14986.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =EE3C0 +lMaxUserSessions.x64 =EE3C4 +bAppServerAllowed.x64 =EE3C8 +bInitialized.x64 =EE470 +bRemoteConnAllowed.x64=EE474 +bMultimonAllowed.x64 =EE478 +ulMaxDebugSessions.x64=EE47C +bFUSEnabled.x64 =EE480 diff --git a/technical.txt b/technical.txt index a5b2deb..508bd8b 100644 --- a/technical.txt +++ b/technical.txt @@ -99,9 +99,13 @@ Terminal Services supported versions 10.0.14959.1000 (Windows 10 rs_prerelease.161026-1700) [init hook + extended patch] 10.0.14965.1001 (Windows 10 rs_prerelease.161104-1700) [init hook + extended patch] 10.0.14971.1000 (Windows 10 rs_prerelease.161111-1700) [init hook + extended patch] +10.0.14986.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2016.12.23 : +- added support for termsrv.dll 10.0.14986.1000 + 2016.11.19 : - added support for termsrv.dll 10.0.14959.1000 - added support for termsrv.dll 10.0.14965.1001 From e9ad5e709fd5522acf04c414f296d5c49011b74b Mon Sep 17 00:00:00 2001 From: Stas'M Date: Tue, 10 Jan 2017 16:49:33 +0300 Subject: [PATCH 145/208] Update README.md - Add badges --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index c8d6485..c73413e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # RDP Wrapper Library by Stas'M +![Environment](https://img.shields.io/badge/Windows-Vista, 7, 8, 10-brightgreen.svg) +[![Release](https://img.shields.io/github/release/stascorp/rdpwrap.svg)](https://github.com/stascorp/rdpwrap/releases) +![License](https://img.shields.io/github/license/stascorp/rdpwrap.svg) +![Downloads](https://img.shields.io/github/downloads/stascorp/rdpwrap/latest/total.svg) +![TotalDownloads](https://img.shields.io/github/downloads/stascorp/rdpwrap/total.svg) + The goal of this project is to enable Remote Desktop Host support and concurrent RDP sessions on reduced functionality systems for home usage. RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update. From fe535fd34b103fe9ca476585a190e11d89d989fb Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 12 Jan 2017 21:18:08 +0300 Subject: [PATCH 146/208] INI: Add support for new builds (fix #193) 10.0.15002.1001 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c73413e..5375af7 100644 --- a/README.md +++ b/README.md @@ -309,6 +309,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14965.1001 (Windows 10 RS Pre-Release 161104-1700) - 10.0.14971.1000 (Windows 10 RS Pre-Release 161111-1700) - 10.0.14986.1000 (Windows 10 Build 160101.0800) +- 10.0.15002.1001 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 02370c4..de1d891 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2016-12-23 +Updated=2017-01-12 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2526,6 +2526,36 @@ SLInitHook.x64=1 SLInitOffset.x64=26140 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15002.1001] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=346B5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D779 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=47D90 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3424,3 +3454,22 @@ bRemoteConnAllowed.x64=EE474 bMultimonAllowed.x64 =EE478 ulMaxDebugSessions.x64=EE47C bFUSEnabled.x64 =EE480 + +[10.0.15002.1001-SLInit] +bInitialized.x86 =C6F74 +bServerSku.x86 =C6F78 +lMaxUserSessions.x86 =C6F7C +bAppServerAllowed.x86 =C6F80 +bRemoteConnAllowed.x86=C6F84 +bMultimonAllowed.x86 =C6F88 +ulMaxDebugSessions.x86=C6F8C +bFUSEnabled.x86 =C6F90 + +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 2a3ca74..ab73f5c 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2016-12-23 +Updated=2017-01-12 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1507,6 +1507,32 @@ SLInitHook.x64=1 SLInitOffset.x64=26140 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15002.1001] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9698 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=346B5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D779 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=47D90 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2381,3 +2407,22 @@ bRemoteConnAllowed.x64=EE474 bMultimonAllowed.x64 =EE478 ulMaxDebugSessions.x64=EE47C bFUSEnabled.x64 =EE480 + +[10.0.15002.1001-SLInit] +bInitialized.x86 =C6F74 +bServerSku.x86 =C6F78 +lMaxUserSessions.x86 =C6F7C +bAppServerAllowed.x86 =C6F80 +bRemoteConnAllowed.x86=C6F84 +bMultimonAllowed.x86 =C6F88 +ulMaxDebugSessions.x86=C6F8C +bFUSEnabled.x86 =C6F90 + +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 diff --git a/technical.txt b/technical.txt index 508bd8b..219906b 100644 --- a/technical.txt +++ b/technical.txt @@ -100,9 +100,13 @@ Terminal Services supported versions 10.0.14965.1001 (Windows 10 rs_prerelease.161104-1700) [init hook + extended patch] 10.0.14971.1000 (Windows 10 rs_prerelease.161111-1700) [init hook + extended patch] 10.0.14986.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15002.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.01.12 : +- added support for termsrv.dll 10.0.15002.1001 + 2016.12.23 : - added support for termsrv.dll 10.0.14986.1000 From e1f1d7c123a8b390d88c8594d1c4adf70ac9fb7d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 12 Jan 2017 21:30:31 +0300 Subject: [PATCH 147/208] Update README (fix #191) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5375af7..9807663 100644 --- a/README.md +++ b/README.md @@ -356,7 +356,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) - If Terminal Services hangs at startup, try to add **`rdpwrap.dll`** to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
`sc config TermService type= own` -- RDP Wrapper Installer can be removed by AVG Free Antivirus after reboot - add it to exclusions. +- RDP Wrapper can be removed by AVG Free Antivirus and [Norton Antivirus](https://github.com/stascorp/rdpwrap/issues/191) - first make sure you downloaded [official release](https://github.com/stascorp/rdpwrap/releases) from GitHub, then add it to exclusions. Installation instructions: - Download latest release binaries and unpack files From 7412f7a732418b8488e36415c0d22a79ef28cf47 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 12 Jan 2017 21:57:44 +0300 Subject: [PATCH 148/208] Update README (fix #163) --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 9807663..9203e6d 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,15 @@ It's recommended to have original termsrv.dll file with the RDP Wrapper installa - RDPWInst can be used for unattended installation / deployment - Windows 2000, XP and Server 2003 will not be supported +### Key features: +- RDP host server on any Windows edition beginning from Vista +- Console and remote sessions at the same time +- Using the same user simultaneously for local and remote logon (see configuration app) +- Up to 15 concurrent sessions (the actual limitation depends on your hardware and OS version) +- Console and RDP session shadowing (using [Task Manager in Windows 7](http://cdn.freshdesk.com/data/helpdesk/attachments/production/1009641577/original/remote_control.png?1413476051) and lower, and [Remote Desktop Connection in Windows 8](http://woshub.com/rds-shadow-how-to-connect-to-a-user-session-in-windows-server-2012-r2/) and higher) +- Full [multi-monitor support](https://github.com/stascorp/rdpwrap/issues/163) for RDP host +- ...and if you find a new feature not listed here, [tell us](https://github.com/stascorp/rdpwrap/issues/new) ;) + ### Porting to other platforms: - **ARM** for Windows RT (see links below) - **IA-64** for Itanium-based Windows Server? *Well, I have no idea* :) From 091a0b8e92491458da98b38d6deda394078293d7 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 12 Jan 2017 22:00:53 +0300 Subject: [PATCH 149/208] Update README (fix #192) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9203e6d..b2424e0 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ It's recommended to have original termsrv.dll file with the RDP Wrapper installa - RDP host server on any Windows edition beginning from Vista - Console and remote sessions at the same time - Using the same user simultaneously for local and remote logon (see configuration app) -- Up to 15 concurrent sessions (the actual limitation depends on your hardware and OS version) +- Up to [15 concurrent sessions](https://github.com/stascorp/rdpwrap/issues/192) (the actual limitation depends on your hardware and OS version) - Console and RDP session shadowing (using [Task Manager in Windows 7](http://cdn.freshdesk.com/data/helpdesk/attachments/production/1009641577/original/remote_control.png?1413476051) and lower, and [Remote Desktop Connection in Windows 8](http://woshub.com/rds-shadow-how-to-connect-to-a-user-session-in-windows-server-2012-r2/) and higher) - Full [multi-monitor support](https://github.com/stascorp/rdpwrap/issues/163) for RDP host - ...and if you find a new feature not listed here, [tell us](https://github.com/stascorp/rdpwrap/issues/new) ;) From 5814e3fcf126989f1a5d5ecdcffdadb884a16245 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 15 Jan 2017 18:33:49 +0300 Subject: [PATCH 150/208] INI: Add support for new builds (fix #195) 10.0.15007.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b2424e0..948bc2c 100644 --- a/README.md +++ b/README.md @@ -319,6 +319,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14971.1000 (Windows 10 RS Pre-Release 161111-1700) - 10.0.14986.1000 (Windows 10 Build 160101.0800) - 10.0.15002.1001 (Windows 10 Build 160101.0800) +- 10.0.15007.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index de1d891..90efe2a 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-01-12 +Updated=2017-01-15 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2556,6 +2556,36 @@ SLInitHook.x64=1 SLInitOffset.x64=E000 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15007.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9648 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34665 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D719 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=47D30 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3473,3 +3503,22 @@ bRemoteConnAllowed.x64=F0484 bMultimonAllowed.x64 =F0488 ulMaxDebugSessions.x64=F048C bFUSEnabled.x64 =F0490 + +[10.0.15007.1000-SLInit] +bInitialized.x86 =C6F74 +bServerSku.x86 =C6F78 +lMaxUserSessions.x86 =C6F7C +bAppServerAllowed.x86 =C6F80 +bRemoteConnAllowed.x86=C6F84 +bMultimonAllowed.x86 =C6F88 +ulMaxDebugSessions.x86=C6F8C +bFUSEnabled.x86 =C6F90 + +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index ab73f5c..b144d38 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-01-12 +Updated=2017-01-15 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1533,6 +1533,32 @@ SLInitHook.x64=1 SLInitOffset.x64=E000 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15007.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9648 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34665 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D719 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=47D30 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2426,3 +2452,22 @@ bRemoteConnAllowed.x64=F0484 bMultimonAllowed.x64 =F0488 ulMaxDebugSessions.x64=F048C bFUSEnabled.x64 =F0490 + +[10.0.15007.1000-SLInit] +bInitialized.x86 =C6F74 +bServerSku.x86 =C6F78 +lMaxUserSessions.x86 =C6F7C +bAppServerAllowed.x86 =C6F80 +bRemoteConnAllowed.x86=C6F84 +bMultimonAllowed.x86 =C6F88 +ulMaxDebugSessions.x86=C6F8C +bFUSEnabled.x86 =C6F90 + +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 diff --git a/technical.txt b/technical.txt index 219906b..7982344 100644 --- a/technical.txt +++ b/technical.txt @@ -101,9 +101,13 @@ Terminal Services supported versions 10.0.14971.1000 (Windows 10 rs_prerelease.161111-1700) [init hook + extended patch] 10.0.14986.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15002.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15007.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.01.15 : +- added support for termsrv.dll 10.0.15007.1000 + 2017.01.12 : - added support for termsrv.dll 10.0.15002.1001 From 9699e08d1a193ba5f0137276fb3f9e1a29646077 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 21 Jan 2017 19:32:23 +0300 Subject: [PATCH 151/208] INI: Add support for new builds (fix #199) 10.0.15014.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 948bc2c..201fcc7 100644 --- a/README.md +++ b/README.md @@ -320,6 +320,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14986.1000 (Windows 10 Build 160101.0800) - 10.0.15002.1001 (Windows 10 Build 160101.0800) - 10.0.15007.1000 (Windows 10 Build 160101.0800) +- 10.0.15014.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 90efe2a..47aad07 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-01-15 +Updated=2017-01-21 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2586,6 +2586,36 @@ SLInitHook.x64=1 SLInitOffset.x64=E000 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15014.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9648 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34685 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D739 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=47D50 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3522,3 +3552,22 @@ bRemoteConnAllowed.x64=F0484 bMultimonAllowed.x64 =F0488 ulMaxDebugSessions.x64=F048C bFUSEnabled.x64 =F0490 + +[10.0.15014.1000-SLInit] +bInitialized.x86 =C6F74 +bServerSku.x86 =C6F78 +lMaxUserSessions.x86 =C6F7C +bAppServerAllowed.x86 =C6F80 +bRemoteConnAllowed.x86=C6F84 +bMultimonAllowed.x86 =C6F88 +ulMaxDebugSessions.x86=C6F8C +bFUSEnabled.x86 =C6F90 + +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index b144d38..1eca027 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-01-15 +Updated=2017-01-21 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1559,6 +1559,32 @@ SLInitHook.x64=1 SLInitOffset.x64=E000 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15014.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9648 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34685 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D739 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=47D50 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2471,3 +2497,22 @@ bRemoteConnAllowed.x64=F0484 bMultimonAllowed.x64 =F0488 ulMaxDebugSessions.x64=F048C bFUSEnabled.x64 =F0490 + +[10.0.15014.1000-SLInit] +bInitialized.x86 =C6F74 +bServerSku.x86 =C6F78 +lMaxUserSessions.x86 =C6F7C +bAppServerAllowed.x86 =C6F80 +bRemoteConnAllowed.x86=C6F84 +bMultimonAllowed.x86 =C6F88 +ulMaxDebugSessions.x86=C6F8C +bFUSEnabled.x86 =C6F90 + +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 diff --git a/technical.txt b/technical.txt index 7982344..223ae32 100644 --- a/technical.txt +++ b/technical.txt @@ -102,9 +102,13 @@ Terminal Services supported versions 10.0.14986.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15002.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15007.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15014.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.01.21 : +- added support for termsrv.dll 10.0.15014.1000 + 2017.01.15 : - added support for termsrv.dll 10.0.15007.1000 From 9b666a396107bedaa41b814746f052b23b678528 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 25 Jan 2017 15:15:39 +0300 Subject: [PATCH 152/208] README: Web archive link for Andrew Block --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 201fcc7..e513a9e 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ It's recommended to have original termsrv.dll file with the RDP Wrapper installa - **x86 Delphi version** can be built with *Embarcadero RAD Studio 2010* - **x86/x64 C++ version** can be built with *Microsoft Visual Studio 2013* -[andrewblock]: http://andrewblock.net/2013/07/19/enable-remote-desktop-on-windows-8-core/ +[andrewblock]: http://web.archive.org/web/20150810054558/http://andrewblock.net/enable-remote-desktop-on-windows-8-core/ [mydigitallife]: http://forums.mydigitallife.info/threads/55935-RDP-Wrapper-Library-(works-with-Windows-8-1-Basic) [xda-dev]: http://forum.xda-developers.com/showthread.php?t=2093525&page=3 [yt-updating]: http://www.youtube.com/watch?v=W9BpbEt1yJw From 0f0fbeb71f1bb2509a3b229412da954781541ade Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 28 Jan 2017 21:16:33 +0300 Subject: [PATCH 153/208] INI: Add support for new builds (fix #203) 10.0.15019.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 52 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 48 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 103 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e513a9e..ae1ae87 100644 --- a/README.md +++ b/README.md @@ -321,6 +321,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15002.1001 (Windows 10 Build 160101.0800) - 10.0.15007.1000 (Windows 10 Build 160101.0800) - 10.0.15014.1000 (Windows 10 Build 160101.0800) +- 10.0.15019.1000 (Windows 10 RS Pre-Release 170121-1513) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 47aad07..38e7680 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-01-21 +Updated=2017-01-28 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -51,6 +51,7 @@ CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB CDefPolicy_Query_eax_esi=B80001000089862003000090 CDefPolicy_Query_eax_rdi=B80001000089873806000090 CDefPolicy_Query_eax_ecx=B80001000089812003000090 +CDefPolicy_Query_eax_ecx_jmp=B800010000898120030000EB0E CDefPolicy_Query_eax_rcx=B80001000089813806000090 [6.0.6000.16386] @@ -2616,6 +2617,36 @@ SLInitHook.x64=1 SLInitOffset.x64=E000 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15019.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A39F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=928FB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=BADF5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=FBDD +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=A8479 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx_jmp +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=20AAE +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=3C240 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24480 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3571,3 +3602,22 @@ bRemoteConnAllowed.x64=F0484 bMultimonAllowed.x64 =F0488 ulMaxDebugSessions.x64=F048C bFUSEnabled.x64 =F0490 + +[10.0.15019.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =ECBDC +lMaxUserSessions.x64 =ECBE0 +bAppServerAllowed.x64 =ECBE4 +bInitialized.x64 =F0490 +bRemoteConnAllowed.x64=F0494 +bMultimonAllowed.x64 =F0498 +ulMaxDebugSessions.x64=F049C +bFUSEnabled.x64 =F04A0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 1eca027..3280615 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-01-21 +Updated=2017-01-28 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -33,6 +33,7 @@ CDefPolicy_Query_eax_rcx_jmp=B80001000089813806000090EB CDefPolicy_Query_eax_esi=B80001000089862003000090 CDefPolicy_Query_eax_rdi=B80001000089873806000090 CDefPolicy_Query_eax_ecx=B80001000089812003000090 +CDefPolicy_Query_eax_ecx_jmp=B800010000898120030000EB0E CDefPolicy_Query_eax_rcx=B80001000089813806000090 [6.0.6000.16386] @@ -1585,6 +1586,32 @@ SLInitHook.x64=1 SLInitOffset.x64=E000 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15019.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A39F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=928FB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=BADF5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=FBDD +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=A8479 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx_jmp +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=20AAE +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=3C240 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=24480 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2516,3 +2543,22 @@ bRemoteConnAllowed.x64=F0484 bMultimonAllowed.x64 =F0488 ulMaxDebugSessions.x64=F048C bFUSEnabled.x64 =F0490 + +[10.0.15019.1000-SLInit] +bInitialized.x86 =C5F68 +bServerSku.x86 =C5F6C +lMaxUserSessions.x86 =C5F70 +bAppServerAllowed.x86 =C5F74 +bRemoteConnAllowed.x86=C5F78 +bMultimonAllowed.x86 =C5F7C +ulMaxDebugSessions.x86=C5F80 +bFUSEnabled.x86 =C5F84 + +bServerSku.x64 =ECBDC +lMaxUserSessions.x64 =ECBE0 +bAppServerAllowed.x64 =ECBE4 +bInitialized.x64 =F0490 +bRemoteConnAllowed.x64=F0494 +bMultimonAllowed.x64 =F0498 +ulMaxDebugSessions.x64=F049C +bFUSEnabled.x64 =F04A0 diff --git a/technical.txt b/technical.txt index 223ae32..557217e 100644 --- a/technical.txt +++ b/technical.txt @@ -103,9 +103,13 @@ Terminal Services supported versions 10.0.15002.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15007.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15014.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15019.1000 (Windows 10 rs_prerelease.170121-1513) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.01.28 : +- added support for termsrv.dll 10.0.15019.1000 + 2017.01.21 : - added support for termsrv.dll 10.0.15014.1000 From 1e93d3ca2024d129f72f83ec68c18fd101fa2e64 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 3 Feb 2017 01:53:42 +0300 Subject: [PATCH 154/208] INI: Add support for new builds (fix #204) 10.0.15025.1000 (x64 only) --- README.md | 1 + res/rdpwrap-ini-kb.txt | 30 +++++++++++++++++++++++++++++- res/rdpwrap.ini | 26 +++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ae1ae87..44ce24b 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15007.1000 (Windows 10 Build 160101.0800) - 10.0.15014.1000 (Windows 10 Build 160101.0800) - 10.0.15019.1000 (Windows 10 RS Pre-Release 170121-1513) +- 10.0.15025.1000 (Windows 10 RS Pre-Release 170127-1750) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 38e7680..0609bc7 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-01-28 +Updated=2017-02-03 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2647,6 +2647,24 @@ SLInitHook.x64=1 SLInitOffset.x64=24480 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15025.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9259B +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=2C08D +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1DD0E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E5B8 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3621,3 +3639,13 @@ bRemoteConnAllowed.x64=F0494 bMultimonAllowed.x64 =F0498 ulMaxDebugSessions.x64=F049C bFUSEnabled.x64 =F04A0 + +[10.0.15025.1000-SLInit] +bServerSku.x64 =EE3E0 +lMaxUserSessions.x64 =EE3E4 +bAppServerAllowed.x64 =EE3E8 +bInitialized.x64 =EF488 +bRemoteConnAllowed.x64=EF48C +bMultimonAllowed.x64 =EF490 +ulMaxDebugSessions.x64=EF494 +bFUSEnabled.x64 =EF498 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 3280615..8c416c9 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-01-28 +Updated=2017-02-03 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1612,6 +1612,20 @@ SLInitHook.x64=1 SLInitOffset.x64=24480 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15025.1000] +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=9259B +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=2C08D +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1DD0E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=E5B8 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2562,3 +2576,13 @@ bRemoteConnAllowed.x64=F0494 bMultimonAllowed.x64 =F0498 ulMaxDebugSessions.x64=F049C bFUSEnabled.x64 =F04A0 + +[10.0.15025.1000-SLInit] +bServerSku.x64 =EE3E0 +lMaxUserSessions.x64 =EE3E4 +bAppServerAllowed.x64 =EE3E8 +bInitialized.x64 =EF488 +bRemoteConnAllowed.x64=EF48C +bMultimonAllowed.x64 =EF490 +ulMaxDebugSessions.x64=EF494 +bFUSEnabled.x64 =EF498 diff --git a/technical.txt b/technical.txt index 557217e..23ec30f 100644 --- a/technical.txt +++ b/technical.txt @@ -104,9 +104,13 @@ Terminal Services supported versions 10.0.15007.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15014.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15019.1000 (Windows 10 rs_prerelease.170121-1513) [init hook + extended patch] +10.0.15025.1000 (Windows 10 rs_prerelease.170127-1750) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.02.03 : +- added support for termsrv.dll 10.0.15025.1000 x64 + 2017.01.28 : - added support for termsrv.dll 10.0.15019.1000 From acaf2b2f7246cf9ed70354b651eb232a85d9b534 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 1 Mar 2017 21:21:49 +0300 Subject: [PATCH 155/208] INI: Add support for new builds (fix #207) 10.0.15031.0 x86/x64 10.0.15042.0 x86/x64 --- README.md | 2 + res/rdpwrap-ini-kb.txt | 100 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 92 ++++++++++++++++++++++++++++++++++++- technical.txt | 6 +++ 4 files changed, 198 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 44ce24b..d85d954 100644 --- a/README.md +++ b/README.md @@ -323,6 +323,8 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15014.1000 (Windows 10 Build 160101.0800) - 10.0.15019.1000 (Windows 10 RS Pre-Release 170121-1513) - 10.0.15025.1000 (Windows 10 RS Pre-Release 170127-1750) +- 10.0.15031.0 (Windows 10 RS2 Release 170204-1546) +- 10.0.15042.0 (Windows 10 RS2 Release 170219-2329) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 0609bc7..ff13c77 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-02-03 +Updated=2017-03-01 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2665,6 +2665,66 @@ SLInitHook.x64=1 SLInitOffset.x64=E5B8 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15031.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5BA8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E221 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=30A75 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A114 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2B1D9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C7B5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4532D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D80C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.15042.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5BA8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E221 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=30A75 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A114 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2B1D9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C7B5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4532D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D80C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3649,3 +3709,41 @@ bRemoteConnAllowed.x64=EF48C bMultimonAllowed.x64 =EF490 ulMaxDebugSessions.x64=EF494 bFUSEnabled.x64 =EF498 + +[10.0.15031.0-SLInit] +bInitialized.x86 =C2F6C +bServerSku.x86 =C2F70 +lMaxUserSessions.x86 =C2F74 +bAppServerAllowed.x86 =C2F78 +bRemoteConnAllowed.x86=C2F7C +bMultimonAllowed.x86 =C2F80 +ulMaxDebugSessions.x86=C2F84 +bFUSEnabled.x86 =C2F88 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA488 +bRemoteConnAllowed.x64=EA48C +bMultimonAllowed.x64 =EA490 +ulMaxDebugSessions.x64=EA494 +bFUSEnabled.x64 =EA498 + +[10.0.15042.0-SLInit] +bInitialized.x86 =C2F6C +bServerSku.x86 =C2F70 +lMaxUserSessions.x86 =C2F74 +bAppServerAllowed.x86 =C2F78 +bRemoteConnAllowed.x86=C2F7C +bMultimonAllowed.x86 =C2F80 +ulMaxDebugSessions.x86=C2F84 +bFUSEnabled.x86 =C2F88 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA488 +bRemoteConnAllowed.x64=EA48C +bMultimonAllowed.x64 =EA490 +ulMaxDebugSessions.x64=EA494 +bFUSEnabled.x64 =EA498 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 8c416c9..9392f60 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-02-03 +Updated=2017-03-01 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1626,6 +1626,58 @@ SLInitHook.x64=1 SLInitOffset.x64=E5B8 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15031.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5BA8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E221 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30A75 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A114 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2B1D9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C7B5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4532D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D80C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.15042.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5BA8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E221 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=30A75 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=2A114 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2B1D9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1C7B5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4532D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D80C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2586,3 +2638,41 @@ bRemoteConnAllowed.x64=EF48C bMultimonAllowed.x64 =EF490 ulMaxDebugSessions.x64=EF494 bFUSEnabled.x64 =EF498 + +[10.0.15031.0-SLInit] +bInitialized.x86 =C2F6C +bServerSku.x86 =C2F70 +lMaxUserSessions.x86 =C2F74 +bAppServerAllowed.x86 =C2F78 +bRemoteConnAllowed.x86=C2F7C +bMultimonAllowed.x86 =C2F80 +ulMaxDebugSessions.x86=C2F84 +bFUSEnabled.x86 =C2F88 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA488 +bRemoteConnAllowed.x64=EA48C +bMultimonAllowed.x64 =EA490 +ulMaxDebugSessions.x64=EA494 +bFUSEnabled.x64 =EA498 + +[10.0.15042.0-SLInit] +bInitialized.x86 =C2F6C +bServerSku.x86 =C2F70 +lMaxUserSessions.x86 =C2F74 +bAppServerAllowed.x86 =C2F78 +bRemoteConnAllowed.x86=C2F7C +bMultimonAllowed.x86 =C2F80 +ulMaxDebugSessions.x86=C2F84 +bFUSEnabled.x86 =C2F88 + +bServerSku.x64 =E93E0 +lMaxUserSessions.x64 =E93E4 +bAppServerAllowed.x64 =E93E8 +bInitialized.x64 =EA488 +bRemoteConnAllowed.x64=EA48C +bMultimonAllowed.x64 =EA490 +ulMaxDebugSessions.x64=EA494 +bFUSEnabled.x64 =EA498 diff --git a/technical.txt b/technical.txt index 23ec30f..469cb67 100644 --- a/technical.txt +++ b/technical.txt @@ -105,9 +105,15 @@ Terminal Services supported versions 10.0.15014.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15019.1000 (Windows 10 rs_prerelease.170121-1513) [init hook + extended patch] 10.0.15025.1000 (Windows 10 rs_prerelease.170127-1750) [init hook + extended patch] +10.0.15031.0 (Windows 10 rs2_release.170204-1546) [init hook + extended patch] +10.0.15042.0 (Windows 10 rs2_release.170219-2329) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.03.01 : +- added support for termsrv.dll 10.0.15031.0 +- added support for termsrv.dll 10.0.15042.0 + 2017.02.03 : - added support for termsrv.dll 10.0.15025.1000 x64 From ee1fa16bf5add4feb28e69b029640606cc3600cf Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 2 Mar 2017 20:36:12 +0300 Subject: [PATCH 156/208] INI: Add support for new builds (fix #211) 10.0.15046.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d85d954..e81b9b4 100644 --- a/README.md +++ b/README.md @@ -325,6 +325,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15025.1000 (Windows 10 RS Pre-Release 170127-1750) - 10.0.15031.0 (Windows 10 RS2 Release 170204-1546) - 10.0.15042.0 (Windows 10 RS2 Release 170219-2329) +- 10.0.15046.0 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index ff13c77..1450ff6 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-03-01 +Updated=2017-03-02 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2725,6 +2725,36 @@ SLInitHook.x64=1 SLInitOffset.x64=D80C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15046.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=80BB8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E361 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=31E95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=15E14 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=38A19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=E745 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=9422D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21FFC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3747,3 +3777,22 @@ bRemoteConnAllowed.x64=EA48C bMultimonAllowed.x64 =EA490 ulMaxDebugSessions.x64=EA494 bFUSEnabled.x64 =EA498 + +[10.0.15046.0-SLInit] +bInitialized.x86 =C4F18 +bServerSku.x86 =C4F1C +lMaxUserSessions.x86 =C4F20 +bAppServerAllowed.x86 =C4F24 +bRemoteConnAllowed.x86=C4F28 +ulMaxDebugSessions.x86=C4F2C +bMultimonAllowed.x86 =C5010 +bFUSEnabled.x86 =C5014 + +bInitialized.x64 =EB468 +bRemoteConnAllowed.x64=EB46C +bMultimonAllowed.x64 =EB470 +ulMaxDebugSessions.x64=EB474 +bFUSEnabled.x64 =EB478 +bServerSku.x64 =EB484 +lMaxUserSessions.x64 =EB488 +bAppServerAllowed.x64 =EB48C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 9392f60..d5baf63 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-03-01 +Updated=2017-03-02 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1678,6 +1678,32 @@ SLInitHook.x64=1 SLInitOffset.x64=D80C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15046.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=80BB8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E361 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=31E95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=15E14 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=38A19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=E745 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=9422D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21FFC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2676,3 +2702,22 @@ bRemoteConnAllowed.x64=EA48C bMultimonAllowed.x64 =EA490 ulMaxDebugSessions.x64=EA494 bFUSEnabled.x64 =EA498 + +[10.0.15046.0-SLInit] +bInitialized.x86 =C4F18 +bServerSku.x86 =C4F1C +lMaxUserSessions.x86 =C4F20 +bAppServerAllowed.x86 =C4F24 +bRemoteConnAllowed.x86=C4F28 +ulMaxDebugSessions.x86=C4F2C +bMultimonAllowed.x86 =C5010 +bFUSEnabled.x86 =C5014 + +bInitialized.x64 =EB468 +bRemoteConnAllowed.x64=EB46C +bMultimonAllowed.x64 =EB470 +ulMaxDebugSessions.x64=EB474 +bFUSEnabled.x64 =EB478 +bServerSku.x64 =EB484 +lMaxUserSessions.x64 =EB488 +bAppServerAllowed.x64 =EB48C diff --git a/technical.txt b/technical.txt index 469cb67..3aa906d 100644 --- a/technical.txt +++ b/technical.txt @@ -107,9 +107,13 @@ Terminal Services supported versions 10.0.15025.1000 (Windows 10 rs_prerelease.170127-1750) [init hook + extended patch] 10.0.15031.0 (Windows 10 rs2_release.170204-1546) [init hook + extended patch] 10.0.15042.0 (Windows 10 rs2_release.170219-2329) [init hook + extended patch] +10.0.15046.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.03.02 : +- added support for termsrv.dll 10.0.15046.0 + 2017.03.01 : - added support for termsrv.dll 10.0.15031.0 - added support for termsrv.dll 10.0.15042.0 From fe3a61fa245a793038a53aa547636ba017335972 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 5 Mar 2017 00:39:53 +0300 Subject: [PATCH 157/208] INI: Add support for new builds (fix #212) 10.0.15048.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e81b9b4..d9dd763 100644 --- a/README.md +++ b/README.md @@ -326,6 +326,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15031.0 (Windows 10 RS2 Release 170204-1546) - 10.0.15042.0 (Windows 10 RS2 Release 170219-2329) - 10.0.15046.0 (Windows 10 Build 160101.0800) +- 10.0.15048.0 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 1450ff6..61d4782 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-03-02 +Updated=2017-03-05 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2755,6 +2755,36 @@ SLInitHook.x64=1 SLInitOffset.x64=21FFC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15048.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=80BB8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E361 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=31E95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=15E14 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=38A19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=E745 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=9422D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21FFC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3796,3 +3826,22 @@ bFUSEnabled.x64 =EB478 bServerSku.x64 =EB484 lMaxUserSessions.x64 =EB488 bAppServerAllowed.x64 =EB48C + +[10.0.15048.0-SLInit] +bInitialized.x86 =C4F18 +bServerSku.x86 =C4F1C +lMaxUserSessions.x86 =C4F20 +bAppServerAllowed.x86 =C4F24 +bRemoteConnAllowed.x86=C4F28 +ulMaxDebugSessions.x86=C4F2C +bMultimonAllowed.x86 =C5010 +bFUSEnabled.x86 =C5014 + +bInitialized.x64 =EB468 +bRemoteConnAllowed.x64=EB46C +bMultimonAllowed.x64 =EB470 +ulMaxDebugSessions.x64=EB474 +bFUSEnabled.x64 =EB478 +bServerSku.x64 =EB484 +lMaxUserSessions.x64 =EB488 +bAppServerAllowed.x64 =EB48C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index d5baf63..5fdbdfc 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-03-02 +Updated=2017-03-05 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1704,6 +1704,32 @@ SLInitHook.x64=1 SLInitOffset.x64=21FFC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15048.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=80BB8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E361 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=31E95 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=15E14 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=38A19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=E745 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=9422D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21FFC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2721,3 +2747,22 @@ bFUSEnabled.x64 =EB478 bServerSku.x64 =EB484 lMaxUserSessions.x64 =EB488 bAppServerAllowed.x64 =EB48C + +[10.0.15048.0-SLInit] +bInitialized.x86 =C4F18 +bServerSku.x86 =C4F1C +lMaxUserSessions.x86 =C4F20 +bAppServerAllowed.x86 =C4F24 +bRemoteConnAllowed.x86=C4F28 +ulMaxDebugSessions.x86=C4F2C +bMultimonAllowed.x86 =C5010 +bFUSEnabled.x86 =C5014 + +bInitialized.x64 =EB468 +bRemoteConnAllowed.x64=EB46C +bMultimonAllowed.x64 =EB470 +ulMaxDebugSessions.x64=EB474 +bFUSEnabled.x64 =EB478 +bServerSku.x64 =EB484 +lMaxUserSessions.x64 =EB488 +bAppServerAllowed.x64 =EB48C diff --git a/technical.txt b/technical.txt index 3aa906d..79d3085 100644 --- a/technical.txt +++ b/technical.txt @@ -108,9 +108,13 @@ Terminal Services supported versions 10.0.15031.0 (Windows 10 rs2_release.170204-1546) [init hook + extended patch] 10.0.15042.0 (Windows 10 rs2_release.170219-2329) [init hook + extended patch] 10.0.15046.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15048.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.03.05 : +- added support for termsrv.dll 10.0.15048.0 + 2017.03.02 : - added support for termsrv.dll 10.0.15046.0 From 7d31342dcf559b38de6d02185652bdf8b294390d Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 14 Mar 2017 23:41:47 +0300 Subject: [PATCH 158/208] INI: Add support for new builds (fix #218) 10.0.15055.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d9dd763..8046a87 100644 --- a/README.md +++ b/README.md @@ -327,6 +327,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15042.0 (Windows 10 RS2 Release 170219-2329) - 10.0.15046.0 (Windows 10 Build 160101.0800) - 10.0.15048.0 (Windows 10 Build 160101.0800) +- 10.0.15055.0 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 61d4782..4f3e387 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-03-05 +Updated=2017-03-14 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2785,6 +2785,36 @@ SLInitHook.x64=1 SLInitOffset.x64=21FFC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15055.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5348 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D2E1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=374C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=181E4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3BAD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10B65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=44EFF +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22AEC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3845,3 +3875,22 @@ bFUSEnabled.x64 =EB478 bServerSku.x64 =EB484 lMaxUserSessions.x64 =EB488 bAppServerAllowed.x64 =EB48C + +[10.0.15055.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bServerSku.x64 =E83D8 +lMaxUserSessions.x64 =E83DC +bAppServerAllowed.x64 =E83E0 +bInitialized.x64 =E9490 +bRemoteConnAllowed.x64=E9494 +bMultimonAllowed.x64 =E9498 +ulMaxDebugSessions.x64=E949C +bFUSEnabled.x64 =E94A0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 5fdbdfc..e715bd9 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-03-05 +Updated=2017-03-14 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1730,6 +1730,32 @@ SLInitHook.x64=1 SLInitOffset.x64=21FFC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15055.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5348 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D2E1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=374C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=181E4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3BAD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10B65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=44EFF +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22AEC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2766,3 +2792,22 @@ bFUSEnabled.x64 =EB478 bServerSku.x64 =EB484 lMaxUserSessions.x64 =EB488 bAppServerAllowed.x64 =EB48C + +[10.0.15055.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bServerSku.x64 =E83D8 +lMaxUserSessions.x64 =E83DC +bAppServerAllowed.x64 =E83E0 +bInitialized.x64 =E9490 +bRemoteConnAllowed.x64=E9494 +bMultimonAllowed.x64 =E9498 +ulMaxDebugSessions.x64=E949C +bFUSEnabled.x64 =E94A0 diff --git a/technical.txt b/technical.txt index 79d3085..256e724 100644 --- a/technical.txt +++ b/technical.txt @@ -109,9 +109,13 @@ Terminal Services supported versions 10.0.15042.0 (Windows 10 rs2_release.170219-2329) [init hook + extended patch] 10.0.15046.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15048.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15055.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.03.14 : +- added support for termsrv.dll 10.0.15055.0 + 2017.03.05 : - added support for termsrv.dll 10.0.15048.0 From df2b23e2c037165b8848188480027c7127b53885 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 16 Mar 2017 20:18:44 +0300 Subject: [PATCH 159/208] INI: Add support for new builds (fix #219) 10.0.15058.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8046a87..7723104 100644 --- a/README.md +++ b/README.md @@ -328,6 +328,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15046.0 (Windows 10 Build 160101.0800) - 10.0.15048.0 (Windows 10 Build 160101.0800) - 10.0.15055.0 (Windows 10 Build 160101.0800) +- 10.0.15058.0 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 4f3e387..f4138fd 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-03-14 +Updated=2017-03-16 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2815,6 +2815,36 @@ SLInitHook.x64=1 SLInitOffset.x64=22AEC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15058.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3894,3 +3924,22 @@ bRemoteConnAllowed.x64=E9494 bMultimonAllowed.x64 =E9498 ulMaxDebugSessions.x64=E949C bFUSEnabled.x64 =E94A0 + +[10.0.15058.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index e715bd9..e14bce7 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-03-14 +Updated=2017-03-16 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1756,6 +1756,32 @@ SLInitHook.x64=1 SLInitOffset.x64=22AEC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15058.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2811,3 +2837,22 @@ bRemoteConnAllowed.x64=E9494 bMultimonAllowed.x64 =E9498 ulMaxDebugSessions.x64=E949C bFUSEnabled.x64 =E94A0 + +[10.0.15058.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C diff --git a/technical.txt b/technical.txt index 256e724..277e241 100644 --- a/technical.txt +++ b/technical.txt @@ -110,9 +110,13 @@ Terminal Services supported versions 10.0.15046.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15048.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15055.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15058.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.03.16 : +- added support for termsrv.dll 10.0.15058.0 + 2017.03.14 : - added support for termsrv.dll 10.0.15055.0 From 51dd6cd440c5e8a3d286edcae236b8e42efdbef9 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Mon, 20 Mar 2017 11:08:23 +0300 Subject: [PATCH 160/208] README: Fix badge image link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7723104..0fa61e3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # RDP Wrapper Library by Stas'M -![Environment](https://img.shields.io/badge/Windows-Vista, 7, 8, 10-brightgreen.svg) +![Environment](https://img.shields.io/badge/Windows-Vista,%207,%208,%2010-brightgreen.svg) [![Release](https://img.shields.io/github/release/stascorp/rdpwrap.svg)](https://github.com/stascorp/rdpwrap/releases) ![License](https://img.shields.io/github/license/stascorp/rdpwrap.svg) ![Downloads](https://img.shields.io/github/downloads/stascorp/rdpwrap/latest/total.svg) From 4f85c52a45ab759545696a0b39dcf13e3edb4d31 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Mon, 20 Mar 2017 11:22:56 +0300 Subject: [PATCH 161/208] README: Add RemoteFX known issue --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0fa61e3..0e7f59e 100644 --- a/README.md +++ b/README.md @@ -372,6 +372,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh #### Known issues: - Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) - Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) +- RDP Wrapper does not work with RemoteFX enabled hosts - [#127](https://github.com/stascorp/rdpwrap/issues/127), [#208](https://github.com/stascorp/rdpwrap/issues/208), [#216](https://github.com/stascorp/rdpwrap/issues/216) - RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) - If Terminal Services hangs at startup, try to add **`rdpwrap.dll`** to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command:
`sc config TermService type= own` From 2ea06e79e71b945b480f19cef76406c0ed732d53 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Mon, 20 Mar 2017 11:25:19 +0300 Subject: [PATCH 162/208] README: Move known issues higher --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 0e7f59e..a26e0c3 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,15 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh `RDPCheck` is a very simple application and only for testing purposes. You need to use Microsoft Remote Desktop Client (`mstsc.exe`) if you want to customize the settings. You can use `127.0.0.1` or `127.0.0.2` address for loopback connection. +### Known issues: +- Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) +- Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) +- RDP Wrapper does not work with RemoteFX enabled hosts - [#127](https://github.com/stascorp/rdpwrap/issues/127), [#208](https://github.com/stascorp/rdpwrap/issues/208), [#216](https://github.com/stascorp/rdpwrap/issues/216) +- RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) +- If Terminal Services hangs at startup, try to add **`rdpwrap.dll`** to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command: +
`sc config TermService type= own` +- RDP Wrapper can be removed by AVG Free Antivirus and [Norton Antivirus](https://github.com/stascorp/rdpwrap/issues/191) - first make sure you downloaded [official release](https://github.com/stascorp/rdpwrap/releases) from GitHub, then add it to exclusions. + --- ### Change log: @@ -369,15 +378,6 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - Windows 10 Enterprise - Windows Server 2016 Technical Preview -#### Known issues: -- Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) -- Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) -- RDP Wrapper does not work with RemoteFX enabled hosts - [#127](https://github.com/stascorp/rdpwrap/issues/127), [#208](https://github.com/stascorp/rdpwrap/issues/208), [#216](https://github.com/stascorp/rdpwrap/issues/216) -- RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) -- If Terminal Services hangs at startup, try to add **`rdpwrap.dll`** to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command: -
`sc config TermService type= own` -- RDP Wrapper can be removed by AVG Free Antivirus and [Norton Antivirus](https://github.com/stascorp/rdpwrap/issues/191) - first make sure you downloaded [official release](https://github.com/stascorp/rdpwrap/releases) from GitHub, then add it to exclusions. - Installation instructions: - Download latest release binaries and unpack files - Right-click on **`install.bat`** and select Run as Administrator From ea1c0dd97dcb7edc50a9cb9c343f32207c723e78 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Mon, 20 Mar 2017 11:48:40 +0300 Subject: [PATCH 163/208] README: Add known issue (fix #215) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a26e0c3..9935023 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh ### Known issues: - Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) - Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) +- Terminal Service does not start after installing some updates or "Access Denied" issue - [#215](https://github.com/stascorp/rdpwrap/issues/215), [#101](https://github.com/stascorp/rdpwrap/issues/101) - RDP Wrapper does not work with RemoteFX enabled hosts - [#127](https://github.com/stascorp/rdpwrap/issues/127), [#208](https://github.com/stascorp/rdpwrap/issues/208), [#216](https://github.com/stascorp/rdpwrap/issues/216) - RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) - If Terminal Services hangs at startup, try to add **`rdpwrap.dll`** to antivirus exclusions. Also try to isolate RDP Wrapper from other shared services by the command: From baddaab28eb63a08a6f32d0934f87cd896baeeb2 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Tue, 21 Mar 2017 21:07:52 +0300 Subject: [PATCH 164/208] INI: Add support for new builds (fix #222) 10.0.15061.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9935023..56e2051 100644 --- a/README.md +++ b/README.md @@ -339,6 +339,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15048.0 (Windows 10 Build 160101.0800) - 10.0.15055.0 (Windows 10 Build 160101.0800) - 10.0.15058.0 (Windows 10 Build 160101.0800) +- 10.0.15061.0 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index f4138fd..cabbe22 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-03-16 +Updated=2017-03-21 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2845,6 +2845,36 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15061.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3943,3 +3973,22 @@ bFUSEnabled.x64 =E9478 bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C + +[10.0.15061.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index e14bce7..1079695 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-03-16 +Updated=2017-03-21 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1782,6 +1782,32 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15061.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2856,3 +2882,22 @@ bFUSEnabled.x64 =E9478 bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C + +[10.0.15061.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C diff --git a/technical.txt b/technical.txt index 277e241..354f3f6 100644 --- a/technical.txt +++ b/technical.txt @@ -111,9 +111,13 @@ Terminal Services supported versions 10.0.15048.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15055.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15058.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15061.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.03.21 : +- added support for termsrv.dll 10.0.15061.0 + 2017.03.16 : - added support for termsrv.dll 10.0.15058.0 From 49770e6bb8bbb78f09679421c6294a6613519ed5 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 22 Mar 2017 20:38:58 +0300 Subject: [PATCH 165/208] INI: Add support for new builds (fix #224) 10.0.15063.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 56e2051..c6ff371 100644 --- a/README.md +++ b/README.md @@ -340,6 +340,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15055.0 (Windows 10 Build 160101.0800) - 10.0.15058.0 (Windows 10 Build 160101.0800) - 10.0.15061.0 (Windows 10 Build 160101.0800) +- 10.0.15063.0 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index cabbe22..875aa72 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-03-21 +Updated=2017-03-22 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2875,6 +2875,36 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -3992,3 +4022,22 @@ bFUSEnabled.x64 =E9478 bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C + +[10.0.15063.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 1079695..89a91ce 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-03-21 +Updated=2017-03-22 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1808,6 +1808,32 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2901,3 +2927,22 @@ bFUSEnabled.x64 =E9478 bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C + +[10.0.15063.0-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C diff --git a/technical.txt b/technical.txt index 354f3f6..2a852b4 100644 --- a/technical.txt +++ b/technical.txt @@ -112,9 +112,13 @@ Terminal Services supported versions 10.0.15055.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15058.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15061.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15063.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.03.22 : +- added support for termsrv.dll 10.0.15063.0 + 2017.03.21 : - added support for termsrv.dll 10.0.15061.0 From 8b2e24cecf62dba1cbcbec07cc033541de5516f1 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 3 May 2017 23:27:12 +0300 Subject: [PATCH 166/208] INI: Add support for new builds - 10.0.16179.1000 (x86/x64) - 10.0.16184.1001 (x86/x64) --- README.md | 2 + res/rdpwrap-ini-kb.txt | 100 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 92 ++++++++++++++++++++++++++++++++++++- technical.txt | 6 +++ 4 files changed, 198 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c6ff371..257f28e 100644 --- a/README.md +++ b/README.md @@ -341,6 +341,8 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15058.0 (Windows 10 Build 160101.0800) - 10.0.15061.0 (Windows 10 Build 160101.0800) - 10.0.15063.0 (Windows 10 Build 160101.0800) +- 10.0.16179.1000 (Windows 10 Build 160101.0800) +- 10.0.16184.1001 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 875aa72..acbbda7 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-03-22 +Updated=2017-05-03 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2905,6 +2905,66 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16179.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AA568 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8C141 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34425 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16F84 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31219 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1E7F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45F30 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21700 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16184.1001] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AA568 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8C141 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=34425 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16F84 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31219 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1E7F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45F30 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21700 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4041,3 +4101,41 @@ bFUSEnabled.x64 =E9478 bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C + +[10.0.16179.1000-SLInit] +bInitialized.x86 =C7F6C +bServerSku.x86 =C7F70 +lMaxUserSessions.x86 =C7F74 +bAppServerAllowed.x86 =C7F78 +bRemoteConnAllowed.x86=C7F7C +bMultimonAllowed.x86 =C7F80 +ulMaxDebugSessions.x86=C7F84 +bFUSEnabled.x86 =C7F88 + +bServerSku.x64 =E83D8 +lMaxUserSessions.x64 =E83DC +bAppServerAllowed.x64 =E83E0 +bInitialized.x64 =E9490 +bRemoteConnAllowed.x64=E9494 +bMultimonAllowed.x64 =E9498 +ulMaxDebugSessions.x64=E949C +bFUSEnabled.x64 =E94A0 + +[10.0.16184.1001-SLInit] +bInitialized.x86 =C7F6C +bServerSku.x86 =C7F70 +lMaxUserSessions.x86 =C7F74 +bAppServerAllowed.x86 =C7F78 +bRemoteConnAllowed.x86=C7F7C +bMultimonAllowed.x86 =C7F80 +ulMaxDebugSessions.x86=C7F84 +bFUSEnabled.x86 =C7F88 + +bServerSku.x64 =E83D8 +lMaxUserSessions.x64 =E83DC +bAppServerAllowed.x64 =E83E0 +bInitialized.x64 =E9490 +bRemoteConnAllowed.x64=E9494 +bMultimonAllowed.x64 =E9498 +ulMaxDebugSessions.x64=E949C +bFUSEnabled.x64 =E94A0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 89a91ce..870ebb3 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-03-22 +Updated=2017-05-03 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1834,6 +1834,58 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16179.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AA568 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8C141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34425 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16F84 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31219 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1E7F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45F30 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21700 +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16184.1001] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AA568 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8C141 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=34425 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=16F84 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31219 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1E7F5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45F30 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=21700 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -2946,3 +2998,41 @@ bFUSEnabled.x64 =E9478 bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C + +[10.0.16179.1000-SLInit] +bInitialized.x86 =C7F6C +bServerSku.x86 =C7F70 +lMaxUserSessions.x86 =C7F74 +bAppServerAllowed.x86 =C7F78 +bRemoteConnAllowed.x86=C7F7C +bMultimonAllowed.x86 =C7F80 +ulMaxDebugSessions.x86=C7F84 +bFUSEnabled.x86 =C7F88 + +bServerSku.x64 =E83D8 +lMaxUserSessions.x64 =E83DC +bAppServerAllowed.x64 =E83E0 +bInitialized.x64 =E9490 +bRemoteConnAllowed.x64=E9494 +bMultimonAllowed.x64 =E9498 +ulMaxDebugSessions.x64=E949C +bFUSEnabled.x64 =E94A0 + +[10.0.16184.1001-SLInit] +bInitialized.x86 =C7F6C +bServerSku.x86 =C7F70 +lMaxUserSessions.x86 =C7F74 +bAppServerAllowed.x86 =C7F78 +bRemoteConnAllowed.x86=C7F7C +bMultimonAllowed.x86 =C7F80 +ulMaxDebugSessions.x86=C7F84 +bFUSEnabled.x86 =C7F88 + +bServerSku.x64 =E83D8 +lMaxUserSessions.x64 =E83DC +bAppServerAllowed.x64 =E83E0 +bInitialized.x64 =E9490 +bRemoteConnAllowed.x64=E9494 +bMultimonAllowed.x64 =E9498 +ulMaxDebugSessions.x64=E949C +bFUSEnabled.x64 =E94A0 diff --git a/technical.txt b/technical.txt index 2a852b4..aa759f0 100644 --- a/technical.txt +++ b/technical.txt @@ -113,9 +113,15 @@ Terminal Services supported versions 10.0.15058.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15061.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16179.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.05.03 : +- added support for termsrv.dll 10.0.16179.1000 +- added support for termsrv.dll 10.0.16184.1001 + 2017.03.22 : - added support for termsrv.dll 10.0.15063.0 From 890006de99625c194aa48dfd27c5c9a53bdb656e Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 12 May 2017 21:10:38 +0300 Subject: [PATCH 167/208] INI: Add support for new builds (fix #245) 10.0.14393.1198 (x86 only) --- README.md | 1 + res/rdpwrap-ini-kb.txt | 30 +++++++++++++++++++++++++++++- res/rdpwrap.ini | 26 +++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 257f28e..0717590 100644 --- a/README.md +++ b/README.md @@ -314,6 +314,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14385.0 (Windows 10 RS1 Release 160706-1700) - 10.0.14388.0 (Windows 10 RS1 Release 160709-1635) - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) +- 10.0.14393.1198 (Windows 10 RS1 Release Sec 170427-1353 with KB4019472) - 10.0.14901.1000 (Windows 10 RS Pre-Release 160805-1700) - 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) - 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index acbbda7..eddd69c 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-05-03 +Updated=2017-05-12 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2107,6 +2107,24 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14393.1198] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6088 +LocalOnlyCode.x86=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize + [10.0.14901.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -3598,6 +3616,16 @@ bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 +[10.0.14393.1198-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + [10.0.14901.1000-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 870ebb3..6d280eb 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-05-03 +Updated=2017-05-12 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1144,6 +1144,20 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14393.1198] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6088 +LocalOnlyCode.x86=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=359C5 +SingleUserCode.x86=nop +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FF29 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +SLInitHook.x86=1 +SLInitOffset.x86=45636 +SLInitFunc.x86=New_CSLQuery_Initialize + [10.0.14901.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A6038 @@ -2495,6 +2509,16 @@ bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 +[10.0.14393.1198-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + [10.0.14901.1000-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 diff --git a/technical.txt b/technical.txt index aa759f0..2ae82ec 100644 --- a/technical.txt +++ b/technical.txt @@ -86,6 +86,7 @@ Terminal Services supported versions 10.0.14385.0 (Windows 10 rs1_release.160706-1700) [init hook + extended patch] 10.0.14388.0 (Windows 10 rs1_release.160709-1635) [init hook + extended patch] 10.0.14393.0 (Windows 10 rs1_release.160715-1616) [init hook + extended patch] +10.0.14393.1198 (Windows 10 rs1_release_sec.170427-1353) [init hook + extended patch] 10.0.14901.1000 (Windows 10 rs_prerelease.160805-1700) [init hook + extended patch] 10.0.14905.1000 (Windows 10 rs_prerelease.160811-1739) [init hook + extended patch] 10.0.14915.1000 (Windows 10 rs_prerelease.160826-1902) [init hook + extended patch] @@ -118,6 +119,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2017.05.12 : +- added support for termsrv.dll 10.0.14393.1198 x86 + 2017.05.03 : - added support for termsrv.dll 10.0.16179.1000 - added support for termsrv.dll 10.0.16184.1001 From 85f2b39568df0425c19a96b9a83d07f75c995263 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 17 May 2017 15:01:07 +0300 Subject: [PATCH 168/208] INI: Add support for new builds (relates to #194) 10.0.14997.1001 (x64 only) --- README.md | 1 + res/rdpwrap-ini-kb.txt | 30 +++++++++++++++++++++++++++++- res/rdpwrap.ini | 26 +++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0717590..bf5ec16 100644 --- a/README.md +++ b/README.md @@ -329,6 +329,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14965.1001 (Windows 10 RS Pre-Release 161104-1700) - 10.0.14971.1000 (Windows 10 RS Pre-Release 161111-1700) - 10.0.14986.1000 (Windows 10 Build 160101.0800) +- 10.0.14997.1001 (Windows 10 Build 160101.0800) - 10.0.15002.1001 (Windows 10 Build 160101.0800) - 10.0.15007.1000 (Windows 10 Build 160101.0800) - 10.0.15014.1000 (Windows 10 Build 160101.0800) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index eddd69c..005db48 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-05-12 +Updated=2017-05-17 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2545,6 +2545,24 @@ SLInitHook.x64=1 SLInitOffset.x64=26140 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14997.1001] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.15002.1001] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -3892,6 +3910,16 @@ bMultimonAllowed.x64 =EE478 ulMaxDebugSessions.x64=EE47C bFUSEnabled.x64 =EE480 +[10.0.14997.1001-SLInit] +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 + [10.0.15002.1001-SLInit] bInitialized.x86 =C6F74 bServerSku.x86 =C6F78 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 6d280eb..244e03e 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-05-12 +Updated=2017-05-17 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1522,6 +1522,20 @@ SLInitHook.x64=1 SLInitOffset.x64=26140 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14997.1001] +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=931EB +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=274ED +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1D95E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=E000 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.15002.1001] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A9698 @@ -2785,6 +2799,16 @@ bMultimonAllowed.x64 =EE478 ulMaxDebugSessions.x64=EE47C bFUSEnabled.x64 =EE480 +[10.0.14997.1001-SLInit] +bServerSku.x64 =F0408 +lMaxUserSessions.x64 =F040C +bAppServerAllowed.x64 =F0410 +bInitialized.x64 =F0480 +bRemoteConnAllowed.x64=F0484 +bMultimonAllowed.x64 =F0488 +ulMaxDebugSessions.x64=F048C +bFUSEnabled.x64 =F0490 + [10.0.15002.1001-SLInit] bInitialized.x86 =C6F74 bServerSku.x86 =C6F78 diff --git a/technical.txt b/technical.txt index 2ae82ec..b5975fe 100644 --- a/technical.txt +++ b/technical.txt @@ -101,6 +101,7 @@ Terminal Services supported versions 10.0.14965.1001 (Windows 10 rs_prerelease.161104-1700) [init hook + extended patch] 10.0.14971.1000 (Windows 10 rs_prerelease.161111-1700) [init hook + extended patch] 10.0.14986.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.14997.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15002.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15007.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15014.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -119,6 +120,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2017.05.17 : +- added support for termsrv.dll 10.0.14997.1001 x64 + 2017.05.12 : - added support for termsrv.dll 10.0.14393.1198 x86 From 49c9cbf379cce2d4dc60a87aa5def01699bb95b3 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Mon, 29 May 2017 13:30:07 +0300 Subject: [PATCH 169/208] INI: Add support for new builds (fix #254) 10.0.16199.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bf5ec16..09a6516 100644 --- a/README.md +++ b/README.md @@ -345,6 +345,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15063.0 (Windows 10 Build 160101.0800) - 10.0.16179.1000 (Windows 10 Build 160101.0800) - 10.0.16184.1001 (Windows 10 Build 160101.0800) +- 10.0.16199.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 005db48..7b7de00 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-05-17 +Updated=2017-05-29 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -3001,6 +3001,36 @@ SLInitHook.x64=1 SLInitOffset.x64=21700 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16199.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=ABA68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CED1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=348C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=28C14 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=319B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=CB25 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=469B0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=FA30 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4195,3 +4225,22 @@ bRemoteConnAllowed.x64=E9494 bMultimonAllowed.x64 =E9498 ulMaxDebugSessions.x64=E949C bFUSEnabled.x64 =E94A0 + +[10.0.16199.1000-SLInit] +bInitialized.x86 =C8F74 +bServerSku.x86 =C8F78 +lMaxUserSessions.x86 =C8F7C +bAppServerAllowed.x86 =C8F80 +bRemoteConnAllowed.x86=C8F84 +bMultimonAllowed.x86 =C8F88 +ulMaxDebugSessions.x86=C8F8C +bFUSEnabled.x86 =C8F90 + +bServerSku.x64 =E83E8 +lMaxUserSessions.x64 =E83EC +bAppServerAllowed.x64 =E83F0 +bInitialized.x64 =E94A0 +bRemoteConnAllowed.x64=E94A4 +bMultimonAllowed.x64 =E94A8 +ulMaxDebugSessions.x64=E94AC +bFUSEnabled.x64 =E94B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 244e03e..a75982b 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-05-17 +Updated=2017-05-29 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1914,6 +1914,32 @@ SLInitHook.x64=1 SLInitOffset.x64=21700 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16199.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=ABA68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CED1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=348C5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=28C14 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=319B9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=CB25 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=469B0 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=FA30 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3084,3 +3110,22 @@ bRemoteConnAllowed.x64=E9494 bMultimonAllowed.x64 =E9498 ulMaxDebugSessions.x64=E949C bFUSEnabled.x64 =E94A0 + +[10.0.16199.1000-SLInit] +bInitialized.x86 =C8F74 +bServerSku.x86 =C8F78 +lMaxUserSessions.x86 =C8F7C +bAppServerAllowed.x86 =C8F80 +bRemoteConnAllowed.x86=C8F84 +bMultimonAllowed.x86 =C8F88 +ulMaxDebugSessions.x86=C8F8C +bFUSEnabled.x86 =C8F90 + +bServerSku.x64 =E83E8 +lMaxUserSessions.x64 =E83EC +bAppServerAllowed.x64 =E83F0 +bInitialized.x64 =E94A0 +bRemoteConnAllowed.x64=E94A4 +bMultimonAllowed.x64 =E94A8 +ulMaxDebugSessions.x64=E94AC +bFUSEnabled.x64 =E94B0 diff --git a/technical.txt b/technical.txt index b5975fe..a447968 100644 --- a/technical.txt +++ b/technical.txt @@ -117,9 +117,13 @@ Terminal Services supported versions 10.0.15063.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16179.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.05.29 : +- added support for termsrv.dll 10.0.16199.1000 + 2017.05.17 : - added support for termsrv.dll 10.0.14997.1001 x64 From f0e21b8802c7a69263703a01a24478e046900697 Mon Sep 17 00:00:00 2001 From: Alexander Georgievskiy Date: Thu, 1 Jun 2017 12:08:39 +0300 Subject: [PATCH 170/208] Add MSI installer fixes #14 --- RDPWInst.wxs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 RDPWInst.wxs diff --git a/RDPWInst.wxs b/RDPWInst.wxs new file mode 100644 index 0000000..358ce31 --- /dev/null +++ b/RDPWInst.wxs @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NOT Installed AND NOT WIX_UPGRADE_DETECTED + REMOVE AND NOT UPGRADINGPRODUCTCODE + UPGRADINGPRODUCTCODE + + + + + From f71684aa264d8a04d63aa177ff9bf7ced87b4583 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 10 Jun 2017 15:42:35 +0300 Subject: [PATCH 171/208] INI: Add support for new builds (fix #258) 10.0.15063.296 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 09a6516..5ab388b 100644 --- a/README.md +++ b/README.md @@ -343,6 +343,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15058.0 (Windows 10 Build 160101.0800) - 10.0.15061.0 (Windows 10 Build 160101.0800) - 10.0.15063.0 (Windows 10 Build 160101.0800) +- 10.0.15063.296 (Windows 10 Build 160101.0800) - 10.0.16179.1000 (Windows 10 Build 160101.0800) - 10.0.16184.1001 (Windows 10 Build 160101.0800) - 10.0.16199.1000 (Windows 10 Build 160101.0800) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 7b7de00..c199399 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-05-29 +Updated=2017-06-10 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2941,6 +2941,36 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.296] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16179.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -4188,6 +4218,25 @@ bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C +[10.0.15063.296-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C + [10.0.16179.1000-SLInit] bInitialized.x86 =C7F6C bServerSku.x86 =C7F70 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index a75982b..7bb1ff7 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-05-29 +Updated=2017-06-10 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1862,6 +1862,32 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.296] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A5D68 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CAA1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35075 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=24E74 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=2FCD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=2DD65 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4549D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=D1EC +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16179.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=AA568 @@ -3073,6 +3099,25 @@ bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C +[10.0.15063.296-SLInit] +bInitialized.x86 =C2F70 +bServerSku.x86 =C2F74 +lMaxUserSessions.x86 =C2F78 +bAppServerAllowed.x86 =C2F7C +bRemoteConnAllowed.x86=C2F80 +bMultimonAllowed.x86 =C2F84 +ulMaxDebugSessions.x86=C2F88 +bFUSEnabled.x86 =C2F8C + +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C + [10.0.16179.1000-SLInit] bInitialized.x86 =C7F6C bServerSku.x86 =C7F70 diff --git a/technical.txt b/technical.txt index a447968..c7290c7 100644 --- a/technical.txt +++ b/technical.txt @@ -115,12 +115,16 @@ Terminal Services supported versions 10.0.15058.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15061.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15063.296 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16179.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.06.10 : +- added support for termsrv.dll 10.0.15063.296 + 2017.05.29 : - added support for termsrv.dll 10.0.16199.1000 From 7b809a887d551ca319135d3acea7aa68fd85a4eb Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sat, 10 Jun 2017 18:16:01 +0300 Subject: [PATCH 172/208] INI: Add support for new builds (fix #261) 10.0.16215.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 2 ++ 4 files changed, 97 insertions(+) diff --git a/README.md b/README.md index 5ab388b..8ee1604 100644 --- a/README.md +++ b/README.md @@ -347,6 +347,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16179.1000 (Windows 10 Build 160101.0800) - 10.0.16184.1001 (Windows 10 Build 160101.0800) - 10.0.16199.1000 (Windows 10 Build 160101.0800) +- 10.0.16215.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index c199399..0871c9f 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3061,6 +3061,36 @@ SLInitHook.x64=1 SLInitOffset.x64=FA30 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16215.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7CE8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8DE21 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F05 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=28724 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E019 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=CC15 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=46462 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=FB00 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4293,3 +4323,22 @@ bRemoteConnAllowed.x64=E94A4 bMultimonAllowed.x64 =E94A8 ulMaxDebugSessions.x64=E94AC bFUSEnabled.x64 =E94B0 + +[10.0.16215.1000-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EA3E8 +lMaxUserSessions.x64 =EA3EC +bAppServerAllowed.x64 =EA3F0 +bInitialized.x64 =EB4A0 +bRemoteConnAllowed.x64=EB4A4 +bMultimonAllowed.x64 =EB4A8 +ulMaxDebugSessions.x64=EB4AC +bFUSEnabled.x64 =EB4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 7bb1ff7..b120c96 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -1966,6 +1966,32 @@ SLInitHook.x64=1 SLInitOffset.x64=FA30 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16215.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7CE8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8DE21 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F05 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=28724 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E019 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=CC15 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=46462 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=FB00 +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3174,3 +3200,22 @@ bRemoteConnAllowed.x64=E94A4 bMultimonAllowed.x64 =E94A8 ulMaxDebugSessions.x64=E94AC bFUSEnabled.x64 =E94B0 + +[10.0.16215.1000-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EA3E8 +lMaxUserSessions.x64 =EA3EC +bAppServerAllowed.x64 =EA3F0 +bInitialized.x64 =EB4A0 +bRemoteConnAllowed.x64=EB4A4 +bMultimonAllowed.x64 =EB4A8 +ulMaxDebugSessions.x64=EB4AC +bFUSEnabled.x64 =EB4B0 diff --git a/technical.txt b/technical.txt index c7290c7..f015525 100644 --- a/technical.txt +++ b/technical.txt @@ -119,11 +119,13 @@ Terminal Services supported versions 10.0.16179.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16215.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): 2017.06.10 : - added support for termsrv.dll 10.0.15063.296 +- added support for termsrv.dll 10.0.16215.1000 2017.05.29 : - added support for termsrv.dll 10.0.16199.1000 From 7ef04f27c2242e111c8932ae1c36c9f28fe7aabc Mon Sep 17 00:00:00 2001 From: Alexander Georgievskiy Date: Tue, 13 Jun 2017 23:46:19 +0300 Subject: [PATCH 173/208] Create RDPWInst.wxs --- RDPWInst.wxs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RDPWInst.wxs b/RDPWInst.wxs index 358ce31..fa37565 100644 --- a/RDPWInst.wxs +++ b/RDPWInst.wxs @@ -19,7 +19,7 @@ - + @@ -27,8 +27,8 @@ - - + + From f26edcb6f8c02bb9a4af315aebd7d834d528df03 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Thu, 29 Jun 2017 23:44:44 +0300 Subject: [PATCH 174/208] INI: Add support for new builds (fix #269) 6.3.9600.18692 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 100 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ee1604..79e5040 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.3.9600.16384 (Windows 8.1 / Server 2012 R2) - 6.3.9600.17095 (Windows 8.1 with KB2959626) - 6.3.9600.17415 (Windows 8.1 with KB3000850) +- 6.3.9600.18692 (Windows 8.1 with KB4022720) - 6.4.9841.0 (Windows 10 Technical Preview) - 6.4.9860.0 (Windows 10 Technical Preview Update 1) - 6.4.9879.0 (Windows 10 Technical Preview Update 2) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 0871c9f..49634e9 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1125,6 +1125,36 @@ SLInitHook.x64=1 SLInitOffset.x64=5DBC0 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.18692] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B3458 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B2E9 +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=37105 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=37039 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFE9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45835 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=18488 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DBD0 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense ; .text:1009569B call sub_100B7EE5 @@ -3200,6 +3230,25 @@ bServerSku.x64 =F9068 ulMaxDebugSessions.x64=F906C bRemoteConnAllowed.x64=F9070 +[6.3.9600.18692-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =F9054 +lMaxUserSessions.x64 =F9058 +bAppServerAllowed.x64 =F905C +bInitialized.x64 =F9060 +bMultimonAllowed.x64 =F9064 +bServerSku.x64 =F9068 +ulMaxDebugSessions.x64=F906C +bRemoteConnAllowed.x64=F9070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index b120c96..ea7ed71 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-06-10 +Updated=2017-06-29 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -428,6 +428,32 @@ SLInitHook.x64=1 SLInitOffset.x64=5DBC0 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.18692] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B3458 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B2E9 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=37105 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=37039 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFE9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45835 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=18488 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DBD0 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=956A8 @@ -2078,6 +2104,25 @@ bServerSku.x64 =F9068 ulMaxDebugSessions.x64=F906C bRemoteConnAllowed.x64=F9070 +[6.3.9600.18692-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =F9054 +lMaxUserSessions.x64 =F9058 +bAppServerAllowed.x64 =F905C +bInitialized.x64 =F9060 +bMultimonAllowed.x64 =F9064 +bServerSku.x64 =F9068 +ulMaxDebugSessions.x64=F906C +bRemoteConnAllowed.x64=F9070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 diff --git a/technical.txt b/technical.txt index f015525..5d75566 100644 --- a/technical.txt +++ b/technical.txt @@ -53,6 +53,7 @@ Terminal Services supported versions 6.3.9600.16384 (Windows 8.1) [init hook + extended patch] 6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] 6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] +6.3.9600.18692 (Windows 8.1 with KB4022720) [init hook + extended patch] 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] 6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] @@ -123,6 +124,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2017.06.29 : +- added support for termsrv.dll 6.3.9600.18692 + 2017.06.10 : - added support for termsrv.dll 10.0.15063.296 - added support for termsrv.dll 10.0.16215.1000 From 2ba5baa34f4f0762323959de65154e814548b557 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 30 Jul 2017 20:55:21 +0300 Subject: [PATCH 175/208] INI: Add support for new builds (fix #285) 6.3.9600.18708 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 79e5040..784fcc8 100644 --- a/README.md +++ b/README.md @@ -287,6 +287,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.3.9600.17095 (Windows 8.1 with KB2959626) - 6.3.9600.17415 (Windows 8.1 with KB3000850) - 6.3.9600.18692 (Windows 8.1 with KB4022720) +- 6.3.9600.18708 (Windows 8.1 with KB4025335) - 6.4.9841.0 (Windows 10 Technical Preview) - 6.4.9860.0 (Windows 10 Technical Preview Update 1) - 6.4.9879.0 (Windows 10 Technical Preview Update 2) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 49634e9..dd8ad51 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-06-10 +Updated=2017-07-30 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1155,6 +1155,36 @@ SLInitHook.x64=1 SLInitOffset.x64=5DBD0 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.18708] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B35D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B376 +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=370F5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=36FE9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=457D5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=18308 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DB70 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense ; .text:1009569B call sub_100B7EE5 @@ -3249,6 +3279,25 @@ bServerSku.x64 =F9068 ulMaxDebugSessions.x64=F906C bRemoteConnAllowed.x64=F9070 +[6.3.9600.18708-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =FA054 +lMaxUserSessions.x64 =FA058 +bAppServerAllowed.x64 =FA05C +bInitialized.x64 =FA060 +bMultimonAllowed.x64 =FA064 +bServerSku.x64 =FA068 +ulMaxDebugSessions.x64=FA06C +bRemoteConnAllowed.x64=FA070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index ea7ed71..cd6bf76 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-06-29 +Updated=2017-07-30 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -454,6 +454,32 @@ SLInitHook.x64=1 SLInitOffset.x64=5DBD0 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.18708] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B35D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B376 +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=370F5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=36FE9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3CFD9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=457D5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=18308 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5DB70 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=956A8 @@ -2123,6 +2149,25 @@ bServerSku.x64 =F9068 ulMaxDebugSessions.x64=F906C bRemoteConnAllowed.x64=F9070 +[6.3.9600.18708-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =FA054 +lMaxUserSessions.x64 =FA058 +bAppServerAllowed.x64 =FA05C +bInitialized.x64 =FA060 +bMultimonAllowed.x64 =FA064 +bServerSku.x64 =FA068 +ulMaxDebugSessions.x64=FA06C +bRemoteConnAllowed.x64=FA070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 diff --git a/technical.txt b/technical.txt index 5d75566..359edb2 100644 --- a/technical.txt +++ b/technical.txt @@ -54,6 +54,7 @@ Terminal Services supported versions 6.3.9600.17095 (Windows 8.1 with KB2959626) [init hook + extended patch] 6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] 6.3.9600.18692 (Windows 8.1 with KB4022720) [init hook + extended patch] +6.3.9600.18708 (Windows 8.1 with KB4025335) [init hook + extended patch] 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] 6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] @@ -124,6 +125,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2017.07.30 : +- added support for termsrv.dll 6.3.9600.18708 + 2017.06.29 : - added support for termsrv.dll 6.3.9600.18692 From 3e7c0ebfd20de9150507dfc00adbb01713a0bee9 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 30 Jul 2017 21:19:32 +0300 Subject: [PATCH 176/208] INI: Add support for new builds (fix #286) 10.0.16251.0 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 2 ++ 4 files changed, 97 insertions(+) diff --git a/README.md b/README.md index 784fcc8..a6a4d14 100644 --- a/README.md +++ b/README.md @@ -350,6 +350,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16184.1001 (Windows 10 Build 160101.0800) - 10.0.16199.1000 (Windows 10 Build 160101.0800) - 10.0.16215.1000 (Windows 10 Build 160101.0800) +- 10.0.16251.0 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index dd8ad51..a6bb17b 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3151,6 +3151,36 @@ SLInitHook.x64=1 SLInitOffset.x64=FB00 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16251.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=ABC88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8EC21 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3A525 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BCB4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31779 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DAF5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=447FD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2183C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4440,3 +4470,22 @@ bRemoteConnAllowed.x64=EB4A4 bMultimonAllowed.x64 =EB4A8 ulMaxDebugSessions.x64=EB4AC bFUSEnabled.x64 =EB4B0 + +[10.0.16251.0-SLInit] +bInitialized.x86 =C9F78 +bServerSku.x86 =C9F7C +lMaxUserSessions.x86 =C9F80 +bAppServerAllowed.x86 =C9F84 +bRemoteConnAllowed.x86=C9F88 +bMultimonAllowed.x86 =C9F8C +ulMaxDebugSessions.x86=C9F90 +bFUSEnabled.x86 =C9F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index cd6bf76..8f0d8e5 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2044,6 +2044,32 @@ SLInitHook.x64=1 SLInitOffset.x64=FB00 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16251.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=ABC88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8EC21 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=3A525 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BCB4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31779 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DAF5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=447FD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2183C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3309,3 +3335,22 @@ bRemoteConnAllowed.x64=EB4A4 bMultimonAllowed.x64 =EB4A8 ulMaxDebugSessions.x64=EB4AC bFUSEnabled.x64 =EB4B0 + +[10.0.16251.0-SLInit] +bInitialized.x86 =C9F78 +bServerSku.x86 =C9F7C +lMaxUserSessions.x86 =C9F80 +bAppServerAllowed.x86 =C9F84 +bRemoteConnAllowed.x86=C9F88 +bMultimonAllowed.x86 =C9F8C +ulMaxDebugSessions.x86=C9F90 +bFUSEnabled.x86 =C9F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/technical.txt b/technical.txt index 359edb2..32fdad9 100644 --- a/technical.txt +++ b/technical.txt @@ -122,11 +122,13 @@ Terminal Services supported versions 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16215.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16251.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): 2017.07.30 : - added support for termsrv.dll 6.3.9600.18708 +- added support for termsrv.dll 10.0.16251.0 2017.06.29 : - added support for termsrv.dll 6.3.9600.18692 From 733ed36f7083fe189f8159d9b070563c14405929 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 30 Jul 2017 21:47:03 +0300 Subject: [PATCH 177/208] INI: Add support for new builds 10.0.16251.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 2 ++ 4 files changed, 97 insertions(+) diff --git a/README.md b/README.md index a6a4d14..66b0bd5 100644 --- a/README.md +++ b/README.md @@ -351,6 +351,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16199.1000 (Windows 10 Build 160101.0800) - 10.0.16215.1000 (Windows 10 Build 160101.0800) - 10.0.16251.0 (Windows 10 Build 160101.0800) +- 10.0.16251.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index a6bb17b..9aecabe 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3181,6 +3181,36 @@ SLInitHook.x64=1 SLInitOffset.x64=2183C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16251.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=ABC88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8EC21 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3A525 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BCB4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31779 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DAF5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=447FD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2183C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4489,3 +4519,22 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16251.1000-SLInit] +bInitialized.x86 =C9F78 +bServerSku.x86 =C9F7C +lMaxUserSessions.x86 =C9F80 +bAppServerAllowed.x86 =C9F84 +bRemoteConnAllowed.x86=C9F88 +bMultimonAllowed.x86 =C9F8C +ulMaxDebugSessions.x86=C9F90 +bFUSEnabled.x86 =C9F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 8f0d8e5..d7a44c9 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2070,6 +2070,32 @@ SLInitHook.x64=1 SLInitOffset.x64=2183C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16251.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=ABC88 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8EC21 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=3A525 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BCB4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31779 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DAF5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=447FD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2183C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3354,3 +3380,22 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16251.1000-SLInit] +bInitialized.x86 =C9F78 +bServerSku.x86 =C9F7C +lMaxUserSessions.x86 =C9F80 +bAppServerAllowed.x86 =C9F84 +bRemoteConnAllowed.x86=C9F88 +bMultimonAllowed.x86 =C9F8C +ulMaxDebugSessions.x86=C9F90 +bFUSEnabled.x86 =C9F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/technical.txt b/technical.txt index 32fdad9..dd36f6b 100644 --- a/technical.txt +++ b/technical.txt @@ -123,12 +123,14 @@ Terminal Services supported versions 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16215.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16251.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): 2017.07.30 : - added support for termsrv.dll 6.3.9600.18708 - added support for termsrv.dll 10.0.16251.0 +- added support for termsrv.dll 10.0.16251.1000 2017.06.29 : - added support for termsrv.dll 6.3.9600.18692 From 8a3a20c6cb47c8a477371c8996b653f7ebf74091 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 30 Jul 2017 22:23:23 +0300 Subject: [PATCH 178/208] INI: Add support for new builds (fix #279) 10.0.16237.1001 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 2 ++ 4 files changed, 97 insertions(+) diff --git a/README.md b/README.md index 66b0bd5..0d2c8b8 100644 --- a/README.md +++ b/README.md @@ -350,6 +350,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16184.1001 (Windows 10 Build 160101.0800) - 10.0.16199.1000 (Windows 10 Build 160101.0800) - 10.0.16215.1000 (Windows 10 Build 160101.0800) +- 10.0.16237.1001 (Windows 10 Build 160101.0800) - 10.0.16251.0 (Windows 10 Build 160101.0800) - 10.0.16251.1000 (Windows 10 Build 160101.0800) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 9aecabe..02f3cdc 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3151,6 +3151,36 @@ SLInitHook.x64=1 SLInitOffset.x64=FB00 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16237.1001] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E911 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BC84 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E119 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DA55 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4655D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2180C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16251.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -4501,6 +4531,25 @@ bMultimonAllowed.x64 =EB4A8 ulMaxDebugSessions.x64=EB4AC bFUSEnabled.x64 =EB4B0 +[10.0.16237.1001-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 + [10.0.16251.0-SLInit] bInitialized.x86 =C9F78 bServerSku.x86 =C9F7C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index d7a44c9..6cdc368 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2044,6 +2044,32 @@ SLInitHook.x64=1 SLInitOffset.x64=FB00 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16237.1001] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E911 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BC84 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E119 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DA55 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4655D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2180C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16251.0] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=ABC88 @@ -3362,6 +3388,25 @@ bMultimonAllowed.x64 =EB4A8 ulMaxDebugSessions.x64=EB4AC bFUSEnabled.x64 =EB4B0 +[10.0.16237.1001-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 + [10.0.16251.0-SLInit] bInitialized.x86 =C9F78 bServerSku.x86 =C9F7C diff --git a/technical.txt b/technical.txt index dd36f6b..a6f4113 100644 --- a/technical.txt +++ b/technical.txt @@ -122,6 +122,7 @@ Terminal Services supported versions 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16215.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16237.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -129,6 +130,7 @@ Source code changelog (rdpwrap library): 2017.07.30 : - added support for termsrv.dll 6.3.9600.18708 +- added support for termsrv.dll 10.0.16237.1001 - added support for termsrv.dll 10.0.16251.0 - added support for termsrv.dll 10.0.16251.1000 From 72f3d6ea0722bfd3e7a80e6a16f15ccc186579d5 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 30 Jul 2017 22:42:50 +0300 Subject: [PATCH 179/208] INI: Add support for new builds (fix #275) 10.0.16232.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 2 ++ 4 files changed, 97 insertions(+) diff --git a/README.md b/README.md index 0d2c8b8..8af8edc 100644 --- a/README.md +++ b/README.md @@ -350,6 +350,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16184.1001 (Windows 10 Build 160101.0800) - 10.0.16199.1000 (Windows 10 Build 160101.0800) - 10.0.16215.1000 (Windows 10 Build 160101.0800) +- 10.0.16232.1000 (Windows 10 Build 160101.0800) - 10.0.16237.1001 (Windows 10 Build 160101.0800) - 10.0.16251.0 (Windows 10 Build 160101.0800) - 10.0.16251.1000 (Windows 10 Build 160101.0800) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 02f3cdc..462b8da 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3151,6 +3151,36 @@ SLInitHook.x64=1 SLInitOffset.x64=FB00 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16232.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7D38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8DD41 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F35 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=287B4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E0C9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=CC15 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4650F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=FB00 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16237.1001] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -4531,6 +4561,25 @@ bMultimonAllowed.x64 =EB4A8 ulMaxDebugSessions.x64=EB4AC bFUSEnabled.x64 =EB4B0 +[10.0.16232.1000-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EA3E8 +lMaxUserSessions.x64 =EA3EC +bAppServerAllowed.x64 =EA3F0 +bInitialized.x64 =EB4A0 +bRemoteConnAllowed.x64=EB4A4 +bMultimonAllowed.x64 =EB4A8 +ulMaxDebugSessions.x64=EB4AC +bFUSEnabled.x64 =EB4B0 + [10.0.16237.1001-SLInit] bInitialized.x86 =C5F78 bServerSku.x86 =C5F7C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 6cdc368..8d04c70 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2044,6 +2044,32 @@ SLInitHook.x64=1 SLInitOffset.x64=FB00 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16232.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7D38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8DD41 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F35 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=287B4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E0C9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=CC15 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4650F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=FB00 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16237.1001] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A7F38 @@ -3388,6 +3414,25 @@ bMultimonAllowed.x64 =EB4A8 ulMaxDebugSessions.x64=EB4AC bFUSEnabled.x64 =EB4B0 +[10.0.16232.1000-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EA3E8 +lMaxUserSessions.x64 =EA3EC +bAppServerAllowed.x64 =EA3F0 +bInitialized.x64 =EB4A0 +bRemoteConnAllowed.x64=EB4A4 +bMultimonAllowed.x64 =EB4A8 +ulMaxDebugSessions.x64=EB4AC +bFUSEnabled.x64 =EB4B0 + [10.0.16237.1001-SLInit] bInitialized.x86 =C5F78 bServerSku.x86 =C5F7C diff --git a/technical.txt b/technical.txt index a6f4113..374d1b7 100644 --- a/technical.txt +++ b/technical.txt @@ -122,6 +122,7 @@ Terminal Services supported versions 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16215.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16232.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16237.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -130,6 +131,7 @@ Source code changelog (rdpwrap library): 2017.07.30 : - added support for termsrv.dll 6.3.9600.18708 +- added support for termsrv.dll 10.0.16232.1000 - added support for termsrv.dll 10.0.16237.1001 - added support for termsrv.dll 10.0.16251.0 - added support for termsrv.dll 10.0.16251.1000 From 13fca00206f2d2434271250b48dbcfb68d8f04af Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 30 Jul 2017 22:55:31 +0300 Subject: [PATCH 180/208] INI: Add support for new builds 10.0.16241.1001 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 2 ++ 4 files changed, 97 insertions(+) diff --git a/README.md b/README.md index 8af8edc..34742b9 100644 --- a/README.md +++ b/README.md @@ -352,6 +352,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16215.1000 (Windows 10 Build 160101.0800) - 10.0.16232.1000 (Windows 10 Build 160101.0800) - 10.0.16237.1001 (Windows 10 Build 160101.0800) +- 10.0.16241.1001 (Windows 10 Build 160101.0800) - 10.0.16251.0 (Windows 10 Build 160101.0800) - 10.0.16251.1000 (Windows 10 Build 160101.0800) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 462b8da..3800bfe 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3211,6 +3211,36 @@ SLInitHook.x64=1 SLInitOffset.x64=2180C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16241.1001] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E911 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BC84 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E119 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DA55 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4655D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2180C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16251.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -4599,6 +4629,25 @@ bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 +[10.0.16241.1001-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 + [10.0.16251.0-SLInit] bInitialized.x86 =C9F78 bServerSku.x86 =C9F7C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 8d04c70..c9871c2 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2096,6 +2096,32 @@ SLInitHook.x64=1 SLInitOffset.x64=2180C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16241.1001] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A7F38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E911 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39F85 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1BC84 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3E119 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=DA55 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4655D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2180C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16251.0] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=ABC88 @@ -3452,6 +3478,25 @@ bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 +[10.0.16241.1001-SLInit] +bInitialized.x86 =C5F78 +bServerSku.x86 =C5F7C +lMaxUserSessions.x86 =C5F80 +bAppServerAllowed.x86 =C5F84 +bRemoteConnAllowed.x86=C5F88 +bMultimonAllowed.x86 =C5F8C +ulMaxDebugSessions.x86=C5F90 +bFUSEnabled.x86 =C5F94 + +bServerSku.x64 =EB3EC +lMaxUserSessions.x64 =EB3F0 +bAppServerAllowed.x64 =EB3F4 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 + [10.0.16251.0-SLInit] bInitialized.x86 =C9F78 bServerSku.x86 =C9F7C diff --git a/technical.txt b/technical.txt index 374d1b7..0cd85d3 100644 --- a/technical.txt +++ b/technical.txt @@ -124,6 +124,7 @@ Terminal Services supported versions 10.0.16215.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16232.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16237.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16241.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -133,6 +134,7 @@ Source code changelog (rdpwrap library): - added support for termsrv.dll 6.3.9600.18708 - added support for termsrv.dll 10.0.16232.1000 - added support for termsrv.dll 10.0.16237.1001 +- added support for termsrv.dll 10.0.16241.1001 - added support for termsrv.dll 10.0.16251.0 - added support for termsrv.dll 10.0.16251.1000 From 37d1872aa753b52a43e167c00ab463b8b01ed448 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 4 Aug 2017 22:46:48 +0300 Subject: [PATCH 181/208] INI: Add support for new builds (fix #292) 10.0.16257.1 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 34742b9..010fa5e 100644 --- a/README.md +++ b/README.md @@ -355,6 +355,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16241.1001 (Windows 10 Build 160101.0800) - 10.0.16251.0 (Windows 10 Build 160101.0800) - 10.0.16251.1000 (Windows 10 Build 160101.0800) +- 10.0.16257.1 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 3800bfe..da5d65c 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-07-30 +Updated=2017-08-04 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -3301,6 +3301,36 @@ SLInitHook.x64=1 SLInitOffset.x64=2183C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16257.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB718 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E841 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=33925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11364 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C409 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1EFD5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4504D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2495C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4685,3 +4715,22 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16257.1-SLInit] +bInitialized.x86 =C9F7C +bServerSku.x86 =C9F80 +lMaxUserSessions.x86 =C9F84 +bAppServerAllowed.x86 =C9F88 +bRemoteConnAllowed.x86=C9F8C +bMultimonAllowed.x86 =C9F90 +ulMaxDebugSessions.x86=C9F94 +bFUSEnabled.x86 =C9F98 + +bServerSku.x64 =EB3F0 +lMaxUserSessions.x64 =EB3F4 +bAppServerAllowed.x64 =EB3F8 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index c9871c2..f0bab11 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-07-30 +Updated=2017-08-04 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -2174,6 +2174,32 @@ SLInitHook.x64=1 SLInitOffset.x64=2183C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16257.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB718 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E841 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=33925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11364 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C409 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1EFD5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4504D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2495C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3534,3 +3560,22 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16257.1-SLInit] +bInitialized.x86 =C9F7C +bServerSku.x86 =C9F80 +lMaxUserSessions.x86 =C9F84 +bAppServerAllowed.x86 =C9F88 +bRemoteConnAllowed.x86=C9F8C +bMultimonAllowed.x86 =C9F90 +ulMaxDebugSessions.x86=C9F94 +bFUSEnabled.x86 =C9F98 + +bServerSku.x64 =EB3F0 +lMaxUserSessions.x64 =EB3F4 +bAppServerAllowed.x64 =EB3F8 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/technical.txt b/technical.txt index 0cd85d3..72d60be 100644 --- a/technical.txt +++ b/technical.txt @@ -127,9 +127,13 @@ Terminal Services supported versions 10.0.16241.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16257.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.08.04 : +- added support for termsrv.dll 10.0.16257.1 + 2017.07.30 : - added support for termsrv.dll 6.3.9600.18708 - added support for termsrv.dll 10.0.16232.1000 From 1c5b9c9e71ef70b2b92bc1765a76d33e1425c856 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 4 Aug 2017 23:01:57 +0300 Subject: [PATCH 182/208] INI: Add support for new builds 10.0.16257.1000 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 2 ++ 4 files changed, 97 insertions(+) diff --git a/README.md b/README.md index 010fa5e..c4b381c 100644 --- a/README.md +++ b/README.md @@ -356,6 +356,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16251.0 (Windows 10 Build 160101.0800) - 10.0.16251.1000 (Windows 10 Build 160101.0800) - 10.0.16257.1 (Windows 10 Build 160101.0800) +- 10.0.16257.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index da5d65c..1edeffb 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3331,6 +3331,36 @@ SLInitHook.x64=1 SLInitOffset.x64=2495C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16257.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB718 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E841 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=33925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11364 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C409 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1EFD5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4504D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2495C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4734,3 +4764,22 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16257.1000-SLInit] +bInitialized.x86 =C9F7C +bServerSku.x86 =C9F80 +lMaxUserSessions.x86 =C9F84 +bAppServerAllowed.x86 =C9F88 +bRemoteConnAllowed.x86=C9F8C +bMultimonAllowed.x86 =C9F90 +ulMaxDebugSessions.x86=C9F94 +bFUSEnabled.x86 =C9F98 + +bServerSku.x64 =EB3F0 +lMaxUserSessions.x64 =EB3F4 +bAppServerAllowed.x64 =EB3F8 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index f0bab11..ba8a061 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2200,6 +2200,32 @@ SLInitHook.x64=1 SLInitOffset.x64=2495C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16257.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB718 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E841 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=33925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11364 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C409 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1EFD5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4504D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2495C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3579,3 +3605,22 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16257.1000-SLInit] +bInitialized.x86 =C9F7C +bServerSku.x86 =C9F80 +lMaxUserSessions.x86 =C9F84 +bAppServerAllowed.x86 =C9F88 +bRemoteConnAllowed.x86=C9F8C +bMultimonAllowed.x86 =C9F90 +ulMaxDebugSessions.x86=C9F94 +bFUSEnabled.x86 =C9F98 + +bServerSku.x64 =EB3F0 +lMaxUserSessions.x64 =EB3F4 +bAppServerAllowed.x64 =EB3F8 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 diff --git a/technical.txt b/technical.txt index 72d60be..8a8adfd 100644 --- a/technical.txt +++ b/technical.txt @@ -128,11 +128,13 @@ Terminal Services supported versions 10.0.16251.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16251.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16257.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16257.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): 2017.08.04 : - added support for termsrv.dll 10.0.16257.1 +- added support for termsrv.dll 10.0.16257.1000 2017.07.30 : - added support for termsrv.dll 6.3.9600.18708 From b50f2dec59199915509c1724d97402a35c8697b3 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Wed, 6 Sep 2017 21:21:10 +0300 Subject: [PATCH 183/208] INI: Add support for new builds (fix #307) 10.0.16273.1000 x86/x64 10.0.16275.1000 x86/x64 10.0.16278.1000 x86/x64 10.0.16281.1000 x86/x64 10.0.16353.1000 x86/x64 --- README.md | 5 + res/rdpwrap-ini-kb.txt | 247 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 227 ++++++++++++++++++++++++++++++++++++- technical.txt | 12 ++ 4 files changed, 489 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c4b381c..594ba51 100644 --- a/README.md +++ b/README.md @@ -357,6 +357,11 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16251.1000 (Windows 10 Build 160101.0800) - 10.0.16257.1 (Windows 10 Build 160101.0800) - 10.0.16257.1000 (Windows 10 Build 160101.0800) +- 10.0.16273.1000 (Windows 10 Build 160101.0800) +- 10.0.16275.1000 (Windows 10 Build 160101.0800) +- 10.0.16278.1000 (Windows 10 Build 160101.0800) +- 10.0.16281.1000 (Windows 10 Build 160101.0800) +- 10.0.16353.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 1edeffb..8fbdf68 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-08-04 +Updated=2017-09-06 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -3361,6 +3361,156 @@ SLInitHook.x64=1 SLInitOffset.x64=2495C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16273.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB798 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E871 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=33925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11364 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C409 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1EFD5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4504D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2495C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16275.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=90001 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39435 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C724 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D75 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D0C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16278.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=90001 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39435 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C724 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D75 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D0C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16281.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16353.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=90001 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39435 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C724 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D75 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D0C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4783,3 +4933,98 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16273.1000-SLInit] +bInitialized.x86 =C9F7C +bServerSku.x86 =C9F80 +lMaxUserSessions.x86 =C9F84 +bAppServerAllowed.x86 =C9F88 +bRemoteConnAllowed.x86=C9F8C +bMultimonAllowed.x86 =C9F90 +ulMaxDebugSessions.x86=C9F94 +bFUSEnabled.x86 =C9F98 + +bServerSku.x64 =EB3F0 +lMaxUserSessions.x64 =EB3F4 +bAppServerAllowed.x64 =EB3F8 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 + +[10.0.16275.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16278.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16281.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16353.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index ba8a061..e2cc853 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-08-04 +Updated=2017-09-06 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -2226,6 +2226,136 @@ SLInitHook.x64=1 SLInitOffset.x64=2495C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16273.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB798 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8E871 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=33925 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=11364 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3C409 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1EFD5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4504D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2495C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16275.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=90001 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39435 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C724 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D75 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D0C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16278.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=90001 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39435 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C724 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D75 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D0C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16281.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16353.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A9388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=90001 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39435 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C724 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D75 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D0C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3624,3 +3754,98 @@ bRemoteConnAllowed.x64=EC4A4 bMultimonAllowed.x64 =EC4A8 ulMaxDebugSessions.x64=EC4AC bFUSEnabled.x64 =EC4B0 + +[10.0.16273.1000-SLInit] +bInitialized.x86 =C9F7C +bServerSku.x86 =C9F80 +lMaxUserSessions.x86 =C9F84 +bAppServerAllowed.x86 =C9F88 +bRemoteConnAllowed.x86=C9F8C +bMultimonAllowed.x86 =C9F90 +ulMaxDebugSessions.x86=C9F94 +bFUSEnabled.x86 =C9F98 + +bServerSku.x64 =EB3F0 +lMaxUserSessions.x64 =EB3F4 +bAppServerAllowed.x64 =EB3F8 +bInitialized.x64 =EC4A0 +bRemoteConnAllowed.x64=EC4A4 +bMultimonAllowed.x64 =EC4A8 +ulMaxDebugSessions.x64=EC4AC +bFUSEnabled.x64 =EC4B0 + +[10.0.16275.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16278.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16281.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16353.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 diff --git a/technical.txt b/technical.txt index 8a8adfd..240acf5 100644 --- a/technical.txt +++ b/technical.txt @@ -129,9 +129,21 @@ Terminal Services supported versions 10.0.16251.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16257.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16257.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16273.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16275.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16278.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16281.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16353.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.09.06 : +- added support for termsrv.dll 10.0.16273.1000 +- added support for termsrv.dll 10.0.16275.1000 +- added support for termsrv.dll 10.0.16278.1000 +- added support for termsrv.dll 10.0.16281.1000 +- added support for termsrv.dll 10.0.16353.1000 + 2017.08.04 : - added support for termsrv.dll 10.0.16257.1 - added support for termsrv.dll 10.0.16257.1000 From 073c1282db9b03c3cc2d9452f3d74464caf92435 Mon Sep 17 00:00:00 2001 From: binarymaster Date: Fri, 15 Sep 2017 17:43:15 +0300 Subject: [PATCH 184/208] INI: Add support for new builds (fix #309) 10.0.16288.1 x86/x64 --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 594ba51..6afdc09 100644 --- a/README.md +++ b/README.md @@ -361,6 +361,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16275.1000 (Windows 10 Build 160101.0800) - 10.0.16278.1000 (Windows 10 Build 160101.0800) - 10.0.16281.1000 (Windows 10 Build 160101.0800) +- 10.0.16288.1 (Windows 10 Build 160101.0800) - 10.0.16353.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 8fbdf68..fbd7555 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-09-06 +Updated=2017-09-15 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -3481,6 +3481,36 @@ SLInitHook.x64=1 SLInitOffset.x64=22D5C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16288.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16353.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -5010,6 +5040,25 @@ bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 +[10.0.16288.1-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + [10.0.16353.1000-SLInit] bInitialized.x86 =C6F7C bServerSku.x86 =C6F80 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index e2cc853..03edaba 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-09-06 +Updated=2017-09-15 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -2330,6 +2330,32 @@ SLInitHook.x64=1 SLInitOffset.x64=22D5C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16288.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16353.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A9388 @@ -3831,6 +3857,25 @@ bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 +[10.0.16288.1-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + [10.0.16353.1000-SLInit] bInitialized.x86 =C6F7C bServerSku.x86 =C6F80 diff --git a/technical.txt b/technical.txt index 240acf5..8d63b0e 100644 --- a/technical.txt +++ b/technical.txt @@ -133,10 +133,14 @@ Terminal Services supported versions 10.0.16275.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16278.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16281.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16288.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16353.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.09.15 : +- added support for termsrv.dll 10.0.16288.1 + 2017.09.06 : - added support for termsrv.dll 10.0.16273.1000 - added support for termsrv.dll 10.0.16275.1000 From 8ace817d8d371ef10e265bb91c119c0140434d9f Mon Sep 17 00:00:00 2001 From: binarymaster Date: Sun, 24 Sep 2017 22:08:01 +0300 Subject: [PATCH 185/208] INI: Add support for new builds - 10.0.16291.0 x86/x64 (fix #312) - 10.0.16294.1 x86/x64 (fix #313) - 10.0.16296.0 x86/x64 - 10.0.16362.1000 x86/x64 (fix #311) --- README.md | 4 + res/rdpwrap-ini-kb.txt | 198 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 182 ++++++++++++++++++++++++++++++++++++- technical.txt | 10 +++ 4 files changed, 392 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6afdc09..4958e8c 100644 --- a/README.md +++ b/README.md @@ -362,7 +362,11 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16278.1000 (Windows 10 Build 160101.0800) - 10.0.16281.1000 (Windows 10 Build 160101.0800) - 10.0.16288.1 (Windows 10 Build 160101.0800) +- 10.0.16291.0 (Windows 10 Build 160101.0800) +- 10.0.16294.1 (Windows 10 Build 160101.0800) +- 10.0.16296.0 (Windows 10 Build 160101.0800) - 10.0.16353.1000 (Windows 10 Build 160101.0800) +- 10.0.16362.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index fbd7555..eb72984 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-09-15 +Updated=2017-09-24 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -3511,6 +3511,96 @@ SLInitHook.x64=1 SLInitOffset.x64=22D5C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16291.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16294.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16296.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16353.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -3541,6 +3631,36 @@ SLInitHook.x64=1 SLInitOffset.x64=22D0C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16362.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FBA1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=2F61C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=19D1C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE99 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D9C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -5059,6 +5179,63 @@ bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 +[10.0.16291.0-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16294.1-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16296.0-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + [10.0.16353.1000-SLInit] bInitialized.x86 =C6F7C bServerSku.x86 =C6F80 @@ -5077,3 +5254,22 @@ bRemoteConnAllowed.x64=EE4A4 bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 + +[10.0.16362.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 03edaba..3e0f479 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-09-15 +Updated=2017-09-24 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -2356,6 +2356,84 @@ SLInitHook.x64=1 SLInitOffset.x64=22D5C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16291.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16294.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16296.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16353.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A9388 @@ -2382,6 +2460,32 @@ SLInitHook.x64=1 SLInitOffset.x64=22D0C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16362.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E38 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FBA1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=2F61C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=19D1C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DE99 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=463D4 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D9C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3876,6 +3980,63 @@ bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 +[10.0.16291.0-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16294.1-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16296.0-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + [10.0.16353.1000-SLInit] bInitialized.x86 =C6F7C bServerSku.x86 =C6F80 @@ -3894,3 +4055,22 @@ bRemoteConnAllowed.x64=EE4A4 bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 + +[10.0.16362.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 diff --git a/technical.txt b/technical.txt index 8d63b0e..937c427 100644 --- a/technical.txt +++ b/technical.txt @@ -134,10 +134,20 @@ Terminal Services supported versions 10.0.16278.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16281.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16288.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16291.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16294.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16296.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16353.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16362.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.09.24 : +- added support for termsrv.dll 10.0.16291.0 +- added support for termsrv.dll 10.0.16294.1 +- added support for termsrv.dll 10.0.16296.0 +- added support for termsrv.dll 10.0.16362.1000 + 2017.09.15 : - added support for termsrv.dll 10.0.16288.1 From 476e277ad3728e34679c611b46b4a61ff9dfe26f Mon Sep 17 00:00:00 2001 From: Mark Yisri Date: Sat, 7 Oct 2017 08:16:14 -0400 Subject: [PATCH 186/208] Update README.md with workaround Add link to discussion about workaround for the Creators Update. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4958e8c..1d25ee5 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh ### Known issues: - Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) - Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) +- Beginning with the Windows 10 Creators Update RDP Wrapper will no longer work, claiming that the listener is not listening. - [more info](https://github.com/stascorp/rdpwrap/issues/194#issuecomment-323564111), [download links](https://github.com/stascorp/rdpwrap/issues/194#issuecomment-325627235) - Terminal Service does not start after installing some updates or "Access Denied" issue - [#215](https://github.com/stascorp/rdpwrap/issues/215), [#101](https://github.com/stascorp/rdpwrap/issues/101) - RDP Wrapper does not work with RemoteFX enabled hosts - [#127](https://github.com/stascorp/rdpwrap/issues/127), [#208](https://github.com/stascorp/rdpwrap/issues/208), [#216](https://github.com/stascorp/rdpwrap/issues/216) - RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) From 96fdc27be5ca2a2381851ffba030332c990de72e Mon Sep 17 00:00:00 2001 From: Stas'M Date: Sat, 7 Oct 2017 15:25:08 +0300 Subject: [PATCH 187/208] README: Addendum for previous commit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d25ee5..665b802 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh ### Known issues: - Beginning with Windows 8 **on tablet PCs** inactive sessions will be logged out by system - [more info](https://github.com/stascorp/rdpwrap/issues/37) - Beginning with Windows 10 you can accidentally lock yourself from PC - [more info](https://github.com/stascorp/rdpwrap/issues/50) -- Beginning with the Windows 10 Creators Update RDP Wrapper will no longer work, claiming that the listener is not listening. - [more info](https://github.com/stascorp/rdpwrap/issues/194#issuecomment-323564111), [download links](https://github.com/stascorp/rdpwrap/issues/194#issuecomment-325627235) +- Beginning with the Creators Update for Windows 10 Home, RDP Wrapper will no longer work, claiming that the listener is `[not listening]` because of `rfxvmt.dll` is missing - [more info](https://github.com/stascorp/rdpwrap/issues/194#issuecomment-323564111), [download links](https://github.com/stascorp/rdpwrap/issues/194#issuecomment-325627235) - Terminal Service does not start after installing some updates or "Access Denied" issue - [#215](https://github.com/stascorp/rdpwrap/issues/215), [#101](https://github.com/stascorp/rdpwrap/issues/101) - RDP Wrapper does not work with RemoteFX enabled hosts - [#127](https://github.com/stascorp/rdpwrap/issues/127), [#208](https://github.com/stascorp/rdpwrap/issues/208), [#216](https://github.com/stascorp/rdpwrap/issues/216) - RDP works, but termsrv.dll crashes on logon attempt - Windows Vista Starter RTM x86 (termsrv.dll `6.0.6000.16386`) From ebdd795d1788063c292b62e42cdae4b245a06b07 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Fri, 13 Oct 2017 18:24:58 +0300 Subject: [PATCH 188/208] INI: Add support for new builds - 10.0.14393.1737 x86/x64 (fix #322) - 10.0.16299.0 x86/x64 - 10.0.16299.15 x86/x64 (fix #316) - 10.0.17004.1000 x86/x64 --- README.md | 4 + res/rdpwrap-ini-kb.txt | 198 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 182 ++++++++++++++++++++++++++++++++++++- technical.txt | 10 +++ 4 files changed, 392 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 665b802..8ccdd81 100644 --- a/README.md +++ b/README.md @@ -318,6 +318,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14388.0 (Windows 10 RS1 Release 160709-1635) - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) - 10.0.14393.1198 (Windows 10 RS1 Release Sec 170427-1353 with KB4019472) +- 10.0.14393.1737 (Windows 10 RS1 Release Inmarket 170914-1249 with KB4041691) - 10.0.14901.1000 (Windows 10 RS Pre-Release 160805-1700) - 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) - 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) @@ -366,8 +367,11 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16291.0 (Windows 10 Build 160101.0800) - 10.0.16294.1 (Windows 10 Build 160101.0800) - 10.0.16296.0 (Windows 10 Build 160101.0800) +- 10.0.16299.0 (Windows 10 Build 160101.0800) +- 10.0.16299.15 (Windows 10 Build 160101.0800) - 10.0.16353.1000 (Windows 10 Build 160101.0800) - 10.0.16362.1000 (Windows 10 Build 160101.0800) +- 10.0.17004.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index eb72984..974f2f9 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-09-24 +Updated=2017-10-13 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2185,6 +2185,36 @@ SLInitHook.x86=1 SLInitOffset.x86=45636 SLInitFunc.x86=New_CSLQuery_Initialize +[10.0.14393.1737] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6198 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D861 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=35AD5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30039 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45724 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14901.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -3601,6 +3631,66 @@ SLInitHook.x64=1 SLInitOffset.x64=22D5C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16299.0] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16299.15] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16353.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -3661,6 +3751,36 @@ SLInitHook.x64=1 SLInitOffset.x64=22D9C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17004.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8EB8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FB41 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=2F65C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=19D1C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DF09 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=4643F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D9C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -4342,6 +4462,25 @@ bMultimonAllowed.x86 =C1F80 ulMaxDebugSessions.x86=C1F84 bFUSEnabled.x86 =C1F88 +[10.0.14393.1737-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 + [10.0.14901.1000-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 @@ -5236,6 +5375,44 @@ bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 +[10.0.16299.0-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16299.15-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + [10.0.16353.1000-SLInit] bInitialized.x86 =C6F7C bServerSku.x86 =C6F80 @@ -5273,3 +5450,22 @@ bRemoteConnAllowed.x64=EE4A4 bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 + +[10.0.17004.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 3e0f479..96f8611 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-09-24 +Updated=2017-10-13 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1210,6 +1210,32 @@ SLInitHook.x86=1 SLInitOffset.x86=45636 SLInitFunc.x86=New_CSLQuery_Initialize +[10.0.14393.1737] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6198 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D861 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=35AD5 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=299A4 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=30039 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1AFC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45724 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C930 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14901.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A6038 @@ -2434,6 +2460,58 @@ SLInitHook.x64=1 SLInitOffset.x64=22D5C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.16299.0] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.16299.15] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8E08 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FD01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=39215 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1C774 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DC89 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=461BD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D5C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16353.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A9388 @@ -2486,6 +2564,32 @@ SLInitHook.x64=1 SLInitOffset.x64=22D9C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17004.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A8EB8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8FB41 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=2F65C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=19D1C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3DF09 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=12D85 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=4643F +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22D9C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -3143,6 +3247,25 @@ bMultimonAllowed.x86 =C1F80 ulMaxDebugSessions.x86=C1F84 bFUSEnabled.x86 =C1F88 +[10.0.14393.1737-SLInit] +bInitialized.x86 =C1F6C +bServerSku.x86 =C1F70 +lMaxUserSessions.x86 =C1F74 +bAppServerAllowed.x86 =C1F78 +bRemoteConnAllowed.x86=C1F7C +bMultimonAllowed.x86 =C1F80 +ulMaxDebugSessions.x86=C1F84 +bFUSEnabled.x86 =C1F88 + +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 + [10.0.14901.1000-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 @@ -4037,6 +4160,44 @@ bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 +[10.0.16299.0-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + +[10.0.16299.15-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 + [10.0.16353.1000-SLInit] bInitialized.x86 =C6F7C bServerSku.x86 =C6F80 @@ -4074,3 +4235,22 @@ bRemoteConnAllowed.x64=EE4A4 bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 + +[10.0.17004.1000-SLInit] +bInitialized.x86 =C6F7C +bServerSku.x86 =C6F80 +lMaxUserSessions.x86 =C6F84 +bAppServerAllowed.x86 =C6F88 +bRemoteConnAllowed.x86=C6F8C +bMultimonAllowed.x86 =C6F90 +ulMaxDebugSessions.x86=C6F94 +bFUSEnabled.x86 =C6F98 + +bServerSku.x64 =ED3E8 +lMaxUserSessions.x64 =ED3EC +bAppServerAllowed.x64 =ED3F0 +bInitialized.x64 =EE4A0 +bRemoteConnAllowed.x64=EE4A4 +bMultimonAllowed.x64 =EE4A8 +ulMaxDebugSessions.x64=EE4AC +bFUSEnabled.x64 =EE4B0 diff --git a/technical.txt b/technical.txt index 937c427..9e3a613 100644 --- a/technical.txt +++ b/technical.txt @@ -89,6 +89,7 @@ Terminal Services supported versions 10.0.14388.0 (Windows 10 rs1_release.160709-1635) [init hook + extended patch] 10.0.14393.0 (Windows 10 rs1_release.160715-1616) [init hook + extended patch] 10.0.14393.1198 (Windows 10 rs1_release_sec.170427-1353) [init hook + extended patch] +10.0.14393.1737 (Windows 10 rs1_release_inmarket.170914-1249) [init hook + extended patch] 10.0.14901.1000 (Windows 10 rs_prerelease.160805-1700) [init hook + extended patch] 10.0.14905.1000 (Windows 10 rs_prerelease.160811-1739) [init hook + extended patch] 10.0.14915.1000 (Windows 10 rs_prerelease.160826-1902) [init hook + extended patch] @@ -137,11 +138,20 @@ Terminal Services supported versions 10.0.16291.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16294.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16296.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16299.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.16299.15 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16353.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16362.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17004.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.10.13 : +- added support for termsrv.dll 10.0.14393.1737 +- added support for termsrv.dll 10.0.16299.0 +- added support for termsrv.dll 10.0.16299.15 +- added support for termsrv.dll 10.0.17004.1000 + 2017.09.24 : - added support for termsrv.dll 10.0.16291.0 - added support for termsrv.dll 10.0.16294.1 From 51b3421a65fce61ec5ce58d703c058a8edf8542a Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 27 Dec 2017 16:34:10 +0300 Subject: [PATCH 189/208] INI: Add support for new builds 10.0.17017.1000 (fix #323) 10.0.17025.1000 (fix #339) 10.0.17035.1000 (fix #348) 10.0.17046.1000 (fix #357) 10.0.17063.1000 (fix #375) --- README.md | 5 + res/rdpwrap-ini-kb.txt | 247 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 227 ++++++++++++++++++++++++++++++++++++- technical.txt | 13 +++ 4 files changed, 490 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8ccdd81..ee2b5d5 100644 --- a/README.md +++ b/README.md @@ -372,6 +372,11 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.16353.1000 (Windows 10 Build 160101.0800) - 10.0.16362.1000 (Windows 10 Build 160101.0800) - 10.0.17004.1000 (Windows 10 Build 160101.0800) +- 10.0.17017.1000 (Windows 10 Build 160101.0800) +- 10.0.17025.1000 (Windows 10 Build 160101.0800) +- 10.0.17035.1000 (Windows 10 Build 160101.0800) +- 10.0.17046.1000 (Windows 10 Build 160101.0800) +- 10.0.17063.1000 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 974f2f9..0a03e8d 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-10-13 +Updated=2017-12-27 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -3781,6 +3781,156 @@ SLInitHook.x64=1 SLInitOffset.x64=22D9C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17017.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F291 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3477C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1977C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31049 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=125A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45CDD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=227DC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17025.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB498 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F291 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3477C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1977C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31049 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=125A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45CDD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=227DC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17035.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB3F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F271 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=354AC +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=14E7C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31F19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10CB5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45C4D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22AEC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17046.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB3F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F281 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=354AC +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=14E8C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31F19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10CC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45C4D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22AFC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17063.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD7F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=92671 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=153CC +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=111CE +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2318C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -5469,3 +5619,98 @@ bRemoteConnAllowed.x64=EE4A4 bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 + +[10.0.17017.1000-SLInit] +bInitialized.x86 =C9EB8 +bServerSku.x86 =C9EBC +lMaxUserSessions.x86 =C9EC0 +bAppServerAllowed.x86 =C9EC4 +bRemoteConnAllowed.x86=C9EC8 +bMultimonAllowed.x86 =C9ECC +ulMaxDebugSessions.x86=C9ED0 +bFUSEnabled.x86 =C9ED4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17025.1000-SLInit] +bInitialized.x86 =C9EB8 +bServerSku.x86 =C9EBC +lMaxUserSessions.x86 =C9EC0 +bAppServerAllowed.x86 =C9EC4 +bRemoteConnAllowed.x86=C9EC8 +bMultimonAllowed.x86 =C9ECC +ulMaxDebugSessions.x86=C9ED0 +bFUSEnabled.x86 =C9ED4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17035.1000-SLInit] +bInitialized.x86 =C9ED8 +bServerSku.x86 =C9EDC +lMaxUserSessions.x86 =C9EE0 +bAppServerAllowed.x86 =C9EE4 +bRemoteConnAllowed.x86=C9EE8 +bMultimonAllowed.x86 =C9EEC +ulMaxDebugSessions.x86=C9EF0 +bFUSEnabled.x86 =C9EF4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17046.1000-SLInit] +bInitialized.x86 =C9ED8 +bServerSku.x86 =C9EDC +lMaxUserSessions.x86 =C9EE0 +bAppServerAllowed.x86 =C9EE4 +bRemoteConnAllowed.x86=C9EE8 +bMultimonAllowed.x86 =C9EEC +ulMaxDebugSessions.x86=C9EF0 +bFUSEnabled.x86 =C9EF4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17063.1000-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 96f8611..44d7074 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-10-13 +Updated=2017-12-27 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -2590,6 +2590,136 @@ SLInitHook.x64=1 SLInitOffset.x64=22D9C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17017.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB388 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F291 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=3477C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1977C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31049 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=125A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45CDD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=227DC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17025.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB498 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F291 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=3477C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1977C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31049 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=125A5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45CDD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=227DC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17035.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB3F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F271 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=354AC +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=14E7C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31F19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10CB5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45C4D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22AEC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17046.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AB3F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8F281 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=354AC +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=14E8C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31F19 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10CC5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45C4D +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22AFC +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17063.1000] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD7F8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=92671 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=153CC +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=111CE +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=2318C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -4254,3 +4384,98 @@ bRemoteConnAllowed.x64=EE4A4 bMultimonAllowed.x64 =EE4A8 ulMaxDebugSessions.x64=EE4AC bFUSEnabled.x64 =EE4B0 + +[10.0.17017.1000-SLInit] +bInitialized.x86 =C9EB8 +bServerSku.x86 =C9EBC +lMaxUserSessions.x86 =C9EC0 +bAppServerAllowed.x86 =C9EC4 +bRemoteConnAllowed.x86=C9EC8 +bMultimonAllowed.x86 =C9ECC +ulMaxDebugSessions.x86=C9ED0 +bFUSEnabled.x86 =C9ED4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17025.1000-SLInit] +bInitialized.x86 =C9EB8 +bServerSku.x86 =C9EBC +lMaxUserSessions.x86 =C9EC0 +bAppServerAllowed.x86 =C9EC4 +bRemoteConnAllowed.x86=C9EC8 +bMultimonAllowed.x86 =C9ECC +ulMaxDebugSessions.x86=C9ED0 +bFUSEnabled.x86 =C9ED4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17035.1000-SLInit] +bInitialized.x86 =C9ED8 +bServerSku.x86 =C9EDC +lMaxUserSessions.x86 =C9EE0 +bAppServerAllowed.x86 =C9EE4 +bRemoteConnAllowed.x86=C9EE8 +bMultimonAllowed.x86 =C9EEC +ulMaxDebugSessions.x86=C9EF0 +bFUSEnabled.x86 =C9EF4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17046.1000-SLInit] +bInitialized.x86 =C9ED8 +bServerSku.x86 =C9EDC +lMaxUserSessions.x86 =C9EE0 +bAppServerAllowed.x86 =C9EE4 +bRemoteConnAllowed.x86=C9EE8 +bMultimonAllowed.x86 =C9EEC +ulMaxDebugSessions.x86=C9EF0 +bFUSEnabled.x86 =C9EF4 + +bServerSku.x64 =EC2E8 +lMaxUserSessions.x64 =EC2EC +bAppServerAllowed.x64 =EC2F0 +bInitialized.x64 =ED3A0 +bRemoteConnAllowed.x64=ED3A4 +bMultimonAllowed.x64 =ED3A8 +ulMaxDebugSessions.x64=ED3AC +bFUSEnabled.x64 =ED3B0 + +[10.0.17063.1000-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 diff --git a/technical.txt b/technical.txt index 9e3a613..187251c 100644 --- a/technical.txt +++ b/technical.txt @@ -143,9 +143,22 @@ Terminal Services supported versions 10.0.16353.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16362.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17004.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17017.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17025.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17035.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17040.1000 (Windows 10 WinBuild.160101.0800) [todo] +10.0.17046.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17063.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2017.12.27 : +- added support for termsrv.dll 10.0.17017.1000 +- added support for termsrv.dll 10.0.17025.1000 +- added support for termsrv.dll 10.0.17035.1000 +- added support for termsrv.dll 10.0.17046.1000 +- added support for termsrv.dll 10.0.17063.1000 + 2017.10.13 : - added support for termsrv.dll 10.0.14393.1737 - added support for termsrv.dll 10.0.16299.0 From 180f41197aa6384b918caaec24d2ce17b262b645 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 27 Dec 2017 17:12:28 +0300 Subject: [PATCH 190/208] Installer: Allow to install INI from current directory (fix #300) --- src-installer/RDPWInst.dpr | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 3a97730..e5e43a6 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1,5 +1,5 @@ { - Copyright 2016 Stas'M Corp. + Copyright 2017 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -670,7 +670,19 @@ begin OnlineINI.Free; end; if not Online then - ExtractRes('config', ExtractFilePath(ExpandPath(WrapPath)) + 'rdpwrap.ini'); + begin + S := ExtractFilePath(ParamStr(0)) + 'rdpwrap.ini'; + if FileExists(S) then + begin + OnlineINI := TStringList.Create; + OnlineINI.LoadFromFile(S); + S := ExtractFilePath(ExpandPath(WrapPath)) + 'rdpwrap.ini'; + OnlineINI.SaveToFile(S); + Writeln('[+] Current INI file -> ', S); + OnlineINI.Free; + end else + ExtractRes('config', ExtractFilePath(ExpandPath(WrapPath)) + 'rdpwrap.ini'); + end; RDPClipRes := ''; case Arch of From 1223417ca1bc9a4aa956fa0ee2735983bdf6cc38 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 27 Dec 2017 20:17:28 +0300 Subject: [PATCH 191/208] Installer: Extract rfxvmt.dll if missing (#194) --- src-installer/RDPWInst.dpr | 10 +++++++++- src-installer/resource.res | Bin 996464 -> 1141176 bytes 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index e5e43a6..9b5de2b 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -641,7 +641,7 @@ end; procedure ExtractFiles; var - RDPClipRes, S: String; + RDPClipRes, RfxvmtRes, S: String; OnlineINI: TStringList; begin if not DirectoryExists(ExtractFilePath(ExpandPath(WrapPath))) then @@ -685,6 +685,7 @@ begin end; RDPClipRes := ''; + RfxvmtRes := ''; case Arch of 32: begin ExtractRes('rdpw32', ExpandPath(WrapPath)); @@ -692,6 +693,8 @@ begin RDPClipRes := 'rdpclip6032'; if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 1) then RDPClipRes := 'rdpclip6132'; + if (FV.Version.w.Major = 10) and (FV.Version.w.Minor = 0) then + RfxvmtRes := 'rfxvmt32'; end; 64: begin ExtractRes('rdpw64', ExpandPath(WrapPath)); @@ -699,11 +702,16 @@ begin RDPClipRes := 'rdpclip6064'; if (FV.Version.w.Major = 6) and (FV.Version.w.Minor = 1) then RDPClipRes := 'rdpclip6164'; + if (FV.Version.w.Major = 10) and (FV.Version.w.Minor = 0) then + RfxvmtRes := 'rfxvmt64'; end; end; if RDPClipRes <> '' then if not FileExists(ExpandPath('%SystemRoot%\System32\rdpclip.exe')) then ExtractRes(RDPClipRes, ExpandPath('%SystemRoot%\System32\rdpclip.exe')); + if RfxvmtRes <> '' then + if not FileExists(ExpandPath('%SystemRoot%\System32\rfxvmt.dll')) then + ExtractRes(RfxvmtRes, ExpandPath('%SystemRoot%\System32\rfxvmt.dll')); end; procedure DeleteFiles; diff --git a/src-installer/resource.res b/src-installer/resource.res index ebdf66da3653c4e06d961c03430c244a3e05e96b..920430a6fb08f9d1ccb7d975d05e2d3f7906edbc 100644 GIT binary patch delta 76121 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

+@CFz{-It8}DC4Efo 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 Tt!t*c|CKc3;Z-x-Lz4eDU5D9I delta 197 zcmdmS+4aKh&Am#vK zP9Ww2Vs0Sj0b*Vt=G(sdEPrdu^a&|~0sJfsObj5v#=r<98MnVr5tL Date: Wed, 27 Dec 2017 20:20:28 +0300 Subject: [PATCH 192/208] Installer: Update version --- src-installer/RDPWInst.dpr | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 9b5de2b..7894f3b 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1077,9 +1077,9 @@ end; var I: Integer; begin - Writeln('RDP Wrapper Library v1.6'); - Writeln('Installer v2.3'); - Writeln('Copyright (C) Stas''M Corp. 2016'); + Writeln('RDP Wrapper Library v1.6.2'); + Writeln('Installer v2.5'); + Writeln('Copyright (C) Stas''M Corp. 2017'); Writeln(''); if (ParamCount < 1) From 63bf27f0a9f00f3d24f5e32dfbc719cda5f2dcc3 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 27 Dec 2017 21:28:44 +0300 Subject: [PATCH 193/208] Config: Add HonorLegacySettings option --- src-rdpconfig/MainUnit.dfm | 9 +++++++++ src-rdpconfig/MainUnit.pas | 13 ++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src-rdpconfig/MainUnit.dfm b/src-rdpconfig/MainUnit.dfm index 7361f19..c077af1 100644 --- a/src-rdpconfig/MainUnit.dfm +++ b/src-rdpconfig/MainUnit.dfm @@ -222,6 +222,15 @@ object MainForm: TMainForm Value = 0 OnChange = seRDPPortChange end + object cbCustomPrg: TCheckBox + Left = 8 + Top = 115 + Width = 169 + Height = 17 + Caption = 'Allow to start custom programs' + TabOrder = 4 + OnClick = cbAllowTSConnectionsClick + end end object Timer: TTimer Interval = 250 diff --git a/src-rdpconfig/MainUnit.pas b/src-rdpconfig/MainUnit.pas index c6841d0..48aa051 100644 --- a/src-rdpconfig/MainUnit.pas +++ b/src-rdpconfig/MainUnit.pas @@ -1,5 +1,5 @@ { - Copyright 2016 Stas'M Corp. + Copyright 2017 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,6 +49,7 @@ type lsSuppVer: TLabel; cbHideUsers: TCheckBox; gbGeneral: TGroupBox; + cbCustomPrg: TCheckBox; procedure FormCreate(Sender: TObject); procedure cbAllowTSConnectionsClick(Sender: TObject); procedure seRDPPortChange(Sender: TObject); @@ -373,6 +374,11 @@ begin cbSingleSessionPerUser.Checked := Reg.ReadBool('fSingleSessionPerUser'); except + end; + try + cbCustomPrg.Checked := Reg.ReadBool('HonorLegacySettings'); + except + end; Reg.CloseKey; @@ -431,6 +437,11 @@ begin Reg.WriteBool('fSingleSessionPerUser', cbSingleSessionPerUser.Checked); except + end; + try + Reg.WriteBool('HonorLegacySettings', cbCustomPrg.Checked); + except + end; Reg.CloseKey; From 5ad550638e7de238b9c51d607749180fc755bd94 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 27 Dec 2017 21:31:48 +0300 Subject: [PATCH 194/208] Config: Update version and copyright year --- src-rdpconfig/resource.res | Bin 12936 -> 12936 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src-rdpconfig/resource.res b/src-rdpconfig/resource.res index 9cd36450a4ac2e894b2743929d553a9033280974..68f82f22c8d5756dc2b35bc498808fb4c35e8e1c 100644 GIT binary patch delta 47 xcmeB3?MU5lMw_37fsp|O*uXT?=G)q$jEp9eKk7_pG@sn5`<>BfbE6(R3jhxA3<3ZE delta 47 xcmeB3?MU5lMw_3Rfsp|O*uXU7=G)q$jEu&UKk7_pG@IP1`<>BnbE6(R3jhv`3;h59 From ba75e65dac4ff05990902577d62d76c23c7c9dd5 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 27 Dec 2017 23:30:30 +0300 Subject: [PATCH 195/208] MSI: Move WiX script to res directory and update it --- .gitignore | 5 +++++ RDPWInst.wxs => res/RDPWInst.wxs | 2 +- res/build_wxs.bat | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) rename RDPWInst.wxs => res/RDPWInst.wxs (98%) create mode 100644 res/build_wxs.bat diff --git a/.gitignore b/.gitignore index f0d086f..56e5ba3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,8 @@ __history/ *.dcu *.exe *.dll +*.msi + +# MSI local stuff +*.wixobj +*.wixpdb diff --git a/RDPWInst.wxs b/res/RDPWInst.wxs similarity index 98% rename from RDPWInst.wxs rename to res/RDPWInst.wxs index fa37565..9352ffc 100644 --- a/RDPWInst.wxs +++ b/res/RDPWInst.wxs @@ -2,7 +2,7 @@ - + diff --git a/res/build_wxs.bat b/res/build_wxs.bat new file mode 100644 index 0000000..9eeef72 --- /dev/null +++ b/res/build_wxs.bat @@ -0,0 +1,3 @@ +@echo off +"%ProgramFiles%\WiX Toolset v3.11\bin\candle" RDPWInst.wxs +"%ProgramFiles%\WiX Toolset v3.11\bin\light" RDPWInst.wixobj From a3cd8ca630190c890109940151290daafe4daf38 Mon Sep 17 00:00:00 2001 From: Stanislav Motylkov Date: Thu, 28 Dec 2017 00:04:36 +0300 Subject: [PATCH 196/208] README: Update changelog for v1.6.2 --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index ee2b5d5..9f3d379 100644 --- a/README.md +++ b/README.md @@ -165,6 +165,17 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh ### Change log: +#### 2017.12.27 +- Version 1.6.2 +- Installer updated +- Include updated INI file for latest Windows builds +- Added check for supported Windows versions ([#155](https://github.com/stascorp/rdpwrap/issues/155)) +- Added feature to take INI file from current directory ([#300](https://github.com/stascorp/rdpwrap/issues/300)) +- Added feature to restore rfxvmt.dll (missing in Windows 10 Home [#194](https://github.com/stascorp/rdpwrap/issues/194)) +- RDP Config updated +- Added feature to allow custom start programs ([#13 (comment)](https://github.com/stascorp/rdpwrap/issues/13#issuecomment-77651843)) +- MSI installation package added ([#14](https://github.com/stascorp/rdpwrap/issues/14)) + #### 2016.08.01 - Version 1.6.1 - Include updated INI file for latest Windows builds From 56915ccf5b5145e56f224da9e9e3dc9b0c7e09a6 Mon Sep 17 00:00:00 2001 From: Jim Yang Date: Sun, 15 Apr 2018 17:51:57 +0800 Subject: [PATCH 197/208] Allow UDP 3389 at firewall configuration --- res/legacy.install.bat | 3 ++- src-installer/RDPWInst.dpr | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/res/legacy.install.bat b/res/legacy.install.bat index a7d8de2..303cc32 100644 --- a/res/legacy.install.bat +++ b/res/legacy.install.bat @@ -50,6 +50,7 @@ if not !errorlevel!==0 ( echo [*] Setting firewall configuration... reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f netsh advfirewall firewall add rule name="Remote Desktop" dir=in protocol=tcp localport=3389 profile=any action=allow +netsh advfirewall firewall add rule name="Remote Desktop" dir=in protocol=udp localport=3389 profile=any action=allow echo [*] Looking for TermService PID... tasklist /SVC /FI "SERVICES eq TermService" | find "PID" /V echo. @@ -88,4 +89,4 @@ echo net start Service2 echo etc. goto END -:END \ No newline at end of file +:END diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index 7894f3b..b6c2462 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -978,8 +978,10 @@ end; procedure TSConfigFirewall(Enable: Boolean); begin if Enable then - ExecWait('netsh advfirewall firewall add rule name="Remote Desktop" dir=in protocol=tcp localport=3389 profile=any action=allow') - else + begin + ExecWait('netsh advfirewall firewall add rule name="Remote Desktop" dir=in protocol=tcp localport=3389 profile=any action=allow'); + ExecWait('netsh advfirewall firewall add rule name="Remote Desktop" dir=in protocol=udp localport=3389 profile=any action=allow'); + end else ExecWait('netsh advfirewall firewall delete rule name="Remote Desktop"'); end; From 7dc8817de9f3363450f5cc04d1b0a8ce3020ee11 Mon Sep 17 00:00:00 2001 From: 1nd1g0 <2098540+1nd1g0@users.noreply.github.com> Date: Mon, 26 Mar 2018 16:35:06 +0300 Subject: [PATCH 198/208] INI: Add support for new builds 6.3.9600.18928 (fix #418) --- README.md | 1 + res/rdpwrap-ini-kb.txt | 51 +++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 47 +++++++++++++++++++++++++++++++++++++- technical.txt | 4 ++++ 4 files changed, 101 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9f3d379..6c18f1f 100644 --- a/README.md +++ b/README.md @@ -300,6 +300,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.3.9600.17415 (Windows 8.1 with KB3000850) - 6.3.9600.18692 (Windows 8.1 with KB4022720) - 6.3.9600.18708 (Windows 8.1 with KB4025335) +- 6.3.9600.18928 (Windows 8.1 with KB4088876) - 6.4.9841.0 (Windows 10 Technical Preview) - 6.4.9860.0 (Windows 10 Technical Preview Update 1) - 6.4.9879.0 (Windows 10 Technical Preview Update 2) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 0a03e8d..d1a4707 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2017-12-27 +Updated=2018-03-26 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -1185,6 +1185,36 @@ SLInitHook.x64=1 SLInitOffset.x64=5DB70 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.18928] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B39D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B25D +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=37D25 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=36C09 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D6F9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45495 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=18328 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5D830 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense ; .text:1009569B call sub_100B7EE5 @@ -4078,6 +4108,25 @@ bServerSku.x64 =FA068 ulMaxDebugSessions.x64=FA06C bRemoteConnAllowed.x64=FA070 +[6.3.9600.18928-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =FA054 +lMaxUserSessions.x64 =FA058 +bAppServerAllowed.x64 =FA05C +bInitialized.x64 =FA060 +bMultimonAllowed.x64 =FA064 +bServerSku.x64 =FA068 +ulMaxDebugSessions.x64=FA06C +bRemoteConnAllowed.x64=FA070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 44d7074..67cca07 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2017-12-27 +Updated=2018-03-26 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -480,6 +480,32 @@ SLInitHook.x64=1 SLInitOffset.x64=5DB70 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.18928] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B39D8 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8B25D +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=37D25 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=36C09 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D6F9 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45495 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=18328 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5D830 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=956A8 @@ -2844,6 +2870,25 @@ bServerSku.x64 =FA068 ulMaxDebugSessions.x64=FA06C bRemoteConnAllowed.x64=FA070 +[6.3.9600.18928-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =FA054 +lMaxUserSessions.x64 =FA058 +bAppServerAllowed.x64 =FA05C +bInitialized.x64 =FA060 +bMultimonAllowed.x64 =FA064 +bServerSku.x64 =FA068 +ulMaxDebugSessions.x64=FA06C +bRemoteConnAllowed.x64=FA070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 diff --git a/technical.txt b/technical.txt index 187251c..90aa08d 100644 --- a/technical.txt +++ b/technical.txt @@ -55,6 +55,7 @@ Terminal Services supported versions 6.3.9600.17415 (Windows 8.1 with KB3000850) [init hook + extended patch] 6.3.9600.18692 (Windows 8.1 with KB4022720) [init hook + extended patch] 6.3.9600.18708 (Windows 8.1 with KB4025335) [init hook + extended patch] +6.3.9600.18928 (Windows 8.1 with KB4088876) [init hook + extended patch] 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] 6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] @@ -152,6 +153,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2018.03.26 : +- added support for termsrv.dll 6.3.9600.18928 by 1nd1g0 + 2017.12.27 : - added support for termsrv.dll 10.0.17017.1000 - added support for termsrv.dll 10.0.17025.1000 From 560c5a7b45b0db7047cc948125b7fe5e7123661d Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 16 May 2018 12:40:21 +0300 Subject: [PATCH 199/208] INI: Add support for new builds 10.0.17128.1 10.0.17133.1 (fix #442) 10.0.17134.1 (fix #456) --- README.md | 3 + res/rdpwrap-ini-kb.txt | 149 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 137 ++++++++++++++++++++++++++++++++++++- technical.txt | 12 ++++ 4 files changed, 299 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6c18f1f..1f8aa34 100644 --- a/README.md +++ b/README.md @@ -389,6 +389,9 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.17035.1000 (Windows 10 Build 160101.0800) - 10.0.17046.1000 (Windows 10 Build 160101.0800) - 10.0.17063.1000 (Windows 10 Build 160101.0800) +- 10.0.17128.1 (Windows 10 Build 160101.0800) +- 10.0.17133.1 (Windows 10 Build 160101.0800) +- 10.0.17134.1 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index d1a4707..e7f5bf4 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2018-03-26 +Updated=2018-05-16 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -3961,6 +3961,96 @@ SLInitHook.x64=1 SLInitOffset.x64=2318C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17128.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17133.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17134.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -5763,3 +5853,60 @@ bRemoteConnAllowed.x64=F2434 bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440 + +[10.0.17128.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 + +[10.0.17133.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 + +[10.0.17134.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 67cca07..4728fe2 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2018-03-26 +Updated=2018-05-16 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -2746,6 +2746,84 @@ SLInitHook.x64=1 SLInitOffset.x64=2318C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17128.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17133.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17134.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E7E +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -4524,3 +4602,60 @@ bRemoteConnAllowed.x64=F2434 bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440 + +[10.0.17128.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 + +[10.0.17133.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 + +[10.0.17134.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 diff --git a/technical.txt b/technical.txt index 90aa08d..5cd8262 100644 --- a/technical.txt +++ b/technical.txt @@ -120,6 +120,7 @@ Terminal Services supported versions 10.0.15061.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.296 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.15063.994 (Windows 10 WinBuild.160101.0800) [todo] 10.0.16179.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -150,9 +151,20 @@ Terminal Services supported versions 10.0.17040.1000 (Windows 10 WinBuild.160101.0800) [todo] 10.0.17046.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17063.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17074.1002 (Windows 10 WinBuild.160101.0800) [todo] +10.0.17083.1000 (Windows 10 WinBuild.160101.0800) [todo] +10.0.17115.1 (Windows 10 WinBuild.160101.0800) [todo] +10.0.17128.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17133.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17134.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2018.05.16 : +- added support for termsrv.dll 10.0.17128.1 +- added support for termsrv.dll 10.0.17133.1 +- added support for termsrv.dll 10.0.17134.1 + 2018.03.26 : - added support for termsrv.dll 6.3.9600.18928 by 1nd1g0 From 2df3a7495877f0a6a3ad1892aaf7391a6e1ec008 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 16 May 2018 17:14:17 +0300 Subject: [PATCH 200/208] Installer: Grant access to system and services (fix #391) --- src-installer/RDPWInst.dpr | 62 +++++++++++++++++++++++++++++++++---- src-installer/resource.res | Bin 1141176 -> 1141176 bytes 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src-installer/RDPWInst.dpr b/src-installer/RDPWInst.dpr index b6c2462..6c95f3f 100644 --- a/src-installer/RDPWInst.dpr +++ b/src-installer/RDPWInst.dpr @@ -1,5 +1,5 @@ { - Copyright 2017 Stas'M Corp. + Copyright 2018 Stas'M Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,7 +26,9 @@ uses Classes, WinSvc, Registry, - WinInet; + WinInet, + AccCtrl, + AclAPI; function EnumServicesStatusEx( hSCManager: SC_HANDLE; @@ -41,6 +43,11 @@ function EnumServicesStatusEx( pszGroupName: PWideChar): BOOL; stdcall; external advapi32 name 'EnumServicesStatusExW'; +function ConvertStringSidToSid( + StringSid: PWideChar; + var Sid: PSID): BOOL; stdcall; + external advapi32 name 'ConvertStringSidToSidW'; + type FILE_VERSION = record Version: record case Boolean of @@ -639,14 +646,57 @@ begin Result := True; end; +procedure GrantSidFullAccess(Path, SID: String); +var + p_SID: PSID; + pDACL: PACL; + EA: EXPLICIT_ACCESS; + Code, Result: DWORD; +begin + p_SID := nil; + if not ConvertStringSidToSid(PChar(SID), p_SID) then + begin + Code := GetLastError; + Writeln('[-] ConvertStringSidToSid error (code ', Code, ').'); + Exit; + end; + EA.grfAccessPermissions := GENERIC_ALL; + EA.grfAccessMode := GRANT_ACCESS; + EA.grfInheritance := SUB_CONTAINERS_AND_OBJECTS_INHERIT; + EA.Trustee.pMultipleTrustee := nil; + EA.Trustee.MultipleTrusteeOperation := NO_MULTIPLE_TRUSTEE; + EA.Trustee.TrusteeForm := TRUSTEE_IS_SID; + EA.Trustee.TrusteeType := TRUSTEE_IS_WELL_KNOWN_GROUP; + EA.Trustee.ptstrName := p_SID; + + Result := SetEntriesInAcl(1, @EA, nil, pDACL); + if Result = ERROR_SUCCESS then + begin + if SetNamedSecurityInfo(pchar(Path), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pDACL, nil) <> ERROR_SUCCESS then + begin + Code := GetLastError; + Writeln('[-] SetNamedSecurityInfo error (code ', Code, ').'); + end; + LocalFree(Cardinal(pDACL)); + end + else begin + Code := GetLastError; + Writeln('[-] SetEntriesInAcl error (code ', Code, ').'); + end; +end; + procedure ExtractFiles; var RDPClipRes, RfxvmtRes, S: String; OnlineINI: TStringList; begin if not DirectoryExists(ExtractFilePath(ExpandPath(WrapPath))) then - if ForceDirectories(ExtractFilePath(ExpandPath(WrapPath))) then - Writeln('[+] Folder created: ', ExtractFilePath(ExpandPath(WrapPath))) + if ForceDirectories(ExtractFilePath(ExpandPath(WrapPath))) then begin + S := ExtractFilePath(ExpandPath(WrapPath)); + Writeln('[+] Folder created: ', S); + GrantSidFullAccess(S, 'S-1-5-18'); // Local System account + GrantSidFullAccess(S, 'S-1-5-6'); // Service group + end else begin Writeln('[-] ForceDirectories error.'); Writeln('[*] Path: ', ExtractFilePath(ExpandPath(WrapPath))); @@ -1080,8 +1130,8 @@ var I: Integer; begin Writeln('RDP Wrapper Library v1.6.2'); - Writeln('Installer v2.5'); - Writeln('Copyright (C) Stas''M Corp. 2017'); + Writeln('Installer v2.6'); + Writeln('Copyright (C) Stas''M Corp. 2018'); Writeln(''); if (ParamCount < 1) diff --git a/src-installer/resource.res b/src-installer/resource.res index 920430a6fb08f9d1ccb7d975d05e2d3f7906edbc..0e896e17aa6e2955b771c842c29ed61cd1507eb7 100644 GIT binary patch delta 71 zcmV-N0J#6S(?z(`MSz3>gaU*Egam{Iga(8Mgb0KQgbIWUgbaiYgbsucgb=h5;A8;? dx8YgaU*Egam{Iga(8Mgb0KQgbIWUgbaiYgbsucgb=h5;A8;> dx8Y Date: Wed, 16 May 2018 18:43:14 +0300 Subject: [PATCH 201/208] INI: Fix bug in DefPolicy patch (fix #486) --- res/rdpwrap-ini-kb.txt | 13 +++++++------ res/rdpwrap.ini | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index e7f5bf4..9c7270a 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -53,6 +53,7 @@ CDefPolicy_Query_eax_rdi=B80001000089873806000090 CDefPolicy_Query_eax_ecx=B80001000089812003000090 CDefPolicy_Query_eax_ecx_jmp=B800010000898120030000EB0E CDefPolicy_Query_eax_rcx=B80001000089813806000090 +CDefPolicy_Query_edi_rcx=BF0001000089B938060000909090 [6.0.6000.16386] ; HOW TO search CSessionArbitrationHelper::IsSingleSessionPerUserEnabled function in IDA Pro: @@ -3981,8 +3982,8 @@ DefPolicyPatch.x86=1 DefPolicyOffset.x86=33569 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 -DefPolicyOffset.x64=10E7E -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx ; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=474AD @@ -4011,8 +4012,8 @@ DefPolicyPatch.x86=1 DefPolicyOffset.x86=33569 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 -DefPolicyOffset.x64=10E7E -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx ; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=474AD @@ -4041,8 +4042,8 @@ DefPolicyPatch.x86=1 DefPolicyOffset.x86=33569 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 -DefPolicyOffset.x64=10E7E -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx ; Hook CSLQuery::Initialize SLInitHook.x86=1 SLInitOffset.x86=474AD diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 4728fe2..cc5ded5 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -35,6 +35,7 @@ CDefPolicy_Query_eax_rdi=B80001000089873806000090 CDefPolicy_Query_eax_ecx=B80001000089812003000090 CDefPolicy_Query_eax_ecx_jmp=B800010000898120030000EB0E CDefPolicy_Query_eax_rcx=B80001000089813806000090 +CDefPolicy_Query_edi_rcx=BF0001000089B938060000909090 [6.0.6000.16386] SingleUserPatch.x86=1 @@ -2763,8 +2764,8 @@ DefPolicyPatch.x86=1 DefPolicyOffset.x86=33569 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 -DefPolicyOffset.x64=10E7E -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx SLInitHook.x86=1 SLInitOffset.x86=474AD SLInitFunc.x86=New_CSLQuery_Initialize @@ -2789,8 +2790,8 @@ DefPolicyPatch.x86=1 DefPolicyOffset.x86=33569 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 -DefPolicyOffset.x64=10E7E -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx SLInitHook.x86=1 SLInitOffset.x86=474AD SLInitFunc.x86=New_CSLQuery_Initialize @@ -2815,8 +2816,8 @@ DefPolicyPatch.x86=1 DefPolicyOffset.x86=33569 DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 -DefPolicyOffset.x64=10E7E -DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx SLInitHook.x86=1 SLInitOffset.x86=474AD SLInitFunc.x86=New_CSLQuery_Initialize From 65b19543f4d6f94cc444cf07e0f497fddd23dda2 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 16 May 2018 19:26:57 +0300 Subject: [PATCH 202/208] INI: Add support for new builds 10.0.17115.1 (fix #424) --- README.md | 1 + res/rdpwrap-ini-kb.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ res/rdpwrap.ini | 45 ++++++++++++++++++++++++++++++++++++++ technical.txt | 3 ++- 4 files changed, 97 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f8aa34..999d27e 100644 --- a/README.md +++ b/README.md @@ -389,6 +389,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.17035.1000 (Windows 10 Build 160101.0800) - 10.0.17046.1000 (Windows 10 Build 160101.0800) - 10.0.17063.1000 (Windows 10 Build 160101.0800) +- 10.0.17115.1 (Windows 10 Build 160101.0800) - 10.0.17128.1 (Windows 10 Build 160101.0800) - 10.0.17133.1 (Windows 10 Build 160101.0800) - 10.0.17134.1 (Windows 10 Build 160101.0800) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 9c7270a..4f9c24f 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -3962,6 +3962,36 @@ SLInitHook.x64=1 SLInitOffset.x64=2318C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17115.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.17128.1] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -5855,6 +5885,25 @@ bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440 +[10.0.17115.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 + [10.0.17128.1-SLInit] bInitialized.x86 =CBF38 bServerSku.x86 =CBF3C diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index cc5ded5..56c822e 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2747,6 +2747,32 @@ SLInitHook.x64=1 SLInitOffset.x64=2318C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17115.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AD738 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=925D1 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36B0C +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1511C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=33569 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=10E78 +DefPolicyCode.x64=CDefPolicy_Query_edi_rcx +SLInitHook.x86=1 +SLInitOffset.x86=474AD +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=22E6C +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.17128.1] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=AD738 @@ -4604,6 +4630,25 @@ bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440 +[10.0.17115.1-SLInit] +bInitialized.x86 =CBF38 +bServerSku.x86 =CBF3C +lMaxUserSessions.x86 =CBF40 +bAppServerAllowed.x86 =CBF44 +bRemoteConnAllowed.x86=CBF48 +bMultimonAllowed.x86 =CBF4C +ulMaxDebugSessions.x86=CBF50 +bFUSEnabled.x86 =CBF54 + +bServerSku.x64 =F1378 +lMaxUserSessions.x64 =F137C +bAppServerAllowed.x64 =F1380 +bInitialized.x64 =F2430 +bRemoteConnAllowed.x64=F2434 +bMultimonAllowed.x64 =F2438 +ulMaxDebugSessions.x64=F243C +bFUSEnabled.x64 =F2440 + [10.0.17128.1-SLInit] bInitialized.x86 =CBF38 bServerSku.x86 =CBF3C diff --git a/technical.txt b/technical.txt index 5cd8262..d1735ba 100644 --- a/technical.txt +++ b/technical.txt @@ -153,7 +153,7 @@ Terminal Services supported versions 10.0.17063.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17074.1002 (Windows 10 WinBuild.160101.0800) [todo] 10.0.17083.1000 (Windows 10 WinBuild.160101.0800) [todo] -10.0.17115.1 (Windows 10 WinBuild.160101.0800) [todo] +10.0.17115.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17128.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17133.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17134.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -161,6 +161,7 @@ Terminal Services supported versions Source code changelog (rdpwrap library): 2018.05.16 : +- added support for termsrv.dll 10.0.17115.1 - added support for termsrv.dll 10.0.17128.1 - added support for termsrv.dll 10.0.17133.1 - added support for termsrv.dll 10.0.17134.1 From b3e1c77321cd5a8c2102943f162a004010cd913e Mon Sep 17 00:00:00 2001 From: NULL Date: Wed, 3 Oct 2018 20:47:48 +0200 Subject: [PATCH 203/208] INI: Add support for new builds (#568) - 6.1.7600.20890 (fix #563) - 6.1.7600.21316 (fix #564) - 6.1.7601.21650 (fix #565) - 6.1.7601.21866 (fix #566) - 6.1.7601.22104 (fix #567) - 6.3.9600.19093 (fix #549) - 10.0.14393.2457 (fix #542) - 10.0.15063.1155 (fix #506) --- README.md | 8 ++ res/rdpwrap-ini-kb.txt | 187 ++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 193 +++++++++++++++++++++++++++++++++++++---- technical.txt | 23 +++-- 4 files changed, 390 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 999d27e..77d9f52 100644 --- a/README.md +++ b/README.md @@ -282,7 +282,12 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.0.6002.23521 (Windows Vista SP2 with KB3003743 LDR) - 6.1.X.X (Windows 7 / Server 2008 R2) - 6.1.7600.16385 (Windows 7) +- 6.1.7600.20890 (Windows 7 with KB2479710) +- 6.1.7600.21316 (Windows 7 with KB2750090) - 6.1.7601.17514 (Windows 7 SP1) +- 6.1.7601.21650 (Windows 7 SP1 with KB2479710) +- 6.1.7601.21866 (Windows 7 SP1 with KB2647409) +- 6.1.7601.22104 (Windows 7 SP1 with KB2750090) - 6.1.7601.18540 (Windows 7 SP1 with KB2984972 GDR) - 6.1.7601.22750 (Windows 7 SP1 with KB2984972 LDR) - 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) @@ -301,6 +306,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.3.9600.18692 (Windows 8.1 with KB4022720) - 6.3.9600.18708 (Windows 8.1 with KB4025335) - 6.3.9600.18928 (Windows 8.1 with KB4088876) +- 6.3.9600.19093 (Windows 8.1 with KB4343891) - 6.4.9841.0 (Windows 10 Technical Preview) - 6.4.9860.0 (Windows 10 Technical Preview Update 1) - 6.4.9879.0 (Windows 10 Technical Preview Update 2) @@ -331,6 +337,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) - 10.0.14393.1198 (Windows 10 RS1 Release Sec 170427-1353 with KB4019472) - 10.0.14393.1737 (Windows 10 RS1 Release Inmarket 170914-1249 with KB4041691) +- 10.0.14393.2457 (Windows 10 RS1 Release Inmarket 180822-1743 with KB4457131) - 10.0.14901.1000 (Windows 10 RS Pre-Release 160805-1700) - 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) - 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) @@ -360,6 +367,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15061.0 (Windows 10 Build 160101.0800) - 10.0.15063.0 (Windows 10 Build 160101.0800) - 10.0.15063.296 (Windows 10 Build 160101.0800) +- 10.0.15063.1155 (Windows 10 Build 160101.0800) - 10.0.16179.1000 (Windows 10 Build 160101.0800) - 10.0.16184.1001 (Windows 10 Build 160101.0800) - 10.0.16199.1000 (Windows 10 Build 160101.0800) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 4f9c24f..34d3d0b 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2018-05-16 +Updated=2018-09-10 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -343,6 +343,38 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17AD2 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7600.20890] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E2D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17DF2 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196FB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17B0E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7600.21316] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E2D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E3E +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196FB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17B5E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.1.7601.17514] ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled ; Imagebase: 6F2E0000 @@ -515,6 +547,54 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17DC6 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7601.21650] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180BE +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D5A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.21866] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180BE +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D5A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22104] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180C6 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D5E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.1.7601.22843] ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled ; Imagebase: 6F2E0000 @@ -1216,6 +1296,36 @@ SLInitHook.x64=1 SLInitOffset.x64=5D830 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.19093] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B3958 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8AE4E +LocalOnlyCode.x64=nopjmp +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=3F045 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=36BC9 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D899 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45305 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=18288 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5D660 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] ; Patch CEnforcementCore::GetInstanceOfTSLicense ; .text:1009569B call sub_100B7EE5 @@ -2246,6 +2356,24 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14393.2457] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D811 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=29CF4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B545 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=C920 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14901.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -3092,6 +3220,24 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.1155] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CB01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=15EA4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=FAE5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=234DC +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16179.1000] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x86=1 @@ -4248,6 +4394,25 @@ bServerSku.x64 =FA068 ulMaxDebugSessions.x64=FA06C bRemoteConnAllowed.x64=FA070 +[6.3.9600.19093-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =FA054 +lMaxUserSessions.x64 =FA058 +bAppServerAllowed.x64 =FA05C +bInitialized.x64 =FA060 +bMultimonAllowed.x64 =FA064 +bServerSku.x64 =FA068 +ulMaxDebugSessions.x64=FA06C +bRemoteConnAllowed.x64=FA070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 @@ -4801,6 +4966,16 @@ bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 +[10.0.14393.2457-SLInit] +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 + [10.0.14901.1000-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 @@ -5334,6 +5509,16 @@ bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C +[10.0.15063.1155-SLInit] +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C + [10.0.16179.1000-SLInit] bInitialized.x86 =C7F6C bServerSku.x86 =C7F70 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index 56c822e..f68c671 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2018-05-16 +Updated=2018-09-10 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -121,6 +121,34 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17AD2 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7600.20890] +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E2D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17DF2 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196FB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17B0E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7600.21316] +SingleUserPatch.x86=1 +SingleUserOffset.x86=19E2D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E3E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=196FB +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17B5E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.1.7601.17514] SingleUserPatch.x86=1 SingleUserOffset.x86=1A49D @@ -149,20 +177,6 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17C82 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi -[6.1.7601.22750] -SingleUserPatch.x86=1 -SingleUserOffset.x86=1A655 -SingleUserCode.x86=nop -SingleUserPatch.x64=1 -SingleUserOffset.x64=17E8E -SingleUserCode.x64=Zero -DefPolicyPatch.x86=1 -DefPolicyOffset.x86=19E21 -DefPolicyCode.x86=CDefPolicy_Query_eax_esi -DefPolicyPatch.x64=1 -DefPolicyOffset.x64=17C92 -DefPolicyCode.x64=CDefPolicy_Query_eax_rdi - [6.1.7601.18637] SingleUserPatch.x86=1 SingleUserOffset.x86=1A4DD @@ -177,6 +191,62 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17DC6 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7601.21650] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180BE +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D5A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.21866] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180BE +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D5A +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22104] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A49D +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=180C6 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19D53 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D5E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + +[6.1.7601.22750] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A655 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=17E8E +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E21 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17C92 +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.1.7601.22843] SingleUserPatch.x86=1 SingleUserOffset.x86=1A655 @@ -507,6 +577,32 @@ SLInitHook.x64=1 SLInitOffset.x64=5D830 SLInitFunc.x64=New_CSLQuery_Initialize +[6.3.9600.19093] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=B3958 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8AE4E +LocalOnlyCode.x64=nopjmp +SingleUserPatch.x86=1 +SingleUserOffset.x86=3F045 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=36BC9 +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=3D899 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=45305 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=18288 +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=5D660 +SLInitFunc.x64=New_CSLQuery_Initialize + [6.4.9841.0] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=956A8 @@ -1263,6 +1359,20 @@ SLInitHook.x64=1 SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.14393.2457] +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8D811 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=29CF4 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=1B545 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=C920 +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.14901.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=A6038 @@ -1993,6 +2103,20 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.1155] +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CB01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=15EA4 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=FAE5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=234DC +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.16179.1000] LocalOnlyPatch.x86=1 LocalOnlyOffset.x86=AA568 @@ -2994,6 +3118,25 @@ bServerSku.x64 =FA068 ulMaxDebugSessions.x64=FA06C bRemoteConnAllowed.x64=FA070 +[6.3.9600.19093-SLInit] +bFUSEnabled.x86 =D3068 +lMaxUserSessions.x86 =D306C +bAppServerAllowed.x86 =D3070 +bInitialized.x86 =D3074 +bMultimonAllowed.x86 =D3078 +bServerSku.x86 =D307C +ulMaxDebugSessions.x86=D3080 +bRemoteConnAllowed.x86=D3084 + +bFUSEnabled.x64 =FA054 +lMaxUserSessions.x64 =FA058 +bAppServerAllowed.x64 =FA05C +bInitialized.x64 =FA060 +bMultimonAllowed.x64 =FA064 +bServerSku.x64 =FA068 +ulMaxDebugSessions.x64=FA06C +bRemoteConnAllowed.x64=FA070 + [6.4.9841.0-SLInit] bFUSEnabled.x86 =BF9F0 lMaxUserSessions.x86 =BF9F4 @@ -3546,6 +3689,16 @@ bMultimonAllowed.x64 =E8478 ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 +[10.0.14393.2457-SLInit] +bServerSku.x64 =E73D0 +lMaxUserSessions.x64 =E73D4 +bAppServerAllowed.x64 =E73D8 +bInitialized.x64 =E8470 +bRemoteConnAllowed.x64=E8474 +bMultimonAllowed.x64 =E8478 +ulMaxDebugSessions.x64=E847C +bFUSEnabled.x64 =E8480 + [10.0.14901.1000-SLInit] bInitialized.x86 =C1F6C bServerSku.x86 =C1F70 @@ -4079,6 +4232,16 @@ bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C +[10.0.15063.1155-SLInit] +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C + [10.0.16179.1000-SLInit] bInitialized.x86 =C7F6C bServerSku.x86 =C7F70 diff --git a/technical.txt b/technical.txt index d1735ba..a7f7405 100644 --- a/technical.txt +++ b/technical.txt @@ -26,14 +26,14 @@ Terminal Services supported versions 6.1.7600.20661 (Windows 7 with KB951422) [todo] 6.1.7600.21085 (Windows 7 with KB951422 v2) [todo] 6.1.7600.20621 (Windows 7 with KB979470) [todo] -6.1.7600.20890 (Windows 7 with KB2479710) [todo] -6.1.7600.21316 (Windows 7 with KB2750090) [todo] +6.1.7600.20890 (Windows 7 with KB2479710) [policy hook + extended patch] +6.1.7600.21316 (Windows 7 with KB2750090) [policy hook + extended patch] 6.1.7600.21420 (Windows 7 with KB2800789) [todo] 6.1.7601.17514 (Windows 7 SP1) [policy hook + extended patch] 6.1.7601.21855 (Windows 7 SP1 with KB951422 v2) [todo] -6.1.7601.21650 (Windows 7 SP1 with KB2479710) [todo] -6.1.7601.21866 (Windows 7 SP1 with KB2647409) [todo] -6.1.7601.22104 (Windows 7 SP1 with KB2750090) [todo] +6.1.7601.21650 (Windows 7 SP1 with KB2479710) [policy hook + extended patch] +6.1.7601.21866 (Windows 7 SP1 with KB2647409) [policy hook + extended patch] +6.1.7601.22104 (Windows 7 SP1 with KB2750090) [policy hook + extended patch] 6.1.7601.22213 (Windows 7 SP1 with KB2800789) [todo] 6.1.7601.22476 (Windows 7 SP1 with KB2870165) [todo] 6.1.7601.22435 (Windows 7 SP1 with KB2878424) [todo] @@ -56,6 +56,7 @@ Terminal Services supported versions 6.3.9600.18692 (Windows 8.1 with KB4022720) [init hook + extended patch] 6.3.9600.18708 (Windows 8.1 with KB4025335) [init hook + extended patch] 6.3.9600.18928 (Windows 8.1 with KB4088876) [init hook + extended patch] +6.3.9600.19093 (Windows 8.1 with KB4343891) [init hook + extended patch] 6.4.9841.0 (Windows 10 Technical Preview) [init hook + extended patch] 6.4.9860.0 (Windows 10 Technical Preview UP1) [init hook + extended patch] 6.4.9879.0 (Windows 10 Technical Preview UP2) [init hook + extended patch] @@ -91,6 +92,7 @@ Terminal Services supported versions 10.0.14393.0 (Windows 10 rs1_release.160715-1616) [init hook + extended patch] 10.0.14393.1198 (Windows 10 rs1_release_sec.170427-1353) [init hook + extended patch] 10.0.14393.1737 (Windows 10 rs1_release_inmarket.170914-1249) [init hook + extended patch] +10.0.14393.2457 (Windows 10 rs1_release_inmarket.180822-1743) [init hook + extended patch] 10.0.14901.1000 (Windows 10 rs_prerelease.160805-1700) [init hook + extended patch] 10.0.14905.1000 (Windows 10 rs_prerelease.160811-1739) [init hook + extended patch] 10.0.14915.1000 (Windows 10 rs_prerelease.160826-1902) [init hook + extended patch] @@ -121,6 +123,7 @@ Terminal Services supported versions 10.0.15063.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.296 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.994 (Windows 10 WinBuild.160101.0800) [todo] +10.0.15063.1155 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16179.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16199.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -160,6 +163,16 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2018.09.10 : +- added support for termsrv.dll 6.1.7600.20890 +- added support for termsrv.dll 6.1.7600.21316 +- added support for termsrv.dll 6.1.7601.21650 +- added support for termsrv.dll 6.1.7601.21866 +- added support for termsrv.dll 6.1.7601.22104 +- added support for termsrv.dll 6.3.9600.19093 +- added support for termsrv.dll 10.0.14393.2457 x64 +- added support for termsrv.dll 10.0.15063.1155 x64 + 2018.05.16 : - added support for termsrv.dll 10.0.17115.1 - added support for termsrv.dll 10.0.17128.1 From 0c76513a279977f59d76d0aafe8147daccf7259c Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 3 Oct 2018 23:59:34 +0300 Subject: [PATCH 204/208] INI: Add support for new builds - 6.1.7601.24234 (fix #572) - 10.0.15063.994 (fix #455) - 10.0.17723.1000 (fix #537) - 10.0.17763.1 (fix #578) --- README.md | 4 ++ res/rdpwrap-ini-kb.txt | 117 ++++++++++++++++++++++++++++++++++++++++- res/rdpwrap.ini | 103 +++++++++++++++++++++++++++++++++++- technical.txt | 11 +++- 4 files changed, 232 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 77d9f52..8b53236 100644 --- a/README.md +++ b/README.md @@ -293,6 +293,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) - 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) - 6.1.7601.23403 (Windows 7 SP1 with KB3125574) +- 6.1.7601.24234 (Windows 7 SP1 with unknown KB) - 6.2.8102.0 (Windows 8 Developer Preview) - 6.2.8250.0 (Windows 8 Consumer Preview) - 6.2.8400.0 (Windows 8 Release Preview) @@ -367,6 +368,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.15061.0 (Windows 10 Build 160101.0800) - 10.0.15063.0 (Windows 10 Build 160101.0800) - 10.0.15063.296 (Windows 10 Build 160101.0800) +- 10.0.15063.994 (Windows 10 Build 160101.0800) - 10.0.15063.1155 (Windows 10 Build 160101.0800) - 10.0.16179.1000 (Windows 10 Build 160101.0800) - 10.0.16184.1001 (Windows 10 Build 160101.0800) @@ -401,6 +403,8 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.17128.1 (Windows 10 Build 160101.0800) - 10.0.17133.1 (Windows 10 Build 160101.0800) - 10.0.17134.1 (Windows 10 Build 160101.0800) +- 10.0.17723.1000 (Windows 10 Build 160101.0800) +- 10.0.17763.1 (Windows 10 Build 160101.0800) #### Confirmed working on: - Windows Vista Starter (x86 - Service Pack 1 and higher) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 34d3d0b..bb6ced3 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2018-09-10 +Updated=2018-10-03 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -654,6 +654,16 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17CE2 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7601.24234] +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F56 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D2E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.2.8102.0] ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled ; .text:1000F7E5 lea eax, [esp+150h+VersionInformation] @@ -3220,6 +3230,24 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.994] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CB01 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=15EA4 +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=FAE5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=234DC +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.15063.1155] ; Patch CEnforcementCore::GetInstanceOfTSLicense LocalOnlyPatch.x64=1 @@ -4228,6 +4256,54 @@ SLInitHook.x64=1 SLInitOffset.x64=22E6C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17723.1000] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=75D91 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelperMgr::IsSingleSessionPerUserEnabled +SingleUserPatch.x64=1 +SingleUserOffset.x64=1296C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17A45 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1B10C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17763.1] +; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AF8E4 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=77941 +LocalOnlyCode.x64=jmpshort +; Patch CSessionArbitrationHelperMgr::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=4D505 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1322C +SingleUserCode.x64=Zero +; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=4BD09 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17F45 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=5B02A +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1ABFC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] ; Is server bServerSku=1 @@ -5509,6 +5585,16 @@ bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C +[10.0.15063.994-SLInit] +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C + [10.0.15063.1155-SLInit] bInitialized.x64 =E9468 bRemoteConnAllowed.x64=E946C @@ -6145,3 +6231,32 @@ bRemoteConnAllowed.x64=F2434 bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440 + +[10.0.17723.1000-SLInit] +bInitialized.x64 =E9AB0 +bServerSku.x64 =E9AB4 +lMaxUserSessions.x64 =E9AB8 +bAppServerAllowed.x64 =E9AC0 +bRemoteConnAllowed.x64=E9AC4 +bMultimonAllowed.x64 =E9AC8 +ulMaxDebugSessions.x64=E9ACC +bFUSEnabled.x64 =E9AD0 + +[10.0.17763.1-SLInit] +bInitialized.x86 =CD798 +bServerSku.x86 =CD79C +lMaxUserSessions.x86 =CD7A0 +bAppServerAllowed.x86 =CD7A8 +bRemoteConnAllowed.x86=CD7AC +bMultimonAllowed.x86 =CD7B0 +ulMaxDebugSessions.x86=CD7B4 +bFUSEnabled.x86 =CD7B8 + +bInitialized.x64 =ECAB0 +bServerSku.x64 =ECAB4 +lMaxUserSessions.x64 =ECAB8 +bAppServerAllowed.x64 =ECAC0 +bRemoteConnAllowed.x64=ECAC4 +bMultimonAllowed.x64 =ECAC8 +ulMaxDebugSessions.x64=ECACC +bFUSEnabled.x64 =ECAD0 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index f68c671..b33455c 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2018-09-10 +Updated=2018-10-03 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -275,6 +275,14 @@ DefPolicyPatch.x64=1 DefPolicyOffset.x64=17CE2 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi +[6.1.7601.24234] +SingleUserPatch.x64=1 +SingleUserOffset.x64=17F56 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17D2E +DefPolicyCode.x64=CDefPolicy_Query_eax_rdi + [6.2.8102.0] SingleUserPatch.x86=1 SingleUserOffset.x86=F7E9 @@ -2103,6 +2111,20 @@ SLInitHook.x64=1 SLInitOffset.x64=D1EC SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.15063.994] +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=8CB01 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=15EA4 +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=FAE5 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=234DC +SLInitFunc.x64=New_CSLQuery_Initialize + [10.0.15063.1155] LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=8CB01 @@ -2975,6 +2997,46 @@ SLInitHook.x64=1 SLInitOffset.x64=22E6C SLInitFunc.x64=New_CSLQuery_Initialize +[10.0.17723.1000] +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=75D91 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x64=1 +SingleUserOffset.x64=1296C +SingleUserCode.x64=Zero +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17A45 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x64=1 +SLInitOffset.x64=1B10C +SLInitFunc.x64=New_CSLQuery_Initialize + +[10.0.17763.1] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=AF8E4 +LocalOnlyCode.x86=jmpshort +LocalOnlyPatch.x64=1 +LocalOnlyOffset.x64=77941 +LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=4D505 +SingleUserCode.x86=nop +SingleUserPatch.x64=1 +SingleUserOffset.x64=1322C +SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=4BD09 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx +DefPolicyPatch.x64=1 +DefPolicyOffset.x64=17F45 +DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=5B02A +SLInitFunc.x86=New_CSLQuery_Initialize +SLInitHook.x64=1 +SLInitOffset.x64=1ABFC +SLInitFunc.x64=New_CSLQuery_Initialize + [SLInit] bServerSku=1 bRemoteConnAllowed=1 @@ -4232,6 +4294,16 @@ bServerSku.x64 =E9484 lMaxUserSessions.x64 =E9488 bAppServerAllowed.x64 =E948C +[10.0.15063.994-SLInit] +bInitialized.x64 =E9468 +bRemoteConnAllowed.x64=E946C +bMultimonAllowed.x64 =E9470 +ulMaxDebugSessions.x64=E9474 +bFUSEnabled.x64 =E9478 +bServerSku.x64 =E9484 +lMaxUserSessions.x64 =E9488 +bAppServerAllowed.x64 =E948C + [10.0.15063.1155-SLInit] bInitialized.x64 =E9468 bRemoteConnAllowed.x64=E946C @@ -4868,3 +4940,32 @@ bRemoteConnAllowed.x64=F2434 bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440 + +[10.0.17723.1000-SLInit] +bInitialized.x64 =E9AB0 +bServerSku.x64 =E9AB4 +lMaxUserSessions.x64 =E9AB8 +bAppServerAllowed.x64 =E9AC0 +bRemoteConnAllowed.x64=E9AC4 +bMultimonAllowed.x64 =E9AC8 +ulMaxDebugSessions.x64=E9ACC +bFUSEnabled.x64 =E9AD0 + +[10.0.17763.1-SLInit] +bInitialized.x86 =CD798 +bServerSku.x86 =CD79C +lMaxUserSessions.x86 =CD7A0 +bAppServerAllowed.x86 =CD7A8 +bRemoteConnAllowed.x86=CD7AC +bMultimonAllowed.x86 =CD7B0 +ulMaxDebugSessions.x86=CD7B4 +bFUSEnabled.x86 =CD7B8 + +bInitialized.x64 =ECAB0 +bServerSku.x64 =ECAB4 +lMaxUserSessions.x64 =ECAB8 +bAppServerAllowed.x64 =ECAC0 +bRemoteConnAllowed.x64=ECAC4 +bMultimonAllowed.x64 =ECAC8 +ulMaxDebugSessions.x64=ECACC +bFUSEnabled.x64 =ECAD0 diff --git a/technical.txt b/technical.txt index a7f7405..57ac9aa 100644 --- a/technical.txt +++ b/technical.txt @@ -43,6 +43,7 @@ Terminal Services supported versions 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] 6.1.7601.23403 (Windows 7 SP1 with KB3125574) [policy hook + extended patch] +6.1.7601.24234 (Windows 7 SP1 with unknown KB) [policy hook + extended patch] 6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] 6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] 6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] @@ -122,7 +123,7 @@ Terminal Services supported versions 10.0.15061.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.0 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.296 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] -10.0.15063.994 (Windows 10 WinBuild.160101.0800) [todo] +10.0.15063.994 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.15063.1155 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16179.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.16184.1001 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] @@ -160,9 +161,17 @@ Terminal Services supported versions 10.0.17128.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17133.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] 10.0.17134.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17723.1000 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] +10.0.17763.1 (Windows 10 WinBuild.160101.0800) [init hook + extended patch] Source code changelog (rdpwrap library): +2018.10.03 : +- added support for termsrv.dll 6.1.7601.24234 x64 +- added support for termsrv.dll 10.0.15063.994 x64 +- added support for termsrv.dll 10.0.17723.1000 x64 +- added support for termsrv.dll 10.0.17763.1 + 2018.09.10 : - added support for termsrv.dll 6.1.7600.20890 - added support for termsrv.dll 6.1.7600.21316 From dc3b07f1fe07557e9e64b8347621d884a6e8be19 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Thu, 4 Oct 2018 15:31:04 +0300 Subject: [PATCH 205/208] README: Add Telegram chat link --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8b53236..add9a71 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # RDP Wrapper Library by Stas'M +[![Telegram](https://img.shields.io/badge/chat-Telegram-blue.svg)](https://t.me/rdpwrap) ![Environment](https://img.shields.io/badge/Windows-Vista,%207,%208,%2010-brightgreen.svg) [![Release](https://img.shields.io/github/release/stascorp/rdpwrap.svg)](https://github.com/stascorp/rdpwrap/releases) ![License](https://img.shields.io/github/license/stascorp/rdpwrap.svg) @@ -88,6 +89,8 @@ It's recommended to have original termsrv.dll file with the RDP Wrapper installa ### Links: - Official GitHub repository:
https://github.com/stascorp/rdpwrap/ +- Official Telegram chat: +
https://t.me/rdpwrap - Active discussion in the comments here:
[Enable remote desktop on Windows 8 core / basic - Andrew Block .net][andrewblock] - MDL Projects and Applications thread here: From 2eef50f254f423fcd95518fcbaa97b1169b6a543 Mon Sep 17 00:00:00 2001 From: Stas'M Date: Fri, 5 Oct 2018 01:45:44 +0300 Subject: [PATCH 206/208] INI: Add support for new builds (#542) 10.0.14393.2457 x86 --- README.md | 2 +- res/rdpwrap-ini-kb.txt | 23 ++++++++++++++++++++++- res/rdpwrap.ini | 23 ++++++++++++++++++++++- technical.txt | 3 +++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index add9a71..47f8095 100644 --- a/README.md +++ b/README.md @@ -341,7 +341,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 10.0.14393.0 (Windows 10 RS1 Release 160715-1616) - 10.0.14393.1198 (Windows 10 RS1 Release Sec 170427-1353 with KB4019472) - 10.0.14393.1737 (Windows 10 RS1 Release Inmarket 170914-1249 with KB4041691) -- 10.0.14393.2457 (Windows 10 RS1 Release Inmarket 180822-1743 with KB4457131) +- 10.0.14393.2457 (Windows 10 RS1 Release Inmarket 180822-1743 with KB4343884) - 10.0.14901.1000 (Windows 10 RS Pre-Release 160805-1700) - 10.0.14905.1000 (Windows 10 RS Pre-Release 160811-1739) - 10.0.14915.1000 (Windows 10 RS Pre-Release 160826-1902) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index bb6ced3..597bd12 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2018-10-03 +Updated=2018-10-04 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -2368,18 +2368,30 @@ SLInitFunc.x64=New_CSLQuery_Initialize [10.0.14393.2457] ; Patch CEnforcementCore::GetInstanceOfTSLicense +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6248 +LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=8D811 LocalOnlyCode.x64=jmpshort ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=36CE5 +SingleUserCode.x86=nop SingleUserPatch.x64=1 SingleUserOffset.x64=29CF4 SingleUserCode.x64=Zero ; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31209 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 DefPolicyOffset.x64=1B545 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx ; Hook CSLQuery::Initialize +SLInitHook.x86=1 +SLInitOffset.x86=45824 +SLInitFunc.x86=New_CSLQuery_Initialize SLInitHook.x64=1 SLInitOffset.x64=C920 SLInitFunc.x64=New_CSLQuery_Initialize @@ -5043,6 +5055,15 @@ ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 [10.0.14393.2457-SLInit] +bInitialized.x86 =C1F94 +bServerSku.x86 =C1F98 +lMaxUserSessions.x86 =C1F9C +bAppServerAllowed.x86 =C1FA0 +bRemoteConnAllowed.x86=C1FA4 +bMultimonAllowed.x86 =C1FA8 +ulMaxDebugSessions.x86=C1FAC +bFUSEnabled.x86 =C1FB0 + bServerSku.x64 =E73D0 lMaxUserSessions.x64 =E73D4 bAppServerAllowed.x64 =E73D8 diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index b33455c..a40d24d 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2018-10-03 +Updated=2018-10-04 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -1368,15 +1368,27 @@ SLInitOffset.x64=C930 SLInitFunc.x64=New_CSLQuery_Initialize [10.0.14393.2457] +LocalOnlyPatch.x86=1 +LocalOnlyOffset.x86=A6248 +LocalOnlyCode.x86=jmpshort LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=8D811 LocalOnlyCode.x64=jmpshort +SingleUserPatch.x86=1 +SingleUserOffset.x86=36CE5 +SingleUserCode.x86=nop SingleUserPatch.x64=1 SingleUserOffset.x64=29CF4 SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=31209 +DefPolicyCode.x86=CDefPolicy_Query_eax_ecx DefPolicyPatch.x64=1 DefPolicyOffset.x64=1B545 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx +SLInitHook.x86=1 +SLInitOffset.x86=45824 +SLInitFunc.x86=New_CSLQuery_Initialize SLInitHook.x64=1 SLInitOffset.x64=C920 SLInitFunc.x64=New_CSLQuery_Initialize @@ -3752,6 +3764,15 @@ ulMaxDebugSessions.x64=E847C bFUSEnabled.x64 =E8480 [10.0.14393.2457-SLInit] +bInitialized.x86 =C1F94 +bServerSku.x86 =C1F98 +lMaxUserSessions.x86 =C1F9C +bAppServerAllowed.x86 =C1FA0 +bRemoteConnAllowed.x86=C1FA4 +bMultimonAllowed.x86 =C1FA8 +ulMaxDebugSessions.x86=C1FAC +bFUSEnabled.x86 =C1FB0 + bServerSku.x64 =E73D0 lMaxUserSessions.x64 =E73D4 bAppServerAllowed.x64 =E73D8 diff --git a/technical.txt b/technical.txt index 57ac9aa..5ef476f 100644 --- a/technical.txt +++ b/technical.txt @@ -166,6 +166,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2018.10.04 : +- added support for termsrv.dll 10.0.14393.2457 x86 + 2018.10.03 : - added support for termsrv.dll 6.1.7601.24234 x64 - added support for termsrv.dll 10.0.15063.994 x64 From 326551985f1ecf8cc1e43bd4b4505a7871534b0f Mon Sep 17 00:00:00 2001 From: Stas'M Date: Wed, 10 Oct 2018 15:57:37 +0300 Subject: [PATCH 207/208] INI: Add support for new builds (fix #586) - 6.1.7601.24234 x86 --- README.md | 2 +- res/rdpwrap-ini-kb.txt | 8 +++++++- res/rdpwrap.ini | 8 +++++++- technical.txt | 5 ++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 47f8095..837e679 100644 --- a/README.md +++ b/README.md @@ -296,7 +296,7 @@ Visit [issues](https://github.com/stascorp/rdpwrap/issues) section, and check wh - 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) - 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) - 6.1.7601.23403 (Windows 7 SP1 with KB3125574) -- 6.1.7601.24234 (Windows 7 SP1 with unknown KB) +- 6.1.7601.24234 (Windows 7 SP1 with KB4462923) - 6.2.8102.0 (Windows 8 Developer Preview) - 6.2.8250.0 (Windows 8 Consumer Preview) - 6.2.8400.0 (Windows 8 Release Preview) diff --git a/res/rdpwrap-ini-kb.txt b/res/rdpwrap-ini-kb.txt index 597bd12..a258ab4 100644 --- a/res/rdpwrap-ini-kb.txt +++ b/res/rdpwrap-ini-kb.txt @@ -1,6 +1,6 @@ [Main] ; Last updated date -Updated=2018-10-04 +Updated=2018-10-10 ; Address to log file (RDP Wrapper will write it, if exists) LogFile=\rdpwrap.txt ; Hook SLPolicy API on Windows NT 6.0 @@ -656,10 +656,16 @@ DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.1.7601.24234] ; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A675 +SingleUserCode.x86=nop SingleUserPatch.x64=1 SingleUserOffset.x64=17F56 SingleUserCode.x64=Zero ; Patch CDefPolicy::Query +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E41 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi DefPolicyPatch.x64=1 DefPolicyOffset.x64=17D2E DefPolicyCode.x64=CDefPolicy_Query_eax_rdi diff --git a/res/rdpwrap.ini b/res/rdpwrap.ini index a40d24d..40e1b54 100644 --- a/res/rdpwrap.ini +++ b/res/rdpwrap.ini @@ -2,7 +2,7 @@ ; Do not modify without special knowledge [Main] -Updated=2018-10-04 +Updated=2018-10-10 LogFile=\rdpwrap.txt SLPolicyHookNT60=1 SLPolicyHookNT61=1 @@ -276,9 +276,15 @@ DefPolicyOffset.x64=17CE2 DefPolicyCode.x64=CDefPolicy_Query_eax_rdi [6.1.7601.24234] +SingleUserPatch.x86=1 +SingleUserOffset.x86=1A675 +SingleUserCode.x86=nop SingleUserPatch.x64=1 SingleUserOffset.x64=17F56 SingleUserCode.x64=Zero +DefPolicyPatch.x86=1 +DefPolicyOffset.x86=19E41 +DefPolicyCode.x86=CDefPolicy_Query_eax_esi DefPolicyPatch.x64=1 DefPolicyOffset.x64=17D2E DefPolicyCode.x64=CDefPolicy_Query_eax_rdi diff --git a/technical.txt b/technical.txt index 5ef476f..eec609f 100644 --- a/technical.txt +++ b/technical.txt @@ -43,7 +43,7 @@ Terminal Services supported versions 6.1.7601.18637 (Windows 7 SP1 with KB3003743 GDR) [policy hook + extended patch] 6.1.7601.22843 (Windows 7 SP1 with KB3003743 LDR) [policy hook + extended patch] 6.1.7601.23403 (Windows 7 SP1 with KB3125574) [policy hook + extended patch] -6.1.7601.24234 (Windows 7 SP1 with unknown KB) [policy hook + extended patch] +6.1.7601.24234 (Windows 7 SP1 with KB4462923) [policy hook + extended patch] 6.2.8102.0 (Windows 8 Developer Preview) [policy hook + extended patch] 6.2.8250.0 (Windows 8 Consumer Preview) [policy hook + extended patch] 6.2.8400.0 (Windows 8 Release Preview) [policy hook + extended patch] @@ -166,6 +166,9 @@ Terminal Services supported versions Source code changelog (rdpwrap library): +2018.10.10 : +- added support for termsrv.dll 6.1.7601.24234 x86 + 2018.10.04 : - added support for termsrv.dll 10.0.14393.2457 x86 From a5c64a43319e4e375b391ad42c41504bcb349b4a Mon Sep 17 00:00:00 2001 From: Kevin Smyth Date: Thu, 20 Dec 2018 09:19:04 -0600 Subject: [PATCH 208/208] IniFile: don't lose last character if the file doesn't end with \r\n --- src-x86-x64-Fusix/IniFile.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src-x86-x64-Fusix/IniFile.cpp b/src-x86-x64-Fusix/IniFile.cpp index 8b48c07..5c610d3 100644 --- a/src-x86-x64-Fusix/IniFile.cpp +++ b/src-x86-x64-Fusix/IniFile.cpp @@ -127,7 +127,12 @@ DWORD INI_FILE::GetFileStringFromNum(DWORD StringNumber, char *RetString, DWORD for (DWORD i = FileStringsMap[StringNumber]; i < FileSize; i++) { - if ((FileRaw[i] == '\r' && FileRaw[i + 1] == '\n') || i == (FileSize - 1)) + if (i == (FileSize - 1)) + { + EndStringPos = FileSize; + break; + } + if (FileRaw[i] == '\r' && FileRaw[i + 1] == '\n') { EndStringPos = i; break;

(CZ3)qfm6B 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%0A~g6t&2iIf7d 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%0ABce^Rj?xbGsh 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 MDmS{R$6Hv6W$Qb6#}OSW*EC5kPn39ZeSa{ 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 f0TcdkOa!VLZCPQHv95V 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