




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、从应用程序移除sentinel superpro软件狗暨软件狗破解方法详解(图)译者:月中人(ptg)原文标removing sentinel superpro dongle from applications题:and details on dongle way of cracking原文作shub-nigurrath arteam者:原文版version 1.0 - september 2006本:关键词:don gle, simula ti on, emu la tion, sen tinel superpro, 软件狗,模拟,仿真备注:首先感谢arteam的shub-nigurrath
2、写这个软件狗教程。以下是翻译有关的几个问题:1. 有几个原图不易取得,译者根据原图重画。2. '仿真'意指用外部程序挂钩拦截应用程序与软件狗之间 的交互;'模拟'意指在应用程序内补丁实现假狗、不需要 外部驱动程序。3. 【字典】圣天诺sentinel,特征文件sig/signature,模 拟 simulation,仿真 emulation,单元 cell,附签 tag,选 项卡tab,编译器特性特征文件the compiler specific signatures,软件狗内部资源 internal dongle resources, 交叉引用xref,重建与
3、替换rearch & replace,中性算法 alogrithm half, sp_success (0)表示 sp_success、其值为 0目录1. 摘要2. 可能的方法:仿真与模拟2.1. 软件狗如何工作2.2. 软件狗的仿真2.3. 仿真器如何工作2. 4.模拟器如何工作3反汇编sentinel保护的程序3.1. 用ida反汇编3. 2.用0ilydbg反汇编4. 关于sentinel应用程序编程接口的一些细节4. 1.什么是 sentinel superpro4. 2.键存储器的结构4.2.1内部级单元与可编程单元4. 2.2访问码4. 2. 3单元类型4.3. api函数
4、引用5. 改写 sentinel api 函数5.1. sproformatpacket5.2. sprofindfirstunit5. 3. sprooverwrite5.4. sprofindnextunit5. 5. sproread5.5.1 sproread approach #25.6. sproquery6. 补充7. 参考&结束语9. 历史10. 致谢1 摘要欢迎冋到我的另一长篇教程。这次我将专门讲解最近花了点吋间研究的sentinel软件狗。我首先了 解了一些从应用程序去除sentinel保护(以及一般意义的软件狗保护)的不同方法。冇关这个课题的 教程见到的比较少,见
5、到一些也是过时的、不完整的,大多数难以读懂或应用到现代的应用程序上。感谢许多人的工作,像goat ass > cyberheg> crackz (这里只列出很少几个姓名)。特别要感谢toro (我与他就本主题长时间聊过,因此我想在此公开向他表示感谢)。我在本教程所讲的东西不完全是新 的。但不管怎么说,我更新了他们的技术,在最新的应用程序上测试过,并且把那些不再工作的例行程 序(你能在别处找到)做了一点点修改,使它们继续可用。在woodmann网站1上关于本主题的网页是软件狗有关资料一个极好的來源。将本教程视为sentinel软件狗白皮书(不打算而而俱到),我努力把原理解释清楚,同时
6、做点新的 贡献。我关注sentinel,因为它是最受欢迎、被使用最多的软件狗之一。祝你愉快,shub-nigurrath这里描述的技术是通用的,不是特别针对任何商业应用程序。整个文档必须被当作为一个关于编程 高级技术的文档,如何使用其中信息则完全是你自己的责任。商业应用程序明确地使用的地方,木文仅就它们的保护而论,不透露任何破解细节。stored data/algorithmprivateveyafttentalroutinea2 可能的方法:仿真与模拟一般而言,对于软件狗保护的应用程序有两个可能的方法:仿真或模拟。我将会使用这两个名词区 分这两个方法,其他人可能不同意我这样使用这两个词的含义
7、,但是这样总比叫它们方法a和方法b好 些;-)我必须首先建立一个共同的理解平台,以便能够开始详细的讨论。2. 1软件狗如何工作我想你应该已经有这方面的知识,而冃这里不解释特定软件狗的细节,总之为了理解与软件狗打交 道的一般方法你需要有点常识。一般来讲,用软件狗保护的应用程序需要几个组件;我尽量用图1总结 一下。安全中国终身vip会员 vip.anq 图1 -应用程序一软件狗交互的概略图从图的底部向上到顶部,重要的组件依次为:被保护的应用程序。应用程序与软件狗应用程序开发工具箱本地交互,调用它的ape从应用 程序的观点看,就像调用一个代理对象,向它提出请求并等待冋应或数据。对于知道这些软件 工程
8、对象的人来说,这是典型的设计模式。应用程序开发库。这个组件是出api构成,我们口j以假定它们就是代理方式:它们在应用程 序木地运行提供编程接口,而在相反方面它们实现通信协议。它们只是消息调度程序和请求收 集程序(总之像任何其他api样)。开发库以一个dll或标准库(即动态链接或静态链接) 和程序相连,并且向应用程序提供我所说的服务(从1到n)。通信协议。这个元件要求在系统中安装软件狗驱动程序实现通信。软件狗处理程序。当软件狗收到一个请求时,它必须启用原文invoke一个特定的请求处理 程序。实际的软件狗逻辑当然比图1所示更加复朵,但是我们不妨就这么理解。软件狗处理程 序使用软件狗内部资源(键、
9、算法、数据,最后还冇cpu) hl答应用程序捉出的问题。软件狗内部资源。软件狗可能支持键、数据库和运行某些算法的cpu (这也是sentinel的情 况)。通常越难去除保护的软件狗,它的内部资源就越复杂。跟踪这些组件运行或者读出数据 常常是不可能的,或至少很难。仔细一想,显然,整个通信是基于一个信任机制。我们的攻击就是要设法推翻这个信任模型(见参 考中类似情况的讨论)。你知道,我们可能有儿个办法在应用程序和软件狗之间破坏这个信任模型。准确地讲有两种最重要 的办法,我称之为仿真和模拟。2.2软件狗的仿真其实质是编写一个外部程序在系统上运行,拦截(挂钩)发送给软件狗驱动程序的请求,完全按照 与软件
10、狗相同的方式做出回应。可以用不同的技术来做,但是通常没有必要弄得复杂,只需要普通挂钩 那些给软件狗驱动程序发送请求的系统api就足矣。toro,但不光是他,发布了一些真正好用的仿真器,此外还冇其他一些著名的仿真器(如glasha) o这些程序的问题是它们的使用期限与其所仿真的特定软件狗紧密相连。另一个重耍限制是,它们至 少需要插入原配软件狗一次以收集回应数据,用于以后仿真!2. 3仿真器如何工作这里我将使用toro的sentinel仿真器(在一些论坛上发布,如exetools) 和所冇的仿真器一样, 第一个耍完成的任务耍求你插入原配软件狗并启动仿真数据收集程序。这个收集程序本质上是一个软件狗通
11、信协议记录器:它监视程序的请求和键的m应,并把获得的所 有信息储存起来,见图2。图2 - sentinel superpro软件狗监视程序:收集来自应用程序的请求和来自软件狗的应答其工作机制非常简单我们用来捕获消息的两个著名钩子挂在:应用程序调用的软件狗api和驱动 程序调用的软件狗apt。为了冇效率地工作,仿真程序必须在windows将请求传给ringo级驱动程序之 而成功挂钩,该程序就是如此。如你所见,应用程序调用的几个函数屈于sentinel编程接口(见参考3),稍后我们再讨论它们。第二个组件我称之为软件狗通信协议播放器,它播放前面一步所收集的信息。使用同样的挂钩技术, 当然消息传递方向
12、与第一个是和反的。你能看到这项技术的好处,它不修改应用程序仅仅把问题私下解决了。另一方面它也冇一些限制: 你至少需耍插入原配软件狗一次,而且被仿真的数据将会包含你的软件狗数据,甚至于序列号。总z不 是太好 壷豐你可以使用两个更高级的技术编写仿真器。那就是编写一个ringo级驱动程序仿真器,仿真所有的 驱动程序功能,并且再编写一个ringo级的驱动程序过滤器,拦截对真正的软件狗驱动程序的调用的。 不管怎样,其潜在的逻辑总是一样的,拦截对软件狗(在ring3或ringo)的调用并且应答,使用事先 储存的、真止软件狗会回答的数据。你可能发现有些应用程序增加复杂化:软件狗公司开始把应用 程序和软件狗之
13、间的通信数据包加密/解密。数据包在发送给软件狗之前被应用程序加密,返冋给应用 程序的冋应也是如此。编写这些软件狗的仿真器,即是仿真这些加解密算法。因此唯一有效的方法是对算法及有关数据包 进行逆向工程,或者从应用程序中剥离加密/解密算法。2. 4模拟器如何工作模拟一个软件狗意味着需要在被保护应用程序中加入一些代码,它们模拟软件狗对应用程序请求做 出的回应,如此使得应用程序不需耍任何外部模块:软件狗、驱动 器、仿真器。补丁的应用程序又将 是一个正常的应用程序。为此,我们将需要修正那些在应用程序内实现保护设计的代码片(见图1)。在图3我概略描述这个方法。图3 -在应用程序之内模拟软件狗图3清楚地显示
14、我们需耍在补丁的应用程序内安排一个模拟的软件狗存储器,并且用一些例行程序 模拟原始的服务处理程序:很大不同在丁原始回应读自模拟的存储器而非读自软件狗。应用程序屮不与 软件狗交互的部份保持原状。我在木教程主要集屮讨论后一种方式。3 反汇编sentinel保护的程序我使用一个商业应用程序(任何来自freedomscientific4的应用程序也都可以)的一部份作为例 子,它是用sentinel superpro软件狗保护。在这里我们不关心整个应用程序,我们需要的是它那个独 立的软件狗许可证确认程序,我在本教程发行物中带了。这个程序对我们来说仅仅像一个crackmeo最适合用來分析软件狗程序的工具是
15、ida和ollydbg加上一些特定软件狗库的特征文件(你可以从 各论坛上免费得到,在本教程发行物中也有这些),它们能告诉程序在哪里调用软件狗服务代理。的确耍感谢那些0 llydbg插件,我们稍后将会使用。它们能够读.sig文件,因此这里不是必需要ida。不管怎样, 0d优越的代码分析功能很是方便。3. 1用ida反汇编花点时间熟悉一下ida和代码结构,下面我们将集中精力展示以上讲述的基木原理。原始程序和补丁程序如图4所示。图 4 - 原始的 dongleviewer 和补丁的 dong 1 eviewer注意如果在你的ida安装文件夹屮还没有那些*. sig文件,启动前先从木教程发 行物中拷贝
16、这些文件。不管你用什么办法得到ida 5.0版(幸运的话用官方版,否则从软件下载区分享),发动你的本地 拷贝:拖放原始的dongleviewer, exe至iida主窗口并按ok钮。ida就开始分析该程序。请小憩片刻, 等待它完成。-旦ida准备好,你就打开ida的libraries文件夹,见如下快照:如果没有libraries附签,也可以用花按钮® 打开它。选择该选项卡并按鼠标加键(或者ins键),添加你先前所拷贝的新特征文件。我建议把它们全 部添加以确保万一,因为你还完全不知道应用程序是使用哪个版本的sdk创建的。你应该看到类似于图 5的东西,根据匹配的最高版本号可知,应用程序似
17、乎是使用6.x版(非6. 2版)的sentinel sdk编译 的。而且,没有外部的动态链接库,因此所使用的sdk是与应用程序静态链接的。filestate#funcubraty name3vc32rtfapplied1095microsoft visualc 2-8/net runtimeijpivc32rnfcapplied895mfc 3.1 /4.0/42/8.0 32bit4>sspro62applied0sentinel superpro 6.2 lib (sope)-pssproapplied12sentinel supepro lib - killer_3k3sspro_
18、v6applied258sentinel supepro (v6.0 lib) by cyberheg<lssprocapplied29sentinel supepro c/c+ library by prt (rev4)4>supcapplied0sentinel ultraro c/c+ library by prt (rev3)jw32mcdllapplied0sentinel dll lib安全中国终身vip会员vip .anqn. com图5 -已应用的ida特征文件l i386spro500msoftcif(kx)l l386spro500msoftcig(xx)004
19、76b60 i00476dc0|h s p ro fo rm atpscket00476ef0现在,应用名称以后你可以在名称选项卡上看到结果:ida只是把库函数名称相应地赋予代码中的 函数。l sprofindnextunit00476f50l sprogetversion00477030l l386spro500msoftcih(xx)00-177100l sprofindfirstunit00477130l l386spro500msoftcii(x,>)004771 doi rnroanrnfindnpxtunitm 00477220妥荃申囱终貝vip会员vipanqncorr依照
20、ida帮助文件,以下是各函数名称的图注:l (深蓝)库函数f (深蓝)普通函数c (浅蓝)指令a (深绿)ascii码字符串d (浅绿)数据1 (紫色)输入函数的名称预期我们将在后续章节重点介绍sentinel api zsprorcad。现在主要讲一下调用图。你应该在strings “叫'选项卡中寻找那个被有效包含的驱动程序:. wsentinel. vxd.text:0047680000000011 c在它上面双击鼠标左键,按x键查找关于那个符号的引用,然后你将会到达函数 i386spr0500ms0ftcia(x),特征文件帮我们识别出这个函数(见图6)。ieeih安全中终身vi
21、p会员 v;attributes: library function static;_stdcall i38gspro500msoftcia(x)_i386spro50omsoftcia4 proc near打 g_0=dword ptr 4push0 ;htemplatefilepush0 ;dwflagsandattributespush3;dwcreationdispositionpush0 ;ipsecurityattributespush0 ;dwsharemodepush0 ;dwdesiredaccesspushoffset a_sentirwl._uxd ;,.sentinel
22、.uxdiicallcreatefileamouecx, esp+ar9_0cmpeax, offffffffhmouecx, eaxjnzshort loc_47g8m8r:图 6 i386spr0500ms0ftcia(x)的图解现在只耍按 勢钮生成对i386spr0500ms0ftcia(x)函数的引用图。生成一个相当大的图,但我只耍 你注意图表的底部:ida把来自特征文件的函数用彩色标明(浅蓝色),那么由于我们只应用了 sentinel 特征文件,所以这些是sentinel软件狗的库函数,被程序使用或仅仅链接它(记得静态链接一个*. lib 文件可能链接它所有的函数,这取决于链接程序选
23、项)。你也必须确知一件事:如果ida报告某个函数不被引用,这不一定表示它在运行时间不会被调用, 因为可能有动态消息、改变的代码以及ida解析引擎出错。总z,我们需耍对这个结杲进行判断,或者 说它是我们开始探究的岀发点。图7显示这个图表的底部:注意,i386spr0500ms0ftcia被其他内部函数调用,然后有导入库函数 如sproextendedreadc这个函数不被程序使用,但是它在里面做个多余的代码)和sproquery或sproread (这个函数则和反,频繁地被调用,而且没它不行)。图7 - i386spr0500ms0ftcia(x)的交叉引用图底部这类分析对我们大有帮助,因为它告
24、诉我们必须调查哪些库函数调用。监视程序也能捉供相同的信 息,如第2. 3小节所示。但是,你必须明口,一个监视程序只监视被程序有效执行的调用,而非所有可 能的调用。如果在你的模拟屮漏掉什么东西(某个函数没有被调用,或某个菜单没有被激活),它很可 能是不完全补丁。联合使用这两种方法比较安全,而11让你更右机会做一个完全补丁。注意你能够理解一个模拟器如何可能挂钩系统,拦截对createfilea的调用。3.2用0 ilydbg反汇编既使没有ida,也可能使用0ilydbg反汇编该程序。你会发现godup插件(包含在这个文档之内) 极为冇用,见图8。goduppoon安全中国终身vip会员vip.an
25、qr图8 - godup插件细节这个插件能够读ida的.sig文件并且把函数名称输入反汇编的程序之内,见图90的确,它不支持所有可能的类型,但它支持这里使用的sentinel特征文件。你必须手动插入特征文件路径。ifatixt oty dcbtiqgcr ui)ivcrs<il pfugin godupbsq| setting! | helpapp typesffit console orapihc &exedlldrv sinclefireadedmuuneireaded 16bit 32ditfile types fffffeff dosexe(old) doscom(old
26、) bin dosdrv ne intelhex moshe:-: lx le nlm coff pe omf srec zip omflib ar loader elf w32run aout pilot dosexe doscom ae<ardumping succesfvlly finished allaying signaturesc 丄 t - * .、. . a - * "匚 - i 安全中国终身vip会员v图9 - godup应用一个特征文件如前述,应用所有的特征文件,然后按ctrl-n键查看oi ly已经为当前程序定义的名称,搜索“spro” 开头的名称(所有的
27、sentinel高层函数以这些字母开头),你会从其他函数中找出下列各项:记得去选中uoverwrite existing labels”栏重写现有标签0o476f5o textusersprofindnextllnit1 arg00476ef0 textusersproformatpacket00477030.textusersprogetuersion00477510.textusersproouerwrite安全中国终身vip会员vip.anq 如你所见,godup识别出的这几个函数与ida识别的没有不同:与0lltdbg识别出50次相比,ida 识别出300次左右而胜出。吐 create
28、 asm file. y? create inc ffle.& create lst ffle create exe file create dif fie.create html file.ait+floinclude in the map filesegmentation informotion dymmy names oemongle names空 dump database to idc fie|厂 ,安全中国终身vip会员vip.a nq安全中国终身vip会图10 - ida输出map映射文件那么,最好的替代选择是从ida输出map文件,然后用这个插件把映像文件输入到olly
29、dbg,见图 10o最后这种工作方式竟然产生最好的结果!4 关于sentinel应用程序编程接口的一些细节此吋我们已经差不多,是吋候稍微停顿一下并简要地了解sentinel的pdk如何工作。我将使用其文 档中一些信息3,你应该在读过本教程之后继续完成你的培训过程。注意一般来讲,果你想要打补丁一个软件狗保护的应用程序,那么真止首先要 做的是读开发者手册,了解应用程序可能使用软件狗的什么服务及其使用方法。4. 1 什么是 sentinel superpro除了提供一个功能全面、简单易用的软件保护系统z外,sentinel superpro还让你能够增加示范 产品限制、升级示范产品到完全许可版本并捉
30、供附加功能的使用权,完全不需要再运送一个新的硬体键 过去或者访问客户位置。sentinel superpro 6. 1还提供了一个附加的能力-允许你的客户使用一键多客户端。sentinel superpro 6. 1还允许你给你的分发商编排特定的一些键,因此你能够限定他们可以激活和更新多少个产 品键。sentinel superpro硬体键有两种形式因素:并行端口或者usb,见图11。安全中国终身vip会员图- sentinel superpro 键4. 2键存储器的结构每个sentinel superpro键包含128字节存储器,按每个单元16位组成64个单元(字)。单元按十六 进制从位置0
31、到3f编址,见图12。当你规划一个单元的吋候,你赋予它各种不同的属性。这些属性决定该单元(和它所含的字)该由 你的应用程序如何使用。单元属性包括单元类型、访问码和单元数值。保带单元一0001020304050607-08090a0b0c0d0e0f101112131415161718191a1b1c1d1eif可用单兀一202122232斗252&2728292a2b2c2d2e2f3031323334353637_38393a3b3c3d3e3f安全中国终身vip会员v通常,每个单元包含下列字类型之一:数据字:一个数据字能储存数据,如从属许可证、客户信息、序列号、口令和校验数位。你
32、编码你的应用程序读某个字,然后鉴定所储存的数值并做相应行为。一个数据字单元可能被规 划成只读或者可读/写。计数器字:一个计数器字包含你设定的一个初值然后由你的应用程序减量。计数器字的一种 典型使用是限制一个应用程序的示范品可运行次数。算法:一个算法包含一个位模式,规定硬体键应该如何加密你的应用程序所发送的查询数据。 该键使用一个算法一一并且是个内部储存的专有算法一一转换查询数据然后返回一个值给你的 应用程序。你设计让应用程序发送查询给该键,然后鉴定返m值并且做出相应行为。算法是活动的或不活动的。只有活动的算法能给一个查询返回有效的回应。算法是否活动由该 单元值中活动的/不活动的位來控制。4.
33、2.1 内部级单元与可编程单元每个键的00单元到07单元是内部级单元,它们包含着固定的、预编程的系统信息,见图13。单元内容可读否?00键序列号;每个键按顺序分配。*是01开发者id;唯一对应你的公刁/产品。是02-07彩虹技术保留使用。否图3 - sentinel superpro键的内部级单元内容个序列号是16位的,并口不保证它是唯一的)程序可以使用从08单元到3f单元。4. 2. 2 访问码每个单元冇一个访问码,用它控制该单元能够被你的应用程序如何使用一一它定义单元的单元类型 属性。例如,一些单元类型的访问码允许单元数值被读出和被重写,而另一些单元是只读的或根本不可 写入。访问码是数字0
34、到数字3,见图14。访问 码描述0可读/写的数据字你的应用程序可以读该单元的这个字,而且,如果给出写口令,可以修 改它的内容。1只读(锁定)数据字你的应用程序可以读该单元的这个字,但是如果没有重写口令,则不能 改变它。2计数器字该单元包含一个字(数值),你的应用程序可以用写口令减量它。如果 没冇重写口令,则不能(用减量之外的方法)改变该单元的值。3锁定并隐藏的字/算法字你的应用程序不能读该单元的数值。修改它需要重写口令。该单元数值 (内容)是隐藏的(不可读)。图14 - sentinel supcrpro键的单元访问码4. 2. 3 单元类型每个单元被赋予一个代码,定义你想要如何使用此所选单元
35、。这个代码叫做一个单元类型。单元类 型划分储存在m元中的数据类型,继而影响该单元能被如何使用。每个单元类型用两个字母的缩写来识 别;例如,cw标识一个计数器字。某些单元类型被设计成按组使用。例如,算法能与计数器和口令产生 关联。其他单元类型冇地址限制,意即只冇键上特定单元才能指定为这种类型,见图15ocell ijpeaccess codename*0未放aa3活动的算法ah3中性韓(活动或不活动任选其一)ap3激活口令ca2算粉数辭cw计数器字di1开发者iddl1锁定的数据字dw0竝字ia3不活动的算法rw3保留字sn1翊号图15- sentinel superpro键的单兀类型4. 3
36、api函数引用图16中列出sentinel sdk的主要api函数。函数描述sproac ti vate () sprodecrement () sproenumscrvcr() sproextendedread() sprofindfirstunit()激活一个不活动的算法,以便它能被sproquery ()函数 使用。减量一个计数器字或者读/写数据字。如果计数器关联到 一个活动的算法,那么计数器减到零则使该算法不活动。 依照指定的开发者ii),列举在网络上运行的服务器个 数。读键的任何非隐藏的存储器单元的数值和访问码。搜索隶屈于一个指定的开发者id的所有键。sprofinclnextuni
37、t ()sproformatpacket()sprogetcontactserver()搜索隶属于同一个开发者1d的下一个键。验证数据包(rxbo_spro_apipacket)的大小并初始化字 段为默认值。在任何其他api函数被调用之前,这个函 数必须先被调用一次。返回为一个指明的api数据包设定的联系服务器。sprogetfullstatus () sprogethardlimit () sprogetkeylnfo()返回扩充的状态信息。它只用于支持目的。 检索硕体键所支持的最大许可证数目(硕限制)。 从一个指明的服务器获得关于键的信息。sprogctsubliccnsc() sprog
38、etversiono sproinitialize() sproovcrwritc()取得一个指明的单元中的从屈许可证。返冋sentinel superpro驷动程序版本号。执行驱动程序需要的任何初始化。改变除了保留单元00-07 z外的任何单元的数值和/或者访问码。sproquery ()发送一个数据字符串给键,用一个指定的算法加密它, 并返回加密的字符吊给应用程序。sproread ()sproreleaselicense()读键的任何非隐藏单元的数值。通过指定单元地址为0而释放一个许可证,或者通过指 定从属许可证单元的单元地址和要释放的从属许可证个 数而从一个指明的单元释放一个从屈许可证
39、。sprosctcontactscrvcr()为一个指明的api数据包设定联系服务器。sprowrite()改变任何访问码为0 (可以读/写数据)的单-元的数值和 /或它的访问码图6 - 主要的 sentinel superpro api 函数在sdk官方报告中它的api名称带前缀“rnbo” ,但是我们通常提及这些api名称时不带这个前缀。 从破解角度看最重要的是:sproformatpacket> sprolnitialize> sprofindfirstunit、sproread> sproquery> sprooverwrite。以下是一个典型的调用顺序,你经常
40、能在程序中见到:1. sproformatpcicket ()-初始化数据包。2. sproinitializeo -执彳亍必需的初始化。3. sprofindfirstunit ()-建立与键的通信并且取得一个许可证。4. sproread ()-读单元并且返冋它的值。5. sproquery()-发送查询字符串并且给冋应值指定一个位置。例如,sproread如图17所示,我们马上耍编写一个新的,并将二者做个比较。cd*i .rnbocproptmiuj attribute* library fvnctiottproraad proc nearre r-护 rdword ptr dch wo
41、rd ptr luh dwordptr 1*hpueh push ov“x.ax9hort loe *"31twg.o)mx1oc?313: puh c411ediochxpr#tnx.13 g$pfto«mmsof tcoent3ae$prosoom$ottco( x)c*i.uord ptr ”i. 7«2hchort toe h7?33fiov"2pop»dipop»siratnechn厶u n qouword ptr eaigr &939r«x 4 mbpop皿pop5retioch1oc.mt73®
42、;i5:ovjor<di v <dijnzshort loc7?360loctt33fl tect byt ptr esi*12h. <1 jru:loujnhmsunbcumord ptr*10hxuax. lohpepmixpepir«tnocht1oc.w77360:euou pu«hcull or )nzword ptr (0i<m)hv oahax” i13msi>wwonwtcmam . 13sc$pr050wsoftcw( x)zrt rx.w3s0unl&.ibovax. (w珈)hovhi. ax10c.vt3m;ou
43、 puh e«n”.(eoi<)tax闻stqmorrdm * x 3h$f>ros&om$oftc 11(x) x. xhshort lx e380iflocttmg :m>v pugh chw w w"【“61e«x.im6spro5o0h5oftcie 姑13h1ppcsg0hs0f tcie(x)矶oiochouax, 3pop“ioop” iretnochprorqftd erdp安全中国终身vip会员 v图7 - sentinel sproread apiapt的返回值才是重要的,即程序要求从一个冇效调用得到什么东西。5 改写
44、sentinel api函数对于已经熟练掌握该主题的人來说,现在开始木教程真正的部分。为了完全没有经验的读者达到知 识要求,本教程前面部分一直在讲授必需的基础知识。其实补丁从这里才真正开始。5. 1 sproformatpacket和我们下面将要模拟所有其他api 一样,对于这个api我们通常只关心它总是返冋sp_success (0)。图18是该原始api在ida中的反汇编结果,图19是同一个api在ollydbg中的反汇编结果。到n甩:.rnb0sproformatpackgt8;厂ibutos: library functionsproformatpacket proc neararg_
45、0= dword ptr 0ch arg_h= word ptr 10hpushsipushqdimou9axtesp*arg_6oreax,eaxjnzshort loc m?6fg3gn上m«>uax. 2popedipopsiretn8floc76f03:mousi. osp今a厂cmpsi, 8hhjnbshort loc 476f18ttsindmouax. ofhpop©di1oc.h76f18:poposipusheax"tn8call.1386spro500msoftcde»+ ;i386spro500m$oftcd(x)moued
46、i. eaxsubsi. mpushesipush0pushedicalli386spr050ehs0ftcgei 2i386spro500msoftcg(x,x.x)push3pushesipushodicall.i386spr050ems0ftc012i386spr050gms0ftc0(x,x,x)pushleaeax. edi+38hpush©axcalli38gspro500msoftcqs8 :i38gspro500msoftcq(x、x)orword ptr edi+12h. 8subaxv axp°pedipopesirtn8sproformatpacket
47、 endp安全中国终身vip会员 vipanqncom图 18 -在 ida 里的原女台 sproformatpacketeeh76efer$ 56push esisproformatpacketee476eflh 57wsfskntdll.7c9ie73800476ef2echou eax.dword ptr $s:(esp*coom7gefg oecoor eax.eax60476ef8计 75 09jnz short <dongl®ui.loc-h7gfe3>09h76efa66:88 0289hou ax.200m76efe 5fpop edikernel32.7
48、c816f07eeh76eff 5epop esikernel327c816fd7oom76foo c2 0800jreth 8eoh76fo3>66;8b7424 10hou si 上ord ptr ss esp+16loc_h76fe3goh76fo866:81fe 9h0hcmp si.hgheom76fod73 89jnb short <don9uui.loc76f18>oom76f0f66:b8 0f60mou ax.qfoom76f13 5fpop edikern»132.7c816fd7oa47gf1m5epop esikornq132 7c816f0
49、?g6h76f15 c2 6800retn 8ee<i76f18> 50push eaxloc_m76f18ggm76f19 e8 92a1ffffcau. <0onguui . 1386spr05eems0ftcd(x) >ooh76f1e 8bf8hou edi.eaxe0476f2066:83ee gmsub si出00476f2m 56push esi88h76f25小一 d f ga ee= push 0 _ 4 anqn .com图 19 -在 ollydbg 里的原始 sproformatpacket补丁很简单如图20所示,它仅仅把eax原本来自esp+c
50、返冋值清零。如你所见,我在第一个跳转 (0x476ef8)开始重写原始apt,其目的是用来略过在sentinel apt入口点上的一些基本的反干预检验。een7gefe$56push esisproforbtpackotbo476efll 57push edintdll.7c9ie?38tkh应卜2ecmou eax.0uord ptr s5 ilspc00m76ef6 gbceor eax,eax00m76ef333c9xor eax.eax00m76efa 90nop00476efb 90nop0gh76efc90nop00m76efd 90nop00h76efe 5fpop ediker
51、nel32.?c816f070gm76eff 5epop esikerncl32.7c816f0?oom76fo0jl. c2 6806a, j creth 8vip .anqri. com图 20 - 补丁的 sproformatpacket注意,关于这个api, pdk冇如下说明:这个函数本质上是一个“取得许可证”调用。如果有找到sentinel superpro键,rb_spro_apipacket 记录将会包含有效的许可证数据,否则数据包将被标记为无效的。如果你试图以一个已有訴可证的 aptpacket作为参数调用这个函数,它返回错误sp_ tnvaijd_ opera tion。仅当
52、给定的参数rb_spro_apipacket是无效的时候,它返冋不同于sp_success (0)的一个数值。在 开发阶段这类错谋是典型的,因此对我们来说没有问题。这意味着通常不必补丁这个api,总z我通常 只是为避免意外而补丁它。5. 2 sprofindfirstuniteoh77138r$ 53ogm77131i 560g477132ec09m77136iobcgo0htt13833c60om7713a| 9080477138 90eeh77i3c; 900oa7713o 9009h7713e 5e00m7713f 5b安全中国终身vip会员vip.a nq sprofindfirstunitkernel32.7c816fd7kgrnel32.7c816fd7同样地对于这个api,重耍的是耍返回0 (sp_success)。把描述开发者细节的developerld储存起 来,一定会有用的,如开发者指南所指出的:unsigned short int sprofindfirstunit (rb_spro_apipacket packet,unsigned short int developerld);developerld是由彩虫技术rainbow technologie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CJ/T 339-2010快速公共汽车交通(BRT)公共汽车通用技术要求
- CJ/T 117-2000建筑用铜管管件(承插式)
- 精准掌握2025年考试试题及答案
- 系统分析师考试考前准备试题及答案
- 初级社会工作者复习秘籍试题及答案
- 一站式Msoffice备考指南试题及答案
- 豌豆荚植物测试题及答案
- Msoffice在数字化管理中的角色定位试题及答案
- 深度解析系统集成项目管理试题及答案
- 2025年网络规划设计师考试项目管理试题及答案
- 稀土买卖协议书
- 太原日用陶瓷项目商业计划书范文
- 2025年可再生能源在建筑能源供应中的占比提升策略研究报告
- 薪酬福利体系优化方案
- SA8000-社会责任程序文件(完整版)
- 浙江卷-2025届高考化学4月模拟预测卷
- 小学生石油科普课件视频
- 2025至2030中国隧道掘进机(TBM)行业发展状况与应用趋势研究报告
- 商业保理抵押合同协议
- 基于针灸理论下阳朔旧县村景观更新设计研究
- 离婚协议书正规打印电子版(2025年版)
评论
0/150
提交评论