当前位置:文档之家› 脱壳基础知识入门

脱壳基础知识入门

脱壳基础知识入门
脱壳基础知识入门

脱壳基础知识入门

现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹。另外,论坛现在两极分化比较严重,高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但看到壳这么难,只好放弃了,造成新手与高手间一个断档,为了鼓励更多新人加入脱壳的行列,很有必要将壳有关知识总结一下。https://www.doczj.com/doc/bf6055982.html,主页提供的教学确实有点过时了,己到非更新不可了。相对于密码学算法,脱壳并不难,只要肯花时间,短期内还是比较容易取得成绩的。

第一课PE格式

要想学脱壳,第一步就得掌握PE格式,PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。

Microsoft Visual C++提供的WINNT.H里有PE数据结构的完整定义。

推荐文档:

ah007翻译的“PE文件格式”1.9版

qduwg翻译的PE文件格式

Iczelion's的PE文件格式

PE结构各字段偏移参考

学习PE格式的方法是自己先准备一个十六进制工具,如HexWorkshop,WinHex,用这些工具打开一个EXE文件对照着学。强烈推荐你用Stud_PE v.2.2.0.5这款工具辅助学习PE格式。PE格式学习的重点是在输入表(Import Table)这块。Stud_PE工具界面:

PE结构图:

第二课SEH技术

结构化异常处理(Structured Exception Handling,SEH)是Windows操作系统处理程序错误或异常的技术。SEH是Windows操作系统的一种系统机制,与特定的程序设计语言无关。

外壳程序里大量地使用了SEH,如果不了解SEH,将会使你跟踪十分困难。

SEH in ASM研究(一)by hume

SEH in ASM研究(二)by hume

Structured Exception Handling

加密与解密二版菜鸟学习笔记(2)-SEH结构化异常处理by ytcswb

由于Ollydbg对SEH处理异常灵活,因此脱壳用Ollydbg会大大提高效率。

附CONTEXT结构环境:

代码:

typedef struct_CONTEXT{

/*000*/DWORD ContextFlags;

/*004*/DWORD Dr0;

/*008*/DWORD Dr1;

/*00C*/DWORD Dr2;

/*010*/DWORD Dr3;

/*014*/DWORD Dr6;

/*018*/DWORD Dr7;

/*01C*/FLOATING_SAVE_AREA FloatSave;

/*08C*/DWORD SegGs;

/*090*/DWORD SegFs;

/*094*/DWORD SegEs;

/*098*/DWORD SegDs;

/*09C*/DWORD Edi;

/*0A0*/DWORD Esi;

/*0A4*/DWORD Ebx;

/*0A8*/DWORD Edx;

/*0AC*/DWORD Ecx;

/*0B0*/DWORD Eax;

/*0B4*/DWORD Ebp;

/*0B8*/DWORD Eip;

/*0BC*/DWORD SegCs;

/*0C0*/DWORD EFlags;

/*0C4*/DWORD Esp;

/*0C8*/DWORD SegSs;

/*0CC*/BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];

/*2CC*/}CONTEXT;

第三课认识壳

1.什么是壳?

在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。

推荐文档:

一切从“壳”开始

描述壳的示意图:

2.壳的加载过程

这里谈的加壳工具不是WinZIP、WinRAR等数据压缩工具,而是谈压缩可执行文件EXE或DLL的工具。加壳过的EXE文件是可执行文件,它可以同正常的EXE文件一样执行。用户执行的实际上是外壳程序,这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序,这一切工作都是在内存中运行的,整个过程对用户是透明的。

壳和病毒在某些方面比较类似,都需要比原程序代码更早的获得控制权。壳修改了原程序的执行文件的组织结构,从而能够比原程序的代码提前获得控制权,并且不会影响原程序的正常运行。

这里简单说说一般壳的装载过程。(参考了Ljtt以前写过的一篇文章)

1)获取壳自己所需要使用的API地址

如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API函数。

壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数:3个脱壳相关的重要函数介绍

2)解密原程序的各个区块(Section)的数据

壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。壳一般按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。

如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。这也是一些壳的特色之一,比如说原来的程序文件未加壳时1~2M大小,加壳后反而只有几百K。

3)重定位

文件执行时将被映像到指定内存地址中,这个初始内存地址称为基地址(ImageBase)。当然这只是程序文件中声明的,程序运行时能够保证系统一定满足其要求吗?

对于EXE的程序文件来说,Windows系统会尽量满足。例如某EXE文件的基地址为0x400000,而运行时Windows 系统提供给程序的基地址也同样是0x400000。在这种情况下就不需要进行地址“重定位”了。由于不需要对EXE

文件进行“重定位”,所以加壳软件把原程序文件中用于保存重定位信息的区块干脆也删除了,这样使得加壳后

的文件更加小巧。有些工具提供“Wipe Reloc”的功能,其实就是这个作用。

不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。这样“重定位”就很重要了,此时壳中也需要提供进行“重定位”的代码,否则原程序中的代码是无法正常运行起来的。从这点来说,加壳的DLL比加壳的EXE更难修正。

4)HOOK-API

程序文件中的输入表的作用是让Windows系统在程序运行时提供API的实际地址给程序使用。在程序的第一行代码执行之前,Windows系统就完成了这个工作。

壳一般都修改了原程序文件的输入表,然后自己模仿Windows系统的工作来填充输入表中相关的数据。在填充过程中,外壳就可填充HOOK-API的代码的地址,这样就可间接地获得程序的控制权。

5)跳转到程序原入口点(OEP)

从这个时候起壳就把控制权交还给原程序了,一般的壳在这里会有明显的一个“分界线”。但现在的猛壳己没这界限了,壳里有肉,肉里有壳。

3.压缩引擎

各类加壳软件,其压缩算法一般不是自己实现的,大多是调用其他的压缩引擎。目前压缩引擎种类比较多,不同的压缩引擎有不同特点,如一些对图像压缩效果好,一些对数据压缩效果好。而加壳软件选择压缩引擎有一个特点,在保证压缩比的条件下,压缩速度慢些关系不是太大,但解压速度一定要快,这样加了壳的EXE文件运行起来速度才不会受太大的影响。例如下面几个压缩引擎就能满足这要求:

1.aPLib压缩引擎https://www.doczj.com/doc/bf6055982.html,/,这个库对于低于64K的文件压缩效果较好,速度较快。

2.JCALG1压缩引擎,相对于aPlib,JCALG1对于大文件效果好些。

3.LZMA压缩引擎https://www.doczj.com/doc/bf6055982.html,/zh-cn/sdk.html,LZMA是7-Zip程序中7z格式的默认压缩算法,压缩率很高。

第四课常见压缩壳与加密壳

加壳软件按照其加壳目的和作用,可分为两类:一是压缩(Packers),二是保护(Protectors)。压缩这类壳主要目的是减小程序体积,如ASPacK、UPX和PECompact等。另一类是保护程序,用上了各种反跟踪技术保护程序不被调试、脱壳等,其加壳后的体积大小不是其考虑的主要因素,如ASProtect、Armadillo、EXECryptor 等。随着加壳技术的发展,这两类软件之间的界线越来越模糊,很多加壳软件除具有较强的压缩性能,同时也有了较强的保护性能。

1.ASPacK

主页:https://www.doczj.com/doc/bf6055982.html,/

ASPack是款Win32可执行文件压缩软件,可压缩Windows32位可执行文件(.exe)以及库文件(.dll、.ocx),文件压缩比率高达40%~70%。

2.UPX

主页:https://www.doczj.com/doc/bf6055982.html,/

UPX是一个以命令行方式操作的可执行文件经典免费压缩程序,压缩算法自己实现,速度极快,压缩比极高。(开源)

3.PECompact

主页:https://www.doczj.com/doc/bf6055982.html,/

PECompact同样也是一款能压缩可执行文件的工具(支持EXE、DLL、SCR、OCX等文件)。相比同类软件,PECompact 提供了多种压缩项目的选择,用户可以根据需要确定哪些内部资源需要压缩处理。同时,该软件还提供了加解密的插件接口功能。

4.ASProtect

主页:https://www.doczj.com/doc/bf6055982.html,/

ASProtect是一款非常强大的Windows32位保护工具,这4、5年来,其一直在更新进步。其开发者是俄国人Alexey Solodovnikov。它拥有压缩、加密、反跟踪代码、反-反汇编代码、CRC校验和花指令等保护措施。它使用Blowfish、Twofish、TEA等强劲的加密算法,还用RSA1024作为注册密钥生成器。它还通过API钩子(API hooks,包括Import hooks(GPA hook)和Export hooks)与加壳的程序进行通信。甚至用到了多态变形引擎(Polymorphic Engine)。反Apihook代码(Anti-Apihook Code)和BPE32的多态变形引擎(BPE32的Polymorphic Engine)。并且ASProtect为软件开发人员提供SDK,实现加密程序内外结合。

更多与壳有关的描述参考:

纵横间谁能相抗—论壳与加壳技术作者:forgot

常见加密壳官方站点

ASProtect https://www.doczj.com/doc/bf6055982.html,/

ACProtect https://www.doczj.com/doc/bf6055982.html,/

Armadillo https://www.doczj.com/doc/bf6055982.html,/srt-news.shtml

EXECryptor https://www.doczj.com/doc/bf6055982.html,/cgi-bin/anon-www.cgi/https://www.doczj.com/doc/bf6055982.html,/

Obsidium http://www.obsidium.de/

PESpin http://pespin.w.interia.pl/

VMProtect http://www.polytech.ural.ru/

Xtreme-Protector https://www.doczj.com/doc/bf6055982.html,/xprotector/

Themida/WinLicense https://www.doczj.com/doc/bf6055982.html,/downloads.php

第五课文件类型分析

拿到一个壳,第一步就是用相关工具分析一下是什么壳,然后就可心中有数地跟踪分析。文件分析工具有PEID,FileInfo等。

1.PEiD

PEiD的GUI界面操作非常方便直观。它的原理是利用查特征串搜索来完成识别工作的。各种开发语言都有固定的启动代码部分,利用这点就可识别出是何种语言编编译的。同样,不同的壳也有其特征码,利用这点就可识别是被何种壳所加密。PEiD提供了一个扩展接口文件userdb.txt,用户可以自定义一些特征码,这样就可识别出新的文件类型。

有些外壳程序为了欺骗PEiD等文件识别软件,会伪造启动代码部分,例如将入口代码改成与Visual C++6.0所编程程序入口处类似代码,即可达到欺骗目的。所以,文件识别工具所给出的结果只是个参考,文件是否被加壳处理过,还得跟踪分析程序代码才可得知。可参考这个文档了解如何伪装:让侦测工具把壳识别为VC++7.0的源代码。目前Hying的壳PE-Armor伪装能力是最强的:

