CN102789417B - 一种移动智能终端上的定向符号执行程序检测系统及方法 - Google Patents

一种移动智能终端上的定向符号执行程序检测系统及方法 Download PDF

Info

Publication number
CN102789417B
CN102789417B CN201210200544.3A CN201210200544A CN102789417B CN 102789417 B CN102789417 B CN 102789417B CN 201210200544 A CN201210200544 A CN 201210200544A CN 102789417 B CN102789417 B CN 102789417B
Authority
CN
China
Prior art keywords
path
program
symbolism
execution
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201210200544.3A
Other languages
English (en)
Other versions
CN102789417A (zh
Inventor
龚晓锐
杨广亮
韩心慧
邹维
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Peking University filed Critical Peking University
Priority to CN201210200544.3A priority Critical patent/CN102789417B/zh
Publication of CN102789417A publication Critical patent/CN102789417A/zh
Application granted granted Critical
Publication of CN102789417B publication Critical patent/CN102789417B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提出一种移动智能终端上定向符号执行程序检测系统及方法,在符号化处理模块、系统API模拟模块、定向控制模块、过滤执行模块组成的环境中,1)载入待检测程序路径,由符号化处理模块对待检测程序路径中指令进行符号化处理,将处理结果存储到符号表SymbolicTable;2)根据待检测路径,确定被检测代码空间;3)根据执行过程记录所述变量执行约束条件,SymbolicTable更新记录;4)根据符号表SymbolicTable中约束条件找到对应的结果表达式或符号数值,判断程序中是否有可执行路径,5)反复1)—4),遍历程序中所有可达路径,完成软件中嫌疑操作检测。本发明的定向符号执行方法,与静态分析技术结合,解决程序分析中路径漏报和误报,提取出路径约束能够覆盖到所有可能的路径。

Description

