首页
论坛
课程
招聘
[原创]开源llvm字符串加密pass
2019-10-26 21:10 3150

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

2019-10-26 21:10
3150

最近在研究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


看雪社区年底排行榜,查查你的排名?

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