在未初始化数据段(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

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