逆向程序分析:Win32程序入口函数

win32项目,win32控制台,API,SDK,MFC 前段时间学习简单项目开发的时候发现需要设计windows对话框应用程序,于是去学了SDK,但是后来跟着书敲代码的时候又是用了MFC框架,于是来总结下这些概念 win32项目与win32控制台 1.界面 win32控制台项目是在32位Windows命令提示符(即所谓的dos)环境下运行的应用程序,所谓dos界面全称为Disk Operating System,意思是“磁盘操作系统”,就是那个黑 阅读详情

逆向程序分析:Win32程序入口函数

现在是无线时代,从事Windows相关开发逆向工作的人越来越少,涌入的新人更是少之又少,目前自己也是新手,记录一下学习过程

Winmain() Win32程序

很多人可能不知道win32程序和控制台程序有什么区别,这个我们可以通过修改项目的属性配置来看一下:

在这个地方,我们可以把项目属性修改为窗口程序,然后运行程序,发现会报错

在这里插入图片描述

在这个地方,我们可以把项目属性修改为窗口程序,然后运行程序,发现会报错。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VLeZNspy-1634994064325)(C:\Users\11073\AppData\Roaming\Typora\typora-user-images\image-20211023205336382.png)]

下面我们来看一下原因:

这是控制台的启动函数:

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

这是Win32程序的启动函数

static int __cdecl invoke_main()
    {
        return WinMain(
            reinterpret_cast<HINSTANCE>(&__ImageBase),
            nullptr,
            _get_narrow_winmain_command_line(),
            __scrt_get_show_window_mode());
    }

可以看到,在启动函数中,俩者需要做不同的准备,其中Win32程序需要在这期间进行以下工作:

检索指向新进程的完整命令行指针
检索指向新进程的环境变量的指针
对C/C++运行期的全局变量进行初始化
对C运行时内存单元分配函数(malloc、free)和其他底层输入输出例程使用的内存栈进行初始化
为所有全局的和静态C++类对象调用构造函数
调用invoke_main函数切入到我们编写的程序入口

Winmain()函数说明

int WinMain (
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPSTR lpCmdLine,
    _In_ int nShowCmd
    );

hInstance:指向应用程序的可执行实例,比如a.exe启动的时候会创建一个实例句柄,这个hinstance就是指向这个a.exe的实例句柄。winmain的hinstance实际上是系统将可执行文件的映射加载到进程的地址空间时使用的基本地址空间。例如如果a.exe被加载到0x00400000,那么hinstance的值就是0x00400000。
hpreinstance:由于启动函数,一般都是NULL
lpcmdline:命令行,一般希望被修改,也可以使用GetCommandLine获取当前进程的命令行

参考资料

《加密与解密》

C语言中的main函数为什么被称作程序入口

windows编程 进程(一):进程简介

