AlgoSec破解license

xiaoxiao2021-02-27  322

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,

转载请注明原文地址: https://www.6miu.com/read-4683.html

最新回复(0)