5
5
#ifndef NDEBUG
6
6
#include < include/capi/cef_urlrequest_capi.h>
7
7
#endif
8
-
9
8
/*
10
9
*
11
10
* Black banner still show even libcef hooked.
@@ -29,7 +28,7 @@ static _cef_urlrequest_create cef_urlrequest_create_orig;
29
28
static _cef_string_userfree_utf16_free cef_string_userfree_utf16_free_orig;
30
29
31
30
static constexpr auto block_list = { L" /ads/" , L" /ad-logic/" , L" /gabo-receiver-service/" };
32
-
31
+ // static constexpr char search_str[] = {0x61,0x70,0x70,0x2D,0x64,0x65,0x76,0x65,0x6C,0x6F,0x70,0x65,0x72,0x09,0x01,0x30,0x78};
33
32
34
33
DWORD WINAPI get_url (DWORD pRequest)
35
34
{
@@ -86,6 +85,52 @@ void* cef_urlrequest_create_hook(void* request, void* client, void* request_cont
86
85
return cef_urlrequest_create_orig (request, client, request_context);
87
86
}
88
87
88
+
89
+ // https://www.unknowncheats.me/forum/1064672-post23.html
90
+ bool DataCompare (BYTE* pData, BYTE* bSig, const char * szMask)
91
+ {
92
+ for (; *szMask; ++szMask, ++pData, ++bSig)
93
+ {
94
+ if (*szMask == ' x' && *pData != *bSig)
95
+ return false ;
96
+ }
97
+ return (*szMask) == NULL ;
98
+ }
99
+
100
+ BYTE* FindPattern (BYTE* dwAddress, const DWORD dwSize, BYTE* pbSig, const char * szMask)
101
+ {
102
+ DWORD length = strlen (szMask);
103
+ for (DWORD i = NULL ; i < dwSize - length; i++)
104
+ {
105
+ __try
106
+ {
107
+ if (DataCompare (dwAddress + i, pbSig, szMask))
108
+ return dwAddress + i;
109
+ }
110
+ __except (EXCEPTION_EXECUTE_HANDLER) {
111
+ return nullptr ;
112
+ }
113
+ }
114
+ return 0 ;
115
+ }
116
+
117
+ int FindPattern2 (BYTE* dwAddress, const DWORD dwSize, BYTE* pbSig, const char * szMask)
118
+ {
119
+ DWORD length = strlen (szMask);
120
+ for (DWORD i = NULL ; i < dwSize - length; i++)
121
+ {
122
+ __try
123
+ {
124
+ if (DataCompare (dwAddress + i, pbSig, szMask))
125
+ return i;
126
+ }
127
+ __except (EXCEPTION_EXECUTE_HANDLER) {
128
+ return 0 ;
129
+ }
130
+ }
131
+ return 0 ;
132
+ }
133
+
89
134
DWORD WINAPI KillBanner (LPVOID)
90
135
{
91
136
constexpr auto libcef_str{ L" libcef.dll" };
@@ -104,6 +149,42 @@ DWORD WINAPI KillBanner (LPVOID)
104
149
result ? g_Logger.Log (L" main process - patch success!" ) : g_Logger.Log (L" main process - patch failed!" );
105
150
}
106
151
}
107
-
108
152
return 0 ;
109
153
}
154
+
155
+ DWORD WINAPI Developer (LPVOID)
156
+ {
157
+ if (true == g_Logger.read (L" Config" , L" Developer" )) {
158
+ auto appdata = std::getenv (" APPDATA" );
159
+ std::filesystem::path file{ appdata };
160
+ file = file.parent_path ();
161
+ file /= " Local\\ Spotify\\ offline.bnk" ;
162
+ std::fstream offline_bnk;
163
+ offline_bnk.open (file, std::ios::in | std::ios::out | std::ios::binary);
164
+ if (true == offline_bnk.is_open ()) {
165
+ const auto length = std::filesystem::file_size (file);
166
+ if (length > 0 )
167
+ {
168
+ char * temp_buffer = new char [length];
169
+ offline_bnk.rdbuf ()->sgetn (temp_buffer, length);
170
+ auto developer = FindPattern2 ((uint8_t *)temp_buffer, length,
171
+ (BYTE*)" \x61\x70\x70\x2D\x64\x65\x76\x65\x6C\x6F\x70\x65\x72\x09\x01\x30\x78 " ,
172
+ " xxxxxxxxxxxxxxxxx" );
173
+ // app-developer \x09 \x01 \x30 \x78 -> app-developer(\t\x01)00x
174
+ if (developer) {
175
+ offline_bnk.seekp (developer + 15 );
176
+ offline_bnk << char (0x32 );// 00x -> 02x
177
+ g_Logger.Log (L" offline.bnk modified!" );
178
+ }
179
+ else {
180
+ g_Logger.Log (L" offline.bnk not modified!" );
181
+ }
182
+ delete[] temp_buffer;
183
+ }
184
+ }
185
+ else {
186
+ g_Logger.Log (L" offline.bnk not exists/access denied!" );
187
+ }
188
+ }
189
+ return 0 ;
190
+ }
0 commit comments