Win32简单图形界面程序逆向 该程序是经release版本进行编译的。打开该程序之后,使用鼠标左键点击窗口,会弹出标题和内容均为1的窗口;使用鼠标右键点击窗口,会弹出标题和内容均为2的窗口。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9g4sGISx-1663261973410)(https://images.cnblogs.com/cnblogs_com/02SWD/2217859/o_220915092436_%E5%9B%BE%E7%89%871.png)]打开该程序之后,选中窗口, 阅读详情

相关推荐

逆向入门--简单win32CK逆向手记

最近入坑逆向不就,这个算是真正意义上的第一个CrackMe遂记录逆向过程 初观界面 一个经典的输入密码并验证的小程序,先直接运行! 随便的输入密码,显然不对,弹框 incurrent 的提示框开始分析直接拖入OD,搜索工具搜索 Incurrent 这个字符串 跟着搜索结果,找到Ctrl+G 找到内存位置 在这里我们找到了真相,可以通过反汇编窗口很简单的看到这个。 这段看着逻辑简单清晰

Quartz's Blog 2493

C语言中的main函数为什么被称作程序入口

在接下来的五个函数执行中,都可以看到前面ConsoleApplication3开头,这个是我们的程序文件名,这表示这几个函数都是为我们程序服务的,这些都是运行在我们程序的进程空间的,其实就是我们程序所占的内存块中。操作系统的安排,启动运行时库,运行时库再初始化好环境,然后启动你的入口函数,你的程序才正常的运行起来。如果你看到的不是这样的,有很多问号的,或者显示什么不可用符号等等,在对应的那条上面,右击点击显示或导入“符号”的菜单,然后VS自动更新符号,这样就可以显示出这些函数分符号名了。

Machine Learning with Tutors 4238

Cruehead-CrackMe-3逆向分析:Win32程序保护与破解实战

逆向工程是分析软件运行机制和安全防护的重要技术,其核心在于通过静态分析与动态调试理解程序逻辑。以典型的Win32平台CrackMe为例,这类程序常采用文件自校验、字符串变换等基础保护机制。通过IDA Pro等工具进行反汇编,可以解析出关键算法如固定乘数运算与魔数异或的组合验证逻辑。在工程实践中,x32dbg动态调试能有效验证分析结果,而编写Python注册机则实现了技术成果的转化。本案例涉及的ASMx86汇编解析和API调用追踪,既是软件安全研究的入门必修课,也为理解现代软件保护技术(如代码混淆、反调试)奠

weixin_31648507的博客 217

解析Windows main和wWinMain函数

Windows 创建不同的应用程序,所对应的函数入口也会有所不同,在此以main和wWinMain函数来分析一下为什么windows这么设计。其它类似main入口同理。

qq_32700993的博客 2904

Win32逆向必备:X32dbg中窗口句柄查看与消息断点的高级用法

本文深入探讨了X32dbg在Win32逆向工程中的高级应用,重点解析窗口句柄查看与消息断点的实战技巧。通过MFC程序逆向案例,详细介绍了如何利用窗口句柄层次结构、条件断点设置及消息映射表定位等技术,快速捕获关键业务逻辑,提升逆向分析效率。

nginx7reverse的博客 1017

【看雪】第一课 逆向分析基础知识

yeomanry的专栏 1725

函数栈帧的创建和销毁

文章目录一、什么是函数栈帧二、ESP、EBP、栈的概念 1、栈的概念 2、ESP和EBP 3、认识汇编指令和其他寄存器三、通过编译器了解栈帧的创建和销毁 1、函数的调用堆栈 2、准备环境和反汇编 3、转到反汇编 (1)为main函数创建栈帧 (2)进入其他函数创建栈帧 (3)销毁Add函数栈帧4、总结几个问题 前言: 函数栈帧是对底层一点基础理解,以下是个人学习的总结,希望对你有帮助。 一、什么是函数栈帧    比如我们在C语言中的学习中,都会创建一个main函数以及其他拥有独立功能的函数。  在这个函

Ahaooooooo的博客 1356

逆向分析工具介绍

2.1逆向分析工具介绍在二进制代码分析中,必须要用到逆向分析的工具,这些软件工具一般可分为2.1系统监控工具,2.2反汇编器,2.3调试器2.4和反编译器。 系统监控工具用来监控,研究以及剖析待逆向的程序,这是由于程序与外部世界的通信都要经过操作系统,系统监控工具可以监控网络活动,文件访问,注册表访问等等一系列的软件运行活动。反汇编器足以程序的可执行二进制代码为输入,生成包含整个或部分程序的汇编代码文本文件的程序。 反汇编是一个与处理器相关的过程,反汇编器一般支持多种CPU絮构,反汇编器的工作过程比较简单

attilax的专栏 1万+

_main函数 int __cdecl invoke_main(void) (?invoke_main@@YAHXZ)

问题描述: error LNK2019: 无法解析的外部符号 _main,函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中引用了该符号 解决: 看一下主函数写没写错

半生瓜のblog 2732

无人机核心部件解析:从机架到飞控的全面指南

本文全面解析无人机的核心部件,从机架材质选择到飞控系统调参,提供专业指南。重点介绍碳纤维机架、无刷电机搭配、锂聚合物电池管理及飞控传感器配置,帮助读者掌握无人机组装与优化的关键技术,适用于航拍、测绘、农业植保等多种应用场景。

weixin_30872499的博客 470

机器学习的学习准则(期望风险最小化、经验风险最小化、结构风险最小化)

要评价模型f(x, θ)的好坏,可通过期望风险R(θ)来衡量:求期望损失R(θ)不仅需要知道损失函数还需要知道真实分布,损失函数可以通过一定的准则计算得到,但是样本空间的真实分布是未知的。所以不能直接求R(θ)。期望风险R(θ)无法计算,给定一个训练集D =,我们可以计算经验风险,经验风险就是在训练集上的平均损失:为了解决过拟合问题,引入了参数正则化来限制模型的能力。使其不要过度的最小化经验风险。这种准则就是结构风险最小化准则

... 2225

从BMZCTF逆向实战出发:剖析IDA反编译受阻的破解与Win32程序分析技巧

本文从BMZCTF逆向实战出发,详细剖析了IDA反编译受阻的破解方法与Win32程序分析技巧。通过识别并删除干扰函数、解析程序验证逻辑等步骤,展示了逆向工程中的实用技术,帮助读者掌握应对反编译难题的关键策略。

weixin_30315905的博客 313

01. VBA从入门到精通——录制宏、窗口、快捷键

excel表功能区右击→常用→选择显示开发工具选项→确定Visual Basic:打开VBA窗口宏:查看要录制的宏录制宏:准备录制宏使用相对引用:录制宏的时候对单元格的引用做一个设置宏安全性:对宏的使用做安全设置,一般设置为禁用所有宏,并发出通知,此时打开带有宏代码的工作薄时会出现警告标记,如果宏可信就选择启动。

weixin_43812198的博客 1696

[安全攻防进阶篇] 五.逆向分析之Win32 API获取及加解密目录文件、OllyDbg逆向其原理

这是作者安全攻防进阶篇,希望对您有所帮助。前文作者讲解了条件语句和循环语句源码还原及流程控制逆向方法,这篇文章将分享勒索病毒,通过编写程序实现获取Windows系统目录文件,并对其进行加密和解密的过程;第二部分详细讲解了OllyDbg和在线沙箱的逆向分析过程,第三部分分享恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱。基础性文章,希望您喜欢~

杨秀璋的专栏 8804

eMMC FFU固件更新实战:从协议解析到设备修复

本文详细解析eMMC FFU固件更新技术,从协议原理到实战操作,涵盖EXT_CSD寄存器操作、命令流状态机解析及专业工具使用指南。通过真实维修案例,展示如何利用FFU机制修复设备故障,并提供高级优化技巧与安全注意事项,是硬件工程师和维修技术人员的实用参考。

weixin_29191761的博客 382

修改注册表导致开机时电脑显示“无法登陆到你的账户”的问题解决方案

1.问题描述:开机电脑显示“无法登陆到你的账户:通常可以通过从你的账户注销,然后重新登陆来解决问题,如果不立即注销,你创建的任何文件或进行的任何更改都将会丢失。” 2.问题原因:想要修改cmd中的用户名(红色部分),修改了注册表,重启时出现问题。 3.问题解决: win+R输入cmd,确定进入注册表界面,将下面的地址复制进地址栏(你也可以自己按目录查找),双击ProfileImage...

qq_33835957的博客 7万+

从逆向分析角度看C++虚函数

从逆向分析角度,粗略地分析了虚拟表的结构,本人才疏学浅,有误之处,望各位指正

个人技术博客 6220

脑影像分析软件推荐 | JuSpace

JuSpace是一种允许基于 MRI 测量与核成像衍生估计的跨模态关联的工具包,它涵盖各种神经递质系统,包括多巴胺能、血清素能、去甲肾上腺素能和 GABA(γ-氨基丁酸) 神经传递。JuSpace 由一组 Matlab 功能以及涵盖各种受体系统的 PET 受体图谱组成。

NHKJ_ZF的博客 1708

逆向脱壳分析基础学习笔记十 汇编寻找C程序入口

本文为本人在 大神论坛 逆向破解脱壳学习笔记之一,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出。 陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步 C语言程序入口 首先明确一点,这里所指的C语言程序入口为C语言的控制台程序的入口,和WIN32等其它类型的程序入口并不相同,主要为学习如何寻找程序入口 首先我们都知道C语言的控制台程序中,我们都将代码写在了main函数里,但是这个main函数不过是我们编写代码的入口,而不是真正程序的入口,如何找寻真正的程序入口? 在main函数的头

xiaotuge_always的博客 475

手把手教你学Simulink--基于Simulink的机械臂工业装配任务仿真建模

特点高精度要求:装配过程通常需要非常高的位置精度。多步骤操作:一个完整的装配任务可能包含多个连续的子任务,如抓取零件、移动到特定位置、装配等。动态环境:工作环境可能是动态变化的,例如其他机器人或人员在同一空间内工作。挑战复杂性管理:需要处理复杂的运动学和动力学问题,以及可能的碰撞避免。实时性:某些应用场景下需要快速响应以保证生产效率。集成度:需要与其他系统(如传感器、PLC等)无缝集成。首先明确要模拟的装配任务内容。零件的位置和尺寸。装配顺序。

MHD0815的博客 240

C# 上位机之海康工业相机开发(SDK)实战教程

海康工业相机的C#开发核心是基于MVS SDK的“初始化→枚举→连接→采集→释放”流程,其中图像回调处理和格式转换是关键。严格按照SDK文档处理设备类型(网口/USB)和像素格式;及时释放图像资源,避免内存泄漏;错误码是排查问题的重要依据(可参考SDK中的“错误码说明”文档)。掌握这些基础后,可结合机器视觉算法(如OpenCV)实现缺陷检测、尺寸测量等高级功能,构建完整的工业视觉系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3836

Win32子窗口创建,子窗口回调函数,消息堆栈,逆向定位子窗口消息处理过程

本专栏上一篇文章中我们讲解了Win32程序入口识别,定位回调函数,具体事件处理的定位,这一章节中我们来讲解一下子窗口的创建,子窗口的回调函数,并且逆向分析子窗口消息处理过程。

WdIg-2023的博客 2492

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C++反汇编与逆向分析-读书笔记

很多程序是由C++/MFC开发的,逆向必须掌握C++开发的流程,不用多么精通,看得懂源码,知道对应的汇编,即可。

qq_20031585的博客 1691

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断

这是作者安全攻防进阶篇,将深入研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等。前文作者讲解了OllyDbg和在线沙箱的逆向分析过程,分享了恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱。这篇文件将带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原,基础性文章,希望对您有所帮助。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了,加油~

杨秀璋的专栏 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

API 钩取:逆向分析之“花

当前栈(ESP:DF97C)中存在一个返回值(01004C30),ESP + 8 (DF984)中存在数据缓冲区的地址(0070DFC8)(如上图),直接跳转到数据缓冲区,可以看到要保存的 notepad 的字符串(“This is a test”),钩取 WriteFile() API 后,用指定的字符串覆盖数据缓冲区中的字符串即可达成所愿。调试方法中,钩取的方法非常简单。首先获取 WriteFile() API 的起始地址,需要注意,它获取的并不是被调试进程的内存地址,而是调试进程的内存地址。

2503_90751789的博客 2017

逆向分析(一):hello world 程序

刚来公司没几天,什么任务都没有给,闲的要死… 还不好意思玩游戏(毕竟刚来嘛…装一装样子也得不是)。一开始想看看书,后来书看恶心了,就打算找几个简单的例子,想一想从什么例子开始呢 ? 嗯…果然还是 hello world 比较合适哈哈哈哈(可怜的 hello world,可怜的植物大战僵尸)…不知道这个梗有没有人知道,算了,开始做笔记吧就 —— 首先,hello world 程序都会写,我选择的是...

LYSM 3015
上一篇: 逆向程序分析:Windows的main(),启动函数分析
下一篇: 俩句话理解VS的MT/MD和MTD/MDD。
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值