首页
社区
课程
招聘
[原创]开源llvm字符串加密pass
发表于: 2019-10-26 21:10 15909

[原创]开源llvm字符串加密pass

2019-10-26 21:10
15909

最近在研究llvm,实现了个字符串加密pass,有兴趣的大佬可以试试.
相对于当前开源实现,我方案有如下改进

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

    对结构体数组处理类似.

  • 类似ollvm中yag00的实现,在使用时才解密.Armariris在库构造函数里面还原,Hikari则是在函数入口.如

    static void print_string(int idx)
    {
      if (idx >= 0 && idx < 3) {
          puts(const_string_array[i]);
      } else {
          puts("index out of range");
      }
    }
    

    我处理后

    static void print_string(int idx)
    {
      if (idx >= 0 && idx < 3) {     __global_variable_initializer_const_string_array(dec_const_string_array); //重建const_string_array
          puts(dec_const_string_array[i]); //使用解密后的dec_const_string_array
      } else {
          // 该分支会解密"index out of range";由于没有使用const_string_array数组,不会解密const_string_array.
          puts("index out of range");
      }
    }
    

项目地址goron
欢迎star,提issue,pr


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-10-27 11:09 被krash编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 6369
活跃值: (1693)
能力值: ( LV4,RANK:156 )
在线值:
发帖
回帖
粉丝
2
msvc编译了大半天,看了下效果不错~
2019-10-29 15:41
0
雪    币: 3818
活跃值: (4233)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
使用如果使用全都处理完的话,效果还是很好的.没有的话会存在一份明文副本.而Armariris基本上可以确保没有明文.
2019-10-29 19:47
0
雪    币: 1519
活跃值: (2127)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
4
-mllvm -irobf-indgv 这个选项应该是有问题的,添加后会出现无法解析外部符号的问题
ide:vs 2019 llvm版本 10.0
2020-4-23 22:23
0
雪    币: 3818
活跃值: (4233)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
Chords -mllvm -irobf-indgv 这个选项应该是有问题的,添加后会出现无法解析外部符号的问题 ide:vs 2019 llvm版本 10.0
我升级的时候会打开所有混淆,测试libcurl和coreutils的所有测试用例,基本功能是可以保证的。这个应该是BUG,方便的话提供样本我看下。
2020-4-24 21:52
0
雪    币: 1519
活跃值: (2127)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
6
krash 我升级的时候会打开所有混淆,测试libcurl和coreutils的所有测试用例,基本功能是可以保证的。这个应该是BUG,方便的话提供样本我看下。
需要什么样本
2020-4-25 01:41
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
goron可不可以指定函数混淆,咋设置
2022-2-17 17:15
0
游客
登录 | 注册 方可回帖
返回
//