逆向分析之寻找main函数
来源:互联网 发布:centos 最小安装 编辑:程序博客网 时间:2024/04/30 05:28
逆向分析之寻找main函数
作者: 日月明
时间:2010-01-19
工具:ollydbg、IDA、peid
刚接触逆向分析,看到一行行的汇编代码,不时感到一阵阵头痛,不知道从何入手。思来想去,还是想看看我们在C语言中的main函数它在什么地方吧。。。。。。。。。。。
看看C语言的main函数吧
int main(int argc, char* argv[])
{
printf("Hello main!/n");
return 0;
}
当我们用ollydbg载入一个程序时,程序首先停留在程序入口点(通过peid可以看到)。如图:
按F8在ollydbg中单步调试,go,go。。。。。。。。。。。。。。。
当来到call dword ptr ds:[<&KERNEL32.GetCommandLineA>]指令后,就说明我们离main函数不远了。我们发现后面有许多call指令,请注意:我们要找的main函数就在其中的某个call中。
那主要函数所对应的是哪个call呢????
再按F8,当来到一个call指令,此时按F7跟入如图:
发现此函数调用了一些系统环境变量初始化的一些函数。显然,它不是我们所要找的main函数。
再按F8,来到call指令,依次跟进,重复上面的过程。当我们来到main函数的call时跟进发现如图:
此call是直接到了一个jmp指令,然后再由jmp所到的地址继续执行。Jmp跳转到如图指令
典型的几个压栈指令。可以看出,这就是我们的main函数入口了。。。。
注意:jmp所到的地址就是我们main函数地址!!!!
终于,我们的mian函数找到了吧。。。。。。
总结:
1. 载入程序来到GetCommandLineA指令处。(离main不远了,就在之后的某个call指令之后)。
2. 依次跟进后面的每个call指令,发现call指令来到jmp后又跳转到几个典型的压栈指令,说明这就是main函数。
以上寻找main函数的方法适用于控制台、win32 等,不适用于由MFC写的程序。
我们知道由MFC写的程序main函数是经过封装的,那我们如何寻找它的main函数呢???
好了,现在我再带大家一起来找一下MFC中的main函数吧。Let’s go ! 。。。。。。
首先,我们来看,进入main函数之前MFC的初始的东东比较多如图:
按F8单步,最后来到了
call dword ptr ds:[<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA
些时,我们发现没有GetCommanLineA函数。也许是执行略有不同吧。来到此指令之后也意味着我们离main函数不远了,依次重复跟进后面的call指令。
跟入call指令之后发现后面还有好多call啊,吓了一跳。。不怕,不怕。我们发现有个call也要来到jmp指令,然后再跳转到一个指定的地址。(这不是和上面的类似了嘛!!)。
注意:jmp跳转到的地址就是我们的main函数。
Yeah,终于找着了吧。。。。
对于我们分析MFC程序来说,主要是寻找其中的关键地方,没有过多的关注MFC的main函数,所以这里对MFC的main函数就不再过多的讨论了。。
- 逆向分析之寻找main函数
- 代码逆向(一)——寻找main函数入口
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- Main函数之Delay分析
- Main函数之Isr_Init分析
- webbench源码分析之main函数
- FreeSWITCH源码分析之主函数main()
- Android 逆向分析之 : GPS卫星定位监控导航寻找人
- C++反汇编与逆向之识别main函数学习笔记
- JEVT 代码分析之主线程main函数分析
- 【原创】第一章:1.1、寻找main函数入口
- main函数参数分析
- 10,main函数分析
- C语言之Main函数返回值问题分析
- C语言之Main函数返回值问题分析
- Main函数之结构体变量数组CmdTip[]分析
- C语言之Main函数返回值问题分析
- hi
- 读一个URL的图片存到本地某路径下
- perl:在Subroutine中使用全局变量
- SOC DNA开发三层应用-序言
- 远程获取网页内容类(请求,返回请求页面内容)
- 逆向分析之寻找main函数
- Flex 4组件:限定搜索范围的Navbar,Vimeo样式
- JS实现树形选择器
- RouterBOARD企业网络管理应用
- 使用Nginx的proxy_cache缓存功能取代Squid
- [读书]24小时自学商业计划书
- 一步步设计自己的驱动程序(转载)
- 解决查询重复数据问题的一个特列
- getSimpleJdbcTemplate的全面用法