OllyDBG反汇编快速找到程序入口一点分析

出处:http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html

先声明下:这个和脱壳没关系,不是找壳里面的程序入口哦,只是程序本身的入口,个别朋友不要误会哈。

其实这个应该是基础,但我经常找入口的时候翻半天......所以还是记录下来,万一时间久了又犯迷糊的时候可以查阅,呵呵。

一般用OllyDBG打开程序的时候,并不是直接定位到程序入口,而是还要先进行一系列的初始化工作,但做这些工作的反汇编代码我们是不需要的,所以我们要快速跳过,直接到程序入口。

我先把方法写出来,然后再简单分析一下初始化的时候都干了什么。

1.一路F8下去,分别步过下列两个函数
call dword ptr ds:[<&KERNEL32.GetVersion>]             ;
kernel32.GetVersion
call dword ptr ds:[<&KERNEL32.GetCommandLineA>]        ;
kernel32.GetCommandLineA

2.GetCommandLineA下面会有好几个Call,第1个Call完了后隔一行以后会有连续的3个Call,连续的3个Call完了后再往下遇到的一个Call就是程序入口的Call了。
也就是,
从GetCommandLineA往下数(不包括GetCommandLineA本身),第5个Call一般就是程序入口点的Call,F7进去就可以了。

PS:如果是用IDA5反汇编的话,我们点一下“_main proc near”处,然后 Run to cursor(F4)一下基本会直接定位到入口处。

方法很简单,那来看看在进入程序入口之前,都干了些什么吧。
下面这个是刚用OllyDBG打开程序的截图。

 

可以看到,第一个Call就是GetVersion,很好理解,就是获得Windows版本号。

继续往下。

 

看看我选定的部分,其中有5个Call,最后一个就是我们前面所找的入口处,前面的四个Call的函数分别是:
__crtGetEnvironmentStringsA
_setargv()
_setenvp()
_cinit()

需要注意的是,很多反汇编代码里面,后面的这三个函数名都不会被直接显示出来,而是显示的函数地址。

__crtGetEnvironmentStringsA我猜是GetEnvironmentStringsA()的宏定义名称(如果有错还请指出)。
GetEnvironmentStringsA()的作用是返回环境变量。
http://msdn.microsoft.com/en-us/library/ms683187(VS.85).aspx

_setargv()通过函数名就可以看出,是用来处理命令行参数的。
_setenvp()同样是处理环境变量的。
这两个函数的作用效果是把参数和环境变量保存到附近的可用“堆(heap)”里面,方便使用。

_cinit()的作用就是当检测到我们的参数覆盖了返回地址,能造成缓冲区溢出的时候报错并退出程序。平时我们遇到的讨厌的“遇到问题需要关闭”貌似就是这玩意搞的。
http://msdn.microsoft.com/en-us/library/ms924298.aspx
下面这个是用的微软官方测试代码的效果截图。


Author:zerosoul(零魂)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单的Twitter:Heroku上的Play框架,AJAX,CRUD

因此&#xff0c;重大的公告发布了– Heroku开始为Play Framework应用程序提供本机支持&#xff01; 如果您还没有听说过&#xff0c;请在Heroku的博客上查看Jesper Joergensen的帖子 。 因此&#xff0c;对于演示&#xff0c;我将建立一个非常基本的Twitter副本&#xff1b; 它…

Cron表达式

CronTrigger CronTriggers往往比SimpleTrigger更有用&#xff0c;如果您需要基于日历的概念&#xff0c;而非SimpleTrigger完全指定的时间间隔&#xff0c;复发的发射工作的时间表。CronTrigger&#xff0c;你可以指定触发的时间表如“每星期五中午”&#xff0c;或“每个工作日…

深入理解JavaScript学习笔记(3)_全面解析Module模式

简介 Module模式是JavaScript编程中一个非常通用的模式&#xff0c;一般情况下&#xff0c;大家都知道基本用法&#xff0c;本文尝试着给大家更多该模式的高级使用方式。 首先我们来看看Module模式的基本特征&#xff1a; 模块化&#xff0c;可重用封装了变量和function&#x…

汇编----乘指令: MUL、IMUL

MUL: 无符号乘 ;影响 OF、CF 标志位;指令格式:;MUL r/m ;参数是乘数;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX IMUL: 有符号乘 ;影响 OF、CF 标志位;…

Google App Engine Java功能和命名空间API

功能API 使用Capabilities API&#xff0c;您的应用程序可以检测特定API功能的停机和计划停机时间。 您可以使用此API来检测应用程序何时不可用&#xff0c;然后绕过它来减少应用程序的停机时间。 我们该如何处理&#xff0c;这是个折衷方案&#xff1f; 1.优雅&#xff1a;创…

