Как изменить строки в разделе rdata исполняемого файла?


1

Я программист и имею приложение (исполняемый файл, который может быть скомпилирован из источника C++).

Он имеет rdata раздел (раздел данных только для чтения), которые включают много (несколько тысяч) строк пользовательского интерфейса приложения, и я хочу изменить эти строки так, что после изменений, соответствующий исполняемый файл может выполняться без ошибок (источник недоступен).

enter image description here

Приложение имеет 32 и 64 битные версии.

Мне нужно изменить строки в разделе rdata без повреждения исполняемого файла.

Например меняющегося подсвеченный раздел: enter image description here

  • возможно ли это?
  • Что такое Правильные шаги и Лучшие инструменты тоже изменить эти строки и создать новый файл exe?

Просьба посоветуйте мне инструменты и дополнительные ссылки на учебные пособия, если это возможно в вашем ответе и комментариях.


Update:

Новые строки на разных языках и имеют различные длины с длиной основных строк и я должен изменить многие строки в rdata.

Платформа: Windows 8.1

  0

если они ресурсы пытаются ResHacker по Ангус Джонсон 18 ноя. 172017-11-18 06:25:17

  0

@blabb, я знакомы с изменением ресурсов исполняемых файлов, но, как я сказал, эти строки не являются ресурсом, и какое-то приложение, такое как хакер ресурсов, не показывает их. Они находятся внутри раздела 'rdata', и я должен изменить' rdata', не повреждая исполняемый файл. Я нахожу правильные шаги и полезные инструменты для этого. 18 ноя. 172017-11-18 13:32:32

  0

Для строк одинаковой длины вы можете напрямую исправить из шестнадцатеричного редактора, такого как ghex в Ubuntu. Для более коротких строк с \ x00 с одинаковой длиной. 18 ноя. 172017-11-18 13:52:53

  0

@blabb, я уточнил вопрос с некоторыми изображениями и ... Пожалуйста, прочитайте его. 18 ноя. 172017-11-18 13:57:40

  0

@sudhackar, Спасибо за ваш ответ. Моя платформа - 'Windows', а новые строки - на другом языке с разной длиной. 18 ноя. 172017-11-18 13:59:15

2

это жесткая и трудоемкая задача и полностью ошибки

предполагается, что вы этот код компилируется и выполняется первая строка будет иметь 68 нажимной опкод и вторая строка будет иметь форточный код FF35 и строки.RDATA раздел

#include <windows.h> 
const char mystr1[] = "mystr1"; 
const char *mystr2 = "mystr2"; 
void main(void) { 
    MessageBoxA(0,mystr2,mystr1,0); 
} 

, как показано ниже

|   0x00401000  6a00   push 0 
|   0x00401002  6810204000  push str.mystr1 
|   0x00401007  ff3500304000 push dword [0x403000] 
|   0x0040100d  6a00   push 0 
|   0x0040100f  ff1500204000 call dword [sym.imp.USER32.dll_MessageBoxA] 
|   0x00401015  33c0   xor eax, eax 
\   0x00401017  c3    ret 

проверки строки

[0x00401000]> ps @0x402010 
mystr1 
[0x00401000]> pv @0x403000 
0x00402018 
[0x00401000]> ps @0x402018 
mystr2 

вы можете использовать некоторые инструменты, такие как CFF_Explorer iidking и т.д., чтобы добавить раздел

radare2 также добавляет но я не мог уговорить его написать раздел . эр

Comparing files rdata.exe and RDATA1.EXE 
000000C6: 04 05 
00000111: 50 60 
000001C0: 1E 00 
000001C1: 00 10 
000001E8: C2 00 
000001E9: 01 10 
00000210: 04 00 
00000211: 00 10 
00000238: 1C 00 
00000239: 00 10 
00000258: 00 2E 
00000259: 00 6A 
0000025A: 00 73 
0000025B: 00 74 
00000260: 00 80 
00000265: 00 50 
00000269: 00 02 
0000026D: 00 0C 
0000027F: 00 40 
00000800: 18 00 
00000801: 20 50 
FC: RDATA1.EXE longer than rdata.exe 

новая строка в новой секции следующим

:\>xxd -s 0xc00 -l 0x60 rdata1.exe 
0000c00: 8341 838a 8347 838b 82f0 8e67 82c1 82c4 .A...G.....g.... 
0000c10: 8376 838d 8379 838d 82c9 82e6 82c1 82c4 .v...y.......... 
0000c20: 9755 9866 82b3 82ea 82bd 9792 82cd 8141 .U.f...........A 
0000c30: 837e 8389 8393 835f 82aa 88a4 82f0 91cc .~....._........ 
0000c40: 8cb1 82c5 82ab 82e9 82e6 82a4 82c9 82b7 ................ 
0000c50: 82e9 0000 0000 0000 0000 0000 0000 0000 ................ 

модификация на 0x800, 0x801 в дифф выше является перенаправление этой строки

теперь, если вы выполняете это, вы получите талисману

вам может потребоваться установить системный языковой стандарт или приложение, которое теперь прекращено, например applocale.applet с помощью базы данных прокладки appcompat для подключения и взлома Unicode ch aracters

сделать это, если это ваша чашка чая :) (попробуйте перевести сообщение MessageBox для освежения)

enter image description here

  0

Вы использовали nul символ в строке? и вы проверили, что он закодирован в ascii? 27 ноя. 172017-11-27 13:56:33

  0

@idle sorry Я не могу понять ваш комментарий 27 ноя. 172017-11-27 17:41:55

  0

Это потому, что форматирование строк не выглядит ascii вообще, больше похоже на UTF-16. 27 ноя. 172017-11-27 17:45:02

  0

@idle я никогда не упоминал ascii в своей демонстрации, я говорю unicode или, скорее, широкий массив символов букв на неанглийском языке 27 ноя. 172017-11-27 17:49:31