一种移动智能终端上的定向符号执行程序检测系统及方法
技术领域
本发明属于计算机应用技术领域,涉及移动智能终端上的计算程序检测技术,具体涉及采用基于符号执行的移动智能终端计算机程序检测技术。
背景技术
随着移动互联网的快速发展和智能手机的逐渐普及,各种各样的智能手机应用软件已开始影响到人们工作和生活的方方面面,例如:手机游戏软件,移动SNS软件,移动IM软件,移动支付软件和移动定位服务软件等等。目前,智能手机操作系统主要的两大阵营是Apple公司的iOS系统和Google公司的Android系统,两个系统都提供应用商店或电子市场,使得终端用户能够很容易下载到大量软件安装在手机上使用。
然而,由于免费模式的兴起,导致移动智能终端的软件开发者在寻找盈利模式方面出现了分化,大部分开发者不再依赖收费下载模式,而是转向广告模式或者其他更加间接的方式来获取利益,其中一些对用户的隐私构成了严重威胁。一方面,随着近几年来地下经济链的形成和发展,个人信息买卖已在地下市场逐步成熟,移动智能终端由于得天独厚的地位,承载了大量用户信息,在地下市场拥有很高的利用价值;另一方面,移动智能终端拥有便利的通讯信道,很容易就能把信息上传到外部服务器上。上述便利条件及利益的趋势,导致部分开发者在免费提供软件的同时,在移动智能终端的应用中加入了收集用户信息的代码,通过网络或其他途径将用户信息窃取出来。由于这些操作非常隐蔽,用户通常无法察觉。
对于这些隐蔽性操作,目前有效的检测方法是采用程序分析来发现它们。在静态程序检测方法中,可以通过程序路径分析来找到这些隐蔽的执行路径,但这种采用静态分析找到的路径只是一种可能,也就是说这只是一条嫌疑路径,该路径是否可达、执行过程中的约束条件是什么,都是未知的。对这种嫌疑路径的确认,一种方法是采用人工调试执行的方式;另一种方法是采用符号执行的方式。符号执行在桌面平台上已较为成熟,但移动智能终端上的应用还不常见,主要原因是平台的特性不同,相应实现方法也需要进行变化。
传统的符号执行往往采用路径遍历的方法进行检测,这会面临路径爆炸问题。对于该问题的处理通常体现在对分支语句的处理问题上。对分支语句的传统的处理方式一般为:随机选择一条分支语句执行;或是fork当前进程,一条进程运行分支条件为true的分支代码,而另外一条则运行分支条件为false的分支代码。前一种方法往往测试代码覆盖率比较低;后二种方法则会导致进程数过多,而智能手机的CPU、内存等资源往往又不充裕,这样往往造成进程执行效率不高,进而严重影响检测效率,该方法在手机平台上并不实用。
发明内容
本发明提出一种定向符号执行的方法,目的是采用符号执行方法来验证静态分析或其他方法所找到的嫌疑路径是否真实存在,即是否可达。收集、求解出执行该路径所需的约束条件,即相关变量的取值范围。从而确认目标软件是否具有嫌疑操作。
为达到上述目的,本发明提出一种针对移动智能终端应用软件的定向符号执行程序检测方法,提取若干待检测程序路径,设置所述检测程序路径的结束点,其步骤包括:
1)载入一待检测程序路径,对待检测程序路径中指令进行符号化处理,得到指令对应的符号化变量,并将处理结果存储到符号表SymbolicTable中;
2)在执行路径时,执行该程序中每一个指令;当指令为程序调用时,调用API函数;当指令为分支语句时,记录并生成约束条件;同时更新符号SymbolicTable;
3)当检测路径执行至结束点时停止程序,收集所述路径执行约束条件;
4)根据符号表SymbolicTable中约束条件找到对应的结果表达式或符号数值,判断程序中是否有可执行路径,
5)反复执行1)—4),遍历程序中所有待测路径,完成软件中嫌疑操作检测。
智能终端在检测前采用静态分析技术提取待检测路径。
所述判断程序中是否有可执行路径方法是:找出所有结果表达式形成方程组,求解该方程组,并根据方程组的结果判断路径是否可执行,若无解,则该路径不可执行;若在取值一定区间范围内,则该路径可执行。
符号化处理包括,读取符号值内容,构造符号表达式,找到对应的操作数并更新SymbolicTable;对于影响符号化变量的操作,进行符号化所需的特殊处理,并同时更新SymbolicTable。
程序执行路径可以是函数调用关系,也可以是代码块执行序列。
一种移动智能终端上的定向符号执行程序检测系统,由符号化处理模块、系统API模拟模块、定向控制模块、过滤执行模块组成,其中:
符号化处理模块,可对待检测程序中的目标变量进行符号化,同时在检测中该符号化处理模块记录更新表达式或符号数值;
系统API模拟模块,负责系统API接口模拟,所述API接口的模拟用于防止当目标进程被符号化处理后调用系统API可能导致的执行崩溃;
定向控制模块,用于执行给定的路径,所述定向控制模块对分支语句生成控制流图CFG,用于指导执行过程中的分支方向选择,并将执行具体分支时所需的约束条件返回符号化处理模块;
过滤执行模块,用于区分用户代码与系统代码,控制符号执行的范围。
符号化处理模块的功能还包括:
a)符号化过程中,对影响到符号化变量的操作,包括mov、add、sub、mul、div,进行符号化所需的符号化处理,更新到SymbolicTable中;
b)路径执行过程中,记录所收集的路径约束条件,与SymbolicTable中的记录相对应;
c)对涉及符号变量的各种操作指令进行符号化处理,维护变量与符号值或符号表达式的映射表SymbolicTable,并可对该表进行实时读取和更新。
所述定向控制模块中生成程序局部控制流图CFG的方法是,根据设定的路径确定在该局部CFG中的跳转方向;记录下能够执行该分支的约束条件,通过日志输出,并强制执行该分支。
所述系统API模拟模块有一个或多个,所述系统API模拟模块将返回预期调用返回值。
过滤执行模块在检测待测试程序之前,首先提取待测试程序的特征类名,并将这些类名信息保存起来;在检测过程中,将当前执行代码的特征类名与待测试程序的特征类名比较匹配,用以区分用户代码与系统代码,判断是否继续进行符号化处理。
本发明的有益效果:
本发明采用的定向符号执行方法,可与静态分析技术相结合,解决程序分析中的路径漏报和误报,并且能够提取出路径约束,从而使得自动测试用例的生成成为可能,且能够覆盖到所有可能的路径。
附图说明
图1是本发明中定向符号执行程序检测系统中模块示意图;
图2是本发明中定向符号执行程序检测方法中总体处理流程示意图;
图3是本发明中定向符号执行程序检测方法中操作指令的符号化处理示意图;
图4是本发明中定向符号执行程序检测方法中执行指令空间控制示意图;
图5是本发明中定向符号执行程序检测方法中定向执行控制示意图。
具体实施方式
图1本发明中定向符号执行程序检测系统中模块示意图,包括:
符号化处理模块,对待检测程序中的目标变量进行符号化,记录在符号表(SymbolicTable)中,修改系统指令的原有执行方式,使得系统在遇到符号化变量时进行符号化操作;
API模拟模块,负责模拟部分必要的系统API接口,用于防止目标进程被插入符号化处理之后,执行发生崩溃;还可以按检测意图;检测意图是由本系统的实现者决定的,一种实现只能针对一种意图。给出预期的调用返回值;
定向控制模块,精确执行给定的路径,该模块在分支语句位置插入特殊处理,生成程序局部的控制流图(CFG),根据设定的路径,确定在该局部CFG中的跳转方向,通过强制跳转来执行对应的代码片段,同时向符号化处理模块插入一条能够执行当前分支语句的路径约束条件;只有分支才需要,固定的程序调用(跳转)不涉及方向控制。约束条件就是分支跳转的条件,比如:一个分支的条件是i>0,如果i是符号变量,则约束条件就是“i>0”。
过滤执行模块在检测待测试程序之前,首先提取待测试程序中所有用户定义的类,作为特征类名,并将这些类名信息保存起来;在检测过程中,将当前执行代码的类名与待测试程序的特征类名比较,如果它们是相匹配的,则认为当前检测的代码为待测试程序的代码,否则,认为是非待测程序代码,忽略定向控制和符号化处理操作。过滤执行模块,负责控制符号执行的范围,在检测中并不是所有的指令都需要处理,对于用户代码之外的指令,只要保证其正常执行即可,无需进行符号化处理。
符号化处理模块将记录执行过程中所收集的路径约束条件,与SymbolicTable中的记录相对应;进行同步更新;符号化处理模块对涉及符号变量各种操作指令进行符号化处理,维护变量与符号值和/或符号表达式的映射表SymbolicTable,并可对该表进行实时读取和更新;符号化处理模块对影响到符号化变量的操作,包括mov、add、sub、mul、div,进行符号化所需的特殊处理,并负责更新SymbolicTable。
图2是本发明中定向符号执行程序检测方法中总体处理流程示意图,系统实现流程如下:
1、给定一条待检测的程序执行路径,将该路径记录在定向执行控制模块中;
2、待检测程序执行前,符号执行接口模块标记需要符号化的变量,记入SymbolicTable;
3、待检测程序执行过程中,对于影响到符号化变量的操作,包括mov、add、sub、mul、div等,从SymbolicTable读出该符号值,根据操作构造结果表达式,更新到SymbolicTable中;
4、待检测程序执行过程中,由过滤执行模块判定下一个代码块是否属于用户代码,若超出用户代码空间,则查找是否有对应的API模拟模块,若有则跳转到智能终端系统API模拟模块,否则让其正常执行;
5、待检测程序执行过程中,在碰到分支条件中包含符号值的分支时,调用定向执行控制模块,该模块根据已记录的执行路径,确定执行方向,记录分支的约束条件,强制执行该分支;
6、待检测程序执行过程中,遇到函数调用时,需要进行如下处理:针对该函数的功能,把操作内容更新到SymbolicTable中,如:对于数组拷贝函数,首先检查源数组中是否包含符号值,若包含则读取源数组内容,更新到目的数组在Symbolic Table中所对应的元素中。
7、待检测程序执行过程中,到达CheckPoint时,把当前收集到的所有约束条件组织起来,根据约束条件所涉及到的变量,从SymbolicTable中分别取出这些变量的最终结果表达式,形成方程组,进行约束求解,获得执行该路径的约束条件,如变量的取值范围,从而证明该执行路径是否可达。
其中,程序执行路径的表达,可以是函数调用关系,也可以是代码块执行序列。
以下以Android系统为例,详细说明定向符号执行在移动智能终端操作系统上的实现,但本发明不局限于Android系统。
本实施例在Android平台上运行,实现对路径的定向的执行,收集所执行路径的约束条件,对得到的约束条件进行求解,产生一个可执行该路径的具体可用的测试用例。本实施例通过修改Dalvik虚拟机,使得对所有的影响符号执行的指令都能进行对应处理,从而实现符号执行。本实施例包括了符号化处理模块、智能终端系统API模拟模块、定向执行控制模块、过滤执行模块四个部分。
首先对被检测的目标软件给定一条嫌疑路径,如下面的函数调用关系:
将上述路径记录在图1所示的定向执行控制模块中。
图1所示的受控智能终端运行环境中启动被检测的目标软件,符号化处理模块初始化SymbolicTable,将目标变量进行标记,记录到SymbolicTable中。SymbolicTable的结构如下:
其中符号表达式的结构如下:
后续执行过程中,符号化处理模块对涉及符号变量各种操作指令进行符号化处理,如附图3所示。维护变量与符号值(或符号表达式)的映射表SymbolicTable,并可对该表进行实时读取和更新。
过滤执行模块会在检测待测试程序之前,首先提取待测试程序的特征类名,并将这些类名信息保存起来;在检测过程中,将当前执行代码的类名与待测试程序的特征类名比较,如果它们是相匹配的,则证明当前检测的代码为待测试程序的代码,否则,则证明不是。
API模拟模块出于保证检测系统的正常运转的目的,模拟了部分必要的系统函数,并将这些模拟函数的入口保存在了系统函数与模拟函数映射表中。在具体检测过程中,过滤执行模块会取得下一步要调用的函数的类名和方法名,并利用这些信息到映射表中查找对应的模拟函数,如果没有找到,则让其正常执行,即调用系统原有函数,此时需要设置标记,通知符号化处理模块停止符号化指令处理,函数执行结束后重置该标记;若找到模拟函数,则执行对应的模拟函数代码,并于执行完毕后返回。系统函数与模拟函数映射表的结构如下:
定向执行控制模块负责维护程序的执行方向,已保证其执行预先设定的执行路径。在用户代码空间的每一个函数体中,首先构造其控制流图(CFG),根据已知路径的下一跳,即下一个被调用函数,确定在当前函数的CFG中需要执行哪个分支,记录下该分支的约束条件,通过日志输出,并强制执行该分支,如附图5所示。
在预先设定的执行路径末端,设置Hook点,本实例中即系统的网络接口函数java.net.URL.openConnection(),当程序执行到此位置时,终止程序执行,收集日志中输出的所有约束条件,从SymbolicTable中分别取出这些条件中符号化变量的最终结果表达式,形成方程组,求解该方程组,即得到执行该路径的约束条件。
尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (9)

