加壳学习笔记(三)-简单的脱壳思路&调试思路

首先一些windows的常用API:

GetWindowTextA:以ASCII的形式的输入框

GetWindowTextW:以Unicaode宽字符的输入框

GetDlgItemTextA:以ASCII的形式的输入框

GetDlgItemTextW:以Unicaode宽字符的输入框

这些函数在使用的时候会有些参数提前入栈,如这函数要求的参数是字符串数目、还有大小写啦之类的东西,这些东西是要在调用该函数之前入栈,也就是依次push,就是说一般前面几个push接着一个call,那前面的push可能就是push的call函数的参数,例如: void function(a,b,c);

汇编: push c

push b

push a

call function   ;call该函数的地址,一般的API调用常识,在调用该函数之前就得先给该函数的参数

OllyDbug调试程序的技巧:

1.F2下断点,Alt+b断点编辑器(也可以按上面的B标志),这样可以编辑所下过的断点,空格键可以快速切换断点的状态

2.当位于某个Call中,要返回调用这个Call的地方,可以按Alt+F9快捷键执行返回功能,这样OD就会停在遇到第一个返回命令如:ret、retf、iret等地方,就是原来Call的的下方的返回值处

3.如果跟进系统DLL提供的API函数中,此时想返回到应用程序领空里,可以按Alt+F9返回到用户代码命令

简单的说,Alt+F9这个快捷键就是一个返回功能哈,呵呵

4.所谓的领空,实际上就是指在某个时刻,CPU执行的指令在在某段代码的所有者,简单的说就是那个程序正在使用CPU哈

5.如004013F7这类地址一般是可执行文件领空,7C8114AB这类是系统DLL所在的地址空间,因为系统的地址都是在系统的最高地址处(要知道这里都是虚拟地址哈)

6.程序通常读取文本框内容的字符串用的是以上的一些常用函数

7.一般我们要结合经验通过猜测的方式多尝试几遍设几个陷阱,找出相关的函数

8.用Ctrl+G键打开跟随表达式的窗口,也可以是如:ebp+4 的指令,就会显示您输入的地址的信息在下方的第一行

9.可以用Ctrl+N键打开应用程序的的导入表(输入表)的入口,然后查看应用程序总共导入了那些函数来依此判断需要在哪里挖下陷阱!(也就是一个下断点的方法,利用应用程序可能遇到的关键API来开刀)

10.关于返回值,汇编代码的返回值约定是放在eax这个寄存器中的,如果是32位的eax不够存放返回值,系统将会将返回值存放在内存的某个位置,并该把该位置的地址放在eax中,这样系统也是会读到那个返回值

11.关于test、cmp等指令都是判断性的指令,这样也是要引起注意的点子,还有如果找到的了如jz、jnz这些条件跳转指令呐,就要看ZF寄存器的值啦,记住***当修改ZF寄存器的值并使跳转条件修改生效的时刻是当F8或F7执行到该指令上的时候再做修改,如对付这些标志寄存器直接就双击该寄存器的值就行啦,0-1变化

通用的菜鸟调试思路:

1.首先F3加载应用程序,然后一路F8直到自己停下来,或者是ctrl+F8他会自己运行,直到出现自己停下的时候(也就是OllyDbug把程序的控制权交出,转由应用程序自己控制,呵呵,不行,还得唠唠其他的......下面先跳转一下)

控制权、领空:关于程序的控制权和领空的问题,OllyDbug是一个强大的程序调试工具,具有强大的调试和反汇编能力,他会在应用程序拉到内存的那一刻,就牢牢的控制了该程序,具体的方法是(个人猜想而已):OD把程序拉到内存的同时,就是一个领孩子入瓮的问题,呵呵,实际这里是OD给应用程序分配的虚拟内存,本来吧,windows就骗OD给他的内存空间,就是虚拟内存,现在骗上加骗啊,这就是用工具加载应用程序的后果,呵呵,好听点就是要在别人的怀抱里,难听点就是必须听别人的指点,只要的指导权限是在OD这(实际是在Windows那哈),所谓的控制权在最初肯定是在OD的,在这里其实还有一个概念就是消息队列哈,这个下面再聊,当OD觉得该让应用程序执行的时候,就会把程序的控制权交给应用程序,这样就完成了OD的目的,OD就是这样强大,他实际上是把其内的应用程序完全控制住啦

