适合入门的软件破解教程_鄙视要太多分的

上传人:桔**** 文档编号:854 上传时间:2016-11-03 格式:DOC 页数:84 大小:994KB
返回 下载 相关 举报
适合入门的软件破解教程_鄙视要太多分的_第1页
第1页 / 共84页
适合入门的软件破解教程_鄙视要太多分的_第2页
第2页 / 共84页
适合入门的软件破解教程_鄙视要太多分的_第3页
第3页 / 共84页
适合入门的软件破解教程_鄙视要太多分的_第4页
第4页 / 共84页
适合入门的软件破解教程_鄙视要太多分的_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《适合入门的软件破解教程_鄙视要太多分的》由会员分享,可在线阅读,更多相关《适合入门的软件破解教程_鄙视要太多分的(84页珍藏版)》请在金锄头文库上搜索。

1、破解入门多哥们儿说看教程跟老大的书都看不太明白,所以,我尽量把话说到最容易理解的份上,本文写给那些刚入门和尚未入门的朋友们.明一下)析软件算法,编写注册机由于现在网吧,临时写来,所以,今天只写个前言吧,呵呵.在也说了这么多了,没别的了,卖个广告,推荐几本书吧。首先,力荐看雪老大加密与解密软件保护技术及完全解决方案,绝对物超所值,要的抢先了.(汗 俺都没看过,看来要落伍了) 。当然,还有看雪精华一、二、三、四以及将要出来的五,足够带你上路,还有风飘雪大虾的风飘雪破解教程等等等等(其它一些,没说到的就请自行搜集吧),还有就是常到论坛来转转 ;=另外,我觉的你真的很有必要学一门编程语言以及掌握一些

2、序的知识.些人可以学习破解?A:任何会启动电脑并运行软件同时又想学习破解的人。我说的全是实话,如果你既不会启动电脑又不会运行软件,那么我教你一个更高深的吧呵,很简单,到大街上随便抡个板砖什么的,回去慢慢破解吧 (记得关电源)Q:有没有什么办法可以使我快速入门并成为高手?A: 有。但你得是个 不 所谓),然后找个离你家最近的破解达人,什么也不用做,眨个眼放个电之类的会吧(现在连初中的小女生都会这个),然后就成了,呵呵,想破什么的话,让高手帮忙吧,到时说成是自己破的就成了 为什么?因为那些高手大都奇丑无比,呵呵,有了头脑就没了长相,男的也是这样,而且越是高手,长的就是越丑。据说一次市里到 察奶牛们

3、的出乳情况,看到大哥的时候,说了句“这奶牛个儿这么小啊,中午大家吃涮锅” (众大哥:大家准备好家伙,我们一会儿要去械斗)。呵呵,玩笑开到这里,其实我说这么多,只是想告诉你,学习破解跟其它技术一样,请你不要试图投机取巧,要想学,就脚踏实地,多看教程多动手实践积累经验,不要经常 种弱智问题“我不懂 问我能学破解吗?”,答案是不能,你问的同时,不也正在学吗?想知道重要吗?那我告诉你好了,凡是看雪教程上要求掌握的,你全要掌握,这还不算,要想成为高手就必须精通,如果你不想一直只停留在入门阶段的话。不要想偷机取巧,谁一开始也不是什么都会的,但你只要花一些时间和一小部分精力,那么没有什么你学不会的,知识是要

4、积累的,你知道自己不会却不去学,而在那儿问重不重要,人家会觉的你这个人并不想认真学破解,而是报有侥幸心理在浪费时间,请不要做浪费时间的人。不要刚开始学就想马上成为高手,没有高手,你没必要立下超越的目标,只把学知识放在首位就够了,欲速则不达,请不要做急于求成的人。Q:学破解对我来说有什么好处?A:这个问题应该你自己来回答,呵呵,你为什么要学?“我想免费使用共享软件”倒. 那多少也算是个目的,但我希望你不要只报这种目的(目前国内共享软件业还有待发展 )。我只是想说给那些只是因为一时冲动才学习破解的人,请将你们当初的冲动继续维持下去,你需要明白,学习破解的目的不只在于破解软件这个词,也许后来你会变为