1.一种移动智能终端上的定向符号执行程序检测方法,提取若干待检测程序路径,设置所述检测程序路径的结束点,其步骤包括:
1)载入一待检测程序路径,对待检测程序路径中指令进行符号化处理,得到指令对应的符号化变量,并将处理结果存储到符号表SymbolicTable中;
2)在执行路径时,执行该程序中每一个指令;当指令为程序调用时,调用API函数;当指令为分支语句时,对分支语句生成控制流图CFG,根据待检测程序路径确定在该控制流图CFG中的跳转方向记录并生成约束条件;同时更新符号SymbolicTable;
3)当检测路径执行至结束点时停止程序,收集所述路径执行约束条件;
4)根据符号表SymbolicTable中约束条件找到对应的结果表达式或符号数值,判断程序中是否有可执行路径,
5)反复执行1)—4),遍历程序中所有待测路径,完成软件中嫌疑操作检测。
2.如权利要求1所述的定向符号执行程序检测方法,其特征在于,智能终端在检测前采用静态分析技术提取待检测路径。
3.如权利要求1所述的定向符号执行程序检测方法,其特征在于,所述判断程序中是否有可执行路径方法是:找出所有结果表达式形成方程组,求解该方程组,并根据方程组的结果判断路径是否可执行,若无解,则该路径不可执行;若在取值一定区间范围内,则该路径可执行。
4.如权利要求1所述的定向符号执行程序检测方法,其特征在于,符号化处理包括,读取符号值内容,构造符号表达式,找到对应的操作数并更新SymbolicTable;对于影响符号化变量的操作,进行符号化所需的特殊处理,并同时更新SymbolicTable。
5.如权利要求1所述的定向符号执行程序检测方法,其特征在于,程序执行路径可以是函数调用关系,也可以是代码块执行序列。
6.一种移动智能终端上的定向符号执行程序检测系统,由符号化处理模块、系统API模拟模块、定向控制模块、过滤执行模块组成,其中:
符号化处理模块,可对待检测程序中的目标变量进行符号化,同时在检测中该符号化处理模块记录更新表达式或符号数值;
系统API模拟模块,负责系统API接口模拟,所述API接口的模拟用于防止当目标进程被符号化处理后调用系统API可能导致的执行崩溃;
定向控制模块,用于执行给定的路径,所述定向控制模块对分支语句生成控制流图CFG,用于指导执行过程中的分支方向选择,并将执行具体分支时所需的约束条件返回符号化处理模块,所述定向控制模块中生成程序局部控制流图CFG的方法是,根据设定的路径确定在该局部CFG中的跳转方向;记录下能够执行该分支的约束条件,通过日志输出,并强制执行该分支;
过滤执行模块,用于区分用户代码与系统代码,控制符号执行的范围。
7.如权利要求6所述的定向符号执行程序检测系统,其特征在于,符号化处理模块的功能还包括:
a)符号化过程中,对影响到符号化变量的操作,包括mov、add、sub、mul、div,进行符号化所需的符号化处理,更新到SymbolicTable中;
b)路径执行过程中,记录所收集的路径约束条件,与SymbolicTable中的记录相对应;
c)对涉及符号变量的各种操作指令进行符号化处理,维护变量与符号值或符号表达式的映射表SymbolicTable,并可对该表进行实时读取和更新。
8.如权利要求6所述的定向符号执行程序检测系统,其特征在于,所述系统API模拟模块有一个或多个,所述系统API模拟模块将返回预期调用返回值。
9.如权利要求6所述的定向符号执行程序检测系统,其特征在于,过滤执行模块在检测待测试程序之前,首先提取待测试程序的特征类名,并将这些类名信息保存起来;在检测过程中,将当前执行代码的特征类名与待测试程序的特征类名比较匹配,用以区分用户代码与系统代码,判断是否继续进行符号化处理。
CN201210200544.3A 2012-04-27 2012-06-14 一种移动智能终端上的定向符号执行程序检测系统及方法 Expired - Fee Related CN102789417B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210200544.3A CN102789417B (zh) 2012-04-27 2012-06-14 一种移动智能终端上的定向符号执行程序检测系统及方法

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
CN201210129997 2012-04-27
CN2012101299971 2012-04-27
CN201210129997.1 2012-04-27
CN201210200544.3A CN102789417B (zh) 2012-04-27 2012-06-14 一种移动智能终端上的定向符号执行程序检测系统及方法

