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

Posted gd-luojialin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆向课程第二讲,寻找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确认一下.

 技术图片

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

 

 转载于:

作者:IBinary
出处:http://www.cnblogs.com/iBinary/

以上是关于逆向课程第二讲,寻找main入口点的主要内容,如果未能解决你的问题,请参考以下文章

程序定义了多个入口点? CS0017 main() 有问题?

Hibernate入口点?主要课程

第二讲:我的第一个驱动

C#提示不只定义了一个入口点,请使用/main进行编译以指定包含入口点的类型

课程作业第二题

病毒分析第二讲,分析病毒的主要功能