├── .gitattributes ├── .gitignore ├── README.md ├── XignCode Client ├── XignCode Client.vcxproj ├── XignCode Client.vcxproj.filters ├── XignCode.cpp ├── XignCode.hpp ├── client.cpp ├── client.hpp ├── export.def └── main.cpp ├── XignCode Host ├── Resources │ └── xigncode.ico ├── XignCode Host.vcxproj ├── XignCode Host.vcxproj.filters ├── XignCode.cpp ├── XignCode.hpp ├── icon1.ico ├── main.cpp ├── resource.hpp ├── resource.rc ├── server.cpp ├── server.hpp ├── session.cpp └── session.hpp ├── XignCode Library ├── ReadMe.txt ├── XignCode Library.vcxproj ├── XignCode Library.vcxproj.filters ├── XignDefs.hpp ├── XignReader.cpp ├── XignReader.hpp ├── XignWriter.cpp └── XignWriter.hpp └── XignCode3 Bypass.sln /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | [Xx]64/ 19 | [Xx]86/ 20 | [Bb]uild/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | 85 | # Visual Studio profiler 86 | *.psess 87 | *.vsp 88 | *.vspx 89 | *.sap 90 | 91 | # TFS 2012 Local Workspace 92 | $tf/ 93 | 94 | # Guidance Automation Toolkit 95 | *.gpState 96 | 97 | # ReSharper is a .NET coding add-in 98 | _ReSharper*/ 99 | *.[Rr]e[Ss]harper 100 | *.DotSettings.user 101 | 102 | # JustCode is a .NET coding add-in 103 | .JustCode 104 | 105 | # TeamCity is a build add-in 106 | _TeamCity* 107 | 108 | # DotCover is a Code Coverage Tool 109 | *.dotCover 110 | 111 | # NCrunch 112 | _NCrunch_* 113 | .*crunch*.local.xml 114 | nCrunchTemp_* 115 | 116 | # MightyMoose 117 | *.mm.* 118 | AutoTest.Net/ 119 | 120 | # Web workbench (sass) 121 | .sass-cache/ 122 | 123 | # Installshield output folder 124 | [Ee]xpress/ 125 | 126 | # DocProject is a documentation generator add-in 127 | DocProject/buildhelp/ 128 | DocProject/Help/*.HxT 129 | DocProject/Help/*.HxC 130 | DocProject/Help/*.hhc 131 | DocProject/Help/*.hhk 132 | DocProject/Help/*.hhp 133 | DocProject/Help/Html2 134 | DocProject/Help/html 135 | 136 | # Click-Once directory 137 | publish/ 138 | 139 | # Publish Web Output 140 | *.[Pp]ublish.xml 141 | *.azurePubxml 142 | 143 | # TODO: Un-comment the next line if you do not want to checkin 144 | # your web deploy settings because they may include unencrypted 145 | # passwords 146 | #*.pubxml 147 | *.publishproj 148 | 149 | # NuGet Packages 150 | *.nupkg 151 | # The packages folder can be ignored because of Package Restore 152 | **/packages/* 153 | # except build/, which is used as an MSBuild target. 154 | !**/packages/build/ 155 | # Uncomment if necessary however generally it will be regenerated when needed 156 | #!**/packages/repositories.config 157 | # NuGet v3's project.json files produces more ignoreable files 158 | *.nuget.props 159 | *.nuget.targets 160 | 161 | # Microsoft Azure Build Output 162 | csx/ 163 | *.build.csdef 164 | 165 | # Microsoft Azure Emulator 166 | ecf/ 167 | rcf/ 168 | 169 | # Microsoft Azure ApplicationInsights config file 170 | ApplicationInsights.config 171 | 172 | # Windows Store app package directory 173 | AppPackages/ 174 | BundleArtifacts/ 175 | 176 | # Visual Studio cache files 177 | # files ending in .cache can be ignored 178 | *.[Cc]ache 179 | # but keep track of directories ending in .cache 180 | !*.[Cc]ache/ 181 | 182 | # Others 183 | ClientBin/ 184 | [Ss]tyle[Cc]op.* 185 | ~$* 186 | *~ 187 | *.dbmdl 188 | *.dbproj.schemaview 189 | *.pfx 190 | *.publishsettings 191 | node_modules/ 192 | orleans.codegen.cs 193 | 194 | # RIA/Silverlight projects 195 | Generated_Code/ 196 | 197 | # Backup & report files from converting an old project file 198 | # to a newer Visual Studio version. Backup files are not needed, 199 | # because we have git ;-) 200 | _UpgradeReport_Files/ 201 | Backup*/ 202 | UpgradeLog*.XML 203 | UpgradeLog*.htm 204 | 205 | # SQL Server files 206 | *.mdf 207 | *.ldf 208 | 209 | # Business Intelligence projects 210 | *.rdl.data 211 | *.bim.layout 212 | *.bim_*.settings 213 | 214 | # Microsoft Fakes 215 | FakesAssemblies/ 216 | 217 | # GhostDoc plugin setting file 218 | *.GhostDoc.xml 219 | 220 | # Node.js Tools for Visual Studio 221 | .ntvs_analysis.dat 222 | 223 | # Visual Studio 6 build log 224 | *.plg 225 | 226 | # Visual Studio 6 workspace options file 227 | *.opt 228 | 229 | # Visual Studio LightSwitch build output 230 | **/*.HTMLClient/GeneratedArtifacts 231 | **/*.DesktopClient/GeneratedArtifacts 232 | **/*.DesktopClient/ModelManifest.xml 233 | **/*.Server/GeneratedArtifacts 234 | **/*.Server/ModelManifest.xml 235 | _Pvt_Extensions 236 | 237 | # LightSwitch generated files 238 | GeneratedArtifacts/ 239 | ModelManifest.xml 240 | 241 | # Paket dependency manager 242 | .paket/paket.exe 243 | 244 | # FAKE - F# Make 245 | .fake/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # XignCode3Bypass 2 | 游戏:封印者 3 | 保护:xigncode3 4 | todo:剥离驱动并模拟通讯 5 | 6 | 7 | 8 | 想用到CN冒险岛2的各位,直接改进程名字就行了,我知道国服测试了 9 | 10 | 11 | -------------------------------------------------------------------------------- /XignCode Client/XignCode Client.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {48A6380E-2AD5-485F-A2D4-4E6F245321BC} 15 | Win32Proj 16 | XignCodeClient 17 | 18 | 19 | 20 | DynamicLibrary 21 | true 22 | v120 23 | Unicode 24 | 25 | 26 | DynamicLibrary 27 | false 28 | v120 29 | true 30 | Unicode 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | true 44 | 45 | 46 | false 47 | 48 | 49 | 50 | 51 | 52 | Level3 53 | Disabled 54 | WIN32;_DEBUG;_WINDOWS;_USRDLL;XIGNCODECLIENT_EXPORTS;%(PreprocessorDefinitions) 55 | true 56 | 57 | 58 | Windows 59 | true 60 | export.def 61 | 62 | 63 | 64 | 65 | Level3 66 | 67 | 68 | MaxSpeed 69 | true 70 | true 71 | WIN32;NDEBUG;_WINDOWS;_USRDLL;XIGNCODECLIENT_EXPORTS;%(PreprocessorDefinitions) 72 | true 73 | ..\XignCode Library\ 74 | 75 | 76 | Windows 77 | true 78 | true 79 | true 80 | export.def 81 | 82 | 83 | copy /Y "$(TargetDir)$(ProjectName).dll" "F:\TIANCITY\CLOSERS\XignCode\x3.xem" 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | {6d49cfbb-91a8-4da6-af5f-14aafeca091d} 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /XignCode Client/XignCode Client.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {ed35e5c1-68ac-41e3-ba4f-b4f2983b389a} 6 | 7 | 8 | {ad08a2a1-5c1c-459a-80d0-52028d560b00} 9 | 10 | 11 | {0b02cb95-7183-4144-bbc1-708e99037d1d} 12 | 13 | 14 | {4898fc4d-5634-4c6b-930b-b91ae6188a9d} 15 | 16 | 17 | 18 | 19 | source 20 | 21 | 22 | XignCode 23 | 24 | 25 | network 26 | 27 | 28 | 29 | 30 | XignCode 31 | 32 | 33 | network 34 | 35 | 36 | 37 | 38 | spoof 39 | 40 | 41 | -------------------------------------------------------------------------------- /XignCode Client/XignCode.cpp: -------------------------------------------------------------------------------- 1 | #include "client.hpp" 2 | 3 | #include "XignCode.hpp" 4 | 5 | #include "../XignCode Library/XignReader.hpp" 6 | #include "../XignCode Library/XignWriter.hpp" 7 | 8 | #include 9 | 10 | namespace XignCode 11 | { 12 | BOOL XIGNAPI _XignCode_initialize(const wchar_t* license_key, const wchar_t* xigncode_directory, int unknown) 13 | { 14 | printf("_XignCode_initialize - %ws, %ws, %d\n", license_key, xigncode_directory, unknown); 15 | return TRUE; 16 | } 17 | 18 | BOOL XIGNAPI _XignCode_uninitialize() 19 | { 20 | printf("_XignCode_uninitialize\n"); 21 | return TRUE; 22 | } 23 | 24 | BOOL XIGNAPI _XignCode_start_service() 25 | { 26 | printf("_XignCode_start_service\n"); 27 | return TRUE; 28 | } 29 | 30 | BOOL XIGNAPI _XignCode_stop_service() 31 | { 32 | printf("_XignCode_stop_service\n"); 33 | return TRUE; 34 | } 35 | 36 | BOOL XIGNAPI _XignCode_make_response(unsigned char* request, unsigned int size, _XignCode_heartbeat_callback_t response_callback, void* unknown) 37 | { 38 | static XignWriter writer; 39 | static DWORD last_tick = 0; 40 | 41 | if (last_tick == 0 || GetTickCount() - last_tick >= 5000) 42 | { 43 | last_tick = GetTickCount(); 44 | 45 | printf("\n"); 46 | writer.clear(); 47 | 48 | std::thread thrd([&](_XignCode_heartbeat_callback_t callback) -> bool 49 | { 50 | while (GetTickCount() - last_tick < 5000) 51 | { 52 | Sleep(250); 53 | } 54 | 55 | network::client local_client(38666); 56 | 57 | bool result = local_client.make_interaction([&](network::client* client) -> bool 58 | { 59 | if (!client->write(writer.get().data(), writer.get().size())) 60 | { 61 | return false; 62 | } 63 | 64 | unsigned char data[8192]; 65 | int size = client->read(data); 66 | 67 | if (!size) 68 | { 69 | return false; 70 | } 71 | 72 | XignReader reader(data, size); 73 | 74 | void* pointer = reinterpret_cast(reader.read()); 75 | 76 | unsigned char response_1[512]; 77 | std::size_t response_1_size = reader.fetch(response_1); 78 | 79 | if (!response_1_size) 80 | { 81 | return false; 82 | } 83 | 84 | unsigned char response_2[512]; 85 | std::size_t response_2_size = reader.fetch(response_2); 86 | 87 | if (!response_2_size) 88 | { 89 | return false; 90 | } 91 | 92 | printf("Heartbeat callback returned: %08X\n", callback(pointer, response_1, response_2, response_1_size, 0)); 93 | return true; 94 | }); 95 | 96 | printf("interaction returned: %d\n", result); 97 | return result; 98 | }, response_callback); 99 | 100 | thrd.detach(); 101 | } 102 | else 103 | { 104 | last_tick = GetTickCount(); 105 | } 106 | 107 | printf("_XignCode_make_response - %08X, %08X, %08X, %08X\n", request, size, response_callback, unknown); 108 | 109 | writer.append(request, size); 110 | return TRUE; 111 | } 112 | 113 | BOOL XIGNAPI _XignCode_set_error_callback(_XignCode_error_callback_t error_callback, void* unknown) 114 | { 115 | //printf("_XignCode_set_callback - %08X, %08X\n", error_callback, unknown); 116 | return TRUE; 117 | } 118 | 119 | BOOL XIGNAPI _XignCode_set_option(unsigned int option, void** param) 120 | { 121 | //printf("_XignCode_set_option - %08X, %08X\n", option, *param); 122 | return TRUE; 123 | } 124 | 125 | unsigned int XIGNAPI _XignCode_function_dispatch(void** function_ptr, FUNCTION_DISPATCH_TYPE function_type) 126 | { 127 | switch (function_type) 128 | { 129 | case FDT_INITIALIZE: 130 | *function_ptr = _XignCode_initialize; 131 | break; 132 | 133 | case FDT_UNINITIALIZE: 134 | *function_ptr = _XignCode_uninitialize; 135 | break; 136 | 137 | case FDT_START_SERVICE: 138 | *function_ptr = _XignCode_start_service; 139 | break; 140 | 141 | case FDT_STOP_SERVICE: 142 | *function_ptr = _XignCode_stop_service; 143 | break; 144 | 145 | case FDT_MAKE_RESPONSE: 146 | *function_ptr = _XignCode_make_response; 147 | break; 148 | 149 | case FDT_SET_ERROR_CALLBACK: 150 | *function_ptr = _XignCode_set_error_callback; 151 | break; 152 | 153 | case FDT_SET_OPTION: 154 | *function_ptr = _XignCode_set_option; 155 | break; 156 | 157 | default: 158 | printf("FunctionDispatch - function_ptr: %08X, function_type: %08X\n", function_ptr, function_type); 159 | break; 160 | } 161 | 162 | return 0; 163 | } 164 | } -------------------------------------------------------------------------------- /XignCode Client/XignCode.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../XignCode Library/XignDefs.hpp" 4 | 5 | #include 6 | 7 | namespace XignCode 8 | { 9 | BOOL XIGNAPI _XignCode_initialize(const wchar_t* license_key, const wchar_t* xigncode_directory, int unknown); 10 | BOOL XIGNAPI _XignCode_uninitialize(); 11 | 12 | BOOL XIGNAPI _XignCode_start_service(); 13 | BOOL XIGNAPI _XignCode_stop_service(); 14 | 15 | BOOL XIGNAPI _XignCode_make_response(unsigned char* request, unsigned int size, _XignCode_heartbeat_callback_t response_callback, void* unknown); 16 | 17 | BOOL XIGNAPI _XignCode_set_error_callback(_XignCode_error_callback_t error_callback, void* unknown); 18 | BOOL XIGNAPI _XignCode_set_option(unsigned int option, void** param); 19 | 20 | unsigned int XIGNAPI _XignCode_function_dispatch(void** function_ptr, FUNCTION_DISPATCH_TYPE function_type); 21 | } -------------------------------------------------------------------------------- /XignCode Client/client.cpp: -------------------------------------------------------------------------------- 1 | #ifndef _CRT_SECURE_NO_WARNINGS 2 | #define _CRT_SECURE_NO_WARNINGS 3 | #endif 4 | #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS 5 | #define _WINSOCK_DEPRECATED_NO_WARNINGS 6 | #endif 7 | #include "client.hpp" 8 | 9 | #include 10 | #pragma comment(lib, "ws2_32") 11 | 12 | #include 13 | 14 | namespace network 15 | { 16 | client::client(unsigned short port) 17 | : sock(INVALID_SOCKET), port(port) 18 | { 19 | 20 | } 21 | 22 | client::~client() 23 | { 24 | if (this->sock != INVALID_SOCKET) 25 | { 26 | this->uninitialize(); 27 | } 28 | } 29 | 30 | bool client::make_interaction(interaction_handler finalize_handler) 31 | { 32 | if (!this->initialize()) 33 | { 34 | this->output_wsa_error(error_type::connect); 35 | return false; 36 | } 37 | 38 | bool result = finalize_handler(this); 39 | 40 | this->uninitialize(); 41 | return result; 42 | } 43 | 44 | int client::read(unsigned char* buffer, std::size_t assumed_size) 45 | { 46 | unsigned short data_length = 0; 47 | int data_length_size = this->raw_read(reinterpret_cast(&data_length), sizeof(unsigned short)); 48 | 49 | if (!data_length_size || data_length_size != sizeof(unsigned short)) 50 | { 51 | return 0; 52 | } 53 | 54 | if (assumed_size && data_length != assumed_size) 55 | { 56 | return 0; 57 | } 58 | 59 | unsigned char data_buffer[16384]; 60 | 61 | for (int data_read = 0, offset = 0, data_to_read = data_length; data_to_read > 0; data_to_read -= data_read, offset += data_read) 62 | { 63 | data_read = this->raw_read(data_buffer + offset, data_to_read); 64 | 65 | if (!data_read || data_read == SOCKET_ERROR) 66 | { 67 | return 0; 68 | } 69 | } 70 | 71 | memcpy(buffer, data_buffer, data_length); 72 | return data_length; 73 | } 74 | 75 | bool client::write(unsigned char const* buffer, std::size_t size) 76 | { 77 | unsigned short data_length = static_cast(size); 78 | 79 | if (!this->raw_write(reinterpret_cast(&data_length), sizeof(unsigned short))) 80 | { 81 | return false; 82 | } 83 | 84 | unsigned char* data_buffer = new unsigned char[size]; 85 | memcpy(data_buffer, buffer, size); 86 | 87 | if (!this->raw_write(data_buffer, size)) 88 | { 89 | delete[] data_buffer; 90 | return false; 91 | } 92 | 93 | delete[] data_buffer; 94 | return true; 95 | } 96 | 97 | bool client::initialize() 98 | { 99 | if (WSAStartup(MAKEWORD(2, 0), new WSADATA)) 100 | { 101 | return false; 102 | } 103 | 104 | this->sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 105 | 106 | if (this->sock == INVALID_SOCKET) 107 | { 108 | return false; 109 | } 110 | 111 | sockaddr_in addr; 112 | addr.sin_family = AF_INET; 113 | addr.sin_port = htons(this->port); 114 | addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // inet_addr("127.0.0.1"); 115 | std::fill(addr.sin_zero, addr.sin_zero + sizeof(addr.sin_zero), 0); 116 | 117 | return (connect(this->sock, reinterpret_cast(&addr), sizeof(sockaddr_in)) != SOCKET_ERROR); 118 | } 119 | 120 | bool client::uninitialize() 121 | { 122 | return (shutdown(this->sock, SD_BOTH) != SOCKET_ERROR && closesocket(this->sock) != SOCKET_ERROR && WSACleanup() == 0); 123 | } 124 | 125 | int client::raw_read(unsigned char* buffer, std::size_t size) 126 | { 127 | int bytes_read = recv(this->sock, reinterpret_cast(buffer), size, 0); 128 | 129 | if (bytes_read == 0 || bytes_read == SOCKET_ERROR) 130 | { 131 | if (bytes_read == SOCKET_ERROR) 132 | { 133 | this->output_wsa_error(error_type::read); 134 | } 135 | 136 | return bytes_read; 137 | } 138 | else if (bytes_read < static_cast(size)) 139 | { 140 | int remaining_bytes_read = recv(this->sock, reinterpret_cast(buffer + bytes_read), size - bytes_read, 0); 141 | 142 | if (remaining_bytes_read == 0 || remaining_bytes_read == SOCKET_ERROR) 143 | { 144 | if (remaining_bytes_read == SOCKET_ERROR) 145 | { 146 | this->output_wsa_error(error_type::read, false); 147 | } 148 | 149 | return remaining_bytes_read; 150 | } 151 | 152 | bytes_read += remaining_bytes_read; 153 | } 154 | 155 | return bytes_read; 156 | } 157 | 158 | bool client::raw_write(unsigned char const* buffer, std::size_t size) 159 | { 160 | for (int data_sent = 0, offset = 0, data_to_send = size; data_to_send > 0; data_to_send -= data_sent, offset += data_sent) 161 | { 162 | data_sent = send(this->sock, reinterpret_cast(buffer) + offset, data_to_send, 0); 163 | 164 | if (data_sent == 0 || data_sent == SOCKET_ERROR) 165 | { 166 | if (data_sent == SOCKET_ERROR) 167 | { 168 | this->output_wsa_error(error_type::write); 169 | } 170 | 171 | return false; 172 | } 173 | } 174 | 175 | return true; 176 | } 177 | 178 | void client::output_wsa_error(error_type type, bool first) 179 | { 180 | int error_code = WSAGetLastError(); 181 | 182 | char error_message[1024]; 183 | memset(error_message, 0, sizeof(error_message)); 184 | 185 | strcpy(error_message, "Failed to "); 186 | 187 | switch (type) 188 | { 189 | case error_type::connect: 190 | strcat(error_message, "connect to "); 191 | break; 192 | 193 | case error_type::read: 194 | strcat(error_message, (first ? "receive (0) data from " : "receive (1) data from ")); 195 | break; 196 | 197 | case error_type::write: 198 | strcat(error_message, "send data to "); 199 | break; 200 | } 201 | 202 | strcat(error_message, "the server.\nReason: "); 203 | 204 | switch (error_code) 205 | { 206 | case WSAECONNRESET: 207 | strcat(error_message, "You've been disconnected; the server terminated the connection."); 208 | break; 209 | 210 | case WSAETIMEDOUT: 211 | strcat(error_message, "You've timed out; it took you more than 10 seconds to communicate with the server."); 212 | break; 213 | 214 | default: 215 | strcat(error_message, "Unknown. Error code: "); 216 | strcat(error_message, std::to_string(error_code).c_str()); 217 | strcat(error_message, "."); 218 | break; 219 | } 220 | 221 | printf("Client networking error: %s\n", error_message); 222 | } 223 | } -------------------------------------------------------------------------------- /XignCode Client/client.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | 9 | namespace network 10 | { 11 | enum class error_type 12 | { 13 | connect, 14 | read, 15 | write 16 | }; 17 | 18 | class client 19 | { 20 | protected: 21 | typedef std::function interaction_handler; 22 | 23 | public: 24 | client(unsigned short port); 25 | ~client(); 26 | 27 | bool make_interaction(interaction_handler finalize_handler); 28 | 29 | int read(unsigned char* buffer, std::size_t assumed_size = 0); 30 | bool write(unsigned char const* buffer, std::size_t size); 31 | 32 | protected: 33 | bool initialize(); 34 | bool uninitialize(); 35 | 36 | int raw_read(unsigned char* buffer, std::size_t size); 37 | bool raw_write(unsigned char const* buffer, std::size_t size); 38 | 39 | void output_wsa_error(error_type type, bool first = true); 40 | 41 | private: 42 | SOCKET sock; 43 | 44 | std::string hostname; 45 | unsigned short port; 46 | }; 47 | } -------------------------------------------------------------------------------- /XignCode Client/export.def: -------------------------------------------------------------------------------- 1 | LIBRARY "XignCode Client" 2 | 3 | EXPORTS 4 | 1 = _XignCode_function_dispatch @1 PRIVATE -------------------------------------------------------------------------------- /XignCode Client/main.cpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 7 | { 8 | if (fdwReason == DLL_PROCESS_ATTACH) 9 | { 10 | AllocConsole(); 11 | SetConsoleTitle(L"XignCode Client"); 12 | AttachConsole(GetCurrentProcessId()); 13 | 14 | FILE* pFile = nullptr; 15 | freopen_s(&pFile, "CON", "r", stdin); 16 | freopen_s(&pFile, "CON", "w", stdout); 17 | freopen_s(&pFile, "CON", "w", stderr); 18 | 19 | DisableThreadLibraryCalls(hinstDLL); 20 | } 21 | else if (fdwReason == DLL_PROCESS_DETACH) 22 | { 23 | FreeConsole(); 24 | } 25 | 26 | return TRUE; 27 | } -------------------------------------------------------------------------------- /XignCode Host/Resources/xigncode.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luciouskami/XignCode3Bypass/6f17d47608cab6d8a2099c66bcc4458b8b814f7c/XignCode Host/Resources/xigncode.ico -------------------------------------------------------------------------------- /XignCode Host/XignCode Host.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {E8C68252-8308-4B45-A74B-028C8193ACCE} 15 | Win32Proj 16 | XignCodeHost 17 | 18 | 19 | 20 | Application 21 | true 22 | v120 23 | Unicode 24 | 25 | 26 | Application 27 | false 28 | v120 29 | true 30 | Unicode 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | true 44 | 45 | 46 | false 47 | 48 | 49 | 50 | 51 | 52 | Level3 53 | Disabled 54 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) 55 | true 56 | 57 | 58 | Windows 59 | true 60 | 61 | 62 | 63 | 64 | Level3 65 | 66 | 67 | MaxSpeed 68 | true 69 | true 70 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 71 | true 72 | ..\XignCode Library\ 73 | 74 | 75 | Windows 76 | true 77 | true 78 | true 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | {6d49cfbb-91a8-4da6-af5f-14aafeca091d} 102 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /XignCode Host/XignCode Host.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {21463798-7244-4def-bc77-9ebc3f52166c} 6 | 7 | 8 | {91ded9d3-e1fb-41b8-8f57-6ab4de00e938} 9 | 10 | 11 | {31e95667-2762-432d-8ee0-d77fbdd9c661} 12 | 13 | 14 | {6bc6e9b1-ef2b-4fa7-9420-6eb4f0a808e4} 15 | 16 | 17 | {3d85bfc6-a931-4417-ba9a-975e3a9c4d3a} 18 | 19 | 20 | 21 | 22 | XignCode 23 | 24 | 25 | source 26 | 27 | 28 | network 29 | 30 | 31 | network 32 | 33 | 34 | 35 | 36 | XignCode 37 | 38 | 39 | resource 40 | 41 | 42 | network 43 | 44 | 45 | network 46 | 47 | 48 | 49 | 50 | resource 51 | 52 | 53 | 54 | 55 | resource\icons 56 | 57 | 58 | -------------------------------------------------------------------------------- /XignCode Host/XignCode.cpp: -------------------------------------------------------------------------------- 1 | #include "XignCode.hpp" 2 | 3 | namespace XignCode 4 | { 5 | bool Initialize(std::wstring const& maplestory_directory) 6 | { 7 | /* Load MapleStory stub */ 8 | HMODULE maplestory_module = LoadLibraryEx((maplestory_directory + std::wstring(L"\\CW.exe")).c_str(), NULL, DONT_RESOLVE_DLL_REFERENCES); 9 | 10 | if (!maplestory_module) 11 | { 12 | return false; 13 | } 14 | 15 | __asm 16 | { 17 | push eax 18 | push ecx 19 | mov eax,fs:[0x18] 20 | mov eax,[eax+0x30] 21 | mov ecx,maplestory_module 22 | mov [eax+0x08],ecx 23 | pop ecx 24 | pop eax 25 | }; 26 | 27 | /* Load XignCode */ 28 | std::wstring xigncode_directory = maplestory_directory + L"\\XIGNCODE"; 29 | HMODULE xigncode_module = LoadLibrary((xigncode_directory + std::wstring(L"\\X3.XEM")).c_str()); 30 | 31 | if (!xigncode_module) 32 | { 33 | return false; 34 | } 35 | 36 | /* Get the function dispatch */ 37 | _XignCode_function_dispatch = reinterpret_cast<_XignCode_function_dispatch_t>(GetProcAddress(xigncode_module, reinterpret_cast(1))); 38 | 39 | if (!_XignCode_function_dispatch) 40 | { 41 | return false; 42 | } 43 | 44 | /* Handle the initialize function */ 45 | _XignCode_initialize_t _XignCode_initialize = nullptr; 46 | 47 | if (_XignCode_function_dispatch(reinterpret_cast(&_XignCode_initialize), FDT_INITIALIZE) || _XignCode_initialize == nullptr) 48 | { 49 | return false; 50 | } 51 | 52 | if (!_XignCode_initialize(L"bD_cXsyitNtI", xigncode_directory.c_str(), 7)) 53 | { 54 | return false; 55 | } 56 | 57 | /* Handle the error callback function */ 58 | _XignCode_set_error_callback_t _XignCode_set_error_callback = nullptr; 59 | 60 | if (_XignCode_function_dispatch(reinterpret_cast(&_XignCode_set_error_callback), FDT_SET_ERROR_CALLBACK) || _XignCode_set_error_callback == nullptr) 61 | { 62 | return false; 63 | } 64 | 65 | _XignCode_error_callback_t _XignCode_error_callback = [](unsigned int error_code, unsigned int param_size, void* param, void* _4) -> unsigned int 66 | { 67 | //printf("_XignCode_error_callback: %08X\n", error_code); 68 | return 0; 69 | }; 70 | 71 | if (!_XignCode_set_error_callback(_XignCode_error_callback, 0)) 72 | { 73 | return false; 74 | } 75 | 76 | /* Handle the start service function */ 77 | _XignCode_start_service_t _XignCode_start_service = nullptr; 78 | 79 | if (_XignCode_function_dispatch(reinterpret_cast(&_XignCode_start_service), FDT_START_SERVICE) || _XignCode_start_service == nullptr) 80 | { 81 | return false; 82 | } 83 | 84 | if (!_XignCode_start_service()) 85 | { 86 | return false; 87 | } 88 | 89 | return true; 90 | } 91 | 92 | bool Uninitialize() 93 | { 94 | /* Handle the stop service function */ 95 | _XignCode_stop_service_t _XignCode_stop_service = nullptr; 96 | 97 | if (_XignCode_function_dispatch(reinterpret_cast(&_XignCode_stop_service), FDT_STOP_SERVICE) || _XignCode_stop_service == nullptr) 98 | { 99 | return false; 100 | } 101 | 102 | if (!_XignCode_stop_service()) 103 | { 104 | return false; 105 | } 106 | 107 | /* Handle the uninitialize function */ 108 | _XignCode_uninitialize_t _XignCode_uninitialize = nullptr; 109 | 110 | if (_XignCode_function_dispatch(reinterpret_cast(&_XignCode_uninitialize), FDT_UNINITIALIZE) || _XignCode_uninitialize == nullptr) 111 | { 112 | return false; 113 | } 114 | 115 | if (!_XignCode_uninitialize()) 116 | { 117 | return false; 118 | } 119 | 120 | return true; 121 | } 122 | 123 | bool MakeResponse(unsigned char* request, unsigned int size, _XignCode_heartbeat_callback_t heartbeat_callback) 124 | { 125 | _XignCode_make_response_t _XignCode_make_response = nullptr; 126 | 127 | if (_XignCode_function_dispatch(reinterpret_cast(&_XignCode_make_response), FDT_MAKE_RESPONSE) || _XignCode_make_response == nullptr) 128 | { 129 | return false; 130 | } 131 | 132 | if (!_XignCode_make_response(request, size, heartbeat_callback, 0)) 133 | { 134 | return false; 135 | } 136 | 137 | return true; 138 | } 139 | } -------------------------------------------------------------------------------- /XignCode Host/XignCode.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../XignCode Library/XignDefs.hpp" 4 | 5 | namespace XignCode 6 | { 7 | static _XignCode_function_dispatch_t _XignCode_function_dispatch = nullptr; 8 | 9 | bool Initialize(std::wstring const& maplestory_directory); 10 | bool Uninitialize(); 11 | 12 | bool MakeResponse(unsigned char* request, unsigned int size, _XignCode_heartbeat_callback_t heartbeat_callback); 13 | } -------------------------------------------------------------------------------- /XignCode Host/icon1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luciouskami/XignCode3Bypass/6f17d47608cab6d8a2099c66bcc4458b8b814f7c/XignCode Host/icon1.ico -------------------------------------------------------------------------------- /XignCode Host/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | #include "resource.hpp" 9 | #include "XignCode.hpp" 10 | 11 | #include "server.hpp" 12 | 13 | INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) 14 | { 15 | AllocConsole(); 16 | SetConsoleTitle(L"Full Bypass"); 17 | AttachConsole(GetCurrentProcessId()); 18 | 19 | FILE* pFile = nullptr; 20 | freopen_s(&pFile, "CON", "r", stdin); 21 | freopen_s(&pFile, "CON", "w", stdout); 22 | freopen_s(&pFile, "CON", "w", stderr); 23 | 24 | if (!XignCode::Initialize(L"C:\\CLOSERS")) 25 | { 26 | return 0; 27 | } 28 | 29 | network::server server; 30 | 31 | if (!server.initialize(38666)) 32 | { 33 | return 0; 34 | } 35 | 36 | server.begin_listen(); 37 | return 0; 38 | } -------------------------------------------------------------------------------- /XignCode Host/resource.hpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luciouskami/XignCode3Bypass/6f17d47608cab6d8a2099c66bcc4458b8b814f7c/XignCode Host/resource.hpp -------------------------------------------------------------------------------- /XignCode Host/resource.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luciouskami/XignCode3Bypass/6f17d47608cab6d8a2099c66bcc4458b8b814f7c/XignCode Host/resource.rc -------------------------------------------------------------------------------- /XignCode Host/server.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #pragma comment(lib, "ws2_32") 3 | 4 | #include "server.hpp" 5 | #include "session.hpp" 6 | 7 | #include 8 | 9 | namespace network 10 | { 11 | server::server() : sock(INVALID_SOCKET) 12 | { 13 | 14 | } 15 | 16 | server::~server() 17 | { 18 | if (this->sock != INVALID_SOCKET) 19 | { 20 | this->uninitialize(); 21 | } 22 | } 23 | 24 | bool server::initialize(unsigned short port) 25 | { 26 | if (WSAStartup(MAKEWORD(2, 0), new WSADATA)) 27 | { 28 | return false; 29 | } 30 | 31 | sock = socket(AF_INET, SOCK_STREAM, 0); 32 | 33 | if (this->sock == INVALID_SOCKET) 34 | { 35 | return false; 36 | } 37 | 38 | int opt = 1; 39 | if (setsockopt(this->sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&opt), sizeof(opt)) == SOCKET_ERROR) 40 | { 41 | return false; 42 | } 43 | 44 | sockaddr_in addr; 45 | addr.sin_family = AF_INET; 46 | addr.sin_port = htons(port); 47 | addr.sin_addr.s_addr = INADDR_ANY; 48 | std::fill(addr.sin_zero, addr.sin_zero + sizeof(addr.sin_zero), 0); 49 | 50 | if (bind(this->sock, reinterpret_cast(&addr), sizeof(sockaddr_in)) == SOCKET_ERROR) 51 | { 52 | return false; 53 | } 54 | 55 | if (listen(this->sock, SOMAXCONN) == SOCKET_ERROR) 56 | { 57 | return false; 58 | } 59 | 60 | return true; 61 | } 62 | 63 | bool server::uninitialize() 64 | { 65 | return (closesocket(this->sock) != SOCKET_ERROR && !WSACleanup()); 66 | } 67 | 68 | void server::begin_listen() 69 | { 70 | for (;;) 71 | { 72 | sockaddr_in sender; 73 | int len = sizeof(sockaddr_in); 74 | 75 | SOCKET desc = accept(this->sock, reinterpret_cast(&sender), &len); 76 | 77 | if (desc == INVALID_SOCKET) 78 | { 79 | continue; 80 | } 81 | 82 | timeval timeout = { SOCKET_TIMEOUT, 0 }; 83 | 84 | if (setsockopt(desc, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast(&timeout), sizeof(timeout)) != SOCKET_ERROR && 85 | setsockopt(desc, SOL_SOCKET, SO_SNDTIMEO, reinterpret_cast(&timeout), sizeof(timeout)) != SOCKET_ERROR) 86 | { 87 | session::get_instance().close(); 88 | session::get_instance().reset(desc, sender); 89 | 90 | if (!session::get_instance().handler()) 91 | { 92 | closesocket(desc); 93 | } 94 | } 95 | } 96 | } 97 | } -------------------------------------------------------------------------------- /XignCode Host/server.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace network 6 | { 7 | #define SOCKET_TIMEOUT 5 8 | 9 | class server 10 | { 11 | public: 12 | server(); 13 | ~server(); 14 | 15 | bool initialize(unsigned short port); 16 | bool uninitialize(); 17 | 18 | void begin_listen(); 19 | 20 | private: 21 | SOCKET sock; 22 | }; 23 | } -------------------------------------------------------------------------------- /XignCode Host/session.cpp: -------------------------------------------------------------------------------- 1 | #include "session.hpp" 2 | 3 | #include "XignCode.hpp" 4 | 5 | #include "../XignCode Library/XignReader.hpp" 6 | #include "../XignCode Library/XignWriter.hpp" 7 | 8 | namespace network 9 | { 10 | void session::close() 11 | { 12 | if (this->desc) 13 | { 14 | closesocket(this->desc); 15 | } 16 | } 17 | 18 | void session::reset(SOCKET desc, sockaddr_in const& sender) 19 | { 20 | this->desc = desc; 21 | this->sender = sender; 22 | } 23 | 24 | bool session::handler() 25 | { 26 | if (desc == INVALID_SOCKET) 27 | { 28 | return false; 29 | } 30 | 31 | try 32 | { 33 | printf("Connection received..\n"); 34 | 35 | unsigned char data[8192]; 36 | int size = this->e_read(data); 37 | 38 | if (!size) 39 | { 40 | return false; 41 | } 42 | 43 | XignReader reader(data, size); 44 | 45 | unsigned char buffer[512]; 46 | std::size_t buffer_size = 0; 47 | 48 | while (buffer_size = reader.fetch(buffer), buffer_size) 49 | { 50 | XignCode::_XignCode_heartbeat_callback_t callback = [](void* pointer, unsigned char* response_1, unsigned char* response_2, unsigned int size, int unknown) -> unsigned int 51 | { 52 | XignWriter writer; 53 | writer.write(reinterpret_cast(pointer)); 54 | writer.append(response_1, size); 55 | writer.append(response_2, size); 56 | 57 | session::get_instance().e_write(writer.get().data(), writer.get().size()); 58 | session::get_instance().close(); 59 | return 0; 60 | }; 61 | 62 | if (!XignCode::MakeResponse(buffer, buffer_size, callback)) 63 | { 64 | return false; 65 | } 66 | } 67 | 68 | return true; 69 | } 70 | catch (std::string& exception_string) 71 | { 72 | return false; 73 | } 74 | 75 | return true; 76 | } 77 | 78 | int session::e_read(unsigned char* buffer, std::size_t assumed_size) 79 | { 80 | unsigned short data_length = 0; 81 | int data_length_size = this->raw_read(reinterpret_cast(&data_length), sizeof(unsigned short)); 82 | 83 | if (!data_length_size || data_length_size != sizeof(unsigned short)) 84 | { 85 | return 0; 86 | } 87 | 88 | if (assumed_size && data_length != assumed_size) 89 | { 90 | return 0; 91 | } 92 | 93 | unsigned char data_buffer[16384]; 94 | 95 | for (int data_read = 0, offset = 0, data_to_read = data_length; data_to_read > 0; data_to_read -= data_read, offset += data_read) 96 | { 97 | data_read = this->raw_read(data_buffer + offset, data_to_read); 98 | 99 | if (!data_read || data_read == SOCKET_ERROR) 100 | { 101 | return 0; 102 | } 103 | } 104 | 105 | memcpy(buffer, data_buffer, data_length); 106 | return data_length; 107 | } 108 | 109 | bool session::e_write(unsigned char const* buffer, std::size_t size) 110 | { 111 | unsigned short data_length = static_cast(size); 112 | 113 | if (!this->raw_write(reinterpret_cast(&data_length), sizeof(unsigned short))) 114 | { 115 | return false; 116 | } 117 | 118 | unsigned char* data_buffer = new unsigned char[size]; 119 | memcpy(data_buffer, buffer, size); 120 | 121 | if (!this->raw_write(data_buffer, size)) 122 | { 123 | delete[] data_buffer; 124 | return false; 125 | } 126 | 127 | delete[] data_buffer; 128 | return true; 129 | } 130 | 131 | session::session() 132 | { 133 | 134 | } 135 | 136 | session::~session() 137 | { 138 | 139 | } 140 | 141 | int session::raw_read(unsigned char* buffer, std::size_t size) 142 | { 143 | int bytes_read = 0; 144 | 145 | do 146 | { 147 | bytes_read = recv(this->desc, reinterpret_cast(buffer), size, 0); 148 | } 149 | while (bytes_read == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK); 150 | 151 | if (bytes_read == 0 || bytes_read == SOCKET_ERROR) 152 | { 153 | return bytes_read; 154 | } 155 | else if (bytes_read < static_cast(size)) 156 | { 157 | int remaining_bytes_read = 0; 158 | 159 | do 160 | { 161 | remaining_bytes_read = recv(this->desc, reinterpret_cast(buffer + bytes_read), size - bytes_read, 0); 162 | } 163 | while (remaining_bytes_read == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK); 164 | 165 | if (remaining_bytes_read == 0 || remaining_bytes_read == SOCKET_ERROR) 166 | { 167 | return remaining_bytes_read; 168 | } 169 | 170 | bytes_read += remaining_bytes_read; 171 | } 172 | 173 | return bytes_read; 174 | } 175 | 176 | bool session::raw_write(unsigned char const* buffer, std::size_t size) 177 | { 178 | for (int data_sent = 0, offset = 0, data_to_send = size; data_to_send > 0; data_to_send -= data_sent, offset += data_sent) 179 | { 180 | data_sent = send(this->desc, reinterpret_cast(buffer) + offset, data_to_send, 0); 181 | 182 | if (data_sent == 0 || data_sent == SOCKET_ERROR) 183 | { 184 | return false; 185 | } 186 | } 187 | 188 | return true; 189 | } 190 | } -------------------------------------------------------------------------------- /XignCode Host/session.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | namespace network 9 | { 10 | class session 11 | { 12 | public: 13 | static session& get_instance() 14 | { 15 | static session instance; 16 | return instance; 17 | } 18 | 19 | void close(); 20 | void reset(SOCKET desc, sockaddr_in const& sender); 21 | 22 | bool handler(); 23 | 24 | int e_read(unsigned char* buffer, std::size_t assumed_size = 0); 25 | bool e_write(unsigned char const* buffer, std::size_t size); 26 | 27 | private: 28 | session(); 29 | ~session(); 30 | 31 | int raw_read(unsigned char* buffer, std::size_t size); 32 | bool raw_write(unsigned char const* buffer, std::size_t size); 33 | 34 | SOCKET desc; 35 | sockaddr_in sender; 36 | }; 37 | } -------------------------------------------------------------------------------- /XignCode Library/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | STATIC LIBRARY : XignCode Library Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this XignCode Library library project for you. 6 | 7 | No source files were created as part of your project. 8 | 9 | 10 | XignCode Library.vcxproj 11 | This is the main project file for VC++ projects generated using an Application Wizard. 12 | It contains information about the version of Visual C++ that generated the file, and 13 | information about the platforms, configurations, and project features selected with the 14 | Application Wizard. 15 | 16 | XignCode Library.vcxproj.filters 17 | This is the filters file for VC++ projects generated using an Application Wizard. 18 | It contains information about the association between the files in your project 19 | and the filters. This association is used in the IDE to show grouping of files with 20 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 21 | "Source Files" filter). 22 | 23 | ///////////////////////////////////////////////////////////////////////////// 24 | Other notes: 25 | 26 | AppWizard uses "TODO:" comments to indicate parts of the source code you 27 | should add to or customize. 28 | 29 | ///////////////////////////////////////////////////////////////////////////// 30 | -------------------------------------------------------------------------------- /XignCode Library/XignCode Library.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | {6D49CFBB-91A8-4DA6-AF5F-14AAFECA091D} 24 | Win32Proj 25 | XignCodeLibrary 26 | 27 | 28 | 29 | StaticLibrary 30 | true 31 | v120 32 | Unicode 33 | 34 | 35 | StaticLibrary 36 | false 37 | v120 38 | true 39 | Unicode 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | Level3 57 | Disabled 58 | WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) 59 | true 60 | 61 | 62 | Windows 63 | true 64 | 65 | 66 | 67 | 68 | Level3 69 | 70 | 71 | MaxSpeed 72 | true 73 | true 74 | WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) 75 | true 76 | 77 | 78 | Windows 79 | true 80 | true 81 | true 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /XignCode Library/XignCode Library.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {1969423e-ebff-4989-8ed8-9ff974f804c4} 6 | 7 | 8 | 9 | 10 | XignCode 11 | 12 | 13 | XignCode 14 | 15 | 16 | XignCode 17 | 18 | 19 | 20 | 21 | XignCode 22 | 23 | 24 | XignCode 25 | 26 | 27 | -------------------------------------------------------------------------------- /XignCode Library/XignDefs.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef _CRT_SECURE_NO_WARNINGS 4 | #define _CRT_SECURE_NO_WARNINGS 5 | #endif 6 | 7 | #include 8 | #include 9 | 10 | namespace XignCode 11 | { 12 | #define XIGNAPI __stdcall 13 | 14 | enum FUNCTION_DISPATCH_TYPE 15 | { 16 | FDT_INITIALIZE = 1, // 0x01 17 | FDT_UNINITIALIZE = 2, // 0x02 18 | 19 | FDT_START_SERVICE = 3, // 0x03 20 | FDT_STOP_SERVICE = 4, // 0x04 21 | 22 | FDT_MAKE_RESPONSE = 6, // 0x06 23 | 24 | FDT_SET_ERROR_CALLBACK = 22, // 0x16 25 | FDT_SET_OPTION = 26, // 0x1A 26 | }; 27 | 28 | typedef unsigned int (XIGNAPI* _XignCode_function_dispatch_t)(void** function_ptr, FUNCTION_DISPATCH_TYPE function_type); 29 | 30 | typedef unsigned int (XIGNAPI* _XignCode_heartbeat_callback_t)(void* pointer, unsigned char* response_1, unsigned char* response_2, unsigned int size, int unknown); 31 | typedef unsigned int (XIGNAPI* _XignCode_error_callback_t)(unsigned int error_code, unsigned int param_size, void* param, void* unknown); 32 | 33 | typedef BOOL (XIGNAPI* _XignCode_initialize_t)(const wchar_t* license_key, const wchar_t* xigncode_directory, int unknown); 34 | typedef BOOL (XIGNAPI* _XignCode_uninitialize_t)(); 35 | 36 | typedef BOOL (XIGNAPI* _XignCode_start_service_t)(); 37 | typedef BOOL (XIGNAPI* _XignCode_stop_service_t)(); 38 | 39 | typedef BOOL (XIGNAPI* _XignCode_make_response_t)(unsigned char* request, unsigned int size, _XignCode_heartbeat_callback_t response_callback, int unknown); 40 | typedef BOOL (XIGNAPI* _XignCode_set_error_callback_t)(_XignCode_error_callback_t error_callback, void* unknown); 41 | } -------------------------------------------------------------------------------- /XignCode Library/XignReader.cpp: -------------------------------------------------------------------------------- 1 | #include "XignReader.hpp" 2 | 3 | XignReader::XignReader(unsigned char* input, std::size_t size) 4 | : index(0), buffer(input, input + size) 5 | { 6 | 7 | } 8 | 9 | XignReader::~XignReader() 10 | { 11 | 12 | } 13 | 14 | std::size_t XignReader::fetch(unsigned char* output) 15 | { 16 | std::size_t size = this->read(); 17 | 18 | if (!size) 19 | { 20 | return 0; 21 | } 22 | 23 | if (!this->read_buffer(output, size)) 24 | { 25 | return 0; 26 | } 27 | 28 | return size; 29 | } 30 | 31 | 32 | std::vector& XignReader::get() 33 | { 34 | return this->buffer; 35 | } 36 | 37 | bool XignReader::read_buffer(unsigned char* buffer, std::size_t size) 38 | { 39 | if (!this->check_index(size)) 40 | { 41 | return false; 42 | } 43 | 44 | memcpy(buffer, this->buffer.data() + this->index, size); 45 | this->index += size; 46 | return true; 47 | } 48 | 49 | bool XignReader::check_index(std::size_t nSize) 50 | { 51 | return ((this->index + nSize) <= static_cast(this->buffer.size())); 52 | } -------------------------------------------------------------------------------- /XignCode Library/XignReader.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | class XignReader 9 | { 10 | public: 11 | XignReader(unsigned char* input, std::size_t size); 12 | ~XignReader(); 13 | 14 | std::size_t fetch(unsigned char* output); 15 | 16 | template 17 | T read(); 18 | 19 | std::vector& get(); 20 | 21 | private: 22 | bool read_buffer(unsigned char* buffer, std::size_t size); 23 | 24 | bool check_index(std::size_t nSize); 25 | 26 | std::size_t index; 27 | std::vector buffer; 28 | }; 29 | 30 | template 31 | T XignReader::read() 32 | { 33 | if (this->check_index(sizeof(T))) 34 | { 35 | this->index += sizeof(T); 36 | return *reinterpret_cast(this->buffer.data() + this->index - sizeof(T)); 37 | } 38 | 39 | return static_cast(0); 40 | } -------------------------------------------------------------------------------- /XignCode Library/XignWriter.cpp: -------------------------------------------------------------------------------- 1 | #include "XignWriter.hpp" 2 | 3 | XignWriter::XignWriter() 4 | { 5 | this->clear(); 6 | } 7 | 8 | XignWriter::~XignWriter() 9 | { 10 | this->clear(); 11 | } 12 | 13 | void XignWriter::clear() 14 | { 15 | this->appends = 0; 16 | this->buffer.clear(); 17 | } 18 | 19 | void XignWriter::append(unsigned char* input, std::size_t size) 20 | { 21 | this->write(size); 22 | this->write_buffer(input, size);; 23 | } 24 | 25 | std::vector& XignWriter::get() 26 | { 27 | return this->buffer; 28 | } 29 | 30 | void XignWriter::write_buffer(unsigned char* data, std::size_t size) 31 | { 32 | std::copy(data, data + size, std::back_inserter(this->buffer)); 33 | } -------------------------------------------------------------------------------- /XignCode Library/XignWriter.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | class XignWriter 9 | { 10 | public: 11 | XignWriter(); 12 | ~XignWriter(); 13 | 14 | void clear(); 15 | void append(unsigned char* input, std::size_t size); 16 | 17 | template 18 | void write(T input); 19 | 20 | std::vector& get(); 21 | 22 | private: 23 | void write_buffer(unsigned char* data, std::size_t size); 24 | 25 | std::size_t appends; 26 | std::vector buffer; 27 | }; 28 | 29 | template 30 | void XignWriter::write(T input) 31 | { 32 | unsigned char* temp_data = reinterpret_cast(&input); 33 | std::copy(temp_data, temp_data + sizeof(T), std::back_inserter(this->buffer)); 34 | } -------------------------------------------------------------------------------- /XignCode3 Bypass.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.21005.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XignCode Client", "XignCode Client\XignCode Client.vcxproj", "{48A6380E-2AD5-485F-A2D4-4E6F245321BC}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XignCode Host", "XignCode Host\XignCode Host.vcxproj", "{E8C68252-8308-4B45-A74B-028C8193ACCE}" 9 | EndProject 10 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XignCode Library", "XignCode Library\XignCode Library.vcxproj", "{6D49CFBB-91A8-4DA6-AF5F-14AAFECA091D}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Win32 = Debug|Win32 15 | Release|Win32 = Release|Win32 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {48A6380E-2AD5-485F-A2D4-4E6F245321BC}.Debug|Win32.ActiveCfg = Debug|Win32 19 | {48A6380E-2AD5-485F-A2D4-4E6F245321BC}.Debug|Win32.Build.0 = Debug|Win32 20 | {48A6380E-2AD5-485F-A2D4-4E6F245321BC}.Release|Win32.ActiveCfg = Release|Win32 21 | {48A6380E-2AD5-485F-A2D4-4E6F245321BC}.Release|Win32.Build.0 = Release|Win32 22 | {E8C68252-8308-4B45-A74B-028C8193ACCE}.Debug|Win32.ActiveCfg = Debug|Win32 23 | {E8C68252-8308-4B45-A74B-028C8193ACCE}.Debug|Win32.Build.0 = Debug|Win32 24 | {E8C68252-8308-4B45-A74B-028C8193ACCE}.Release|Win32.ActiveCfg = Release|Win32 25 | {E8C68252-8308-4B45-A74B-028C8193ACCE}.Release|Win32.Build.0 = Release|Win32 26 | {6D49CFBB-91A8-4DA6-AF5F-14AAFECA091D}.Debug|Win32.ActiveCfg = Debug|Win32 27 | {6D49CFBB-91A8-4DA6-AF5F-14AAFECA091D}.Debug|Win32.Build.0 = Debug|Win32 28 | {6D49CFBB-91A8-4DA6-AF5F-14AAFECA091D}.Release|Win32.ActiveCfg = Release|Win32 29 | {6D49CFBB-91A8-4DA6-AF5F-14AAFECA091D}.Release|Win32.Build.0 = Release|Win32 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | EndGlobal 35 | --------------------------------------------------------------------------------