PEiD分析不出类型的文件就报告是“Nothing found*”,如出现这情况一般都是未知壳或新版的壳。

下面PEiD识别出这个软件是用Asprotect1.2x加的壳。

2.FileInfo

FileInfo(简称Fi)另一款不错的文件检测工具。Fi运行时是DOS界面,在DOS窗口中运行程序相当不便,建议采用下面的技巧:

1.用鼠标将文件拖到Fi主文件上。

2.将Fi快捷方放进Windows的SendTo文件夹里.以后要分析某文件,只需右击“发送到”功能就可打开Fi。FileInfo升级慢,其识别库不能自定义。而PEiD升级比较频繁,用户也可自定义特征码,因此PEiD用的比较普遍。

有时,FileInfo和PEID会报“PE Win GUI”,Win GUI就是Windows图形用户界面程序统称,表明程序可能没加壳。但不排除也有加壳的可能性,下图是一个ExeCryptor2.2x的壳,FileInfo报“*PE Win GUI*section*??”,其不能识别出来。识别信息中带了个问号,表明FI对给出的结果不是太肯定。

第六课寻找OEP

一般的压缩壳,如Aspack等都有专用的脱壳机。而加密壳(如ASProtect,Armadillo)一般很少有脱壳机,必须手工脱壳。手工脱壳一般情况是分三步:一是查找程序的真正入口点(OEP);二是抓取内存映像文件;三是输入表重建。(当然现在的加密壳复杂些,要考虑更多的东西)

OEP是Original Entry Point缩写,即程序加壳前的真正的入口点。

外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序初始化时保存各寄存器的值,

外壳执行完毕,会恢复各寄存器内容。其代码形式一般如下:

PUSHFD;将标志寄存器入栈保存

PUSHAD;push eax,ecx,edx,ebx,esp,ebp,esi,edi

……;外壳代码部分

POPAD;pop edi,esi,ebp,esp,ebx,edx,ecx,eax

POPFD;恢复标志寄存器

JMP OEP;

OEP:……;解压后的程序原代码

为了讲述方便,本节用UPX加壳的Win98记事本来演示。首先用PEid查看加壳前的记事本:

PEid显示Notepad.exe程序是用Microsoft Visual C++6.0编译的,接下来用UPX来加壳,方法是开个DOS窗口,用命令upx notepad.exe。如下图所示:

这时再用PEid查看加壳的文件,PEid会给出如下信息:UPX0.89.6-1.02/1.05-1.24->Markus&Laszlo UPX的壳可以用UPX.exe自身来脱,命令是:upx-d文件名。一些变种的UPX壳用UPX.EXE自身脱不了,这时可以试试UPX ShellEx这款工具。

本节实例下载:notepad.upx.rar

脱壳前建议用PE工具LordPE打开目标文件查看一下区块,以尽可能地多了解一些信息,对脱壳有帮助,如下图:

1.根据跨段指令寻找OEP

推荐用Ollydbg来调试脱壳,比SoftICE和TRW2000方便多了。运行Ollydbg,点击菜单“选项/调试设置”,将第一次暂停设在WinMain函数上。再用Ollydbg打开实例notepad.upx.exe就可中断在外壳的入口点处了:

上图相关代码如下:

0040E8C0>60pushad//一开始Ollydbg就会中断这行,这个就是外壳的入口点,注意这个pushad指令绝大多数加壳程序在被加密的程序中加上一个或多个段,所以依据跨段的转移指令(JMP)就可找到真正的入

口点,此时就会有POPAD/POPFD指令出现。UPX用了一次跨段的转移指令(JMP),在跳到OEP处会看到虚拟地址的值有一个突变,此时就能确定OEP了。

UPX壳比较简单,大家不必要跟踪去找这个跨段的转移指令,中断WinMain后,只需要在Ollydbg里往下翻屏,就会发现这个跨段转移指令:

上图相关代码如下:

0040EA0E61popad//注意这里的popad指令,和开始的pushad对应

0040EA0F-E9B826FFFF jmp004010CC//这里跳到OEP,将光标移到这,按F4执行到这行

这一句0040EA0F jmp004010CC就是跳到OEP的指令,执行到这,UPX外壳己将程序解压完毕,并模拟Windows 加载器的将原始程序加载到内存,004010CC就是映射到内存目标程序的入口点,此时就可抓取内存映像文件了。

2.根据堆栈平衡原理找OEP

这个堆栈平衡原理其找OEP原理这篇文档描述的比较详细:寻找真正的入口(OEP)--广义ESP定律作者:Lenus 操作方法:多数壳在运行到OEP的时候ESP=0012FFC4,这就是说程序的第一句是对0012FFC0进行写入操作,只要在0012FFC0下硬件写入断点(命令行里键入HW12FFC0),我们就能停在OEP的第二句处。

用OllyDBG重新加载实例程序notepad.upx.exe,在命令行下硬件写断点:

按F9执行程序,就会中断在OEP第二行:

此时如果将光标向上移,会发现第一句代码变乱了:

004010C7000D0A000055add[5500000A],cl

004010CD8BEC mov ebp,esp

这是因为Ollydbg将数据当汇编代码来分析了,你可以按Ctrl+ALT+向上光标键将当前显示的代码向上滚动一个字节就可看到正确的汇编代码了:

004010CC55push ebp

004010CD8BEC mov ebp,esp//中断在这行

004010CF83EC44sub esp,44

004010D256push esi

004010D3FF15E4634000call[4063E4];kernel32.GetCommandLineA

中断后,别忘点击菜单“调试/硬件断点/”打开硬件断点面板,将刚才的硬件断点删除。

小知识:硬件断点的原理作者:Lenus

3.根据编译语言特点找OEP

各类语言编译的文件入口点都有一些规律,可以这利用这点来寻找入口点。

1)Delphi程序

执行程序,用LordPE(或Prodump)选dump(full)脱壳,存为dump.exe。接着用Hex Workshop打开dump.exe,搜索文本“runtime”,搜到后,向前查找离“runtime”最近的十六进制数字“558B EC”,数字所在的地址就是程序的OEP。

2)Visual C程序

可以利用Visual C启动部分的几个函数GetCommandLineA(W)、GetVersion、GetModuleHandleA(W)、GetStartupInfoA(W)等来定位程序的OEP。

常见的各类编译语言的入口汇编代码都要熟悉,因为一些加密强壳会偷OEP处的代码到壳里,一般情况各编译语言入口代码都相同,到时只需要直接引用相关程序的入口代码,这给我们恢复代码带来方便。

4.用内存断点找OEP

Author:Lenus

From:https://www.doczj.com/doc/bf6055982.html,/&https://www.doczj.com/doc/bf6055982.html,/

E-mail:Lenus_M@https://www.doczj.com/doc/bf6055982.html,

--------------------------------------------------

1.前言

发现论坛中很多兄弟在询问:什么是二次内存断点,三次内存断点。还有很多人对内存断点的原理不是很明

白。其实只要懂得壳是如何解压代码的,那么就完全可以按自己的喜欢来下断。

本文要解决的问题是:

1.什么是内存断点?

2.如何在寻找OEP时使用内存断点。

3.内存断点的局限性。

2.内存断点寻找OEP的原理

i.首先,在OD中内存断点,硬件断点和普通断点(F2下断)是有本质区别的。硬件断点等效与SoftICE命令bpm,他的中断要用到DR0-DR7的调试寄存器,也就是说OD通过这些DR0-DR7的调试寄存器来判断是否断下。

普通断点(F2下断)等效于bpx,他是在所执行的的代码的当前地址的一个字节修改为CC(int3)。当程序运行到int3的时候就会产生一个异常,而这个异常将交给OD处理,把这个异常的regEIP-1以后就正好停在了需要的中断的地方(这个根据系统不同会不一样),同时OD在把上面的int3修改回原来的代码。

而内存断点基本上使用的是对代码使用的保护属性来实现中断。

内存断点分为:内存访问断点,内存写入断点。

我们知道,在程序运行的时候会有3种基本的状态产生:读取,写入,执行。

004AE242A100104000mov eax,dword ptr ds:[004AE24C]//004AE24C处的内存读取

004AE247A300104000mov dword ptr ds:[004AE24C],eax//004AE24C处的内存写入

004AE24C83C001add eax,1//004AE24C处的内存执行

那么我们应该如何中断在上面的几行呢?

1.当我们对004AE24C下内存访问断点的时候,可以中断在004AE242也可以中断在004AE247。

2.当我们对004AE24C下内存写入断点的时候,只能中断在004AE247。

3.当我们对004AE24C下内存访问断点的时候,能中断在004AE24C。

到这里你可能不明白了,为什么内存访问断点能中断在004AE247这一句对004AE24C的写入,而且还能中断在004AE24C的执行呢?

其实很简单,我们只要仔细体会一下“内存访问”这四个字的含义遍可以知道,当我们对004AE24C进行读取的时候需要“访问”他吧,当我对004AE24C进行写入的时候也需要“访问”他吧!!当然我们要执行内存地址004AE24C的代码的时候也是还是要“访问”他的!

所以我们不难得出下面的结论:

1.内存写入中断的地方,一定是也可以用内存访问中断。

2.内存执行的地方,也可以用内存访问中断。

如果这时你认为,那么内存写入岂不是没用了。呵呵~那我要告诉你当然不是,如果你想快速的准确的定位到004AE247这一行的时候,那么他就大有作用了!

总结一下:内存断点不修改改原代码,不会像普通断点那样因为修改代码被程序校验而导致中断失败;对于区段的访问只是区域大了一点,其原理和上面分析的三行代码是一样的。

ii.如何使用内存断点来寻找OEP呢?

要回答这个问题首先要回答这一个问题:壳是如何解压代码的?

正如我们知道的,壳如果要把原来加密或压缩的代码运行起来就必须要解压和解密原来的代码。而这一个过程我们难道不能将他看做是对代码段(code段)的写入吗?好了,解压完毕了。我们要从壳代码的区段JMP到原来的代码段的时候,难道不正是对代码段(code段)的执行吗?

理清了上面的关系就好办了,那么如果载入OD后,我们直接对code段下内存访问断点的时候,一定会中断在壳对code段的写入的代码的上面,就像上面的004AE247的这一行。而如果当他把code段的代码全部解压解密完毕了以后,JMP到OEP的时候,我们是不是还可以停在OEP的代码上面呢?而且每按下F9都会中断,因为这时code 段在执行中哦!

相信很多人到这里已经明白了,为什么在教程中到达了某一个时候,某一行的时候。牛人们就叫我们对code

段下内存访问断点了吧。

而如果你还要继续问我为什么一定要到那个地方才可以下断呢?我难道不可以一开始就下断吗?

