在未初始化数据段(bss)解密数据.ollvm yag00的实现是解密到栈上,Armariris,Hikari都是在数据段原地还原.如对字符串数组的处理

static const char * const const_string_array[] = {"aaa", "bbb", "ccc"};

我处理后

static char dec_aaa[4], dec_bbb[4], dec_ccc[4]; // 解密后的"aaa", "bbb", "ccc"

static char *dec_const_string_array[3]; // 解密后的const_string_array

static void __global_variable_initializer_const_string_array(char *dec_const_string_array[])

{

// ...

// 解密"aaa", "bbb", "ccc"到dec_aaa, dec_bbb, dec_ccc

// 开始初始化dec_const_string_array

dec_const_string_array[0] = dec_aaa;

dec_const_string_array[1] = dec_bbb;

dec_const_string_array[2] = dec_ccc;

}

对结构体数组处理类似.

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