5、软件分析,随着学习时间的增加,对你的编程水平,相信会有相当大的提高。学习别人好的思想,并化为已用就我个人来说,学习破解可以把我的汇编的基础给打好,呵呵,俺对操作系统这玩意儿感兴趣,到时候还想写出来个玩玩儿呢,所以汇编这关必须要过.很笨,那些大虾的教程我大都看不明白,我能学会吗?A:永远不要说你笨,你只是学的比人家晚而已,太高深的看不懂,那你就捡能看懂的看,别人能入门,你也能,不得要领只是暂时,大虾与你,也许差的就是一两年时间的问题。破解入门算机是只识别 0 和 1 的,最初那会儿,要写程序,就要用 0和 1 来写,呵呵,!所以曾经有过的对程序员的崇拜,可能就源自那个时候吧后来,人们发现用0 和

6、 1 来写程序,太不爽了,不但写起来不上手,而且回过头来看的话,应该很难再看明白了,总之出于这些原因,就有了汇编语言。汇编语言用一些助记符来代替 0 和 1 的多种组合,也就是各个指令,这样的话,从一定程度上来说,方便了许多(一头老牛:方便太多了)(一只菜鸟:一点儿也不方便,完全看不懂)。但是,汇编也同样不方便,同样写起来不爽,而且后期维护同样不方便,再加上人们慢慢地需要写一些更大的程序,在这样的情况下,高级语言就被人发明了出来,就是我们今天用的 、C+ 等等等等,这些语言的出现,一下了使程序的开发难度大大减低了(一头老牛:减低太多了,我膝盖就能写程序了)(一只菜鸟:还不是一样难),以前用汇编

7、要很长时间才能开发出来的程序,现在只需要很短的时间且很轻松的就可以搞定了,特别是最近几年,可视化编程的大肆普及,使程序员的神秘感一下子摔了下来,样的词现在都满天飞了。最惨的就是汇编,一夜之间变成了低级语言、下流的语言、吃完大蒜不刷牙的民工、开车加完油不给钱的地痞、在公共汽车上吐口水的冰岛人等等等等(汇编:呜呜呜我不活了)。但是汇编还是有它先天的优势的,因为其与 部的指令一一对应,所以在一些特殊的场合,必须由汇编来实现,比如访问硬件的端口、写病毒生成的可执行文件贼小,写小程序是很爽的,呵呵,而且用汇编写注册机,是件很轻松的事,你不用再为怎样还原为你所熟悉的语言而为难。说了这么多,还是切入主题吧(

8、昏倒观众若干):既然计算机只识别 0 和 1,那么,所有存储在计算机上的文件,也都是以二进制的形式存放的,当然也包括可执行文件了。所以,你只要找一个十六进制编辑器比如 么的,就可直接打开并查看可执行文件了,呵呵,如果你能看懂的话你会发现,此时看到的,全是些十六进制数值(每 4 位二进制数可转换为一位十六进制数),这就是可执行文件的具体内容,当然,其中就包括可执行文件的代码了。(一头老牛:好亲切啊)(一只菜鸟:笨牛,你给我闭嘴,我眼都花了)。呵呵,此时,你是不是觉得看这些东西,有些那个?这些东西看起来就像有字天书,没人能靠这玩意儿来进行分析,于是乎。就有了相应的软件,可以将这些十六进制数值转换为

9、相应的汇编代码,这样的话,我们就可以对别人的软件进行分析了。这就是所谓的逆向分析了。呵呵,聪明的你现在一定在想,如果找到软件计算注册码的部分,并对其进行分析,弄懂它的计算方法,那么你不就不用通过¥的方式来进行软件注册了吗?当然,你也可以将此计算过程还原为任意一个你所熟悉的编程语言,那么,编译后的这个程序,就叫做注册机,它的功能就是计算某一特定软件的注册码。(呵呵,是不是经常在软件中看到此类说明?禁止制作和提供该软件的注册机及破解程序;禁止对本软件进行反向工程,如反汇编、反编译等)作者这样做,心情我们是可以理解的,毕竟人家花了那么多心思在自己的软件上,所以,我不希望你仅仅是因为交不起注册费的原因

