Я установил общую библиотеку libgcrypt. Файл libgcrypt.so создан.
Он имеет некоторые данные только для чтения.
./configure ( without -g option for debug symbol)
make installstatic const u32 encT[256] =
{
0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
...
}
static const struct
{
u32 T[256];
byte inv_sbox[256];
} dec_tables =
{
{
0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
.....},
{
0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38,
0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb,
0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87,
.....
}
}
Используя команду nm, я могу найти смещение данных только для чтения.
nm /usr/lib/libgcrypt.so | grep encT
0008ffc0 r encT
nm /usr/lib/libgcrypt.so | grep dec_tables
0008fac0 r dec_tables
Я хочу получить доступ к этим данным только для чтения из программы C / C ++.
//sample.c
// gcc sample.c -lgcrypt
#include <gcrypt.h>
int main()
{
// ADDRESS of encT[0] = ? + OFFSET (0008ffc0)
//print value of encT[0] as 0xa56363c6
// ADDRESS of dec_tables.T[0] = ? + OFFSET (0008fac0)
//print value of dec_tables.T[0] as 0x50a7f451
//print value of dec_tables.inv_sbox[0] as 0x52
}
У меня есть следующие вопросы
Как использовать эти смещения для доступа к данным только для чтения (encT,
dec_tables.T, dec_tables.inv_sbox) из программы на C?
2. Есть ли другой способ найти АДРЕС в encT, dec_tables.T, dec_tables.inv_sbox?
РЕДАКТИРОВАТЬ-1:
глобальная (extern) функция, gcry_cipher_decrypt () используется для выполнения дешифрования и вызывает static do_decrypt -> static do_decrypt_fn (), которая использует dec_tables.T, dec_tables.inv_sbox. Таким образом, можно найти АДРЕС dec_tables.T, dec_tables.inv_sbox относительно адреса
gcry_cipher_decrypt?
Я использую gcc-4.9, Ubuntu 16.04.
Будет ли большая помощь, если кто-нибудь поможет мне завершить приведенный выше пример программы или любую ссылку, чтобы понять, как я могу это сделать? Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …