参加国际学术会议总结

文章 2019-07-17 10:34:33 1个回答   ()人看过

20103rdInternationalConferenceonAdvancedComputerTheoryandEngineering(ICACTE2010)于2010年8月20日至2010年8月22日在四川成都的四川大学召开,本次会议由四川省计算机学会和IACSIT(InternationalAssociationofComputerScienceandInformationTechnology)联合发起,由IEEE、四川大学,电子科技大学,西南交通大学,西南民族大学提供技术协助。会议旨在为科研工作者和工程技术人员提供一个报道先进研究成果、交流学科前沿动态的平台。

会议吸引了来自亚洲、非洲、北美、欧洲等20余个国家和地区的百余位专家、学者的参加,会议内容涉及本领域国际最新研究动态及前沿工作,反映了未来发展方向。会上与国际知名学者交流,感受了国内、国际权威学者的敏锐思维、学习专家解决难题的灵活方式、感觉受益匪浅。

大会共有600余篇poster展出,本人的第一作者论文“ApplicationofStructuredExceptionHandlinginSoftwareAnti-debugging”被本次大会安排为会议首日第一个分会场的第一个口头宣读,充分体现了大会对本论文的重视,作为本次大会第一个宣读的论文,本论文也得到了分会场主席和与会专家和学者的普遍好评并得到很多有益的建议,可谓收获颇丰。具体内容是:

随着软件产业的快速发展,以反跟踪技术为核心的软件安全已经成为一个重要的课题。在与软件解密做着不懈斗争的同时,软件从业人员不断发现新的软件反跟踪策略,提出新的软件保护方案,增强了软件的安全性。

结构化异常处理,是操作系统提供的用于解决系统软硬件异常的一种机制,在程序设计中的合理使用可以提高软件的稳定性、容错性。本文着重探讨了其在软件反跟踪中的应用。

应用程序正常执行中出现异常时,操作系统将收集异常发生的原因、类型、位置等信息,填写相关的数据结构,并从用户程序转到系统级执行,将控制权交给系统的异常调度函数。该函数将根据系统收集的异常信息选择一个异常处理例程处理异常。用户可定义的异常处理例程分为两种;一种是线程相关的,一种是进程相关的:线程相关的异常处理例程,监视某线程中某段代码是否发生异常,由于线程是程序执行的最小单位,所以把异常解决于线程的内部,可以避免该异常对其它线程的干扰,保证程序的稳定运行。进程相关的异常处理例程:也称为筛选器,监视进程中所有线程发生的异常,做进程退出前的清理工作。

异常处理流程是指运行在win32系统中的程序通常包含多个线程,而每个线程都会安装各自的异常处理例程;除此之外,程序中可能存在一个全局性的异常处理例程;再者,如果进程被调试的话,调试进程也相当于一个异常处理例程。当异常发生时,系统将根据异常类型选择一个异常处理例程来处理异常,正常情况下,系统进行异常处理的流程为:

系统首先判断异常是否应发送给目标程序的异常处理例程。如果应该发送,并且目标程序正在被调试.则系统挂起程序;如果程序没有被调试或者调试器未能处理异常,系统继续查找是否安装了线程相关的异常处理例程。如果已经安装,系统就把异常发送给SEH处理例程。每个线程相关的异常处理例程可以处理或者不处理这个异常,如果它不处理并且安装了多个线程相关的异常处理例程可交由链起来的其他例程处理;如果这些SEH处理例程均不处理异常,且程序处于被调试状态,操作系统会再次通知调试器;如果程序未处于被调试状态或者调试器没有能够处理,并且程序调用SetUnhandledExceptionFilter函数安装了进程相关的异常处理例程的话,系统转向对它的调用;如果没有安装进程相关的异常处理例程或者它没有处理这个异常,系统会调用默认的异常处理例程,通常显示一个对话框,用户可以选择“关闭”或者可以将程序附加到调试器的“调试”按钮。如果没有可以附加的调试器或调试器也不处理,系统就对线程异常处理句柄进行展开做最后的清理工作,最终调用ExitProcess终结程序。通过对系统异常处理流程分析可知,当应用程序执行过程中发生异常时,系统可在三个层次上完成异常处理:调试器、进程、线程。线程层次的异常处理即SEH,能够准确定位异常的信息,更加灵活、隐蔽的实现反跟踪的功能,是本文研究的主要方面。下面深入分析SEH的工作原理。