10、来学习破解。总的说来,上边儿的介绍有点儿太理想化了,上面提到的分析方法,就是所谓的静态分析,此类分析常用的工具有 。静态分析,顾名思义,就是只通过查看软件的反汇编代码来对软件进行分析。一般如果只是想暴破软件,只进行静态分析就够了。但要想真正的弄清注册算法,一般还是要进行动态分析的,即能过调试器来一边执行程序一边进行分析。具体内容,我会在破解原理和调试器入门中详细说明,呵呵,毕竟现在都以经有点儿跑题了。我废话说了这么多,其实就是想告诉你汇编的重要性,我不要求你精通,但最少你也得能看懂吧,要不,还谈什么分析?虽然有哥们儿一点儿汇编都不懂就上路了,甚至还破掉了几个软件,但是,这样是不是惨了点儿?难不

11、成你想暴破软件暴破一辈子?其实你完全不用惧怕汇编的,看上去怪吓人的,其实跟你平时背那些控件的属性方法差不多,么多你都搞的定,汇编命令才有多少?而且,汇编不光只是在 件时有用,在好多地方也都有用,且用处巨大,所以我觉得,把汇编拿下,是件义不容辞的事:你只要相信它并不难就好了。(以下为第二次修改时加入)先给你讲一下 组成吧:任务就是执行存放在存储器里的指令序列。为此,除要完成算术逻辑操作外,还需要担负 。早期的 片只包括运算器和控制器两大部分。到了近几年,为了使存储器速度能更好地与运算器的速度相匹配,又在芯片中引入了高速缓冲存储器(知道为什么 4 赛扬贵那么多吗 ?)。(当!一个硬物飞了过来,话外

12、音:你讲这些做什么,我们又不要设计急什么嘛,由于汇编比较“低级 ” ;所以它是直接操作硬件的,你以为这是用 ,想什么时候用变量随手就可以拿来用,你不掌握好 部的一些工作分配情况,到时怎么来看汇编代码啊。(当!又一声,重要还不快点儿说)除了高速缓冲存储器之外的组成,大体上可以分为 3 个部分:LU(来进行算术和逻辑运算。这部分与我们的关系不太大,我们没必要管它。样与我们的关系不大。3. 这个才是最最重要的。工作寄存器,它在计算机中起着重要的作用,每一个寄存器相当于运算器中的一个存储单元,但它的存取速度却贼快贼快,比存储器要快很多了。它用来存放计算过程中所需要的或所得到的各种信息,包括操作数地址、

13、操作数及运算的中间结果等。下面我们专门的介绍这些寄存器。在介绍之前,有必要说点儿基础性的知识。知道什么是 32 位吧,就是说寄存器是 32 位的,晕等于没说。在 ,一个二进制位被看作是一位,八位就是一个字节,在内存中,就是以字节为单位来在存储信息的,每一个字节单元给以一唯一的存储器地址,称为物理地址,到时候访问相应的内存,就是通过这个地址。八个二进制位都能表达些什么呢?可以表达所有的 ,也就是说一个内存单元可以存储一个英文字符或数字什么的,而中文要用 来表示,也就是说两个内存单元,才能装一个汉字。十六位就是两个字节这不难理解吧,当然啦,那有了十六位,就肯定有三十二位六十四位什么的,三十二位叫做

14、双字,六十四位就叫做四字。今天我们所使的 信全是 32 位的了,除非你用的是 286 或更早的话。自然而然,的寄存器,也就是 32 位的了,也就是说一个寄存器,可以装下 32 个 0 或1(这其中不包括段寄存器)。大体上来说,你需要掌握的寄存器,有十六个,我一个一个给介绍给你:首先,介绍小翠儿(当!,我自己打我自己一下得了,最近看周星驰看多了),重说,首先,介绍通用寄存器。一共八个,分别是 其中,四个寄存器又可称为数据寄存器,你除了直接访问外,还可分别对其高十六位和低十六位(还计的我说它们是 32 位的吗?)进行访问。它们的低十六位就是把它们前边儿的 E 去掉,即低十六位就是 且它们的低十六位

15、又可以分别进行八位访问,也就是说,可以再进行分解,即 可分为 八位)低八位)。其它三个寄存器请自行推断。这样的话,你就可以应付各种情况,如果你想操作的是一个八位数据,那么可以用 L (八位数据)或 H (八位数据) ,如果你要操作的是一个十六位数据,可以用 X (十六位数据)三十二位的话,就用 三十二位数据)也许我这样说,你还是会不明白,没关系,慢慢来,我给你大概画张图吧,虽然不怎么漂亮: 高十六位 H L (我倒啊.都重画三遍了)明白了吗?不明白没有关系,你就按你自己的理解能力,能理解多少,就理解多少。这四个寄存器,主要就是用来暂时存放计算过程中所用的操作数、结果或其它信息。而 四个呢,就只

