逆向课程第二讲,寻找main入口点

一丶识别各个程序的入口点

入门知识,识别各个应用程序的入口点

(举例识别VC 编译器生成,以及VS编译生成的Debug版本以及Release版本)

1.识别VC6.0 Debug版本

1.1 首先,新建一个VC debug版本的程序,然后F5运行,可以看到栈回溯窗口

1.2 而后通过栈回溯窗口,点击mainCRTStarup,查看main函数之前会调用什么API

确定之后,OD打开查看.

可以看到调用API的位置,但是怎么确定那个是入口点,我们知道,  VC中的main函数是3个参数,那么我们只需要找到

三个push 然后一个Call的位置,则可以确定,(确定也是要你F7跟进去,看看代码是不是main函数的代码,或者参数传参是什么)

1.3确定main入口点

在上图可以看到,三个push,然后一个Call,那么我们跟进去查看,因为是Debug版本,所以已经提示出来参数是什么了

所以直接可以确定了.

1.4 F7跟进去查看.

可以直接确定使我们的入口点

IDA查看一次

步骤和前边一样,先看入口点特征,Debug版本特征是调用API GetVersion

所以IDA中查看.

1.查看文本视图

2.展开文本视图

这里提示你要CTRL +  加号 展开

展开查看

3.根据特征,读取代码,确定main位置

因为是Debug所以有符号显示 下面直接看Release版本

2.查看VC6.0 Release版本

首先,特征是一样的,都是调用GetVersion

那么现在直接OD打开去分析.(当然IDA也可以,都是工具)

1.一样,先找特征

2.找到之后,因为我们写的是main,所以判断是main,只要找到三个push一个Call即可

已经找到了 F7 跟进去查看.

3.确认是不是.

可以看出,因为是Release版本,所以都给优化没了.确实使我们写的代码

3.查看VS系列 Debug版本(没个版本不一样,所以先看下特征这里是 VS 2015)

1.栈回溯,确定入口点特征

首先第一步,还是编写一段代码

然后通过栈回溯,查看入口的特征.

那么我觉着,这个是入口点的特征,而在tmainCRTStartup里面调用的wmain

那么此时OD打开的时候可以分析遇到的第二个call,然后在第二个call里面跟进去.

通过栈回溯,可以看到会调用这种API,而下方的截图则会调用wmain,所以OD打开,不断的跟,也是三个push 一个Call

2.OD分析

因为是Debug版本,有跳转表,也可以看到符号信息,所以直接跳转过来

跳转过来之后(看下图)

可以看到确实是两个Call,也就是我们上面分析的,然后进入第二个Call

3.确定入口点位置

F7跟进去,查找三个push  一个Call

找到了,我们跟进去查看,看看是否是入口点,

跟进去之后发现又有一层跳转表,没关系,F8 走过去

跟过来之后则会发现确实使我们入口点写的代码了

4. VS系列,查看Release版本

Release版本是一样的,直接IDA打开查看(换着工具看)

1.进去IDA,打开入口点,CTRL + 加号展开

CTRL + 加号展开不做演示,同上面分析一样.

查看反汇编

发现IDA直接跟过来的就是这个,那么此时好办了,我们知道main在它的下面,那么直接寻找三个push 一个Call即可.

找到了,双击_main确认一下.

我们刚才写的代码已经出来了

逆向课程第二讲,寻找main入口点的更多相关文章

  1. PC逆向之代码还原技术,第二讲寻找程序入口点

    PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...

  2. C# 一、语法结构、注释、命名空间、Main入口点、变量与常量、运算符、流程控制(循环)

    一.代码结构 1)一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(St ...

  3. 逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复

    逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复 首先我们要知道这个OD的Bug是什么. 我们调试一个UNICODE的窗口,看下其窗口过程. 一丶查看OllyDbg 的Bug 1.1spy++ ...

  4. 逆向实用干货分享,Hook技术第二讲,之虚表HOOK

    逆向实用干货分享,Hook技术第二讲,之虚表HOOK 正好昨天讲到认识C++中虚表指针,以及虚表位置在反汇编中的表达方式,这里就说一下我们的新技术,虚表HOOK 昨天的博客链接: http://www ...

  5. 不包含适合于入口点的静态"Main"方法

    学习新建项目.此问题做为笔记. 错误 1 程序“admin.exe”不包含适合于入口点的静态“Main”方法 原因:原来创建项目的时候,用的是“空项目”,我以为这样就会生成类库,实际上,一开始准备运行 ...

  6. WPF编译时提示“...不包含适合于入口点的静态‘Main’方法 ...”

    今天看了一下wpf的Application类方面的知识,一个windows应用程序由一个Application类的实例表示,该类跟踪在应用程序中打开的所有窗口,决定何时关闭应用程序(属性 Shutdo ...

  7. 如何为WPF添加Main()函数 程序入口点的修改

    一般的.WPF的Main()函数是自动生成的,不过有时候我们需要为我们的应用程序传参.那么自动生成的Main()函数就不会满足我们的要求. 那么如何为WPF Application 设置Main()函 ...

  8. 在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)

    在main函数之前跑代码的方法 方法: 手工找到程序入口点, 替换为我们自己的函数 写测试程序 // test.cpp : Defines the entry point for the consol ...

  9. Net Core通用主机项目报错 程序不包含适合于入口点的静态Main

    Net Core通用主机的介绍: https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/generic-host?view=as ...

随机推荐

  1. Json操作问题总结

    大家都知道,Json是一种轻量级的数据交换格式,对JS处理数据来说是很理想滴! 熟练写过xxx.json文件和操作的小伙伴来说,我说的问题都不是什么大问题啦,可以忽略本宝宝的文章,更希望各位大佬指点一 ...

  2. 实例说明MVC,MVP,MVVM架构

    很早就知道有这三个概念,但是一直都不清楚是怎么回事,在网上搜索,都是泛泛而谈,没有具体例子,新手是看不懂的,直到找到这篇文章,我对这三个架构有了更清楚的了解. 从一个简单的例子去研究这三个架构. 注意 ...

  3. 移植u-boot-2012.04.01到JZ2440

    开发环境:Ubuntu 12.04 开发板:JZ2440  256M NandFlash  64M SDRAM 交叉编译器:arm-linux-gcc-4.3.2 u-boot:u-boot-2012 ...

  4. Racing Car Computer dp

    Racing Car Computer Input: Standard Input Output: Standard Output   The racing cars of today are equ ...

  5. http://codeforces.com/problemset/problem/545/D

    D. Queue time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  6. sqlserver游标使用和循环

    /*** 游标的使用 讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱. 使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1声明游标 最简单游标声明:DECLA ...

  7. django使用xlwt导出excel文件

    这里只是mark一下导出的方法,并没有做什么REST处理和异常处理. 维护统一的style样式,可以使导出的数据更加美观. def export_excel(request): # 设置HttpRes ...

  8. nginx + keepalived 实现高可靠web网站

    组网图: 配置信息: 左边nigx 服务器的 /usr/local/nginx/conf/nginx.conf #user  nobody; worker_processes  1; #error_l ...

  9. Java命令模式以及来自lambda的优化

    前言    设计模式是软件工程中一些问题的统一解决方案的模型,它的出现是为了解决一些普遍存在的,却不能被语言特性直接解决的问题,随着软件工程的发展,设计模式也会不断的进行更新,本文介绍的是经典设计模式 ...

  10. 小程序1_app.json配置

    1 window配置: window属性主要用于设置小程序的状态栏,导航条,标题,窗口背景色 直接在app.json里配置即可 2 tabBar底部导航 一般程序都会有底部导航栏,这个同样只要在app ...