Publications (2)

Publication Number Publication Date
CN102789417A CN102789417A (zh) 2012-11-21
CN102789417B true CN102789417B (zh) 2015-05-13

Family

ID=47154822

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210200544.3A Expired - Fee Related CN102789417B (zh) 2012-04-27 2012-06-14 一种移动智能终端上的定向符号执行程序检测系统及方法

Country Status (1)

Country Link
CN (1) CN102789417B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103914652B (zh) * 2013-01-09 2018-05-22 腾讯科技(深圳)有限公司 恶意程序控制指令识别方法及装置
CN108664384B (zh) * 2017-03-29 2021-05-07 富士通株式会社 数据处理装置和数据处理方法
CN108089989B (zh) * 2018-01-04 2020-10-16 武汉斗鱼网络科技有限公司 一种路径检测方法、电子设备及可读存储介质
CN114896145B (zh) * 2022-04-27 2024-09-20 北京轩宇信息技术有限公司 用于符号执行的复杂类型输入变量懒符号化方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于符号化执行的Fuzzing测试方法;陈建敏等;《计算机工程》;20091130;第35卷(第21期);全文 *
崔宝江等.基于符号执行与实际执行的二进制代码执行路径分析.《清华大学学报(自然科学版)》.2009,第49卷(第S2期),全文. *