16、能用字来访问,它们的主要用途就是在存储器寻址时,提供偏移地址。因此,它们可以称为指针或变址寄存器。话说回来,从 386 以后,所有的寄存器都可以用来存储内存地址。(这里给你讲一个小知识,你在破解的时候是不是看到过样的形式呢?这就是说此时 装的是一个内存地址,而真正要访问的,就是那那个内存单元中所存储的值)。在这几个寄存器中,为堆栈指针寄存。堆栈是一个很重要的概念,它是以“后进先出” 方式工作的一个存储区,它必须存在于堆栈段中,因而其段地址存放于 存器中。它只有一个出入口,所以只有一个堆栈指针寄存器。 内容在任何时候都指向当前的栈顶。我这样说你可能会觉的还是不明白,那我举个例子吧,知道民工盖房吧

17、,假设有两个民工,一个民工(以下简称民工 A)要向地上铺砖,另一个民工(以下简称民工 B)给民工 A 递砖,民工 A 趴在地上,手边是民工 B 从远处搬来的板砖,他拿起来就用,民工 B 从远处搬来后,就还放在那一堆砖上,这样,民工 A 拿着用后,民工 B 随既就又补了上去,这就是后进先出。你在脑子里想象一下这个这程。有没有想明白,民工 A 永远是从最上边开始拿砖。堆栈就是这样,它的基址开始于一个高地址,然后每当有数据入栈,它就向低地址的方向进行存储。相应的入栈指令是 当有数据入栈,跟着改变,总之,它永远指向最后一个压入栈的数据。之后,如果要用压入堆栈的数据,就用出栈指令将其取出。相应的指令是

18、令执行后,加上相应的数据位数。特别是现在到了 统下面,堆栈的作用更是不可忽视, 用的数据,均是靠堆栈来传送的,即先将要传送的数据压入堆栈,然后 数,数会在函数体内用出栈指令将相应的数据出栈。然后进行操作。以后你就会知道这点的重要性了。许多明码比较的软件,一般都是在关键 ,将真假两个注册码压入栈。然后在 出栈后进行比较。所以,只要找到个关键 能在压栈指令处,下 d 命令来查看真正的注册码。具体内容会在后面详细介绍,本章暂不予讨论。另外还有 称为基址指针寄存器,它们都可以与堆栈段寄存器 用来确定堆栈中的某一存储单元的地址,来指示段顶的偏移地址,而 作为堆栈区中的一个基地址以便访问堆栈中的信息。变址

19、寄存器)和 的变址寄存器)一般与数据段寄存器 用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能,可以很方便地用于变址。在串处理指令中, 为隐含的源变址和目的变址寄存器时, 用,附加段 用,分别达到在数据段和附加段中寻址的目的。目前暂时不明白不要紧。接下来,再介绍如花(当当当,我再打自己三下算了)接下来,介绍一下专用寄存器,呵呵,有没有被这个名字吓倒?看起来怪专业的。所谓的专用寄存器,有两个,一个是 个是 们先来说这个 以说,是所有寄存器中最重要的一个了。它的意思就是指令指针寄存器,它用来存放代码段中的偏移地址。在程序运行的过程中,它始终指向下一条指令的首地址。

20、它与段寄存器用确定下一条指令的物理地址。当这一地址送到存储器后,控制器可以取得下一条要执行的指令,而控制器一旦取得这条指令就马上修改 内容,使它始终指向下一条指令的首地址。可见,计算机就是用 存器来控制指令序列的执行流程的。那些跳转指令,就是通过修改 值来达到相应的目的的。再接着我们说一下这个 志寄存器,又称 即程序状态寄存器。这一个是存放条件标志码、控制标志和系统标志的寄存器。其实我们根本不需要太多的去了解它,你目前只需知道它的工作原理就成了,我举个例子吧:用 减0470395 ;不相等的话,就跳到这里 ;这两条指令很简单,就是用 存器装的数减去 存器中装的数。来比较这两个数是不是相等,当