系统级处理机制,SEH作为系统内部处理异常的一种机制,其工作主要在系统级完成,因此掌握系统内部异常处理的工作原理是研究基于SEH的软件反跟踪的关键。下面围绕异常处理例程深入分析系统级异常处理机制。异常发生时,系统执行KiUserExceptionDispatcher函数并调用RtlDispatchException启动对注册的异常处理例程的查找。如果找到的处理例程处理了异常并继续执行,则对RtlDispatchException的调用不再返回。否则,有两种可能:调用NtContinue使程序继续或产生另一个异常。若是后者,异常不再继续,进程必须终止。

RtlDispatchException函数遍历异常帧,利用获得的指向EXCEPTION_REGISTRATIONS链表的指针遍历每一个节点查找异常处理例程,并通过RtlpExecuteHandlerForException完成异常处理例程的调用,根据RtlpExecuteHandlerForException的反馈信息,RtlDispatchException或者继续遍历异常帧,或者产生另一个异常,最终将控制送至ExecuteHandler函数,由该函数通过EXCEPTION_REGISTRATION的handler域调用异常处理例程,对程序执行中产生的异常进行处理。

SEH在软件反跟踪中的主要应用方式是调试工具的检测、硬件断点的去除、改变程序执行顺序等,但这些反跟踪技术相对比较成熟,很容易被破解者发现并成功破解。本文所介绍的是一种更加隐蔽,效果更好的反跟踪方式:单步异常-抽取代码法。

在程序的正常执行序列中设置功能请求标志位,之后触发单步异常,进入异常处理例程后根据标志位完成所抽取的相应的功能,继续程序的运行。这样,如果破解者不能发现异常处理例程的存在,将无法实现该功能。这是因为异常发生后,调试器接管了异常,而不会去调用作者安装的实现具体功能的异常处理例程,从而达到反跟踪的目的。

利用单步异常实现反跟踪的具体过程是安装异常处理例程,在程序开始处将异常处理函数地址放入EXCEPTION_REGISTRATION结构的handler域中,一旦执行过程中有异常发生系统就通过handler域的地址调用异常处理函数,完成相关的异常处理,正常执行代码,安装完异常处理例程,其后是程序功能代码,在这里设置标志以便异常函数作不同的处理。插入单步异常指令,此处是关键的地方,因为程序的反调试功能通过它来实现。当程序执行到这里时,根据是否处于调试状态有两条执行路径,一条是处于调试状态,这时调试器接收异常信息,并进行相关的处理,这样将有部分程序代码得不到执行而使程序出现错误;另一条执行路径是不处于调试状态下,程序本身将通过异常处理函数来处理异常,这样程序中部分被抽取的代码将得到执行,程序不出现错误,且功能可以实现。清除异常处理例程,程序执行完功能代码后,要把开始时安装的异常处理例程去除,否则容易引起系统错误。清除的方法是:用出栈指令将EXCEPTION_REGISTRATION结构的prev与和handler域弹出即可。

这次参加ICACTE国际会议,通过和与会学者的交流、探讨,我觉得自己的收获主要在以下方面:

(1)对自己专业的新动态有了一定的把握,对本行业内的其他专业方向有了一定的了解;

(2)发现了自己在学术上存在的问题,这有助于以后的改进和提高;

(3)结识了一些日本、韩国、台湾等地高校和公司的教授、研发人员和学生,为以后更广泛的交流打下了基础;

(4)发现了自己英语水平的不足,这将促使我更加努力地掌握英语,尤其是提高口语水平。

总体上,这次国际会议让我学到了很多东西,虽然只有短短三天,但我感觉收获颇多,听到了许多新思想,结识了许多新朋友,拓宽了视野,增长了知识,结识了软件安全研究领域的多名学者,更加明确了今后的研究方向,相信对个人今后的学术研究有很大的促进。非常感谢我校研究生院给予的此项支持,鼓励研究生参加国际会议是符合建设国际型大学的潮流之举。作为研究生,我们应该认识并珍惜学校提供的学术科研和培养的机会和条件,积极思考,广泛交流,用优秀的科研成绩回报学校。

顶一下 ()  踩一下 () 

 

本文标签:

[!--temp.ykpl--]


友情链接: