文章列表
计算机的加电过程
按下开机按钮后,将发送电信号给BIOS
BIOS获得电信号后将启动自检查程序.检查周
边设备是否通电完毕.
检查完毕后自检程序把控制权交还BIOS,BIOS
将读取引导驱动器中的启动程序
系统的内存安排
在系统加电时最初的1MB内存是BIOS为我们准备好的.
它的分布情况如左图.
什么样的程序才能称为引导程序
BIOS将所检查启动磁盘的第一个扇区512字节载入内存
放于内存0x0000:0x07c00处 如果第一扇区最后两个
字节是55AA那么它就是一个引导程序.
引导程序特点
它的大小是512字节 结尾必须是55AA 这是引导扇区的
标志 它总是放在磁盘第 ...
- 2009-12-05 20:58
- 浏览 832
- 评论(0)
一般的压缩壳,如Aspack等都有专用的脱壳机 。而加密壳(如ASProtect,Armadillo)一般很少有脱壳机,必须手工脱壳。手工脱壳一般情况是分三步:
一是查找程序的真正入口点(OEP);
二是抓取内存映像文件;
三是输入表重建。(当然现在的加密壳复杂些,要考虑更多的东西)
常见的脱壳七方法(天草)
方法1:单步跟踪法
1.用OD载入,点"不分析代码!"
2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4)
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点-->运行到所选)
4.绿色线条表示 ...
- 2009-04-28 09:58
- 浏览 1559
- 评论(0)
外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序初始化时保存各寄存器的值,外壳执行完毕,会恢复各寄存器内容。其代码形式一般如下:
PUSHFD ;将标志寄存器入栈保存
PUSHAD ; ...
- 2009-04-28 09:57
- 浏览 1179
- 评论(0)
1、PE文件:
Microsoft设计了一种新的文件格式Portable Executable File Format(可移植的执行体即PE格式),该格式应用于所有基于Win32的系统:Windows NT、Windows 2000、Win32s及Windows 95/98。
2、基址(ImageBase ):
是指装入到内存中的EXE或DLL程序的开始地址,它是Win32中的一个重要概念。 在Windows NT中,缺省的值是40000h;对于DLLs,缺省值为100000h。在Windows 95中,10000h不能用来装入32位的执行文件,因为该地址处于所有进程共享的线性 ...
- 2009-04-28 09:54
- 浏览 1156
- 评论(0)
汇编指令test属于逻辑指令
功能:执行BIT与BIT之间的逻辑运算.
test 对两个参数(目标,源)执行AND逻辑操作.并且根据结果设置标志寄存器.结果
本身不会保存.
test ax,bx 与 and ax,bx 命令有相同的效果.
example:
1.test用来测试一个位 例如寄存器
test eax,100b; b后缀意为二进制
jnz ***,如果eax右数第三个位为1.jnz 将会跳转
2.Test 的一个非常普通的用法是用来测试一个寄存器是否为空.
test ecx,ecx
jz somewhere
- 2009-04-21 16:27
- 浏览 663
- 评论(0)
1. 算术左移或逻辑左移指令SAL/SHL
SAL OPRD,m
SHL OPRD,m
SAL/SHL执行相同的操作,把操作数OPRD左移m,每移动一位,右边用0补足一位,移出的最高位进入标志位CF
每左移一次,相当于原数X2
2. 算术右移指令SAR
SAR OPRD,m
使操作数右移m位,同时每移一位,左边的符号位保持不变,移出的最低位进入标志位CF
算术右移一位相当于除以2
3. 逻辑右移指令SHR
SHR OPRD,m
使操作数右移m位,同时每移一位,左边用0补足,移出的最低位进入标志位CF
4. 循环移位指令
(1)循环左移ROL
ROL ...
- 2009-04-19 10:56
- 浏览 1136
- 评论(0)
(一) 概述
String和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;
CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;
(二) 构造
string是方便的,可以从几乎所有的字符串构造而来,包括CSt ...
- 2009-04-19 09:56
- 浏览 1018
- 评论(0)
SetFilePointer
- 博客分类:
- windows编程
下面是SetFilePointer函数的声明
DWORD SetFilePointer(HANDLE hFile,Long IDistanceToMove,
PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod);
lpDistanceToMoveHigh 参数是用来管理大文件,如果要移到文件中任何位置,我们就必须设置这个参数的 ...
- 2009-04-14 11:11
- 浏览 1134
- 评论(0)
Export Table(引出表)
上一课我们已经学习了动态联接中关于引入表那部分知识,现在继续另外一部分,那就是引出表。
理论 :
当PE装载器执行一个程序,它将相关DLLs都装入该进程的地址空间。然后根据主程序的引入函数信息,查找相关DLLs中的真实函数地址来修正主程序。PE装载器搜寻的是DLLs中的引出函数。
DLL/EXE要引出一个函数给其他DLL/EXE使用,有两种实现方法: 通过函数名引出或者仅仅通过序数引出。比如某个DLL要引出名为"GetSysConfig"的函数,如果它以函数名引出,那么其他DLLs/EXEs若要调用这个函数,必须通过函数名 ...
- 2009-04-13 11:44
- 浏览 694
- 评论(0)
assume edi:ptr IMAGE_IMPORT_DESCRIPTOR
.while !([edi].OriginalFirstThunk==0 && [edi].TimeDateStamp==0 && [edi].ForwarderChain==0 && [edi].Name1==0 && [edi].FirstThunk==0)
edi 现在指向第一个 IMAGE_IMPORT_DESCRIPTOR 结构。接下来我们遍历整个结构数组直到遇上一个全 0 结构,这就是数组末尾了。
invoke AppendTe ...
- 2009-04-13 11:39
- 浏览 1077
- 评论(0)
示例 :
本例程打开一 PE 文件,将所有引入函数名读入一编辑控件,同时显示 IMAGE_IMPORT_DESCRIPTOR 结构各域值。
.386
.model flat,stdcall
option casemap:none
include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includecomdlg32.inc
include masm32includeuser32.inc
includelib masm32libuser32.lib
includeli ...
- 2009-04-13 11:33
- 浏览 976
- 评论(0)
Import Table (引入表)
本课我们将学习引入表。先警告一下,对于不熟悉引入表的读者来说,这是一堂又长又难的课,所以需要多读几遍,最好再打开调试器来好好分析相关结构。各位,努力啊!
理论 :
首先,您得了解什么是引入函数。一个引入函数是被某模块调用的但又不在调用者模块中的函数,因而命名为 "import (引入) " 。引入函数实际位于一个或者更多的 DLL 里。调用者模块里只保留一些函数信息,包括函数名及其驻留的 DLL 名。现在,我们怎样才能找到 PE 文件中保存的信息呢 ? 转到 data directory 寻求答案吧。再回顾一把,下面就是 PE h ...
- 2009-04-13 11:29
- 浏览 896
- 评论(0)
Section Table(节表)
理论 :
到本课为止,我们已经学了许多关于 DOS header 和 PE header 的知识。接下来就该轮到 section table (节表)了。节表其实就是紧挨着 PE header 的一结构数组。该数组成员的数目由 file header ( IMAGE_FILE_HEADER ) 结构中 NumberOfSections 域的域值来决定。节表结构又命名为 IMAGE_SECTION_HEADER 。
IMAGE_SIZEOF_SHORT_NAME equ 8
IMAGE_SECTION_HEADER STRUCT
Name1 db I ...
- 2009-04-13 11:09
- 浏览 922
- 评论(0)
Optional Header
我们已经学习了关于 DOS header 和 PE header 中部分成员的知识。这里是 PE header 中最后、最大或许也是最重要的成员, optional header 。
回顾一下, optional header 结构是 IMAGE_NT_HEADERS 中的最后成员。包含了 PE 文件的逻辑分布信息。该结构共有 31 个域,一些是很关键,另一些不太常用。这里只介绍那些真正有用的域。
这儿有个关于 PE 文件格式的常用术语 : RVA
RVA 代表相对虚拟地址。 知道什么是虚拟地址吗?相对那些简单的概念而言,RVA有些晦涩。简 ...
- 2009-04-13 11:05
- 浏览 1081
- 评论(0)
File Header (文件头)
本课我们将要研究 PE header 的 file header (文件头)部分。
至此,我们已经学到了哪些东东,先简要回顾一下 :
DOS MZ header 又命名为 IMAGE_DOS_HEADER . 。其中只有两个域比较重要 : e_magic 包含字符串 "MZ" , ...
- 2009-04-13 11:03
- 浏览 913
- 评论(0)