Contents

Brute Ratel C4 Keygen

Contents

文章发布至看雪《Brute Ratel C4 Keygen》

分析

Brute Ratel C4简称brc4,一款C2工具,功能和CobaltStrike差不多,界面花里胡哨,用了不少开源黑科技,据作者说前段时间被竞争对手Mdsec泄露到VT,然后又被老毛破解了…公布的版本是v1.2.2,给的license文件只支持到2023-01-01,于是打算抽空看看作者是怎么保护的。

先看目录结构:

/posts/2022/brute-ratel-c4-keygen/res/1.jpg

包只支持linux,可在ubuntu上自测,界面是Qt写的,commander-runme是运行脚本,.brauth是license,brute-ratel-linx64是server,启动会进行license验证。

启动参数:./brute-ratel-linx64 -ratel -a admin -p 123456 -h 127.0.0.1:8443 -sc cert.pem -sk key.pem

先扫一下如图:

/posts/2022/brute-ratel-c4-keygen/res/2.jpg

可知server是Go写的,正好试下ida 7.7解析metadata,发现没识别到,搜了字符串发现是1.18,ida8.0(https://hex-rays.com/products/ida/news/8_0/)才支持。

/posts/2022/brute-ratel-c4-keygen/res/3.jpg

后面用了下0xjiayu兄弟的go_parser,正好支持到1.18,问题不大,把符号贴上去后就感觉没什么玩的了。

看了看逻辑:

main_main
  main_product_info
    stat //判断.brauth文件是否存在
    if (flase) 
      main_validate_activation_key //从服务端校验激活key,生成.brauth
    main_DecryptBlob //关键解密.brauth
      main_KeyExpansion //密钥扩展128
      main_decryptmsg //xAES解密轮函数

xxxAES轮函数:

  AddRoundKey(10, state, RoundKey); 
  InvShiftRows(state);
  InvSubBytes(state);
  for (round = 9; round > 0; --round)
  {
    InvShiftRows(state);
    AddRoundKey(round, state, RoundKey);
    ShiftRows(state);
    InvMixColumns(state);
    InvShiftRows(state);
    InvSubBytes(state);
  }
  MixColumns(state);
  AddRoundKey(0, state, RoundKey);

开始以为作者留了小动作,上linux_server远程调试确认下密钥扩展的结果,结果只是轮函数简单改了改-。-

KeyGen

再看下license结构:

加密前:01-01-2000:01-01-3000:YourLicense:foo@foo.com:Just 4 fun
格式:start:expired:type:email:note
加密后:v8l7HAP1rnsFZLwL:k9eYKc+dzgi/ybsVCfgVowQwS3Nufd1NdooFsXKPvxgDRE2pWVlTPPRyjcB9vqeaqFC4Mgj/Nv8Qq7+QvixxoQ==
格式:key:base64(xxxAES_ECB(data))

最后附上一个keygen,有兴趣的可以玩玩…

/posts/2022/brute-ratel-c4-keygen/res/4.jpg