破解key file时经常用到的几个API函数及其用法

CreateFile函数 ================================================================================== CreateFile: Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, …

PHP计划任务之关闭浏览器后仍然继续执行的函数

函数名称&#xff1a;ignore_user_abort 本函数配置或取得使用端连接中断后&#xff0c;PHP 程序是否仍继续执行。默认值为中断连接后就停止执行。在 PHP 配置文件中 (php3.ini/php.ini) 的 ignore_user_abort 选项就是配置处。本功能在 PHP 3.0.7 版之后才开始提供。 官方说明…

node--更新数据库问题

昨天测试blog的comment功能&#xff0c;在新增comment相关的代码之后&#xff0c;重启应用&#xff0c;出现Cannot call method forEach of undefined 。反复核对代码&#xff0c;都没发现异常&#xff0c;最后将数据库文件删除之后&#xff0c;再重启数据库&#xff0c;一切正…

U盘做完启动盘,如何恢复原始容量

&#xff08;1&#xff09;右击“我的电脑”&#xff0c;选择“管理”选项&#xff0c;之后选择“磁盘管理”&#xff0c;查看自己U盘的索引&#xff0c;如&#xff1a;Disk 1&#xff08;2&#xff09;在运行窗口&#xff0c;输入cmd&#xff0c;回车&#xff0c;出现Dos运行环…

GWT Spring和Hibernate进入数据网格世界

利用Infinispan数据网格的功能最大化Hibernate性能。 一个GWT &#xff0c; Spring &#xff0c; JPA &#xff0c; Hibernate &#xff0c; Infinispan集成教程。 在本教程中&#xff0c;我们将讨论如何将Infinispan用作Hibernate二级缓存提供程序。 Infinispan是JBoss缓存的…

记对一个key file crackme的破解

crackme下载地址: http://kssd.pediy.com/tutorial/exercise/section04/chap6-1-4-03.zip ------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------…

第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)

UNION 等集合操作符&#xff1a;UNION 等以第一个 SELECT 的 列明 作为 整个结果集的列明&#xff0c;整个结果集 唯一认可的 唯一逻辑处理阶段 是 ORDER BY 这个意思是说 只有 ORDER BY 是对整个结果集作用的&#xff0c;其它都操作都作用在 UINON 两侧的 子集合中。EXCEPT 操…

Java Code Geeks Andygene Web原型

大家好&#xff0c; 我们很高兴地宣布&#xff0c;一组Maven原型的第一个版本已经发布&#xff01;&#xff01;&#xff01; 该集合的目的是提供可以满足各种开发需求的项目模板。 您可以在本文末尾找到JCG路线图。 该第一个发行版旨在提供项目模板-Web应用程序的体系结构。 …

关于如何用od反汇编win32 控制台程序

*********************************************************** 如何用od反汇编win32 控制台程序(类似dos程序&#xff09;呢&#xff1f;*********************************************************** 注&#xff1a;od是用来调试win32程序的 1.反编译win32 控制台程序&…

Chrome/Chromium HTML5 video 视频播放硬件加速

Chromium站点上有个大致的框图。描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的&#xff1a; 而依据Android Kitkat上的Chromium代码分析&#xff0c;HTML5 video播放硬件加速&#xff0c;终于是使用MediaCodec.java来利用本地…

.net mvc结合微软提供的FormsAuthenticationTicket登陆

一、Web.config <system.web><compilation debug"true" targetFramework"4.5" /><httpRuntime targetFramework"4.5" /><authentication mode"Forms"><forms loginUrl"/Sign/SignIn" defaultUrl…

vc6.o--fatal error C1010错误的解决

当编译c文件时&#xff0c;出错信息为&#xff1a;fatal error C1010: unexpected end of file while looking for precompiled header directive 解决方案&#xff1a; 1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的&#xff0c;则AltF7进入当前工程的…

具有Java 7中自动资源管理功能的GC

这篇文章简要概述了Java 7中引入的称为自动资源管理或ARM的新功能。 文章探讨了ARM如何减少开发人员为有效释放分配的资源的JVM堆而必须编写的代码。 Java编程语言中编程的最甜蜜之处之一是对象取消分配的自动处理。 在Java世界中&#xff0c;这通常被称为垃圾收集。 基本上&am…

PHP学习笔记(六)

《Wordpress 50个过滤钩子》 1-10 过滤钩子是一类函数&#xff0c;wordpress执行传递和处理数据的过程中&#xff0c;在针对这些数据做出某些动作之前的特定点执行。本质上&#xff0c;就是在wordpress输出之前&#xff0c;将对浏览数据做出反应。 添加过滤钩子&#xff1a; ad…