`
cfree
  • 浏览: 17857 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论
文章列表
计算机的加电过程 按下开机按钮后,将发送电信号给BIOS BIOS获得电信号后将启动自检查程序.检查周 边设备是否通电完毕. 检查完毕后自检程序把控制权交还BIOS,BIOS 将读取引导驱动器中的启动程序 系统的内存安排 在系统加电时最初的1MB内存是BIOS为我们准备好的. 它的分布情况如左图. 什么样的程序才能称为引导程序 BIOS将所检查启动磁盘的第一个扇区512字节载入内存 放于内存0x0000:0x07c00处 如果第一扇区最后两个 字节是55AA那么它就是一个引导程序. 引导程序特点 它的大小是512字节 结尾必须是55AA 这是引导扇区的 标志 它总是放在磁盘第 ...
一般的压缩壳,如Aspack等都有专用的脱壳机 。而加密壳(如ASProtect,Armadillo)一般很少有脱壳机,必须手工脱壳。手工脱壳一般情况是分三步: 一是查找程序的真正入口点(OEP); 二是抓取内存映像文件; 三是输入表重建。(当然现在的加密壳复杂些,要考虑更多的东西) 常见的脱壳七方法(天草) 方法1:单步跟踪法 1.用OD载入,点"不分析代码!" 2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4) 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点-->运行到所选) 4.绿色线条表示 ...

脱壳基础(二)

外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序初始化时保存各寄存器的值,外壳执行完毕,会恢复各寄存器内容。其代码形式一般如下: PUSHFD    ;将标志寄存器入栈保存   PUSHAD    ; ...
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位的执行文件,因为该地址处于所有进程共享的线性 ...

汇编笔记001

汇编指令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

移位指令

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 ...
(一) 概述 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 ...

SetFilePointer

下面是SetFilePointer函数的声明 DWORD SetFilePointer(HANDLE hFile,Long IDistanceToMove, PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod); lpDistanceToMoveHigh 参数是用来管理大文件,如果要移到文件中任何位置,我们就必须设置这个参数的 ...
Export Table(引出表)   上一课我们已经学习了动态联接中关于引入表那部分知识,现在继续另外一部分,那就是引出表。 理论 :   当PE装载器执行一个程序,它将相关DLLs都装入该进程的地址空间。然后根据主程序的引入函数信息,查找相关DLLs中的真实函数地址来修正主程序。PE装载器搜寻的是DLLs中的引出函数。   DLL/EXE要引出一个函数给其他DLL/EXE使用,有两种实现方法: 通过函数名引出或者仅仅通过序数引出。比如某个DLL要引出名为"GetSysConfig"的函数,如果它以函数名引出,那么其他DLLs/EXEs若要调用这个函数,必须通过函数名 ...
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 ...
示例 :   本例程打开一 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 ...
Import Table (引入表) 本课我们将学习引入表。先警告一下,对于不熟悉引入表的读者来说,这是一堂又长又难的课,所以需要多读几遍,最好再打开调试器来好好分析相关结构。各位,努力啊! 理论 :   首先,您得了解什么是引入函数。一个引入函数是被某模块调用的但又不在调用者模块中的函数,因而命名为 "import (引入) " 。引入函数实际位于一个或者更多的 DLL 里。调用者模块里只保留一些函数信息,包括函数名及其驻留的 DLL 名。现在,我们怎样才能找到 PE 文件中保存的信息呢 ? 转到 data directory 寻求答案吧。再回顾一把,下面就是 PE h ...
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 ...
Optional Header   我们已经学习了关于 DOS header 和 PE header 中部分成员的知识。这里是 PE header 中最后、最大或许也是最重要的成员, optional header 。   回顾一下, optional header 结构是 IMAGE_NT_HEADERS 中的最后成员。包含了 PE 文件的逻辑分布信息。该结构共有 31 个域,一些是很关键,另一些不太常用。这里只介绍那些真正有用的域。   这儿有个关于 PE 文件格式的常用术语 : RVA   RVA 代表相对虚拟地址。 知道什么是虚拟地址吗?相对那些简单的概念而言,RVA有些晦涩。简 ...
File Header (文件头) 本课我们将要研究 PE header 的 file header (文件头)部分。 至此,我们已经学到了哪些东东,先简要回顾一下 : DOS MZ header 又命名为 IMAGE_DOS_HEADER . 。其中只有两个域比较重要 : e_magic 包含字符串 "MZ" , ...
Global site tag (gtag.js) - Google Analytics