正入我上面所说的,如果你在前面下断很可能壳对code段还没解压完毕呢,这时如果你不停的按F9,你将会看到OD的下方不断的在提示你“对401000写入中断”“对401002写入中断”“对401004写入中断”.......如果你不介意按F9到他把正个code段写完的话,我除了同情你的“F9”以外,没什么其他的意见!

那么我们就没有别更快一点的办法了吗?

有的!那就是我们呼之欲出的两次内存断点办法。

怎么理解两次内存断点呢?

让我来做一个假设吧,假设我是一个壳的作者。一个EXE文件的有code段,data段,rsrc段.....依次排列在你的内存空间中,那么我会怎么解码呢?呵呵~我比较笨一点,我会先将code段解码,然后再将data段解压,接着是rsrc段......那么聪明的你不难发现,只要你在data断或者rsrc段下内存访问断点,那么中断的时候code段就已经解压完毕了。这时我们再对code段下内存反问断点,不就可以到达OEP了吗?

这里注意上面虽然下了两次内存访问断点,但是本质是不一样的,目的也是不一样的。

1.对data段下内存访问断点而中断是因为内存写入中断,目的是断在对对data段的解压时,这时壳要对data 段写数据,但是code段已经解压完毕。

2.对code段下内存访问断点而中断是因为内存执行中断,目的当然就是寻找OEP了。

总结一下:如果我们知道壳在什么地方对code段解压完毕我们就可以使用内存断点,找到OEP。如果不知道,那么我们就依靠2次内存断点去找,如果还不行就用多次内存断点。总之明白了原理在多次的内存断点其实都一样。从这个过程中我们了解的是壳在对区段解码的顺序!

iii.实战

说了这么多,我想大家都越越欲试了吧。

好吧,来弄一个猛壳怎么样:

注:本节实例有些难度,不适合新手练习,新手可以跳过这个实例的学习,等找到合适的实例会补充上来的本节实例下载:unpackme.rar

这个壳是一个hying的旧版,我们用他来实验一下我们内存断点法。

OD载入以后来到这里

0040D000u>56push esi//这里

0040D00152push edx

0040D00251push ecx

0040D00353push ebx

0040D00455push ebp

0040D005E815010000call unpackme.0040D11F

根据跟过一次的经验我们将先设置,除int3异常以外忽略其他异常,SHIFT+F9

003725B164:89250000000>mov fs:[0],esp

003725B8CC int3

003725B990nop//到这里

003725BA8BCD mov ecx,ebp

然后再设置除“除零”异常外,忽略其他异常。SHIFT+F9

00372660F7F3div ebx//到这里

0037266290nop

下面是很多的单步异常,太麻烦我们不管他,现在开始用内存断点的方法(记得将所有异常忽略)。

对code段下内存访问断点,希望他已经解压完毕。方法是按ALT+M键打开内存窗口,在.code段按F2设断:SHIFT+F9执行:

0040D19D A4movs byte ptr es:[edi],byte ptr ds:[esi]//还没解完呢

0040D19E B302mov bl,2

对data段下内存“写入”断点,试试看他是不是要写data段。

00372712F3:A4rep movs byte ptr es:[edi],byte ptr ds:[esi]//断到这里

003727145E pop esi

下面再对code段下内存访问断点。F9

003728558907mov dword ptr ds:[edi],eax;SHELL32.DragFinish//这里是对IAT加密

的地方了!!!

003728575A pop edx

003728580FB642FF movzx eax,byte ptr ds:[edx-1]

0037285C03D0add edx,eax

0037285E42inc edx

0037285F83C704add edi,4

0037286259pop ecx

00372863^E2A9loopd short0037280E

00372865^E963FFFFFF jmp003727CD

0037286A8BB593060000mov esi,dword ptr ss:[ebp+693]//到这里下断F2

现在如果再对data下访问断点已经是没用了。这时应该格外的小心。

我们现在就想既然这一段是对code解码的,那么我们就绕过他吧!

到0037286A下断F2,然后清除内存断点!!!!

F9以后停在这里,继续对code下内存访问断点。

看看左下角还在解码,哎~真是麻烦!

003728E1/EB1D jmp short00372900

003728E3|25FFFFFF7F and eax,7FFFFFFF

003728E8|038583060000add eax,dword ptr ss:[ebp+683]

003728EE|2B858F060000sub eax,dword ptr ss:[ebp+68F]

003728F4|8BDE mov ebx,esi

003728F6|2BD8sub ebx,eax

003728F8|8958FC mov dword ptr ds:[eax-4],ebx//停在这里

003728FB|83C708add edi,8

003728FE^|EB DB jmp short003728DB

00372900\64:FF3530000000push dword ptr fs:[30]//清除内存断点以后到这里下断,F9

又是一段解码的代码,再次使用上面的办法手动跳出去。

现在继续对code段下内存访问断点!!F9以后到达这里。

004010CC FFD7call edi;unpackme.004010CE//OEP哦

004010CE58pop eax

004010CF83EC44sub esp,44

004010D256push esi

004010D390nop

004010D4E8B518F7FF call0037298E

004010D98BF0mov esi,eax

呵呵~虽然不是我们熟悉的OEP,但是地址是没错了,况且根据我们的步骤,我可以很肯定的说这是code段的第一次“执行”中断!

所以这就是OEP了。

总结一下:当我们在寻找OEP的时候,要多次对code下断“赌”一“赌”他解压完毕,如果不是就对别的段试试~如果程序跑飞了,那就没办法了,重来呗~其实说起来要赌的是:当data段,idata段,rsrc段摆在你的面前,你会好好“珍惜”那个段,不过还好上天还会给我们从来一次的机会(ctrl+F2^_^),那么我们会对那个不会跑飞的段说3个字----“先断你”如果非要在上面加一个次数,我希望是“一次内存断点就好了”

vi.下面来讨论一下内存断点的局限性问题。

是不是什么壳都可以用内存中断啊?

不是每个都可以的,一些像UPX和ASPACK就不行。

为什么?

呵呵~follew me!

情况1.

我们来看看UPX的壳

首先,他的壳代码在UPX1段。

这里是他要跳到OEP的地方

0040ED4F/7711ja short NOTEPAD_.0040ED62

0040ED51|01C3add ebx,eax

0040ED53|8B03mov eax,dword ptr ds:[ebx]

0040ED55|86C4xchg ah,al

0040ED57|C1C010rol eax,10//在解码

0040ED5A|86C4xchg ah,al

0040ED5C|01F0add eax,esi

0040ED5E|8903mov dword ptr ds:[ebx],eax

0040ED60^|EB E2jmp short NOTEPAD_.0040ED44

0040ED62\240F and al,0F

0040ED64C1E010shl eax,10

0040ED6766:8B07mov ax,word ptr ds:[edi]

0040ED6A83C702add edi,2

0040ED6D^EB E2jmp short NOTEPAD_.0040ED51//回跳解码

0040ED6F61popad

0040ED70-E95723FFFF jmp NOTEPAD_.004010CC//跳到OEP

我们看到他在对code段解压完毕的时候马上就JMP到OEP去了,那么我们根本就来不及使用内存断点的办法。

你可能说,我可以在

0040ED6F61popad//这一句下段然后使用啊

呵呵~~当然可以,不过你把花在下内存断点的时间,多按下几次F8不更好?!

也就是说当一个壳如果他在JMP到OEP前的一行代码仍在都在对code段解压,那么我们就不能再使用这种办法了!

或者说我们没必要使用内存断点更贴切一点!

情况2.

对于一些在OEP处有stolen code的代码

我们来看看一个OEP

0049E2F4u>55push ebp//OEP

0049E2F58BEC mov ebp,esp

0049E2F783C4F4add esp,-0C

0049E2FA B8BCE04900mov eax,unpack.0049E0BC

0049E2FF E8048CF6FF call unpack.00406F08//这里调用子程序

0049E304A1B8FE4900mov eax,dword ptr ds:[49FEB8]

0049E30950push eax

0049E30A6A00push0

0049E30C681F000F00push0F001F

0049E311E8E68EF6FF call//API

0049E316A360194A00mov dword ptr ds:[4A1960],eax

0049E31B833D60194A0000cmp dword ptr ds:[4A1960],0

这个软件在被PESPIN加壳了以后这些全被偷掉了!

也就是说,壳在模拟OEP代码的时候必然会执行

0049E2FF E8048CF6FF call unpack.00406F08//这一步

而这个地方是call向code段的。如果我们使用内存访问断点,那么就停在这个子程序的地方

00406F0850push eax//会停在这里

00406F096A00push0

00406F0B E8F8FEFFFF call

00406F10BA04F14900mov edx,unpack.0049F104

00406F1552push edx

这里既不是处理stolen code的地方,也不是FOEP的地方。这就会对我们的判断产生误导。

当然你可以alt+F9返回到壳处理stolen的地方,然后用内存断点,或者按几下F8到达FOEP处,但试问如果你拿到一个未知的壳的时候又怎么知道应该这么处理呢?

还有其他一些情况留给大家总结吧!

在下的砖已抛出,各位的玉不久矣。

--------------------------------------------------

3.总结

好了说了很多,大家应该对内存断点的办法有了全面的了解,如果了解了内存断点的原理就不难明白他的使用方法,不难明白为什么有写壳不能使用内存断点的办法,其实任何的一种办法都需要经验的积累。相信如果大家在回答开篇的3个问题,已经不难了。

大家可以结合原理再好好的体会一下《手动脱壳进阶第八篇Skvp1.32》这篇文章。

第七课Dump内存映像

外壳程序解压还原后就会跳到OEP处执行,此时内存映像文件是己解压的程序。这时就可抓取内存映像文件了(该过程称为Dump)。当然不一定非要在程序原入口点抓取,只要能保证内存映像文件是己还原的就行了。有关Dump技术的原理大家可以参考:浅谈脱壳中的Dump技术作者:Lenus

继续上一个实例notepad.upx.exe,到OEP后就可以Dump取内存映像文件:

004010CC55push ebp

004010CD8BEC mov ebp,esp

004010CF83EC44sub esp,44

运行LordPE.EXE,点击Options,默认选项如下:

默认选上“Full dump:paste header from disk”,PE头的信息直接从磁盘文件获得。设置好后,在LordPE的进程窗口选择notepad.upx.exe,点击右键,执行“dump full”菜单命令。如图:

将内存抓取的文件另存为dumped.exe,此时程序还不能运行,接下来就是重建输入表。

第八课重建输入表

在脱壳中输入表处理是很关键的一个环节,因此要求脱壳者对PE格式中的输入表概念非常清楚。在磁盘文件中,PE文件的输入表结构如下图所示:

图8.1磁盘文件中的输入表

