读书笔记 -- 查找程序正真的入口

admin 2022年4月14日02:14:08评论86 views字数 942阅读3分8秒阅读模式

通常我们所说的main或WinMain主函数,其实并不是入口函数,真正的入口函数是mainCRTStartup/wmainCRTStartup/WinMainCRTStartup或wWinMainCRTStartup,具体视编译选项而定。


一、了解VS2022的启动函数

1、新建一个控制台应用程序

读书笔记 -- 查找程序正真的入口

2、断下来后查看堆栈信息

读书笔记 -- 查找程序正真的入口

3、查看mainCRTStartup函数源代码,右击,选择转到源代码

extern "C" DWORD mainCRTStartup(LPVOID){    return __scrt_common_main();}

4、继续转到__scrt_common_main函数

static __forceinline int __cdecl __scrt_common_main(){
    __security_init_cookie();//初始化焕春区溢出全局变量 return __scrt_common_main_seh();}

5、继续转到__scrt_common_main_seh函数

static __declspec(noinline) int __cdecl __scrt_common_main_seh(){           .....        .....        int const main_result = invoke_main();        ......        ......    }

6、查看invoke_main函数

static int __cdecl invoke_main()    {        return main(__argc, __argv, _get_initial_narrow_environment());    }


二、通过x64dbg找到入口函数

1、将编译好程序拖进x64dbg,停在程序入口处,但不是停在main函数

读书笔记 -- 查找程序正真的入口

2、运行一下程序, 点击F9,来到了关键函数处

读书笔记 -- 查找程序正真的入口

3、点击F7,进入mainCRTStartup函数

读书笔记 -- 查找程序正真的入口

4、点击F7,进入__scrt_common_main函数

读书笔记 -- 查找程序正真的入口

5、点击F8跳过第一个call,F7进入__scrt_common_main_seh函数

读书笔记 -- 查找程序正真的入口

6、一直F8找到,这个invoke_main函数,F7进入

读书笔记 -- 查找程序正真的入口

7、找到连续三个参数,这就是main函数

读书笔记 -- 查找程序正真的入口


欢迎关注公众号:逆向有你


读书笔记 -- 查找程序正真的入口

原文始发于微信公众号(web安全工具库):读书笔记 -- 查找程序正真的入口

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月14日02:14:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   读书笔记 -- 查找程序正真的入口http://cn-sec.com/archives/908341.html

发表评论

匿名网友 填写信息