├── .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 |
--------------------------------------------------------------------------------