PE文件运行时,Windows系统加载器首先搜索OriginalFirstThunk,如果存在,装载程序迭代搜索数组中的每个指针,找到每个IMAGE_IMPORT_BY_NAME结构所指向的输入函数的地址,然后用函数入口地址来替代由FirstThunk指向的IMAGE_THUNK_DATA数组里的元素值(即用真实的函数地址填充到IAT里)。因当PE文件装载内存后准备执行时,上图己转换成这种情况了:

图8.2PE文件装载内存后的输入表

此时输入表中其它部分就不重要了,程序依靠IAT提供的函数地址就可正常运行(图8.2红圈部分)。如果程序加壳了,那壳自己模仿Windows装载器的工作来填充IAT中相关的数据,此时内存中就一张IAT表,输入表的其他部分是不存的(当然不是绝对的,也有不少壳,如Aspack等,内存中会出现完整的输入表结构),如图8.3所示。

图8.3外壳加载程序后的内部IAT

输入表重建就是根据图8.3这张IAT恢复整个输入表的结构(即图8.1这个结构),ImpREC这款工具就是这个功能。

一些压缩壳,填充IAT过程中没做什么手脚,用ImpREC工具可以直接重建输入表。而一些加密壳为了防止输入表被还原,就在IAT加密上大作文章,此时壳填充IAT里的不是实际的API地址,而是填充壳中用来HOOK-API的外壳代码的地址。这样壳中的代码一旦完成了加载工作,在进入原程序的代码之后,仍然能够间接地获得程序的控制权。因为程序总是需要与系统打交道,与系统交道的途径是API,而API的地址已经替换成了壳的HOOK-API 的地址,那程序每一次与系统打交道,都会让壳的代码获得一次控制权,这样壳可以进行反跟踪继续保护软件,同时也可完成某些特殊的任务。所以重建输入表的关键是获得没加密的IAT,一般的做法是跟踪加壳程序对IAT 处理过程,修改相关指令,不让外壳加密IAT。

UPX、ASPack等加壳保护的壳没加密IAT,而ASProtect、tElock等加密保护的壳都对IAT进行了加密处理。这篇先来简单的,即UPX壳。用OD打开上面的notepad.upx.exe实例,运行到OEP。(实际跟踪过程中,不一定要到OEP,只要外壳处理完IAT就可)然后如下操作:

1)运行ImportREC,在下拉列表框中选择notepad.upx.exe进程,如图:

2)上面己得知notepad.upx.exe的OEP地址是4010CC,则在左下角OEP处填入OEP的RVA值,这里填上10CC。点击“IAT AutoSearch”按钮,让其自动检测IAT偏移和大小,如出现下图表示ImportREC自己找到IAT的地址与大小了,即IAT地址:000062E0,大小248。

如果ImportREC没找到IAT偏移,则必须手工填入IAT偏移和大小(IAT偏移手动获得以后再讲述)。

3)点击“Get Import”按钮,让其分析IAT结构得到基本信息,如下图所示:

4)如发现某个DLL显示"valid:NO",按"Show Invalids"按钮将分析所有的无效信息,在Imported Function Found栏中点击鼠标右键,选择"Trace Level1(Disasm)",再按"Show Invalids"按钮。如果成功,可以看到所有的DLL都为"valid:YES"字样;

5)再次刷新"Show Invalids"按钮查看结果,如仍有无效的地址,继续手动用右键的Level2或3修复;

6)如还是出错,可以利用"Invalidate function(s)"、"Delete thunk(s)"、编辑Import表(双击函数)等功能手动修复。

7)开始修复已脱壳的程序。选择Add new section(缺省是选上的)来为Dump出来的文件加一个Section(虽然文件比较大,但避免了许多不必要的麻烦)。

8)单击"Fix Dump"按钮,并选择刚在前面己Dump出来的文件。如修复的文件名是"Dump.exe",它将创建一个"Dump_.exe",此外OEP也被修正。

经过这些步骤,这个UPX壳己成功脱掉。此时再用PEID查一下脱壳后的程序dumped_.exe,会显示是“Microsoft Visual C++6.0SPx Method1”,如下图所示:

再用LordPE查看脱壳后的输入表:

从上图可以看出,输入表己正确修复,此时脱壳后的文件己能成功运行了。

第九课手动确定IAT的地址与大小

在第八课中讲到,点击ImportREC的“IAT AutoSearch”按钮,一般情况下ImportREC可以自动识别出IAT地址与大小。但如果不能自动识别,就必须手动确定IAT地址与大小,然后将IAT的RVA与Size填进ImportREC,点击“Get Import”按钮就可得到输入表。

还是用上一节实例演示,用OD打开notepad.upx.exe,来到OEP处:

随便找一个API函数调用语句,如:

004010D3FF15E4634000call[4063E4];kernel32.GetCommandLineA

其中地址4063E4就是IAT中的一部分,在数据窗口下命令:D4063E4,显示如下:

上图每一组数据都是指向一个API函数,如8D2C817C就是地址:7C812C8D,在OD里按Ctrl+G,输入7C812C8D 跳到这个地址就会发现是kernel32.GetCommandLineA函数:

IAT是一块连续排列的数据,因此在数据窗口向上翻屏,直到出现00数据,寻找IAT起始地址:

然后向下翻屏,寻找IAT结束地址:

为了直观些,你也可以这样让数据窗口直接显示这些API函数,以确定IAT是否正确,在数据窗口点击鼠标右键:调整显示格式后的数据窗口:

这样就直观了,IAT中每组数据指向一个API函数,各DLL之间是以000000分开的。

因此IAT范围:0x4062E4~0x406524,大小为0x406524-0x4062E4=0x240

如果IAT加密了,此时IAT中的地址不是指向系统DLL中的API函数了,可能指向外壳。这就十分有必要找到外壳处理IAT的代码了,前面己说过,外壳加载时,会模拟Windows加载器,向IAT里填充当前操作系统API函数的实际地址。所以,在IAT里设个内存写断点,就可中断到这段代码处。

重新加载notepad.upx.exe,在IAT某个地址下内存写断点,这里选择0x4062E4这个地址设内存写断点,先在数据窗口下命令:D4062E4

然后选择一个地址,点击鼠标右键,下“内存写断点”。

此时只要有数据写入4062E4地址处,OD就会中断,按F9运行OD,会中断这里:

0040E96D>/8A02mov al,[edx]

0040E96F.|42inc edx

0040E970.|8807mov[edi],al

0040E972.|47inc edi

0040E973.|49dec ecx

0040E974.^\75F7jnz short0040E96D

这段还不是处理IAT,按F9继续执行程序,会中断这里:

0040E9E9>/8A07mov al,[edi]

0040E9EB.|47inc edi

0040E9EC.|08C0or al,al

0040E9EE.^|74DC je short0040E9CC

0040E9F0.|89F9mov ecx,edi

0040E9F2.|57push edi//函数名字符串

0040E9F3.|48dec eax

0040E9F4.F2:AE repne scas byte ptr es:[edi]

0040E9F6.|55push ebp//DLL模块句柄

0040E9F7.FF96A4EC0000call[esi+ECA4];kernel32.GetProcAddress

0040E9FD.|09C0or eax,eax

0040E9FF.|7407je short0040EA08

0040EA01.|8903mov[ebx],eax//EBX指向IAT,将取得的API地址填充进IAT

0040EA03.|83C304add ebx,4//指向下一个地址

0040EA06.^\EB E1jmp short0040E9E9

0040EA08>FF96A8EC0000call[esi+ECA8]

上面这段就是UPX外壳填充IAT的全过程,感兴趣的,动态跟踪一下就明白了。这里用GetProcAddress函数获得函数地址:

FARPROC GetProcAddress(

HMODULE hModule,//DLL模块句柄

LPCSTR lpProcName//函数名

);

为了方便大家学习脱猛壳技术,根据我自己的经验,将一些比较不错的文章列出:

Obsidium壳:

Obsidium外壳学习手记

Obsidium1.2.5.0主程序脱壳记录点滴(SDK修复部分)

Armadillo壳:

试玩armadillo3.50a一点心得(基础知识)

Armadillo COPYMEMEII之DUMP的一个LOADPE小插件(利用插件Dump取COPYMEMEII保护的程序)

Armadillo3.6主程序脱壳(Dump取COPYMEMEII保护的程序另一方法)

Patch修复Armadillo的IAT乱序(处理IAT乱序)

Armadillo中code splicing的几种处理方法(手工修复Code Splicing)

Armadillo客户版Code Splicing+Import(利用ArmInline工具修复Code Splicing)

浅谈Armadillo V.3.75与V.3.78的保护(Nanomites原理概念,即CC保护)

Blaze Media Pro5.05脱壳+基本修复CC(int3)+破解(修复CC)

Armadillo V4.40主程序脱壳(目前处理CC很好的一个方法)

ASProtect2.x SKE壳:

nspack3.5主程序脱壳分析(Aspr SKE2.X)(输入表)

Asprotect SKE2.2的Advanced Import protection保护技术(输入表)

莱鸟脱Aspr2.11SKE+修复stolen(Dump法对付stolen OEP)

ASProtect.SKE.2.11stolen code解密(ASProtect2.11的stolen与SDK修复技术)

ASProtect_SKE_2.3Beta_Build0319stolen code分析(ASProtect2.22/2.23的stolen与SDK修复技术) Asprotect2.XX SKE IAT Fixer(ASProtect脚本,功能非常强大!)

……(ASProtect2.x部分没完成)

软件破解入门教程

先教大家一些基础知识,学习破解其实是要和程序打交道的,汇编是破解程序的必备知识,但有可能部分朋友都没有学习过汇编语言,所以我就在这里叫大家一些简单实用的破解语句吧! ---------------------------------------------------------------------------------------------------------------- 语句:cmp a,b //cmp是比较的意思!在这里假如a=1,b=2 那么就是a与b比较大小. mov a,b //mov是赋值语句,把b的值赋给a. je/jz //就是相等就到指定位置(也叫跳转). jne/jnz //不相等就到指定位置. jmp //无条件跳转. jl/jb //若小于就跳. ja/jg //若大于就跳. jge //若大于等于就跳. 这里以一款LRC傻瓜编辑器为例,讲解一下软件的初步破解过程。大家只要认真看我的操作一定会!假如还是不明白的话提出难点帮你解决,还不行的话直接找我!有时间给你补节课!呵呵! 目标:LRC傻瓜编辑器杀杀杀~~~~~~~~~ 简介:本软件可以让你听完一首MP3歌曲,便可编辑完成一首LRC歌词。并且本软件自身还带有MP3音乐播放和LRC歌词播放功能,没注册的软件只能使用15天。 工具/原料 我们破解或给软件脱壳最常用的软件就是OD全名叫Ollydbg,界面如图: 它是一个功能很强大的工具,左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值. 右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色突出显示. cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态. 左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息. 右下角的是当前堆栈情况,还有注释啊. 步骤/方法 1. 我们要想破解一个软件就是修改它的代码,我们要想在这代码的海洋里找到我们破解关键的代码确实很棘 手,所以我们必须找到一定的线索,一便我们顺藤摸瓜的找到我们想要的东东,现在的关键问题就是什么