21、令执行过后,就会在 标志位上置相应值,如果结果为 0,也就是他们两个相等的话, 1,否则置 0。其它还有 出标志)号标志)位标志) 助进位标志)偶标志)等。这些你目前没必要了解那么清楚,会用相应的转移指令就行了。最后要介绍的就是段寄存器了(刚才是谁说的樱红?反正不是我)这部分寄存器一共六个,分别是 码段,据段,加段,栈段,及 两个还是附加段。其实现在到了 境下,段寄存器以经不如 代那样重要了。所以,我们知道就行了。啰嗦了这么多,相信你对 经有了个大概的了解了吧。什么?还是什么也不明白?呵呵,那也不要灰心,请相信这是我的错,是我没有讲清楚而已,你可以去参考一些书籍。我始终觉的,你案头有一本讲汇编

22、的书是非常非常有必要的,我这边儿是清华版的80编语言程序设计沈美明主编,46 元。我们接下来就再讲一讲一些常用的汇编指令吧。(由于考虑到目前以经有了相应的帖子,所以,我只是从汇编指令中,挑出一些最常用,需要掌握的,更多内容,还请参见书本。),B 比较 A 与 B 其中 A 与 B 可以是寄存器或内存地址,也可同时是两个寄存器,但不能同都是内存地址。这个指令太长见了,许多明码比较的软件,就用这个指令。,B 把 B 的值送给 A 其中,A 与 B 可是寄存器或内存地址,也可同时是两个寄存器,但不能同都是内存地址。a,a 异或操作,主要是用来将 a 清空入地址,例如 X,字符的地址装入 存器栈栈法指

23、令 格式:行的操作:(五章们来一步一步学习 件(80%读者昏死过去,且不省人世. 另有 20%在寻找附近可以用来打人的东西)不可不说一下学习破解的三个阶段:初级,修改程序,用 工具修改 件,称暴力破解,简称爆破中级,追出软件的注册码高级,写出注册机先说这爆破。所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了),那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。明白过来了吧,我们只要找到这个跳转指令,把它修改为我

24、们需要的“造型” ,这样,我们是不是就可以为所欲为了?(某软件双手放在胸口,你要干嘛?)常见的修改方法有两种,我给你举例说明:样来进行注册:00451239 0405(关键 来判断用户输入的注册码是否正确)0045123D 04572 (!第六章起码比你能一下把你家的牙膏给全挤出来要容易多了。你只要先到大街上买几根雷管,然后放到你的显示器上再点着就 (不难吧,记的点着后跑远点儿)爆破的原理我也说过了,相信你很容易就能理解了。我们今天就具体讲一下如何找到那个关键跳转以及如何才能买到即便宜又好用的雷管.先先看一下其有无加壳,有的话是用何工具加的壳,知道了以后用相应的工具将其脱掉或进行手工脱壳,参考

25、以有教程。接着我们就可以对脱过壳之后的软件来开刀了。你有两种选择,用 调试器,一般如果你遇上的是那种很菜的软件的话,用 果遇上的不是那种比较菜的,就买股票吧,因为股票是你如胶似漆的妻子!当!快醒醒啊.般如果你遇上的不是那种很菜的软件的话,就用调试器吧。先来说 们首先用进行反汇编(废话!)之后在串式参考中找到错误提示信息或可能是正确的提示信息双击鼠标左键来到相应的地址处。在 主窗口中分析相应汇编代码 ,找出关键跳转和关键 色光条停在关键跳转,在 窗口底部找到关键跳转的偏移地址 (实际修改地址)。用 到偏移地址(实际修改地址)修改机器码(或放上一根雷管),保存(点火) !而用调试器也同样简单,等会

26、儿会详细说明。道理废话了那么多,来实例动手说明吧:首先讲解用 进行爆破:【软件名称】中华压缩(软件版本】件大小】1041用平台】e/000【软件简介】中华压缩)是一款压缩、解压各种压缩文档的工具软件,它支持包括 式文件在内的各种常见压缩格式如:等。软件的出处是电脑报 2001 年的合订本配套光盘,的保护做的很那个,目前最新版应该好多了 .们开始吧,首先第一步是你得把它装上(引来野狼 N 头),之后先随便找个字符串填上去注册一下,会看到一个错误对话框,提示注册码不正确,无法注册 。接着我们用 看一下它用的是什么壳。场。脱过壳后我们用 上半分钟或半小时的时间来对它进行反汇编。我们以经反汇编完毕。之

27、后在串式参考中(字符串数据参考)中找刚才你看到的那个错误提示,找到之后双击几次,发现其只有一处调用。我们会来到 004,我把具体代码给贴上(请你从代码的最下边开始看):00484 043204 004 004 048 0404 0048 04830 040411C:004576 04 :004 00404 004822 045283C* ef |:0049 004ef :004 00404 004854 0452ef 软件注册成功,谢谢您的支持! 中华压缩(注册版 |:004 0040480 0432043 04A 049 049 0448910 0486 04by a (U)C):004)|

