mirror of
https://gitlab.com/Syroot/Worms.git
synced 2025-01-13 07:18:00 +03:00
Add FrontendKitWS and fkNetcode.
This commit is contained in:
parent
db3a49539f
commit
71c8f33ea7
@ -49,80 +49,240 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = " Solution Items", " Solut
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syroot.Worms.Worms2.GameServer", "tool\Syroot.Worms.Worms2.GameServer\Syroot.Worms.Worms2.GameServer.csproj", "{13ABF717-5809-441D-A5D8-66E1EE75A390}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fkNetcode", "tool\fkNetcode\fkNetcode.vcxproj", "{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FrontendKitWS", "tool\FrontendKitWS\FrontendKitWS.vcxproj", "{E391EA12-B929-466C-932F-DEF72B8CEB5D}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DD76B6AA-5A5A-4FCD-95AA-9552977525A1}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0D7F9DC3-7268-494E-BA1E-6C01525EB9AB}.Release|x86.Build.0 = Release|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x64.Build.0 = Release|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{510EE83E-9C52-40FD-AC7E-C4981EBF4182}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D9694108-539C-4DEE-B5DD-284208D48B46}.Release|x86.Build.0 = Release|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AC9F52FA-F552-49E0-83AE-79759BF44FED}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4E124BBA-15B5-422E-93D5-96EA7D4180F3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{BBCECFCC-F2FD-4C4D-A6E9-CC7AA5F10FDD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x64.Build.0 = Release|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{BD8079D9-FDB5-4C7D-8AD4-C80ADC4A4B26}.Release|x86.Build.0 = Release|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{239763CD-B7C9-4E8B-A84B-8F24DECF6D7B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x64.Build.0 = Release|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{748D16FF-35C6-4249-A1E8-04B2D239C954}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3AAC4992-DDB9-4175-82B9-C57F22E12FF6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{EF308D4E-26A0-471C-B764-9C4EB713BEAE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{351B93B0-301F-42E1-82A0-7FA217154F5D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x64.Build.0 = Release|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{392E4CA2-61D9-4BE1-B065-8801A9F102B8}.Release|x86.Build.0 = Release|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x64.Build.0 = Release|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389}.Release|x86.Build.0 = Release|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x64.Build.0 = Release|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Debug|x86.Build.0 = Debug|Win32
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|x64.ActiveCfg = Release|Win32
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|x86.ActiveCfg = Release|Win32
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1}.Release|x86.Build.0 = Release|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Debug|x86.Build.0 = Debug|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|x64.ActiveCfg = Release|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|x86.ActiveCfg = Release|Win32
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -145,6 +305,8 @@ Global
|
||||
{212F8090-9775-4098-BD44-9ABC01FBE553} = {99E56312-A064-4AD3-8443-0B56A5F76E6B}
|
||||
{1FAB6B9F-2585-46DC-81C0-579DC808C389} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||
{13ABF717-5809-441D-A5D8-66E1EE75A390} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||
{C4138811-7CFA-4826-A3DD-AF2B618EAFC1} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||
{E391EA12-B929-466C-932F-DEF72B8CEB5D} = {0B9B0B74-3EB1-46A4-BCCC-F2D6AE59A9EE}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {1CD4EDE2-A5FB-4A58-A850-3506AB7E7B69}
|
||||
|
103
src/tool/FrontendKitWS/FrontendKitWS.vcxproj
Normal file
103
src/tool/FrontendKitWS/FrontendKitWS.vcxproj
Normal file
@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="main.def" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="fk.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{e391ea12-b929-466c-932f-def72b8ceb5d}</ProjectGuid>
|
||||
<RootNamespace>FrontendKitWS</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
<ProjectName>FrontendKitWS</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>bin\$(Configuration)\</OutDir>
|
||||
<IntDir>obj\$(Configuration)\</IntDir>
|
||||
<TargetName>wsock32</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>bin\$(Configuration)\</OutDir>
|
||||
<IntDir>obj\$(Configuration)\</IntDir>
|
||||
<TargetName>wsock32</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;FRONTENDKITWS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>main.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;FRONTENDKITWS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>main.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
44
src/tool/FrontendKitWS/fk.h
Normal file
44
src/tool/FrontendKitWS/fk.h
Normal file
@ -0,0 +1,44 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <vector>
|
||||
#include <Windows.h>
|
||||
|
||||
std::vector<HMODULE> modules;
|
||||
|
||||
void fkAttach()
|
||||
{
|
||||
// Get executable directory.
|
||||
CHAR buffer[MAX_PATH];
|
||||
GetModuleFileName(NULL, buffer, MAX_PATH);
|
||||
*(strrchr(buffer, '\\') + 1) = '\0';
|
||||
|
||||
// Attempt to load all library files matching the fk*.dll search pattern.
|
||||
lstrcat(buffer, "fk*.dll");
|
||||
WIN32_FIND_DATA findFileData;
|
||||
HANDLE hFindFile = FindFirstFile(buffer, &findFileData);
|
||||
if (hFindFile == INVALID_HANDLE_VALUE)
|
||||
return;
|
||||
do
|
||||
{
|
||||
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||
continue;
|
||||
HMODULE hLibrary = LoadLibrary(findFileData.cFileName);
|
||||
if (hLibrary)
|
||||
{
|
||||
modules.push_back(hLibrary);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf_s<MAX_PATH>(buffer, "Could not load module %s.", findFileData.cFileName);
|
||||
MessageBox(NULL, buffer, "FrontendKit", MB_ICONWARNING);
|
||||
}
|
||||
} while (FindNextFile(hFindFile, &findFileData));
|
||||
FindClose(hFindFile);
|
||||
}
|
||||
|
||||
void fkDetach()
|
||||
{
|
||||
// Release all loaded modules.
|
||||
for (HMODULE hModule : modules)
|
||||
FreeLibrary(hModule);
|
||||
modules.clear();
|
||||
}
|
272
src/tool/FrontendKitWS/main.cpp
Normal file
272
src/tool/FrontendKitWS/main.cpp
Normal file
@ -0,0 +1,272 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include "fk.h"
|
||||
#include <windows.h>
|
||||
|
||||
struct wsock32_dll
|
||||
{
|
||||
HMODULE dll;
|
||||
FARPROC AcceptEx;
|
||||
FARPROC Arecv;
|
||||
FARPROC Asend;
|
||||
FARPROC EnumProtocolsA;
|
||||
FARPROC EnumProtocolsW;
|
||||
FARPROC GetAcceptExSockaddrs;
|
||||
FARPROC GetAddressByNameA;
|
||||
FARPROC GetAddressByNameW;
|
||||
FARPROC GetNameByTypeA;
|
||||
FARPROC GetNameByTypeW;
|
||||
FARPROC GetServiceA;
|
||||
FARPROC GetServiceW;
|
||||
FARPROC GetTypeByNameA;
|
||||
FARPROC GetTypeByNameW;
|
||||
FARPROC MigrateWinsockConfiguration;
|
||||
FARPROC NPLoadNameSpaces;
|
||||
FARPROC NSPStartup;
|
||||
FARPROC SetServiceA;
|
||||
FARPROC SetServiceW;
|
||||
FARPROC TransmitFile;
|
||||
FARPROC WEP;
|
||||
FARPROC WSAAsyncGetHostByAddr;
|
||||
FARPROC WSAAsyncGetHostByName;
|
||||
FARPROC WSAAsyncGetProtoByName;
|
||||
FARPROC WSAAsyncGetProtoByNumber;
|
||||
FARPROC WSAAsyncGetServByName;
|
||||
FARPROC WSAAsyncGetServByPort;
|
||||
FARPROC WSAAsyncSelect;
|
||||
FARPROC WSACancelAsyncRequest;
|
||||
FARPROC WSACancelBlockingCall;
|
||||
FARPROC WSACleanup;
|
||||
FARPROC WSAGetLastError;
|
||||
FARPROC WSAIsBlocking;
|
||||
FARPROC WSARecvEx;
|
||||
FARPROC WSASetBlockingHook;
|
||||
FARPROC WSASetLastError;
|
||||
FARPROC WSAStartup;
|
||||
FARPROC WSAUnhookBlockingHook;
|
||||
FARPROC WSApSetPostRoutine;
|
||||
FARPROC WSHEnumProtocols;
|
||||
FARPROC WsControl;
|
||||
FARPROC __WSAFDIsSet;
|
||||
FARPROC accept;
|
||||
FARPROC bind;
|
||||
FARPROC closesocket;
|
||||
FARPROC closesockinfo;
|
||||
FARPROC connect;
|
||||
FARPROC dn_expand;
|
||||
FARPROC gethostbyaddr;
|
||||
FARPROC gethostbyname;
|
||||
FARPROC gethostname;
|
||||
FARPROC getnetbyname;
|
||||
FARPROC getpeername;
|
||||
FARPROC getprotobyname;
|
||||
FARPROC getprotobynumber;
|
||||
FARPROC getservbyname;
|
||||
FARPROC getservbyport;
|
||||
FARPROC getsockname;
|
||||
FARPROC getsockopt;
|
||||
FARPROC htonl;
|
||||
FARPROC htons;
|
||||
FARPROC inet_addr;
|
||||
FARPROC inet_network;
|
||||
FARPROC inet_ntoa;
|
||||
FARPROC ioctlsocket;
|
||||
FARPROC listen;
|
||||
FARPROC ntohl;
|
||||
FARPROC ntohs;
|
||||
FARPROC rcmd;
|
||||
FARPROC recv;
|
||||
FARPROC recvfrom;
|
||||
FARPROC rexec;
|
||||
FARPROC rresvport;
|
||||
FARPROC s_perror;
|
||||
FARPROC select;
|
||||
FARPROC send;
|
||||
FARPROC sendto;
|
||||
FARPROC sethostname;
|
||||
FARPROC setsockopt;
|
||||
FARPROC shutdown;
|
||||
FARPROC socket;
|
||||
} wsock32;
|
||||
|
||||
__declspec(naked) void AcceptEx() { _asm { jmp[wsock32.AcceptEx] } }
|
||||
__declspec(naked) void Arecv() { _asm { jmp[wsock32.Arecv] } }
|
||||
__declspec(naked) void Asend() { _asm { jmp[wsock32.Asend] } }
|
||||
__declspec(naked) void EnumProtocolsA() { _asm { jmp[wsock32.EnumProtocolsA] } }
|
||||
__declspec(naked) void EnumProtocolsW() { _asm { jmp[wsock32.EnumProtocolsW] } }
|
||||
__declspec(naked) void GetAcceptExSockaddrs() { _asm { jmp[wsock32.GetAcceptExSockaddrs] } }
|
||||
__declspec(naked) void GetAddressByNameA() { _asm { jmp[wsock32.GetAddressByNameA] } }
|
||||
__declspec(naked) void GetAddressByNameW() { _asm { jmp[wsock32.GetAddressByNameW] } }
|
||||
__declspec(naked) void GetNameByTypeA() { _asm { jmp[wsock32.GetNameByTypeA] } }
|
||||
__declspec(naked) void GetNameByTypeW() { _asm { jmp[wsock32.GetNameByTypeW] } }
|
||||
__declspec(naked) void GetServiceA() { _asm { jmp[wsock32.GetServiceA] } }
|
||||
__declspec(naked) void GetServiceW() { _asm { jmp[wsock32.GetServiceW] } }
|
||||
__declspec(naked) void GetTypeByNameA() { _asm { jmp[wsock32.GetTypeByNameA] } }
|
||||
__declspec(naked) void GetTypeByNameW() { _asm { jmp[wsock32.GetTypeByNameW] } }
|
||||
__declspec(naked) void MigrateWinsockConfiguration() { _asm { jmp[wsock32.MigrateWinsockConfiguration] } }
|
||||
__declspec(naked) void NPLoadNameSpaces() { _asm { jmp[wsock32.NPLoadNameSpaces] } }
|
||||
__declspec(naked) void NSPStartup() { _asm { jmp[wsock32.NSPStartup] } }
|
||||
__declspec(naked) void SetServiceA() { _asm { jmp[wsock32.SetServiceA] } }
|
||||
__declspec(naked) void SetServiceW() { _asm { jmp[wsock32.SetServiceW] } }
|
||||
__declspec(naked) void TransmitFile() { _asm { jmp[wsock32.TransmitFile] } }
|
||||
__declspec(naked) void WEP() { _asm { jmp[wsock32.WEP] } }
|
||||
__declspec(naked) void WSAAsyncGetHostByAddr() { _asm { jmp[wsock32.WSAAsyncGetHostByAddr] } }
|
||||
__declspec(naked) void WSAAsyncGetHostByName() { _asm { jmp[wsock32.WSAAsyncGetHostByName] } }
|
||||
__declspec(naked) void WSAAsyncGetProtoByName() { _asm { jmp[wsock32.WSAAsyncGetProtoByName] } }
|
||||
__declspec(naked) void WSAAsyncGetProtoByNumber() { _asm { jmp[wsock32.WSAAsyncGetProtoByNumber] } }
|
||||
__declspec(naked) void WSAAsyncGetServByName() { _asm { jmp[wsock32.WSAAsyncGetServByName] } }
|
||||
__declspec(naked) void WSAAsyncGetServByPort() { _asm { jmp[wsock32.WSAAsyncGetServByPort] } }
|
||||
__declspec(naked) void WSAAsyncSelect() { _asm { jmp[wsock32.WSAAsyncSelect] } }
|
||||
__declspec(naked) void WSACancelAsyncRequest() { _asm { jmp[wsock32.WSACancelAsyncRequest] } }
|
||||
__declspec(naked) void WSACancelBlockingCall() { _asm { jmp[wsock32.WSACancelBlockingCall] } }
|
||||
__declspec(naked) void WSACleanup() { _asm { jmp[wsock32.WSACleanup] } }
|
||||
__declspec(naked) void WSAGetLastError() { _asm { jmp[wsock32.WSAGetLastError] } }
|
||||
__declspec(naked) void WSAIsBlocking() { _asm { jmp[wsock32.WSAIsBlocking] } }
|
||||
__declspec(naked) void WSARecvEx() { _asm { jmp[wsock32.WSARecvEx] } }
|
||||
__declspec(naked) void WSASetBlockingHook() { _asm { jmp[wsock32.WSASetBlockingHook] } }
|
||||
__declspec(naked) void WSASetLastError() { _asm { jmp[wsock32.WSASetLastError] } }
|
||||
__declspec(naked) void WSAStartup() { _asm { jmp[wsock32.WSAStartup] } }
|
||||
__declspec(naked) void WSAUnhookBlockingHook() { _asm { jmp[wsock32.WSAUnhookBlockingHook] } }
|
||||
__declspec(naked) void WSApSetPostRoutine() { _asm { jmp[wsock32.WSApSetPostRoutine] } }
|
||||
__declspec(naked) void WSHEnumProtocols() { _asm { jmp[wsock32.WSHEnumProtocols] } }
|
||||
__declspec(naked) void WsControl() { _asm { jmp[wsock32.WsControl] } }
|
||||
__declspec(naked) void __WSAFDIsSet() { _asm { jmp[wsock32.__WSAFDIsSet] } }
|
||||
__declspec(naked) void accept() { _asm { jmp[wsock32.accept] } }
|
||||
__declspec(naked) void bind() { _asm { jmp[wsock32.bind] } }
|
||||
__declspec(naked) void closesocket() { _asm { jmp[wsock32.closesocket] } }
|
||||
__declspec(naked) void closesockinfo() { _asm { jmp[wsock32.closesockinfo] } }
|
||||
__declspec(naked) void connect() { _asm { jmp[wsock32.connect] } }
|
||||
__declspec(naked) void dn_expand() { _asm { jmp[wsock32.dn_expand] } }
|
||||
__declspec(naked) void gethostbyaddr() { _asm { jmp[wsock32.gethostbyaddr] } }
|
||||
__declspec(naked) void gethostbyname() { _asm { jmp[wsock32.gethostbyname] } }
|
||||
__declspec(naked) void gethostname() { _asm { jmp[wsock32.gethostname] } }
|
||||
__declspec(naked) void getnetbyname() { _asm { jmp[wsock32.getnetbyname] } }
|
||||
__declspec(naked) void getpeername() { _asm { jmp[wsock32.getpeername] } }
|
||||
__declspec(naked) void getprotobyname() { _asm { jmp[wsock32.getprotobyname] } }
|
||||
__declspec(naked) void getprotobynumber() { _asm { jmp[wsock32.getprotobynumber] } }
|
||||
__declspec(naked) void getservbyname() { _asm { jmp[wsock32.getservbyname] } }
|
||||
__declspec(naked) void getservbyport() { _asm { jmp[wsock32.getservbyport] } }
|
||||
__declspec(naked) void getsockname() { _asm { jmp[wsock32.getsockname] } }
|
||||
__declspec(naked) void getsockopt() { _asm { jmp[wsock32.getsockopt] } }
|
||||
__declspec(naked) void htonl() { _asm { jmp[wsock32.htonl] } }
|
||||
__declspec(naked) void htons() { _asm { jmp[wsock32.htons] } }
|
||||
__declspec(naked) void inet_addr() { _asm { jmp[wsock32.inet_addr] } }
|
||||
__declspec(naked) void inet_network() { _asm { jmp[wsock32.inet_network] } }
|
||||
__declspec(naked) void inet_ntoa() { _asm { jmp[wsock32.inet_ntoa] } }
|
||||
__declspec(naked) void ioctlsocket() { _asm { jmp[wsock32.ioctlsocket] } }
|
||||
__declspec(naked) void listen() { _asm { jmp[wsock32.listen] } }
|
||||
__declspec(naked) void ntohl() { _asm { jmp[wsock32.ntohl] } }
|
||||
__declspec(naked) void ntohs() { _asm { jmp[wsock32.ntohs] } }
|
||||
__declspec(naked) void rcmd() { _asm { jmp[wsock32.rcmd] } }
|
||||
__declspec(naked) void recv() { _asm { jmp[wsock32.recv] } }
|
||||
__declspec(naked) void recvfrom() { _asm { jmp[wsock32.recvfrom] } }
|
||||
__declspec(naked) void rexec() { _asm { jmp[wsock32.rexec] } }
|
||||
__declspec(naked) void rresvport() { _asm { jmp[wsock32.rresvport] } }
|
||||
__declspec(naked) void s_perror() { _asm { jmp[wsock32.s_perror] } }
|
||||
__declspec(naked) void select() { _asm { jmp[wsock32.select] } }
|
||||
__declspec(naked) void send() { _asm { jmp[wsock32.send] } }
|
||||
__declspec(naked) void sendto() { _asm { jmp[wsock32.sendto] } }
|
||||
__declspec(naked) void sethostname() { _asm { jmp[wsock32.sethostname] } }
|
||||
__declspec(naked) void setsockopt() { _asm { jmp[wsock32.setsockopt] } }
|
||||
__declspec(naked) void shutdown() { _asm { jmp[wsock32.shutdown] } }
|
||||
__declspec(naked) void socket() { _asm { jmp[wsock32.socket] } }
|
||||
|
||||
char path[MAX_PATH + 16];
|
||||
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
||||
{
|
||||
switch (ul_reason_for_call)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
GetSystemDirectoryA(path, MAX_PATH);
|
||||
lstrcatA(path, "\\WSOCK32.dll");
|
||||
wsock32.dll = LoadLibraryA(path);
|
||||
wsock32.AcceptEx = GetProcAddress(wsock32.dll, "AcceptEx");
|
||||
wsock32.Arecv = GetProcAddress(wsock32.dll, "Arecv");
|
||||
wsock32.Asend = GetProcAddress(wsock32.dll, "Asend");
|
||||
wsock32.EnumProtocolsA = GetProcAddress(wsock32.dll, "EnumProtocolsA");
|
||||
wsock32.EnumProtocolsW = GetProcAddress(wsock32.dll, "EnumProtocolsW");
|
||||
wsock32.GetAcceptExSockaddrs = GetProcAddress(wsock32.dll, "GetAcceptExSockaddrs");
|
||||
wsock32.GetAddressByNameA = GetProcAddress(wsock32.dll, "GetAddressByNameA");
|
||||
wsock32.GetAddressByNameW = GetProcAddress(wsock32.dll, "GetAddressByNameW");
|
||||
wsock32.GetNameByTypeA = GetProcAddress(wsock32.dll, "GetNameByTypeA");
|
||||
wsock32.GetNameByTypeW = GetProcAddress(wsock32.dll, "GetNameByTypeW");
|
||||
wsock32.GetServiceA = GetProcAddress(wsock32.dll, "GetServiceA");
|
||||
wsock32.GetServiceW = GetProcAddress(wsock32.dll, "GetServiceW");
|
||||
wsock32.GetTypeByNameA = GetProcAddress(wsock32.dll, "GetTypeByNameA");
|
||||
wsock32.GetTypeByNameW = GetProcAddress(wsock32.dll, "GetTypeByNameW");
|
||||
wsock32.MigrateWinsockConfiguration = GetProcAddress(wsock32.dll, "MigrateWinsockConfiguration");
|
||||
wsock32.NPLoadNameSpaces = GetProcAddress(wsock32.dll, "NPLoadNameSpaces");
|
||||
wsock32.NSPStartup = GetProcAddress(wsock32.dll, "NSPStartup");
|
||||
wsock32.SetServiceA = GetProcAddress(wsock32.dll, "SetServiceA");
|
||||
wsock32.SetServiceW = GetProcAddress(wsock32.dll, "SetServiceW");
|
||||
wsock32.TransmitFile = GetProcAddress(wsock32.dll, "TransmitFile");
|
||||
wsock32.WEP = GetProcAddress(wsock32.dll, "WEP");
|
||||
wsock32.WSAAsyncGetHostByAddr = GetProcAddress(wsock32.dll, "WSAAsyncGetHostByAddr");
|
||||
wsock32.WSAAsyncGetHostByName = GetProcAddress(wsock32.dll, "WSAAsyncGetHostByName");
|
||||
wsock32.WSAAsyncGetProtoByName = GetProcAddress(wsock32.dll, "WSAAsyncGetProtoByName");
|
||||
wsock32.WSAAsyncGetProtoByNumber = GetProcAddress(wsock32.dll, "WSAAsyncGetProtoByNumber");
|
||||
wsock32.WSAAsyncGetServByName = GetProcAddress(wsock32.dll, "WSAAsyncGetServByName");
|
||||
wsock32.WSAAsyncGetServByPort = GetProcAddress(wsock32.dll, "WSAAsyncGetServByPort");
|
||||
wsock32.WSAAsyncSelect = GetProcAddress(wsock32.dll, "WSAAsyncSelect");
|
||||
wsock32.WSACancelAsyncRequest = GetProcAddress(wsock32.dll, "WSACancelAsyncRequest");
|
||||
wsock32.WSACancelBlockingCall = GetProcAddress(wsock32.dll, "WSACancelBlockingCall");
|
||||
wsock32.WSACleanup = GetProcAddress(wsock32.dll, "WSACleanup");
|
||||
wsock32.WSAGetLastError = GetProcAddress(wsock32.dll, "WSAGetLastError");
|
||||
wsock32.WSAIsBlocking = GetProcAddress(wsock32.dll, "WSAIsBlocking");
|
||||
wsock32.WSARecvEx = GetProcAddress(wsock32.dll, "WSARecvEx");
|
||||
wsock32.WSASetBlockingHook = GetProcAddress(wsock32.dll, "WSASetBlockingHook");
|
||||
wsock32.WSASetLastError = GetProcAddress(wsock32.dll, "WSASetLastError");
|
||||
wsock32.WSAStartup = GetProcAddress(wsock32.dll, "WSAStartup");
|
||||
wsock32.WSAUnhookBlockingHook = GetProcAddress(wsock32.dll, "WSAUnhookBlockingHook");
|
||||
wsock32.WSApSetPostRoutine = GetProcAddress(wsock32.dll, "WSApSetPostRoutine");
|
||||
wsock32.WSHEnumProtocols = GetProcAddress(wsock32.dll, "WSHEnumProtocols");
|
||||
wsock32.WsControl = GetProcAddress(wsock32.dll, "WsControl");
|
||||
wsock32.__WSAFDIsSet = GetProcAddress(wsock32.dll, "__WSAFDIsSet");
|
||||
wsock32.accept = GetProcAddress(wsock32.dll, "accept");
|
||||
wsock32.bind = GetProcAddress(wsock32.dll, "bind");
|
||||
wsock32.closesocket = GetProcAddress(wsock32.dll, "closesocket");
|
||||
wsock32.closesockinfo = GetProcAddress(wsock32.dll, "closesockinfo");
|
||||
wsock32.connect = GetProcAddress(wsock32.dll, "connect");
|
||||
wsock32.dn_expand = GetProcAddress(wsock32.dll, "dn_expand");
|
||||
wsock32.gethostbyaddr = GetProcAddress(wsock32.dll, "gethostbyaddr");
|
||||
wsock32.gethostbyname = GetProcAddress(wsock32.dll, "gethostbyname");
|
||||
wsock32.gethostname = GetProcAddress(wsock32.dll, "gethostname");
|
||||
wsock32.getnetbyname = GetProcAddress(wsock32.dll, "getnetbyname");
|
||||
wsock32.getpeername = GetProcAddress(wsock32.dll, "getpeername");
|
||||
wsock32.getprotobyname = GetProcAddress(wsock32.dll, "getprotobyname");
|
||||
wsock32.getprotobynumber = GetProcAddress(wsock32.dll, "getprotobynumber");
|
||||
wsock32.getservbyname = GetProcAddress(wsock32.dll, "getservbyname");
|
||||
wsock32.getservbyport = GetProcAddress(wsock32.dll, "getservbyport");
|
||||
wsock32.getsockname = GetProcAddress(wsock32.dll, "getsockname");
|
||||
wsock32.getsockopt = GetProcAddress(wsock32.dll, "getsockopt");
|
||||
wsock32.htonl = GetProcAddress(wsock32.dll, "htonl");
|
||||
wsock32.htons = GetProcAddress(wsock32.dll, "htons");
|
||||
wsock32.inet_addr = GetProcAddress(wsock32.dll, "inet_addr");
|
||||
wsock32.inet_network = GetProcAddress(wsock32.dll, "inet_network");
|
||||
wsock32.inet_ntoa = GetProcAddress(wsock32.dll, "inet_ntoa");
|
||||
wsock32.ioctlsocket = GetProcAddress(wsock32.dll, "ioctlsocket");
|
||||
wsock32.listen = GetProcAddress(wsock32.dll, "listen");
|
||||
wsock32.ntohl = GetProcAddress(wsock32.dll, "ntohl");
|
||||
wsock32.ntohs = GetProcAddress(wsock32.dll, "ntohs");
|
||||
wsock32.rcmd = GetProcAddress(wsock32.dll, "rcmd");
|
||||
wsock32.recv = GetProcAddress(wsock32.dll, "recv");
|
||||
wsock32.recvfrom = GetProcAddress(wsock32.dll, "recvfrom");
|
||||
wsock32.rexec = GetProcAddress(wsock32.dll, "rexec");
|
||||
wsock32.rresvport = GetProcAddress(wsock32.dll, "rresvport");
|
||||
wsock32.s_perror = GetProcAddress(wsock32.dll, "s_perror");
|
||||
wsock32.select = GetProcAddress(wsock32.dll, "select");
|
||||
wsock32.send = GetProcAddress(wsock32.dll, "send");
|
||||
wsock32.sendto = GetProcAddress(wsock32.dll, "sendto");
|
||||
wsock32.sethostname = GetProcAddress(wsock32.dll, "sethostname");
|
||||
wsock32.setsockopt = GetProcAddress(wsock32.dll, "setsockopt");
|
||||
wsock32.shutdown = GetProcAddress(wsock32.dll, "shutdown");
|
||||
wsock32.socket = GetProcAddress(wsock32.dll, "socket");
|
||||
fkAttach();
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
FreeLibrary(wsock32.dll);
|
||||
fkDetach();
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
83
src/tool/FrontendKitWS/main.def
Normal file
83
src/tool/FrontendKitWS/main.def
Normal file
@ -0,0 +1,83 @@
|
||||
LIBRARY "wsock32"
|
||||
EXPORTS
|
||||
AcceptEx @1141
|
||||
Arecv @1003
|
||||
Asend @1004
|
||||
EnumProtocolsA @1111
|
||||
EnumProtocolsW @1112
|
||||
GetAcceptExSockaddrs @1142
|
||||
GetAddressByNameA @1109
|
||||
GetAddressByNameW @1110
|
||||
GetNameByTypeA @1115
|
||||
GetNameByTypeW @1116
|
||||
GetServiceA @1119
|
||||
GetServiceW @1120
|
||||
GetTypeByNameA @1113
|
||||
GetTypeByNameW @1114
|
||||
MigrateWinsockConfiguration @24
|
||||
NPLoadNameSpaces @1130
|
||||
NSPStartup @1131
|
||||
SetServiceA @1117
|
||||
SetServiceW @1118
|
||||
TransmitFile @1140
|
||||
WEP @500
|
||||
WSAAsyncGetHostByAddr @102
|
||||
WSAAsyncGetHostByName @103
|
||||
WSAAsyncGetProtoByName @105
|
||||
WSAAsyncGetProtoByNumber @104
|
||||
WSAAsyncGetServByName @107
|
||||
WSAAsyncGetServByPort @106
|
||||
WSAAsyncSelect @101
|
||||
WSACancelAsyncRequest @108
|
||||
WSACancelBlockingCall @113
|
||||
WSACleanup @116
|
||||
WSAGetLastError @111
|
||||
WSAIsBlocking @114
|
||||
WSARecvEx @1107
|
||||
WSASetBlockingHook @109
|
||||
WSASetLastError @112
|
||||
WSAStartup @115
|
||||
WSAUnhookBlockingHook @110
|
||||
WSApSetPostRoutine @1000
|
||||
WSHEnumProtocols @1005
|
||||
WsControl @1001
|
||||
__WSAFDIsSet @151
|
||||
accept @1
|
||||
bind @2
|
||||
closesocket @3
|
||||
closesockinfo @1002
|
||||
connect @4
|
||||
dn_expand @1106
|
||||
gethostbyaddr @51
|
||||
gethostbyname @52
|
||||
gethostname @57
|
||||
getnetbyname @1101
|
||||
getpeername @5
|
||||
getprotobyname @53
|
||||
getprotobynumber @54
|
||||
getservbyname @55
|
||||
getservbyport @56
|
||||
getsockname @6
|
||||
getsockopt @7
|
||||
htonl @8
|
||||
htons @9
|
||||
inet_addr @10
|
||||
inet_network @1100
|
||||
inet_ntoa @11
|
||||
ioctlsocket @12
|
||||
listen @13
|
||||
ntohl @14
|
||||
ntohs @15
|
||||
rcmd @1102
|
||||
recv @16
|
||||
recvfrom @17
|
||||
rexec @1103
|
||||
rresvport @1104
|
||||
s_perror @1108
|
||||
select @18
|
||||
send @19
|
||||
sendto @20
|
||||
sethostname @1105
|
||||
setsockopt @21
|
||||
shutdown @22
|
||||
socket @23
|
@ -12,20 +12,22 @@ namespace Syroot.Worms.Worms2.GameServer
|
||||
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
//Proxy.Run(); return;
|
||||
string? argEndPoint = args.Length > 0 ? args[0] : null;
|
||||
|
||||
Server server = new Server();
|
||||
server.Run(ParseEndPoint(args.Length > 0 ? args[0] : null));
|
||||
server.Run(ParseEndPoint(argEndPoint, new IPEndPoint(IPAddress.Any, 17000)));
|
||||
|
||||
//Proxy.Run(ParseEndPoint(argEndPoint, new IPEndPoint(IPAddress.Any, 17001)));
|
||||
}
|
||||
|
||||
private static IPEndPoint ParseEndPoint(string? s)
|
||||
private static IPEndPoint ParseEndPoint(string? s, IPEndPoint fallback)
|
||||
{
|
||||
if (UInt16.TryParse(s, out ushort port))
|
||||
return new IPEndPoint(IPAddress.Any, port);
|
||||
return new IPEndPoint(fallback.Address, port);
|
||||
else if (IPEndPoint.TryParse(s, out IPEndPoint endPoint))
|
||||
return endPoint;
|
||||
else
|
||||
return new IPEndPoint(IPAddress.Any, 17000);
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,10 +13,9 @@ namespace Syroot.Worms.Worms2.GameServer
|
||||
{
|
||||
// ---- METHODS (INTERNAL) -------------------------------------------------------------------------------------
|
||||
|
||||
internal static void Run()
|
||||
internal static void Run(IPEndPoint localEndPoint)
|
||||
{
|
||||
// Start listening for clients to intercept.
|
||||
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 17000);
|
||||
TcpListener listener = new TcpListener(localEndPoint);
|
||||
listener.Start();
|
||||
ColorConsole.WriteLine(Color.Orange, $"Proxy listening under {localEndPoint}...");
|
||||
|
32
src/tool/fkNetcode/PEInfo.cpp
Normal file
32
src/tool/fkNetcode/PEInfo.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
#include "PEInfo.h"
|
||||
|
||||
PEInfo::PEInfo(HMODULE hModule)
|
||||
{
|
||||
Reset(hModule);
|
||||
}
|
||||
|
||||
void PEInfo::Reset(HMODULE hModule)
|
||||
{
|
||||
Handle = hModule == 0 ? GetModuleHandleA(0) : hModule;
|
||||
DOS = (IMAGE_DOS_HEADER*)Handle;
|
||||
NT = (IMAGE_NT_HEADERS*)((DWORD)DOS + DOS->e_lfanew);
|
||||
FH = (IMAGE_FILE_HEADER*)&NT->FileHeader;
|
||||
OPT = (IMAGE_OPTIONAL_HEADER*)&NT->OptionalHeader;
|
||||
}
|
||||
|
||||
DWORD PEInfo::Offset(DWORD off)
|
||||
{
|
||||
return (DWORD)Handle + off;
|
||||
}
|
||||
|
||||
BOOL PEInfo::PtrInCode(PVOID ptr)
|
||||
{
|
||||
return DWORD(ptr) >= Offset(OPT->BaseOfCode)
|
||||
&& DWORD(ptr) < Offset(OPT->BaseOfCode) + OPT->SizeOfCode;
|
||||
}
|
||||
|
||||
BOOL PEInfo::PtrInData(PVOID ptr)
|
||||
{
|
||||
return DWORD(ptr) >= Offset(OPT->BaseOfData)
|
||||
&& DWORD(ptr) < Offset(OPT->BaseOfData) + OPT->SizeOfInitializedData + OPT->SizeOfUninitializedData;
|
||||
}
|
19
src/tool/fkNetcode/PEInfo.h
Normal file
19
src/tool/fkNetcode/PEInfo.h
Normal file
@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <Windows.h>
|
||||
|
||||
typedef struct PEInfo
|
||||
{
|
||||
PEInfo(HMODULE hModule = 0);
|
||||
|
||||
void Reset(HMODULE hModule);
|
||||
DWORD Offset(DWORD off);
|
||||
BOOL PtrInCode(PVOID ptr);
|
||||
BOOL PtrInData(PVOID ptr);
|
||||
|
||||
HANDLE Handle;
|
||||
IMAGE_DOS_HEADER* DOS;
|
||||
IMAGE_NT_HEADERS* NT;
|
||||
IMAGE_FILE_HEADER* FH;
|
||||
IMAGE_OPTIONAL_HEADER* OPT;
|
||||
} *PPEInfo;
|
101
src/tool/fkNetcode/fkNetcode.vcxproj
Normal file
101
src/tool/fkNetcode/fkNetcode.vcxproj
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{c4138811-7cfa-4826-a3dd-af2b618eafc1}</ProjectGuid>
|
||||
<RootNamespace>wkWorms2NetFix</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
<ProjectName>fkNetcode</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>bin\$(Configuration)\</OutDir>
|
||||
<IntDir>obj\$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>bin\$(Configuration)\</OutDir>
|
||||
<IntDir>obj\$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;FKNETCODE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<AdditionalDependencies>wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;FKNETCODE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<AdditionalDependencies>wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="misc_tools.cpp" />
|
||||
<ClCompile Include="PEInfo.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="misc_tools.h" />
|
||||
<ClInclude Include="PEInfo.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
98
src/tool/fkNetcode/main.cpp
Normal file
98
src/tool/fkNetcode/main.cpp
Normal file
@ -0,0 +1,98 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <iostream>
|
||||
#include <stdlib.h>
|
||||
#include <Windows.h>
|
||||
#include <WinInet.h>
|
||||
#include "PEInfo.h"
|
||||
#include "misc_tools.h"
|
||||
|
||||
PEInfo pe;
|
||||
CHAR szFoundIP[16] = {};
|
||||
|
||||
enum GameRegion
|
||||
{
|
||||
GAME_REGION_NONE = -1,
|
||||
GAME_REGION_BR,
|
||||
GAME_REGION_EN, // Du, En, Fr, It, Po, Sp, Sw have the same executable
|
||||
GAME_REGION_GE,
|
||||
GAME_REGION_NA,
|
||||
GAME_REGION_SA
|
||||
};
|
||||
|
||||
int getRegion()
|
||||
{
|
||||
switch (pe.FH->TimeDateStamp)
|
||||
{
|
||||
case 0x3528DAFA: return GAME_REGION_BR;
|
||||
case 0x3528DCB1: return GAME_REGION_EN;
|
||||
case 0x3528DB52: return GAME_REGION_GE;
|
||||
case 0x3528DA98: return GAME_REGION_NA;
|
||||
case 0x3528DBDA: return GAME_REGION_SA;
|
||||
}
|
||||
return GAME_REGION_NONE;
|
||||
}
|
||||
|
||||
bool __stdcall getLabelIP(LPSTR buffer, int bufferLength)
|
||||
{
|
||||
if (!szFoundIP[0])
|
||||
{
|
||||
// Initially resolve the external IP through a web service.
|
||||
HINTERNET hInternet = 0, hFile = 0;
|
||||
DWORD bytesRead = 0;
|
||||
CHAR buffer[16];
|
||||
|
||||
if ((hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0))
|
||||
&& (hFile = InternetOpenUrl(hInternet, "http://ip.syroot.com", NULL, 0,
|
||||
INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD, NULL))
|
||||
&& InternetReadFile(hFile, buffer, 16, &bytesRead) && bytesRead >= 8)
|
||||
{
|
||||
buffer[bytesRead] = '\0';
|
||||
uint8_t temp;
|
||||
if (sscanf_s(buffer, "%hhu.%hhu.%hhu.%hhu", &temp, &temp, &temp, &temp) == 4)
|
||||
lstrcpy(szFoundIP, buffer);
|
||||
}
|
||||
|
||||
if (hFile) InternetCloseHandle(hFile);
|
||||
if (hInternet) InternetCloseHandle(hInternet);
|
||||
}
|
||||
|
||||
// Return the detected IP.
|
||||
lstrcpy(buffer, szFoundIP);
|
||||
return buffer[0];
|
||||
}
|
||||
|
||||
void applyPatches()
|
||||
{
|
||||
// Replace NAT IP detection with web service.
|
||||
InsertJump((PVOID)pe.Offset(0x00001799), 5, &getLabelIP, IJ_JUMP);
|
||||
|
||||
// Prevent overriding the resolved IP when connecting to server.
|
||||
PatchMemNop(pe.Offset(0x00053E96), 5); // writes user name
|
||||
PatchMemNop(pe.Offset(0x00054993), 5); // writes NAT IP
|
||||
|
||||
// Remove useless sleeps.
|
||||
PatchMemNop(pe.Offset(0x00054935), 11);
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HMODULE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||
{
|
||||
switch (fdwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
if (getRegion() == GAME_REGION_NONE)
|
||||
{
|
||||
MessageBox(NULL, "fkNetcode is incompatible with your game version or region and will not be able to "
|
||||
"resolve your external IP address. Please install the Worms 2 1.05 patch or delete this module to "
|
||||
"remove this warning.", "fkNetcode", MB_ICONWARNING);
|
||||
}
|
||||
else
|
||||
{
|
||||
applyPatches();
|
||||
}
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
92
src/tool/fkNetcode/misc_tools.cpp
Normal file
92
src/tool/fkNetcode/misc_tools.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
#include <Windows.h>
|
||||
#include <stdio.h>
|
||||
#include "misc_tools.h"
|
||||
|
||||
BOOL WritePrivateProfileIntA(LPCSTR lpAppName, LPCSTR lpKeyName, int nInteger, LPCSTR lpFileName)
|
||||
{
|
||||
CHAR lpString[32];
|
||||
sprintf_s(lpString, "%d", nInteger);
|
||||
return WritePrivateProfileStringA(lpAppName, lpKeyName, lpString, lpFileName);
|
||||
}
|
||||
|
||||
LPSTR GetPathUnderModuleA(HMODULE hModule, LPSTR OutBuf, LPCSTR FileName)
|
||||
{
|
||||
GetModuleFileNameA(hModule, OutBuf, MAX_PATH);
|
||||
CHAR* dirend = strrchr(OutBuf, '\\') + 1;
|
||||
strcpy_s(dirend, MAX_PATH, FileName);
|
||||
return OutBuf;
|
||||
}
|
||||
|
||||
BOOL __stdcall PatchMemData(ULONG dwAddr, ULONG dwBufLen, PVOID pNewData, ULONG dwDataLen)
|
||||
{
|
||||
if (!dwDataLen || !pNewData || !dwAddr)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
DWORD dwLastProtection;
|
||||
if (!VirtualProtect((void*)dwAddr, dwDataLen, PAGE_EXECUTE_READWRITE, &dwLastProtection))
|
||||
return 0;
|
||||
|
||||
memcpy_s((PVOID)dwAddr, dwBufLen, pNewData, dwDataLen);
|
||||
|
||||
return VirtualProtect((void*)dwAddr, dwDataLen, dwLastProtection, &dwLastProtection);
|
||||
}
|
||||
|
||||
BOOL __stdcall PatchMemQword(ULONG dwAddr, QWORD qNewValue) { return PatchMemData(dwAddr, 8, &qNewValue, 8); }
|
||||
BOOL __stdcall PatchMemDword(ULONG dwAddr, DWORD dwNewValue) { return PatchMemData(dwAddr, 4, &dwNewValue, 4); }
|
||||
BOOL __stdcall PatchMemWord(ULONG dwAddr, WORD wNewValue) { return PatchMemData(dwAddr, 2, &wNewValue, 2); }
|
||||
BOOL __stdcall PatchMemByte(ULONG dwAddr, BYTE bNewValue) { return PatchMemData(dwAddr, 1, &bNewValue, 1); }
|
||||
BOOL __stdcall PatchMemFloat(ULONG dwAddr, FLOAT fNewValue)
|
||||
{
|
||||
DWORD dwLastProtection;
|
||||
if (!VirtualProtect((void*)dwAddr, sizeof(FLOAT), PAGE_EXECUTE_READWRITE, &dwLastProtection))
|
||||
return 0;
|
||||
*(FLOAT*)dwAddr = fNewValue;
|
||||
return VirtualProtect((void*)dwAddr, sizeof(FLOAT), dwLastProtection, &dwLastProtection);
|
||||
}
|
||||
|
||||
BOOL __stdcall PatchMemNop(ULONG dwAddr, DWORD dwPatchSize)
|
||||
{
|
||||
while (dwPatchSize-- && PatchMemByte(dwAddr++, 0x90));
|
||||
return dwPatchSize == 0;
|
||||
}
|
||||
BOOL __stdcall InsertJump(PVOID pDest, DWORD dwPatchSize, PVOID pCallee, DWORD dwJumpType)
|
||||
{
|
||||
if (dwPatchSize >= 5 && pDest)
|
||||
{
|
||||
DWORD OpSize, OpCode;
|
||||
switch (dwJumpType)
|
||||
{
|
||||
case IJ_PUSHRET: OpSize = 6; OpCode = 0x68; break;
|
||||
case IJ_FARJUMP: OpSize = 7; OpCode = 0xEA; break;
|
||||
case IJ_FARCALL: OpSize = 7; OpCode = 0x9A; break;
|
||||
case IJ_CALL: OpSize = 5; OpCode = 0xE8; break;
|
||||
default: OpSize = 5; OpCode = 0xE9; break;
|
||||
}
|
||||
|
||||
if (dwPatchSize < OpSize)
|
||||
return 0;
|
||||
|
||||
PatchMemByte((ULONG)pDest, (BYTE)OpCode);
|
||||
|
||||
switch (OpSize)
|
||||
{
|
||||
case 7:
|
||||
PatchMemDword((ULONG)pDest + 1, (ULONG)pCallee);
|
||||
PatchMemWord((ULONG)pDest + 5, 0x23);
|
||||
break;
|
||||
case 6:
|
||||
PatchMemDword((ULONG)pDest + 1, (ULONG)pCallee);
|
||||
PatchMemByte((ULONG)pDest + 5, 0xC3);
|
||||
break;
|
||||
default:
|
||||
PatchMemDword((ULONG)pDest + 1, (ULONG)pCallee - (ULONG)pDest - 5);
|
||||
break;
|
||||
}
|
||||
|
||||
for (ULONG i = OpSize; i < dwPatchSize; i++)
|
||||
PatchMemByte((ULONG)pDest + i, 0x90);
|
||||
}
|
||||
return 0;
|
||||
}
|
27
src/tool/fkNetcode/misc_tools.h
Normal file
27
src/tool/fkNetcode/misc_tools.h
Normal file
@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
typedef unsigned long long QWORD;
|
||||
typedef QWORD *PQWORD, *LPQWORD;
|
||||
|
||||
extern "C" IMAGE_DOS_HEADER __ImageBase;
|
||||
#define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
|
||||
|
||||
#define IJ_JUMP 0 //Insert a jump (0xE9) with InsertJump
|
||||
#define IJ_CALL 1 //Insert a call (0xE8) with InsertJump
|
||||
#define IJ_FARJUMP 2 //Insert a farjump (0xEA) with InsertJump
|
||||
#define IJ_FARCALL 3 //Insert a farcall (0x9A) with InsertJump
|
||||
#define IJ_PUSHRET 4 //Insert a pushret with InsertJump
|
||||
|
||||
BOOL WritePrivateProfileIntA(LPCSTR lpAppName, LPCSTR lpKeyName, int nInteger, LPCSTR lpFileName);
|
||||
LPSTR GetPathUnderModuleA(HMODULE hModule, LPSTR OutBuf, LPCSTR FileName);
|
||||
|
||||
BOOL __stdcall PatchMemData(ULONG dwAddr, ULONG dwBufLen, PVOID pNewData, ULONG dwDataLen);
|
||||
BOOL __stdcall PatchMemQword(ULONG dwAddr, QWORD qNewValue);
|
||||
BOOL __stdcall PatchMemDword(ULONG dwAddr, DWORD dwNewValue);
|
||||
BOOL __stdcall PatchMemWord(ULONG dwAddr, WORD wNewValue);
|
||||
BOOL __stdcall PatchMemByte(ULONG dwAddr, BYTE bNewValue);
|
||||
BOOL __stdcall PatchMemFloat(ULONG dwAddr, FLOAT fNewValue);
|
||||
|
||||
BOOL __stdcall PatchMemNop(ULONG dwAddr, DWORD dwPatchSize);
|
||||
|
||||
BOOL __stdcall InsertJump(PVOID pDest, DWORD dwPatchSize, PVOID pCallee, DWORD dwJumpType = IJ_JUMP);
|
Loading…
x
Reference in New Issue
Block a user