消防工程师技术实务《第一篇-消防基础知识》练习题

第一章:消防基础知识 第一章燃烧基础知识 一.单项选择题 1.在液体(固体)表面产生足够的可燃素气,遇火能产生一闪为即灭的火焰燃烧现象称为( )。 A.闪点 B.闪燃 C.燃点 D.爆燃 2.在规定的试验条件下,液体或固体能发生持续燃烧的最低温度称为( )。 A. 自燃点 B.闪点 C. 自燃 D.燃点 3.阴燃是( )的燃烧特点。 A. 固体 B.气体 C.液体 D.固体、液体、气体 4.生产和储存火灾危险性为甲类的液体,其闪点( )。 A. >28℃ B. <28℃ C. ≥28℃ D. ≤28℃

5.物质在无外界引火源条件下,由于其本身内部所进行的( )过程而产生热量,使温度上升, 产生自行燃烧的现象称为自燃。 A.物理、化学 B.化学、生物 B. C.物理、生物 D.生物、物理、化学 6.可燃物与氧化剂作用发生的放热反应,通常伴有( )现象,称为燃烧。 A.火焰、发光 B.发光、发烟 C.火焰、发烟 D..火焰、发光和(或)发烟 7.下列( )储罐燃烧可能发生沸溢、喷澱。 A.汽油 B.煤油 C.柴油 D.原油 8.木材的燃烧属于( )。 A.素发燃烧 B.分解燃烧 C.表面燃烧 D. 阴燃 9.液体的燃烧方式是( )。

A. 一闪即灭 B.蒸发燃烧 C.沸溢燃烧 D.分解燃烧 10.下列物质中( )为最典型的未完全燃烧产物。 A. H20 B. C0 C. C02 D.HCN 二、简答题· 燃烧分为哪些类型? 参考答案与精析 -、単项选择题 1.【精析】B。本题考查的是闪燃的定义。闪燃是指易燃或可燃液体(包括可熔化的少量固体,如石蜡、樟脑、萘等)挥发出来的素气分子与空气混合后,达到一定的浓度时,遇 火源产生一闪即灭的现象。故本题答案为B。 2.【精析】D。本题考査的是燃点的定义。在规定的试验条件下,应用外部热源使物质表面起火并持续燃烧一定时间所需的最低温度, 称为燃点。故本题答案为D。

电子电路基础知识点总结

电子电路基础知识点总结 1、 纯净的单晶半导体又称本征半导体,其内部载流子自由电子空 穴的数量相等的。 2、 射极输出器属共集电极放大电路,由于其电压放大位数约等于 1,且输出电压与输入电压同相位,故又称为电压跟随器 ( 射极跟随器 )。 3、理想差动放大器其共模电压放大倍数为 0,其共模抑制比为乂。 般情况下,在模拟电器中,晶体三极管工作在放大状态,在 数字电器中晶体三极管工作在饱和、截止状态。 限幅电路是一种波形整形电路, 因它削去波形的部位不同分为 4、 5、 上限幅、 下限幅和双向限幅电路。 6、 主从 JK 触发器的功能有保持、计数、置 0、置 1 。 7、 多级放大器的级间耦合有阻容耦合、直接耦合、变压器耦合。 8、 带有放大环节串联稳压电路由调整电路、基准电路、取样电路 和比较放大电路分组成。 9、 时序逻辑电路的特点是输出状态不仅取决于当时输入状态,还 与输出端的原状态有关。 10、 当PN 结外加反向电压时,空间电荷区将变宽。反向电流是由 少数载流子形成的。

11、 半导体具有热敏性、光敏性、力敏性和掺杂性等独特的导电 特性。 12、 利用二极管的单向导电性,可将交流电变成脉动的直流电。 13、 硅稳压管正常工作在反向击穿区。在此区内,当流过硅稳压 管的电流在较大范围变化时,硅稳压管两端的电压基本不变。 电容滤波只适用于电压较大,电流较小的情况,对半波整流 电路来说,电容滤波后,负载两端的直流电压为变压级次级电压的 倍,对全波整流电路而言较为倍。 15、处于放大状态的NPN 管,三个电极上的电位的分布必须符合 UC>UB>UE 而PNP 管处于放大状态时,三个电极上的电位分布须符合 UE>UE>UC 总之,使三极管起放大作用的条件是:集电结反偏,发射 结正偏。 16、 在 P 型半导体中,多数载流子是空穴,而 N 型半导体中,多 数载流子是自由电子。 晶体管放大器设置合适的静态工作点,以保证放大信号时, 三极管应始终工作在放大区。 般来说,硅晶体二极管的死区电压大于锗管的死区电压。 14、 17、 二极管在反向截止区的反向电流基本保持不变。 18、 当环境温度升高时,二极管的反向电流将增大。 19、 20、

新手入门学习——脱壳破解练习第一期

新手入门学习——脱壳破解练习第一期拿到一个软件,先看看是加的什么壳。用PEiD查得【Upack V0.37-V0.39 -> Dwing *】 接着拿出破解第一要物OD进行脱壳(注意选好点的版本,由于Upack壳做了变形,有些版本的OD打开时会出错,最好是用英文版的) OD载入…… 我使用简单一点的ESP定律。 00401018 > BE B0114000 MOV ESI,脱壳破解.004011B0 0040101D AD LODS DWORD PTR DS:[ESI] 0040101E 50 PUSH EAX 0040101F FF76 34 PUSH DWORD PTR DS:[ESI+34] 00401022 EB 7C JMP SHORT 脱壳破解.004010A0 F8前进到【0040101F】,在寄存器窗口ESP处点右键,在数据窗口跟随【0012FFC0】 如下图:

//数据窗口点右键,下硬件断点。shift+F9运行 0012FFC0 004011B8 脱壳破解.004011B8 0012FFC4 7C82F23B 返回到 kernel32.7C82F23B 0012FFC8 00000000 //来到OEP,通过观察可以发现,这是一个典型的VB入口。这里记得要删除硬件断点!004011B8 68 24184000 PUSH 脱壳破解.00401824 //OEP 004011BD E8 EEFFFFFF CALL 脱壳破解.004011B0 004011C2 0000 ADD BYTE PTR DS:[EAX],AL 004011C4 0000 ADD BYTE PTR DS:[EAX],AL 004011C6 0000 ADD BYTE PTR DS:[EAX],AL 004011C8 3000 XOR BYTE PTR DS:[EAX],AL 记录新入口地址【11B8】

差分运算放大器基本知识

一.差分信号的特点: 图1 差分信号 1.差分信号是一对幅度相同,相位相反的信号。差分信号会以一个共模信号 V ocm 为中心,如图1所示。差分信号包含差模信号和公模信号两个部分, 差模与公模的定义分别为:Vdiff=(V out+-V out- )/2,Vocm=(V out+ +V out- )/2。 2.差分信号的摆幅是单端信号的两倍。如图1,绿色表示的是单端信号的摆 幅,而蓝色表示的是差分信号的摆幅。所以在同样电源电压供电条件下,使用差分信号增大了系统的动态范围。 3.差分信号可以抑制共模噪声,提高系统的信噪比。In a differential system, keeping the transport wires as close as possible to one another makes the noise coupled into the conductors appear as a common-mode voltage. Noise that is common to the power supplies will also appear as a common-mode voltage. Since the differential amplifier rejects common-mode voltages, the system is more immune to external noise. 4.差分信号可以抑制偶次谐波,提高系统的总谐波失真性能。 Differential systems provide increased immunity to external noise, reduced even-order harmonics, and twice the dynamic range when compared to signal-ended system. 二.分析差分放大器电路 图2.差分放大器电路分析图

第一篇:4% 消防基础知识

第一篇:4%消防基础知识 1.燃烧 1)燃烧条件 可燃物助燃剂 引火源 明火 电弧、电火花 雷击高温 链式反应自由基 2)燃烧类型及其特点 一、按燃烧发生的瞬间特点分类 (一)着火 1.点燃 2.自燃 化学自燃 热自燃 (二)爆炸物质由一种状态迅速转变成另一种状态二、按燃烧物形态分类 (一)气体燃烧 扩散燃烧 预混燃烧(二)液体燃烧 1.闪燃 2.沸溢 3.喷溅(三)固体燃烧 1.蒸发燃烧 2.表面燃烧 3.分解燃烧 4.阴燃(熏烟燃烧) 三、闪点、燃点、自燃点 (一)闪点闪点则是指易燃或可燃液体表面产生闪燃的最低温度。 (二)燃点使物质表面起火并持续燃烧一定时间所需的最低温度称为燃点。(三)自燃点 使物质表面起火并持续燃烧一定时间所需的最低温度称为燃点。 3)燃烧产物 一、一氧化碳对人体的危害 二、 2.火灾 1)火灾的定义和分类 一、火灾的定义:指在时间或空间上失去控制的燃烧。 二、火灾的分类 (一)按燃烧对象的性质分 A 类火灾:固体物质火灾。例如,木材、棉、毛、麻、纸张等火灾。 B 类火灾:液体或可熔化固体物质火灾。例如,汽油、煤油、原油、甲醇、乙醇、沥青、石蜡等火灾。 C类火灾:气体火灾。例如,煤气、天然气、甲烷、乙烷、氢气、乙炔等火灾。D类火灾:金属火灾。例如,钾、钠、镁、钛、锆、锂等火灾。 (二)按照火灾事故所造成的灾害损失程度分类具体分类类别死亡人数 重伤人数 直接经济损失 一般火灾 29C<1000万 较大火灾9491000 万元≤C<5000 万元重大火灾29995000 万元≤C<1 亿元 重大火灾 ≥30 ≥100C≥1 亿元 三、火灾的危害 (一)危害生命安全(二)造成经济损失 (三)破坏文明成果(四)影响社会稳定 (五)破坏生态环境 2)火灾发生的常见原因 1.电气 2.吸烟 3.生活用火不慎 4.生产作业不慎 5.玩火 6.放火 7.雷击 3)建筑火灾发展及蔓延的机理 (一)烟气的扩散路线 第一条是着火房间→走廊→楼梯间→上部各楼层→室外; 第二条是着火房间→室外; 第三条是着火房间→相邻上层房间→室外。(二)烟气流动的驱动力 1.烟囱效应 2.火风压3.外界风的作用 (三)烟气蔓延的途径 1.孔洞开口蔓延 2.穿越墙壁的管线和缝隙蔓延 3.闷顶内蔓延4.外墙面蔓延 (四)建筑火灾发展的几个阶段 初期增长阶段 充分发展阶段衰减阶段 4)防火和灭火的基本原理及方法 一、冷却灭火,二、隔离灭火, 三、窒息灭火,四、化学抑制灭火 4.易燃易爆危险品 1.爆炸品 一、爆炸品的分类 二、爆炸品的特性及参数 2。易燃气体 1.易燃气体的分级 Ⅰ级:爆炸下限小于10%; 不论爆炸下限如何,爆炸极限范围不小于12%; Ⅱ级:爆炸下限不小于10%,但小于13%,并且爆炸极限范围小于12% 2.易燃气体的火灾危险性 1)易燃易爆性 2)扩散性 3)可缩性和膨胀性 4)带电性 5)腐蚀性、毒害性 3.易燃气雾剂 3。易燃液体 1.易燃液体的分级 Ⅰ级:初沸点小于或等于35度;如:汽油、正戊烷、丙酮、乙醛、乙醚等 Ⅱ级:闪点小于23度,初沸点大于35度,如:石油醚、甲醇、乙醇、香蕉水等 2.易燃液体的火灾危险性 1)易燃性2)爆炸性3)受热膨胀 4)流动性5)带电性6)毒害性 3.易燃气雾剂 4.易燃固体、易自然物质、遇水反应析出易燃气体的物质 一)易燃固体 二)易于自燃的物质 三)遇水放出易燃气体的物质 5.氧化性物质和有机过氧化物 一)氧化性物质 二)有机过氧化物 3.爆炸 1.爆炸的概念及分类 一)爆炸的定义 二)爆炸的分类 (1)物理爆炸 爆炸前后的化学成份不变 压力容器 压缩气体或液化钢瓶 (2)化学爆炸 1.炸药爆炸 2.可燃气体爆炸 3.可燃粉尘爆炸 (3)核爆炸 2.爆炸极限 一、气体和液体的爆炸极限 1.火源能量 2.初始压力 3.初温 4.惰性气体 二、可燃粉尘的爆炸极限 三、爆炸极限在消防上的应用 3.爆炸危险源 一)引起爆炸的直接原因 1.物料原因 2.作业行为原因 3.生产设备原因 4.生产工艺原因 二)常见爆炸引火源 1.机械火源 2.热火源 3,电火源4.化学火源

