首页
社区
课程
招聘
[原创]逆向技术之寻找Main入口点
发表于: 2018-2-5 16:09 22996

[原创]逆向技术之寻找Main入口点

2018-2-5 16:09
22996

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

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

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版本

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

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

1.都是一样的,先找特征


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


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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-2-1 17:07 被admin编辑 ,原因:
收藏
免费 6
支持
分享
最新回复 (10)
雪    币: 300
活跃值: (2477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark
2018-2-6 10:54
0
雪    币: 94
活跃值: (333)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
2018-3-16 20:18
0
雪    币: 5596
活跃值: (2173)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
一般IDA分析的时候,就会识别出入口函数
2018-3-16 21:27
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
5
其实最简单的方法就是找exit函数,找他的参数是从哪来的,一般他就是main的返回值
2018-3-17 04:42
0
雪    币: 58
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
找到入口的RVA,然后跟进去就行了、
2018-3-17 10:30
0
雪    币: 8924
活跃值: (5147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
7
holing 其实最简单的方法就是找exit函数,找他的参数是从哪来的,一般他就是main的返回值
受教了,谢谢大牛指点
2018-3-17 11:31
0
雪    币: 313
活跃值: (250)
能力值: ( LV9,RANK:650 )
在线值:
发帖
回帖
粉丝
8
希望下篇文章就是exit
2018-3-18 08:14
0
雪    币: 320
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了  谢谢楼主分享
2020-6-19 17:25
0
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
ga感谢分享啊 
2020-6-19 19:26
0
雪    币: 881
活跃值: (9856)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
11

VS高版本Exit寻找Main入口一丶 Release 与Debug找寻方法1.1 Release 找寻方法1.2 Debug版本寻找

VS高版本Exit寻找Main入口


一丶 Release 与Debug找寻方法

1.1 Release 找寻方法

近期有小伙伴反应找不到main入口了. 高版本看了一下也改了.这里把exit找法分享给大家

当然有如果有更好的方法也希望能分享出来.


这里使用简便的方法

记住在Release下 在IDA函数窗口搜索 _exit  然后双击跳转过去.然后对齐按 x 查看引用位置

此时往上略过一个call就是main call入口. call内部就是三个push + 一个call

image-20200909100416943image-20200909100416943

请注意,这里有多个_exit. 第一个也可以找到.不过你要往下多走几个call 第二个是最后一次调用位置

所以直接找到对其进行引用即可.

注意的问题:看到图片上面第二个框的吗.选中这里对其 按X 不要在上面的声明哪里按x不然你会跟错

跳转过来如下

image-20200909100614755

调用位置是call _exit 然后往上走略过一个call 就是main call

进去查看就是三个push 一个call 也就是最终main入口

image-20200909100723612

1.2 Debug版本寻找

Debug版本你可以搜索 j__exit 这里是两个 _  当然你搜索不到搜索 _exit一样.

image-20200909100906286

_exit找寻方法

image-20200909100951898

其他步骤跟Release一样.略过一个call 直接找入口



2020-9-9 10:15
2
游客
登录 | 注册 方可回帖
返回
//