@@ -325,6 +325,9 @@ int codecaves_apply(json_t *codecaves) {
325
325
size_t codecave_count = 0 , codecaves_total_size = 0 ;
326
326
327
327
json_object_foreach (codecaves, codecave_name, hack) {
328
+ if (strcmp (codecave_name, " protection" ) == 0 ) {
329
+ continue ;
330
+ }
328
331
const char * code = json_string_value (hack);
329
332
if (!code) {
330
333
continue ;
@@ -340,6 +343,10 @@ int codecaves_apply(json_t *codecaves) {
340
343
BYTE *current_cave = codecave_buf;
341
344
342
345
json_object_foreach (codecaves, codecave_name, hack) {
346
+ if (strcmp (codecave_name, " protection" ) == 0 ) {
347
+ continue ;
348
+ }
349
+
343
350
const char *code = json_string_value (hack);
344
351
if (!code) {
345
352
continue ;
@@ -358,7 +365,14 @@ int codecaves_apply(json_t *codecaves) {
358
365
// Second pass: Write all of the code
359
366
current_cave = codecave_buf;
360
367
368
+ DWORD codecave_protection = 0 ;
369
+
361
370
json_object_foreach (codecaves, codecave_name, hack) {
371
+ if (strcmp (codecave_name, " protection" ) == 0 ) {
372
+ codecave_protection = json_object_get_hex (codecaves, codecave_name);
373
+ continue ;
374
+ }
375
+
362
376
const char * code = json_string_value (hack);
363
377
if (!code) {
364
378
continue ;
@@ -372,7 +386,11 @@ int codecaves_apply(json_t *codecaves) {
372
386
}
373
387
374
388
DWORD old_prot;
375
- VirtualProtect (codecave_buf, codecaves_total_size, PAGE_EXECUTE_READ, &old_prot);
389
+ if (codecave_protection == 0 ) {
390
+ codecave_protection = PAGE_EXECUTE_READ;
391
+ }
392
+
393
+ VirtualProtect (codecave_buf, codecaves_total_size, codecave_protection, &old_prot);
376
394
377
395
return 0 ;
378
396
}
0 commit comments