一个简单的.NET程序的脱壳以及破解

一个简单的.NET程序的脱壳以及破解 前几天有朋友问.NET程序的破解,又鉴于论坛里关于.NET脱壳和破解的文章也不多,于是抽空写一个。由于本人也很少接触.NET的程序,因此文章没什么技术含量,用到的技术也是在网上很早就公开的东西。有什么错误还请多多指教。 本文的目标文件是一个非常简单的CrackMe. 本CrackMe的任务有4个: 1.脱壳 2.去NAG 3.去灰色按钮 4.破解 OK,一个一个来完成任务吧。 一、脱壳 查壳发现为: 按照经验,此程序应该是用.NET Reactor加的壳 下面来脱壳吧 根据前人经验,此壳其实只是在简单的混淆,在运行的同时,在内存中会释放原程序的镜像根据这一特点,我们下断点:BP WriteProcessMemory,然后F9运行,中断下来 中断下来看堆栈

写入的地址为:17B1050 在数据窗口查看,然后拉到最顶端 可以发现,PE头在017B0000 于是可以dump此地址的镜像。 当然,此时dump下来的程序不行,因为还有好多内容没写入。于是,不断SHIFT+F9,直到程序运行。 这时候就可以dump了. 用LordPE,区域转存017B0000这个区段,保存为dumped.exe就OK了.

不过,此时dump后,程序是无法运行的。 我们还得再用CFF修正几个量 (1).选Nt Headers,再File Header,然后选Characteristics,再点旁边的Click here,在出现的对话框中,去掉“File is a DLL”就OK了。 (2)修正MetaData RV A和MetaData Size的值

第一篇消防基础知识第一章燃烧基础知识练习题及答案

第一篇消防基础知识 第一章燃烧基础知识 一、单项选择题 1.阴燃是()的燃烧特点。 A.固体 B.液体 C.气体 D.固体、液体、气体 2.生产和储存火灾危险性为甲类的液体,其闪点()。 A.>28℃ B.<28℃ C.≥28℃ D.≤28℃ 3.在液体(固体)表面产生足够的可燃蒸气,遇火能产生一闪即灭的火焰燃烧现象称为()。A.闪点 B.闪燃 C.燃点 D.爆燃 4.在规定的试验条件下,液体或固体能发生持续燃烧的最低温度称为()。 A.自燃点 B.闪点 C.自燃 D.燃点 5.物质在无外界引火源条件下,由于其本身内部所进行的()过程而产生热量,使温度上升,产生自行燃烧的现象称为自燃。 A.物理、化学 B.化学、生物 C.物理、生物 D.生物、物理、化学 6.可燃物与氧化剂作用发生的放热反应,通常伴有()现象,称为燃烧。 A.火焰、发光 B.发光、发烟 C.火焰、发烟 D.火焰、发光和(或)发烟 7.下列()储罐燃烧可能发生沸溢、喷溅。 A.汽油 B.煤油 C.柴油 D.原油 8.木材的燃烧属于()。 A.蒸发燃烧 B.分解燃烧 C.表面燃烧 D.阴燃

二、多项选择题 1.发生无焰燃烧必须具备的条件是()。 A.可燃物 B.氧化剂 C.温度 D.链式反应自由基 E.燃点 2.液体能否发生燃烧、燃烧速率的高低与液体的()等性质有关。A.蒸气压 B.闪点 C.沸点 D.蒸发速率 E.燃烧时间 3.固体可燃物燃烧方式主要有()。 A.蒸发燃烧 B.分解燃烧 C.表面燃烧 D.阴燃 E.闪燃 4.发生有焰燃烧必须具备的条件是()。 A.可燃物 B.氧化剂 C.温度 D.链式反应自由基 E.燃点 5.燃烧产物通常是指燃烧生成的()等。 A.气体 B.热量 C.可见烟 D.氧气 E.液体 单选题答案 ABBDD DDB 多选题答案 ABCABCDABCDABCDABC

电子电路基础知识点总结

电子电路基础知识点总结 1、纯净的单晶半导体又称本征半导体,其内部载流子自由电子空穴的数量相等的。 2、射极输出器属共集电极放大电路,由于其电压放大位数约等于1,且输出电压与输入电压同相位,故又称为电压跟随器(射极跟随 器)。 3、理想差动放大器其共模电压放大倍数为0,其共模抑制比为 4、一般情况下,在模拟电器中,晶体三极管工作在放大状态,在数字电器中晶体三极管工作在饱和、截止状态。 5、限幅电路是一种波形整形电路,因它削去波形的部位不同分为上限幅、下限幅和双向限幅电路。 6、主从JK 触发器的功能有保持、计数、置0、置 1 。 7、多级放大器的级间耦合有阻容耦合、直接耦合、变压器耦合。 8、带有放大环节串联稳压电路由调整电路、基准电路、取样电路和比较放大电路分组成。 9、时序逻辑电路的特点是输出状态不仅取决于当时输入状态,还与输出端的原状态有关。 10、当PN结外加反向电压时,空间电荷区将变宽。反向电流是由 少数载流子形成的

11、半导体具有热敏性、光敏性、力敏性和掺杂性等独特的导电 特性。 12、利用二极管的单向导电性,可将交流电变成脉动的直流电。 13、硅稳压管正常工作在反向击穿区。在此区内,当流过硅稳压管的电流在较大范围变化时,硅稳压管两端的电压基本不变。 14、电容滤波只适用于电压较大,电流较小的情况,对半波整流电路来说,电容滤波后,负载两端的直流电压为变压级次级电压的 1 倍,对全波整流电路而言较为 1.2 倍。 15、处于放大状态的NPN管,三个电极上的电位的分布必须符合UC>UB>UE而PNP管处于放大状态时,三个电极上的电位分布须符合 UE>UE>UC总之,使三极管起放大作用的条件是:集电结反偏,发射结正偏。 16、在P型半导体中,多数载流子是空穴,而N型半导体中,多数载流子是自由电子。 17、二极管在反向截止区的反向电流基本保持不变。 18、当环境温度升高时,二极管的反向电流将增大。 19、晶体管放大器设置合适的静态工作点,以保证放大信号时,三极管应始终工作在放大区。 20、一般来说,硅晶体二极管的死区电压大于锗管的死区电压。

OD 新人入门基础教材

OD 新人入门基础教材 OD 是个好工具但很多新哥们不懂用可惜咯 首先我介绍下 OD正个界面: 各个窗口的功能如上图。简单解释一下各个窗口的功能,更详细的内容可以参考 TT 小组翻译的中文帮助: 反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单界面选项->隐藏标题或显示标题来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。 寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签寄存器 (FPU) 可以切换显示寄存器的方式。 信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。 数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。 堆栈窗口:显示当前线程的堆栈。

要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下 OllyDBG 就可以生效了。 启动后我们要把插件及 UDD 的目录配置为绝对路径,点击菜单上的选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签: 因为我这里是把 OllyDBG 解压在 F:\OllyDBG 目录下,所以相应的 UDD 目录及插件目录按图上配置。还有一个常用到的标签就是上图后面那个字体,在这里你可以更改 OllyDBG 中显示的字体。上图中其它的选项可以保留为默认,若有需要也可以自己修改。修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动 OllyDBG。在这个对话框上点确定,重新启动一下 OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。有人可能知道插件的作用,但对那个 UDD 目录不清楚。我这简单解释一下:这个 UDD 目录的作用是保存你调试的工作。比如你调试一个软件,设置了断点,添加了注释,一次没做完,这时 OllyDBG 就会把你所做的工作保存到这个 UDD 目录,以便你下次调试时可以继续以前的工作。如果不设置这个 UDD 目录,OllyDBG 默认是在其安装目录下保存这些后缀名为 udd 的文件,时间长了就会显的很乱,所以还是建议专门设置一个目录来保存这些文件。 另外一个重要的选项就是调试选项,可通过菜单选项->调试设置来配置:

电子电路基础知识点总结

