AlgoSec破解license

AlgoSec是防火墙规则审计的好工具。但是其license奇贵无比,一个防火墙的license动辄几万人民币。所以如果想试用的话,需要进行破解。

1. 查找关键文件

一开始我也不知道破解的入口在哪里。大胆猜测,在服务器上以关键字license和lic进行查找,发现了以下文件:/usr/share/fa/bin/install_lic_cli。运行一下,结果为:

[root@localhost afa]# /usr/share/fa/bin/install_lic_cli
Error: Please provide license file.
Usage: install_lic_cli -file

看来这个就是安装license的程序,查看一下,发现已经被加密了:

[root@localhost afa]# cat /usr/share/fa/bin/install_lic_cli
#!/usr/bin/perl
use algoenc;
b畞疙}Rb纄J屒忲v甗U慥皳eEu{侮卍慸线yG销I踹r龠睭榝3圲u熓曕龢碥[臙鷔蜹窾兞”敨翡迧bx砍[x潚’f雪in纍 [W瓘〉fb蹃!$襣羒z綅澋.瘱鏦闻B唼遫w齙iik鶤1……

是否加密了我们就无计可施了呢?并不是的,这是一个perl脚本,而perl具有调试功能,从而让我们看到解密后的程序。调试时,n为单步运行,s为步入函数内部,q为退出。
随便写一个文件作为license,单步运行到第52、53行时发现:

[root@localhost afa]# perl -d /usr/share/fa/bin/install_lic_cli -file test.lic
……
main::(/usr/share/fa/bin/install_lic_cli:52):
52: my $fa_server = FwaUtil::which_script(“fa_server”);
DB<1> n
main::(/usr/share/fa/bin/install_lic_cli:53):
53: my $sCMD = “$fa_server -f LICENSE install $lic_path”;

查找了一下,服务器上确实有fa_server这个文件。这还是一个加密了的perl脚本,单步运行一下就发现:

[root@localhost afa]# perl -d /usr/share/fa/bin/fa_server -f LICENSE install test.lic
……
FwaLic::CODE(0xa0dbab8)(/usr/share/fa/perl_lib/FwaLic.pm:78):

查看一下FwaLic.pm,这次没有加密。代码比较多就不贴了,关键有两点:

  • 这一行,校对fa_usage这个文件的MD5:

    %md5sig = ( fa_usage => ‘1ef898e850586874af2d37405b5561b9’,

  • 这几行,说明fa_usage就是用来验证和安装license的:

    # check if defined a license file name (= it was sent)
    # then we will send it to fa_usage with -v to check
    # that given license file name is valid
    if (defined $license_file_name)
    {
    $lic_param = “-v $license_file_name”;
    }

再查看一下,发现fa_usage是一个二进制文件,因此关键在于如何破解该文件。

2. 反编译寻找绕过方式

反编译Linux文件可以用objdump,我们把概要信息和完整的反编译结果都生成出来:

objdump -x /usr/share/fa/bin/fa_usage > fa_usage_info.txt
objdump -D /usr/share/fa/bin/fa_usage > fa_usage.txt

注意fa_usage_info.txt中的SYMBOL TABLE,摘选如下:

80502e9 g F .text 00000177 lic_sign_file_internal
0804fe86 g F .text 000000ce lic_load_file_to_ctx
0804b82d g F .text 000000ff allow_init_license
0804fd0e g F .text 00000178 lic_parse_file_stream
0804dcef g F .text 00000091 lic_print_error
08050460 g F .text 00000029 lic_sign_file
0804ff54 g F .text 00000294 copy_and_sign_file
0804db83 g F .text 00000095 lic_free_ctx
0804d078 g F .text 0000004d lfalic
0804de40 g F .text 000001ae lic_check
0804c48d g F .text 00000564 write_lic_ids
0804f6ca g F .text 0000022a lic_parse_key_value
0804dde4 g F .text 0000005a lic_perror
0804dac0 g F .text 000000c3 lic_alloc_ctx
0804bdf9 g F .text 00000385 check_ids_validity
0804e52a g F .text 0000020d lic_print_ctx
0804dd80 g F .text 00000064 lic_println_error
0804bc42 g F .text 00000119 install_license
0804dfee g F .text 0000011b lic_check_basic
0804f55d g F .text 0000016d parse_license_info
0804dc18 g F .text 000000d7 lic_strerror_r
0804ef16 g F .text 000001bf parse_sign
0805258c g O .bss 00000004 full_license_name
08050489 g F .text 00000029 lic_sign_file_forced
0804bb9f g F .text 000000a3 get_lic_path
0804d0c5 g F .text 000002c6 lfalic_lic
0804c17e g F .text 0000030f read_lic_ids
0804f8f4 g F .text 0000035a lic_parse_line
0804b92c g F .text 00000273 check_license_date
0804993f g F .text 0000039a print_license
0804f28e g F .text 000000c5 parse_issued
0804e109 g F .text 000000ab lic_check_mac_address
080504b2 g F .text 000000cf lic_validate_signature

这里就是fa_usage中的各个子函数及其入口地址,带lic字样的就是和license相关的。我们在fa_usage.txt中查看这些函数的反编译结果,就能找到破解方法。
假如你看过我之前的一篇文章X-Pack破解试用就知道,一般license文件都会带签名,我们只要能绕过验签环节,就能以最小的改动进行破解。于是,lic_validate_signature这个函数吸引了我的注意力。我猜测这个函数就是比对license签名和根据license计算出的签名的函数。根据反编译结果,一个返回值是$0x0,另一个是$0x16。我们不妨假设$0x0表示一致,使其始终返回$0x0。如果猜错了,使其始终返回$0x16即可。

3. 破解

这部分涉及的汇编语句为:

8050562: c7 45 ec 16 00 00 00 movl $0x16,0xffffffec
8050569: eb 11 jmp 805057c
805056b: 83 45 fc 01 addl $0x1,0xfffffffc
805056f: 83 7d fc 01 cmpl $0x1,0xfffffffc
8050573: 7e d5 jle 805054a
8050575: c7 45 ec 00 00 00 00 movl $0x0,0xffffffec
805057c: 8b 45 ec mov 0xffffffec,%eax
805057f: c9 leave
8050580: c3 ret

注意8050562和8050575两行,对应的十六进制值为c7 45 ec 16 00 00 00c7 45 ec 00 00 00 00。我们将fa_usage用十六进制编辑器打开,例如Notepad++的插件HexEditor。然后查找c7 45 ec 16 00 00 00,通过上下文确认无误,将其改为c7 45 ec 00 00 00 00,保存即可。
用破解后的fa_usage替换原文件,用破解后fa_usage的新MD5值替换FwaLic.pm中的旧MD5值。然后再准备一个狂拽酷炫吊炸天的license文件:

LICENSE_VER=7.0
EXP_DATE=15-sep-2017
HOSTID=E505250101F7
ISSUER=root
ISSUED=01-May-2017
LICENSE_INFO1=PerFW;3;mvpboss1004;88888888
LICENSE_INFO2=Core;Optimization;Risk
SIGN=1234567890abcdef

这就是一个licenseID为88888888、可用于3个防火墙、于2017年9月1日到期、授予mvpboss1004的license。注意这里HOSTID要改为服务器的MAC地址,ISSUED不要离当前日期超过5天。

5. 升级注意事项

显然,升级后需要重新破解。除此之外还需要以下操作:

  • 破解完后要重启服务,或直接重启系统;
  • 要重新导入license,其中licenseID和SIGN要改的和原来不一样,ISSUED要改成当天时间
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值