Also Published As

Publication number Publication date
CN102789417A (zh) 2012-11-21

Similar Documents

Publication Publication Date Title
Ren et al. Empirical evaluation of smart contract testing: What is the best choice?
CN104834859B (zh) 一种Android应用中恶意行为的动态检测方法
CN104598380B (zh) 一种基于控件的自动化测试方法及系统
CN103577324B (zh) 移动应用中隐私信息泄露的静态检测方法
CN110413506A (zh) 测试用例推荐方法、装置、设备及存储介质
CN103309808B (zh) 基于标签的安卓用户隐私泄露黑盒检测方法及系统
CN102622536B (zh) 一种恶意代码捕获方法
CN103530221B (zh) 一种Android系统中程序行为与界面操作映射方法
CN103970659B (zh) 基于插桩技术的安卓应用软件自动化测试方法
US20180114026A1 (en) Method and system automatic buffer overflow warning inspection and bug repair
CN103186740A (zh) 一种Android恶意软件的自动化检测方法
CN104778413A (zh) 一种基于模拟攻击的软件漏洞检测方法
CN102375778A (zh) 实现数字信号处理器自动测试的方法及系统
CN102789417B (zh) 一种移动智能终端上的定向符号执行程序检测系统及方法
CN102831021A (zh) 插件拦截或清理的方法及装置
CN102651062A (zh) 基于虚拟机架构的恶意行为跟踪系统和方法
Zhang et al. BDA: practical dependence analysis for binary executables by unbiased whole-program path sampling and per-path abstract interpretation
CN108459954A (zh) 应用程序漏洞检测方法和装置
CN105069354A (zh) 基于攻击树模型的Android软件混合检测方法
CN103186463B (zh) 确定软件的测试范围的方法和系统
CN105487983B (zh) 基于智能路径引导的敏感点逼近方法
CN108197476A (zh) 一种智能终端设备的漏洞检测方法及装置
CN103309805A (zh) xUnit框架下面向对象软件中测试目标的自动化选择方法
CN105045715A (zh) 基于编程模式和模式匹配的漏洞聚类方法
CN103914379A (zh) 故障自动注入与故障检测的方法及其系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150513

Termination date: 20210614

CF01 Termination of patent right due to non-payment of annual fee