知识| 电子电路基础知识点总结 1、纯净的单晶半导体又称本征半导体,其内部载流子自由电子空穴的数量相等的。 2、射极输出器属共集电极放大电路,由于其电压放大位数约等于1,且输出电压与输入电压同相位,故又称为电压跟随器(射极跟随器)。 3、理想差动放大器其共模电压放大倍数为0,其共模抑制比为∞。 4、一般情况下,在模拟电器中,晶体三极管工作在放大状态,在数字电器中晶体三极管工作在饱和、截止状态。 5、限幅电路是一种波形整形电路,因它削去波形的部位不同分为上限幅、下限幅和双向限幅电路。 6、主从JK触发器的功能有保持、计数、置0、置1 。 7、多级放大器的级间耦合有阻容耦合、直接耦合、变压器耦合。 8、带有放大环节串联稳压电路由调整电路、基准电路、取样电路和比较放大电路分组成。 9、时序逻辑电路的特点是输出状态不仅取决于当时输入状态,还与输出端的原状态有关。 10、当PN结外加反向电压时,空间电荷区将变宽。反向电流是由少数载流子形成的。 11、半导体具有热敏性、光敏性、力敏性和掺杂性等独特的导电特性。 12、利用二极管的单向导电性,可将交流电变成脉动的直流电。 13、硅稳压管正常工作在反向击穿区。在此区内,当流过硅稳压管的电流在较大范围变化时,硅稳压管两端的电压基本不变。 14、电容滤波只适用于电压较大,电流较小的情况,对半波整流电路来说,电容滤波后,负载两端的直流电压为变压级次级电压的1倍,对全波整流电路而言较为1.2倍。15、处于放大状态的NPN管,三个电极上的电位的分布必须符合UC>UB>UE,而PNP 管处于放大状态时,三个电极上的电位分布须符合UE>UE>UC。 总之,使三极管起放大作用的条件是:集电结反偏,发射结正偏。

《消防安全技术实务》第一篇 消防基础知识 讲义

注册消防工程师执业资格考试 《消防安全技术实务》第一篇 消防基础知识 讲义 第一章燃烧 第一节燃烧的本质与条件 燃烧是指可燃物与氧化剂作用发生的放热反应,通常伴有火焰、发光和(或)发烟现象。发光的气相燃烧区就是火焰,它是燃烧过程中最明显的标志。由于燃烧不完全等原因,会使产物中产生一些小颗粒,这样就形成了烟。 燃烧可分为有焰燃烧和无焰燃烧。多数可燃物质的燃烧都是在蒸气或气体的状态下进行的,称为有焰燃烧。而有的固体物质则不能变为气态,其燃烧只发生在氧气与固体表面的氧化还原反应,称为无焰燃烧。 一、燃烧条件 燃烧的发生和发展,必须具备三个必要条件,即可燃物、助燃物和引火源。

(一)可燃物 能与空气中的氧或其他氧化剂起化学反应,并形成燃烧的物质,称为可燃物。 (二)助燃物 与可燃物结合能导致和支持燃烧的氧化剂,称为助燃物。 (三)引火源 使物质开始燃烧的外部热源(能源)称为引火源。 燃烧发生时,上述三个条件必须同时具备。 燃烧发生的充分条件可表述为:具备足够数量或浓度的可燃物;具备足够数量或浓度的助燃物;具备足够能量的引火源;上述三者相互作用。 二、燃烧的链式反应理论 自由基是一种高度活泼的化学基团,容易自由结合或与其他物质的分子反应,从而使燃烧按链式反应的形式扩展,也称游离基。 对于多数有焰燃烧燃烧而言,其燃烧过程中存在未受抑制的自由基作中间体。自由基的链式反应是燃烧反应的实质,光和热是燃烧过程中的物理现象。 因此,可以用着火四面体来表示有焰燃烧的四个条件,即可燃物、助燃物、引火源和链式反应自由基。

例:用着火四面体来表示燃烧发生和发展的必要条件时,”四面体”是指可燃物、氧化剂、引火源和()。(2015真题) A.氧化反应 B.热分解反应 C.链传递 D.链式反应自由基 答案:D 第二节燃烧类型及其特点 一、按燃烧发生瞬间的特点分类 可分为着火和爆炸。 (一)着火 1.点燃(或称强迫着火) 2.自燃 (1)化学自燃。这类着火现象通常不需要外界加热,而是在常温下依据自身的化学反应发生的。例如火柴受摩擦而着火;炸药受撞击而爆炸;金属钠在空气中自燃;煤炭因堆积过高而自燃等。 (2)热自燃。 (二)爆炸 爆炸最重要的一个特征是爆炸点周围发生剧烈的压力突变,这种压力突变就是爆炸产生破坏作用的原因。 二、按燃烧物形态分类 分为气体燃烧、液体燃烧和固体燃烧。 (一)气体燃烧 1.气体的扩散燃烧

电子技术基础知识讲解学习

1.2电子技术基础知识 一、填空 1、电容器的主要技术指标有Vmax、标称电容值、和允许误差范围四只200μF/50V的电容器串联,等效电容量为50μF。 2、三极管的极限参数有Pcm、Icm、BVceo。(集电极、发射极、击穿电压) 3、有一个稳压二极管稳压电路,焊接后挑食时发现其稳压输出端只有0.7伏的电压,经检查元件是好的,出现这种故障的原因是接反。 4、稳压管工作在反向击穿区,稳压管接入电路时,阴极应接电压的正极,阳极接负极,反映稳压管性能的参数时动态电阻。 6、晶闸管三个电极的名称是阳极、阴极和门极。 7、在晶体管放大电路中,反馈信号取自于输出电压,这种反馈叫做电压反馈。 8、三极管放大电路设置静态工作点的目的是获得最大不失真输出。 9、场效应管是通过改变栅源电压来改变漏极电流的,所以它是一个电压控制器件;根据结构的不同,场效应管可分为结型和绝缘栅型两种类型。 10、把集成运放接成负反馈组态是集成运放线性应用的必要条件。而在开环或正反馈时,集成运放工作在非线性工作状态。 11、已知某深度负反馈电路A Ud=100,F=0.1,则A Uf=9。 12、正弦波振荡电路一般由基本放大电路、反馈电路、选频网络和稳压电路等四个环节组成,而且缺一不可。 13、若采用市电供电,则通过变压、整流、滤波和稳压后可得到稳定的直流电。 14、理想运算放大器的开环放大倍数A od为∞,输入阻抗为∞,输出阻抗R od为0,共模抑制比K CMR为∞,频带宽度BW为∞。 15、串联型稳压电源电路包括调整输出、比较放大、采样和基准电位四个环节。 16、一个10位的DAC,输出电压满量程为10V,则它的分辨率为1/(210-1),能分辨的最小电压值为10/210V。 17、TTL电路多余管脚可以悬空,CMOS电路则不能悬空。 18、三极管放大器有共集、共射和共基三种基本组态。 19、多级放大器的级间耦合方式一般有直接耦合、光电耦合和变压器耦合三种。 20、为了抑制直流放大器中的零点漂移,最常采用的方法是差放、温度孔径和负反馈等措施。 21、集成运放按输入方式的不同可分为反相输入、同相输入和差放输入三种形式。 22、运算放大器是一种高增益的多级放大器,其输入级一般采用差分输入,输出级一般采用跟随。 23、RC电路最主要的应用包括耦合、微分和积分三种。 24、最基本的逻辑关系有与门、非门、或门三种。 25、七段数码显示器通常分为共阳和共阴。

脱壳基础知识入门

脱壳基础知识入门 现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹。另外,论坛现在两极分化比较严重,高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但看到壳这么难,只好放弃了,造成新手与高手间一个断档,为了鼓励更多新人加入脱壳的行列,很有必要将壳有关知识总结一下。https://www.doczj.com/doc/bf6055982.html,主页提供的教学确实有点过时了,己到非更新不可了。相对于密码学算法,脱壳并不难,只要肯花时间,短期内还是比较容易取得成绩的。 第一课PE格式 要想学脱壳,第一步就得掌握PE格式,PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。 Microsoft Visual C++提供的WINNT.H里有PE数据结构的完整定义。 推荐文档: ah007翻译的“PE文件格式”1.9版 qduwg翻译的PE文件格式 Iczelion's的PE文件格式 PE结构各字段偏移参考 学习PE格式的方法是自己先准备一个十六进制工具,如HexWorkshop,WinHex,用这些工具打开一个EXE文件对照着学。强烈推荐你用Stud_PE v.2.2.0.5这款工具辅助学习PE格式。PE格式学习的重点是在输入表(Import Table)这块。Stud_PE工具界面: PE结构图: 第二课SEH技术 结构化异常处理(Structured Exception Handling,SEH)是Windows操作系统处理程序错误或异常的技术。SEH是Windows操作系统的一种系统机制,与特定的程序设计语言无关。 外壳程序里大量地使用了SEH,如果不了解SEH,将会使你跟踪十分困难。 SEH in ASM研究(一)by hume SEH in ASM研究(二)by hume Structured Exception Handling 加密与解密二版菜鸟学习笔记(2)-SEH结构化异常处理by ytcswb 由于Ollydbg对SEH处理异常灵活,因此脱壳用Ollydbg会大大提高效率。 附CONTEXT结构环境: 代码: typedef struct_CONTEXT{ /*000*/DWORD ContextFlags; /*004*/DWORD Dr0; /*008*/DWORD Dr1; /*00C*/DWORD Dr2; /*010*/DWORD Dr3; /*014*/DWORD Dr6; /*018*/DWORD Dr7; /*01C*/FLOATING_SAVE_AREA FloatSave; /*08C*/DWORD SegGs; /*090*/DWORD SegFs; /*094*/DWORD SegEs;

第一部分 基础知识及运用 知识点1 语音 教案

第一部分基础知识及运用 知识点1 语音 【教学目标】 1.依据教学大纲,了解《考试说明》对此项考查的要求。 2.通过分析高考试题,寻求规律,掌握考查的重点。 3.加强备考方法的指导,强化基础训练。 【教学方法】 讲练结合,注重积累。 【教学重点难点】 重点:复习方法指导; 强化语音识记。 难点:学习态度; 习惯性误读字和生僻字的识记。 【课时安排】 六课时。其中知识点1语音以及知识点精练的讲解需要二课时;知识清单“容易读错的字”讲解需要二个课时;同步检测语音部分考试及讲解二课时。 【教学过程和步骤】 一、导入 对口高考语文复习方法 (一)分析学生现状 语文基础不是很好;要做好打持久战的准备。 (二)语文复习方法 1.语文复习要注重教材,重点是教材中的字词和应用文写作; 2.语文知识要及时去记、去背;及时扫除知识障碍; 3.语文知识重在积累,重在坚持不懈,持之以恒; 4.多做题目,特别是阅读题,要勤于动笔; 5.提纲挈领,总体把握每一个知识点的内容。 二、讲解新课 (一)本知识点包括以下几方面的内容 考纲解读;知识点精讲(例题解析——高考真题;方法指导);知识点精练。 (二)讲析新课 1.复习定向 所谓“识记”,就是识别和记忆。识记的对象是“现代汉语普通话的字音”。普通话是中华民族的母语,正确“识记现代汉语普通话的字音”,是考生必须具备的能力。 我国自1977年恢复高考以来,语音题一直是高考必考题型。1996年后语音题所考内容及题型开始趋于稳定,要求相当明确,即只考“识记现代汉语普通话的字音”。 2.指导学生阅读“知识点1语音”(复习用书P1——4页) (1)学生看并做高考语音题。 (2)寻找高考总趋向:近年来高考对语音的考查,难度有所降低,据统计,1996年语音题考12字,超出常用字的5个,1997年超出4个,1998年和2001年、2002年全部是常