28、:004 004868 04030043 049 0403824:004 04by a (U)C):004)|* ef 注册码不正确,无法注册! 注册成功|:004888 0488ef 感谢您支持国产软件,祝您好运!|:004888 0488 搜索当前模块中的名称,然后在那一大堆函数中找到 下断点,它会提示你错误,并说无法设置中断点,是不是很过瘾?(呜呜呜.错了,再也不敢了.)呵呵,这个我也不知道什么原因,明明是用了这个函数嘛,就是不让断,其实我对 不是太那个(关键是讨厌它的下断方式)看来还是用我们的万能断点吧,输入注册名 输入注册码 19870219,然后用 断 到之后,回领空后一次 会出错

29、,看来所有的东东就在这里了.断一下,返回领空之后记着第一条指令的地址 0040呜呜.什么在 不让下呢?没关系,我们记下这个地址后仍旧用 加载程序,之后在反汇编窗口中找到 0040,然后按下 下断(会变为红色),下断之后便按 运行程序,接着输入注册名 注册码19870219 后按确定,程序会被 断到:0040|. 57 |. 34 |. 57 ; /|. 64 ; |. 59 |. |. 59 |. 6A 0B B ; / B (11.)0040|. 56 ; | |. 68 810 ; | 3201.)0040|. 53 ; |. 4S:; |. 56 |. 14 |. 56 |. 44 |.

30、 803D S:400040|. 59 |. 59 |. 74 5F |. 803D 1S:400040|. 74 56 |. 1 000013040|. 0S:; | 6A 01 0040|. 0 | 3020000 |. 68 8 8|. 1470500 |. 50 ; |. 53 ; |. 6A 3D D ; | 0000003|. 8050400 ; 到之后,可以像在 一样通过 个调试器跟我一样,也不喜欢 )来单步执行程序,我们按 32 下 程序就会出错,那我们在第二遍载入时按 到 20 多下时就仔细看看有没有可疑的地方,你一眼就可以看到 0040的这个关键 们只要追到这里时追进去就有

31、可能看到软件正确的注册码那还等什么呢?我们就进去吧.7 跟进后你会看的眼花眼花缭乱,到处都是 底哪个才是呢?现在知道我为什么让你用 吧(偶起初也是要用 ,但临时改变主意 _)用 一个最大好处就是可以真接看到寄存器中的值,特别是你通过 单步执行的时候,在反汇编代码的下边,会有一个小窗体,在那里可以显示相关指令中所使用的寄存器的值,爽吧!我们按 76 下 后,在 0040就可以第一次看到正确的注册码了,呵呵,我这边儿是71后你还会再陆续看到几次,爽?另外我还发现一个有趣的事情,在 ,一个注册名可以有两个注册码,呵呵,不知道是不是还有为特别用户准备的特别注册码以用来和普通的做区别 当程序通过比较,发现你输入的注册码不正确后竟然会再次算出另一个注册码来再比较一次,嘿嘿,我的第二个注册码是 25170288追入关键 的代码:0040$ 55 |. 8 |. 810|. 8065 0 S:00040|. 803D S:400040|. 53

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 模板/表格

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号