消息队列:在windows下使用的是消息传递机制,这里的就是高出DOS的地方,在DOS下就是单线程的程序执行,他执行程序时就是没分时间片,在windows版本的程序里,就是一个跨越式的进步,直接就引进了多线程的思想,是采用分时复用的实现方式,一个简单的例子就是比如:在一个有多个程序的桌面上,点击了一个Button之后的事,就是首先是应用程序的消息队列接收该信息,然后将这个消息信息传递给Windows内核,然后在windows的判断后,做出回应,然后将消息返回给应用程序,告诉也是允许应用程序在windows的系统程序上运行啥,体现啥,这里面经过windows内核的转述之后,在转述的过程中就是欺骗程序的地方,在进入内核转储的时候CPU给他做了运算处理,这样的处理是在物理内存和CPU的之间操作,也就是说内核操作就是几乎硬件的操作,然后就是返回结果,这里就是一个事件委托的过程,事件委托实际上就是将应用程序执行交由系统或其他的应用程序处理,这要就是将进程交由其他应用程序控制,然后完成一系列的CPU处理

加壳学习笔记(三)-简单的脱壳思路&调试思路,布布扣,bubuko.com

时间: 2024-10-24 06:00:57

加壳学习笔记(三)-简单的脱壳思路&调试思路的相关文章

加壳学习笔记(二)-汇编基础

7.简单的汇编语法:   堆栈平衡  PUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPAADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,

加壳学习笔记(一)-基础知识

1.预备知识 1.关于栈,在windows里面的堆栈其实很简单,当学了才知道哈,呵呵,第一要记住的是windows里面的栈是向低地址生长的(extended,延伸,呵呵,顺便丰富下英语的单词量,确实是少的可怜),你可以这样认为,栈就像是一个倒立的箱子,箱子的口子是向下的,底是向上的,这里就表明了系统栈的分布也是延伸方向是由高地址向低地址extended,在最初的空栈阶段,栈顶(extended stack pointer,简称是esp)在栈底的低一个位置,呵呵,其实很好理解,就是说最初的箱子是空

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

Go语言学习笔记(三) [控制结构、内建函数]

日期:2014年7月21日 一.控制结构 1.Go中,只有几个控制结构,它没有do或者while循环,有for,灵活的switch语句和if,在switch中可以接受像for那样可选的初始化语句,另外Go中还提供了类型选择和多路通信转接器的select.Go的控制结构的语法和C相比有所不同,它不需要圆括号,但语句体必须总是包含在大括号内. 2.控制结构语法 1)if-else (1)if后紧跟单个条件 例如:if x > 0 {   //{必须和if在同一行,这是Go语法规定的,如果换行写,编译

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps

3. 蛤蟆Python脚本学习笔记三字符串

3. 蛤蟆Python脚本学习笔记三字符串 本篇名言:"平静的湖面只有呆板的倒映,奔腾的激流才有美丽的浪花!幸福不是靠别人来布施,而是要自己去赢取!生命的意义在不断挑战自己,战胜自己!" 这个本来放在昨天的,由于昨晚又太晚了,所以就搁在这里了.赶紧看看吧. 字符串两边都用双引号或者单引号包起来.否则就使用转移符号来转移一下. 输入在一起可以直接拼接. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48112507

Lua学习笔记(三):表的构造

构造器是创建和初始化表的表达式.表是Lua特有的功能强大的东西.最简单的构造函数是{},用来创建一个空表.可以直接初始化数组: 1 days = {"Sunday", "Monday", "Tuesday", "Wednesday", 2 "Thursday", "Friday", "Saturday"} Lua将“Sunday”初始化days[1](第一个元素索引为