软件脱壳破解精典实例教程

软件脱壳、破解精典实例教程 我要破解的软件:网络填表终结者破解需要的软件(点击下载): 侦壳language.exe 脱壳AspackDie.exe 反编译W32Dasm黄金中文版 16进制编辑器UltraEdit.rar 在破解之前先复习一下基础知识: 一.破解的等级 初级,修改程序,用ultraedit修改exe文件,称暴力破解,简称爆破 中级,追出软件的注册码 高级,写出注册机 二.用w32dasm破解的一般步骤: 1.看软件的说明书,软件注册与不注册在功能上有什么区别,如何注册 2.运行此软件,试着输入你的姓名和任意注册码去注册,有什麽错误提示信息,将错误提示信息记下来 3.侦测有无加壳(第一课).若加壳,脱壳(第二课) 4.pw32dasmgold反汇编 5.串式参考中找到错误提示信息或可能是正确的提示信息双击鼠标左键 6.pw32dasmgold主窗口中分析相应汇编,找出关键跳转和关键call 7.绿色光条停在关键跳转,在pw32dasmgold主窗口底部找到关键跳转的偏移地址(实际修改地址) 8.用ultraedit找到偏移地址(实际修改地址)修改机器码,保存 壳的概念:版权信息需要保护起来,不想让别人随便改动,exe可执行文件压缩,最常见的加壳软件ASPACK ,UPX,PEcompact 脱壳:拿到一个软件,侦测它的壳,然后我们要把它的壳脱去,还原它的本来面目.若它没有加壳,就省事不用脱壳了.脱壳软件unaspack,caspr,upx,unpecompact,procdump 实际修改地址(偏移地址)和行地址(虚拟地址)pw32dasmgold反汇编出来的代码由三列组成 第一列行地址(虚拟地址) 第二列机器码(最终修改时用ultraedit修改)

教你如何破解exe软件

教你如何破解软件 要破解的软件:网络填表终结者 破解需要的软件(点击下载): 侦壳 language.exe 脱壳AspackDie.exe 反编译 W32Dasm黄金中文版 16进制编辑器 UltraEdit.rar 在破解之前先复习一下基础知识: 一.破解的等级 初级,修改程序,用ultraedit修改exe文件,称暴力破解,简称爆破 中级,追出软件的注册码 高级,写出注册机 二.用w32dasm破解的一般步骤: 1.看软件的说明书,软件注册与不注册在功能上有什么区别,如何注册 2.运行此软件,试着输入你的姓名和任意注册码去注册,有什麽错误提示信息,将错误提示信息记下来 3.侦测有无加壳(第一课).若加壳,脱壳(第二课) 4.pw32dasmgold反汇编 5.串式参考中找到错误提示信息或可能是正确的提示信息双击鼠标左键 6.pw32dasmgold主窗口中分析相应汇编,找出关键跳转和关键call 7.绿色光条停在关键跳转,在pw32dasmgold主窗口底部找到关键跳转的偏移地址(实际修改地址) 8.用ultraedit找到偏移地址(实际修改地址)修改机器码,保存 壳的概念:版权信息需要保护起来,不想让别人随便改动,exe可执行文件压缩,最常见的加壳软件ASPACK ,UPX,PEcompact 脱壳:拿到一个软件,侦测它的壳,然后我们要把它的壳脱去,还原它的本来面目.若它没有加壳,就省事不用脱壳了.脱壳软件unaspack,caspr,upx,unpecompact,procdump 实际修改地址(偏移地址)和行地址(虚拟地址)pw32dasmgold反汇编出来的代码由三列组成 第一列行地址(虚拟地址) 第二列机器码(最终修改时用ultraedit修改) 第三列汇编指令

集成运放大器的基础知识

课题集成运放大器的基础知识所属章节第三章:集成运算放大器 教学目的1、了解集成运放的组成的符号 2、掌握理想运放的两个重要结论 教学重点1、运算放大器的组成 2、运算放大器的电路符号 3、运算放大器的主要参数 4、理想运算放大器 教学方法讲授法、多媒体课件教学 课题引入 集成运算放大器最早应用于模拟计算机中,如完成加法、减法等数学运算。而今主要有来完成信号的产生、转换、处理等,集成运算放大器已得到广泛应用。 授课内容 一、集成运算放大器的组成及符号 集成运算放大器实质上是一种双端输入、单端输出,具有高增益,高输入阻抗、低输出阻抗的多极直接耦合放大电路。 1、电路组成 集成运放内部组成框图如图所示。 ①输入级 输入级又称前置级,它往往是一个双端输入的高性能差分放大电路。一般要求其输入电阻高,差模放大倍数大,抑制共模信号的能力强,静态电流小。 ②中间级 中间级是整个放大电路的主要放大电路。其作用是使集成运放具有较强的放大能力,多采用共射(或共源)放大电路。而且为了提高电压放大倍数,经常采用复合管做放大管,以恒流源作集电极负载。其电压放大倍数可达千倍以上。 ③输出级 输出级具有输出电压线性范围宽,输出电阻小(即带负载能力强),非线性失真小等优点。多采用互补对称发射极输出电路。 ④偏置电路 偏置电路用于设置集成运放各级放大电路的静态工作点。与分 授课内容立元件不同,集成运放多采用电流源电路为各级提供合适的集电

极(或发射极、漏极)静态工作电流,从而确定了合适的静态工作点。 2、电路符号 旧标准新标准 二、集成运放的主要参数 1、开环差模电压放大倍数Avd 在集成运放无外加反馈时的直流差模放大倍数称为开环差模电压放大倍数。 2、共模抑制比K CMR 共模抑制比等于差模放大倍数与共模放大倍数之比的绝对值, 3、差模输入电阻R id 集成运放在输入差模信号时的输入电阻。 4、输出电阻Ro 集成运放开环状态下的输出电阻。 5、输入失调电压v IO 理想集成运放,当输入为零时,输出也为零。但实际集成运放的差分输入级不易做到完全对称,在输入为零时,输出电压可能不为零。为使其输出为零,人为的在输入端加一补偿电压,称此补偿电压为输入失调电压,用v IO表示。 6、输入失调电流I IO 集成运放在常温下,当输出电压为零时,两输入端的静态电流之差,称为输入失调电流,用I IO表示, 三、理想集成运算放大器 理想运算放大器的条件: 1、开环差模增益(放大倍数)A vd=∞; 2、差模输入电阻R id =∞; 3、输出电阻Ro=0; 4、共模抑制比K CMR=∞; 两条重要结论: ①理想集成运放两输入端的净输入电压等于零。即 v i =v N -v P =0 v N =v P, 通常称为“虚短”。 ②理想集成运放的两输入端电流均为零。即 i N -i P =0,通常称为“虚断” 。 课堂练习1、集成运放电路是一种高增益的放大器,它的内部电

消防基础知识1

第一篇消防基础知识 一、单项选择题 1.在规定的试验条件下,引起物质持续燃烧的最低温度称为 A.闪点B.燃点C.沸点D.自燃点 2.生产和储存火灾危险性为甲类的气体,其爆炸下限 A.≤10%B.<10%C.≥10%D.>10% 3.在含有CO的环境中,可以工作8h的CO允许浓度为ppm。 A.30 B 50 C.80 D 100 4.液化石油气火灾属于 A.A类火灾B.B类火灾C.C类火灾D.D类火灾 5.阴燃是——的燃烧特点。 A.固体B.液体C气体D.固体、液体、气体 6·——是粉尘爆炸的显著特点。 A.多次爆炸B、较大压力持续时间较短C、爆炸压力上升较快D、爆炸所需点火能量小7。生产和储存火灾危险性为甲类的液体,其闪点。 A.>28℃B.<28℃C≥28℃D,≤28℃ 8.可燃固体生产和储存的火灾危险性为。 A.甲类B.乙类C.丙类D.丁类 9.如采用冷却灭火,对于汽油燃烧必须将其冷却到之下时,燃烧才会中止。 A.燃点B、闪点C.自燃点D、0℃ 10.木炭燃烧属于 A.蒸发燃烧B、分解燃烧C.表面燃烧D、阴燃 11.窒息灭火其主要灭火机理是。 A.减少可燃物B.降低温度C.降低氧浓度D.降低燃点 12.下列物质中,——是最典型的未完全燃烧产物。 A、H20 B、CO C.C02 D、HCN 13.储存的火灾危险性属于乙类。 A、镁粉 B、钾C.动物油D、过氧化钠 14·——储存的火灾危险性属于丙类。 A.氧气B、松节油C、蜡D、漂白粉 15.储存的火灾危险性属于甲类。 A.蚁酸B.二硫化碳C.氨气D.氟气 16·——是衡量可燃固体物质燃烧难易程度的主要参数。 A.燃点B.自燃点C.闪点D.氧指数 17·——是划分易燃、可燃液体火灾危险性的重要参数。 A.燃点B.自燃点C.闪点D.氧指数 18.可能因吸附放热发生自燃。 A.锯末B.活性炭C.金属硫化物D.硝化棉 19.的液体,其生产和储存的火灾危险性属乙类。 A.闪点<28℃B.28℃≤闪点<60℃C.闪点=60℃D.闪点>60℃ 20·——的液体,其生产和储存的火灾危险性属丙类。 A.闪点<28℃B.闪点二28℃C.闪点<60℃D.闪点≥60℃ 21.木材的燃烧属于。 A.蒸发燃烧B、分解燃烧C.表面燃烧D、阴燃 22.沥青的燃烧属于。 A.蒸发燃烧B、分解燃烧C.表面燃烧D、阴燃 23.焦炭的燃烧属于。 A.蒸发燃烧B、分解燃烧C.表面燃烧D、阴燃 24·——是影响初期火灾发展的最. A.热传导B、热对流C热辐射D、热交换 25·——火灾属于B类火灾。 A、麻 B、煤气C.木材D、原油 26.黄磷发生自燃的方式是 A.分解放热B.氧化发热C.聚合放热D.发酵放热

相关主题
文本预览
相关文档 最新文档