【逆向工具】IDA使用2-VS2015版本release查找main函数入口,局部变量
VS2015版本release查找main函数入口
vc++开发的程序main或WinMain函数是语法规定的用户入口,而不是应用程序入口。入口代码是mainCRTstartup、wmainCRTStartup、WinMainCRTSartup或wWinMainCRTStarup,具体情况由编译器制定。
VS2015版本debug查找main函数在《VS程序反汇编找main函数》。release版本找main函数入口有所区别的地方在于一开始就单步步过一个call指令,jmp跳转。然后经过三个push,进入call内到达用户入口,而且需要注意用户入口点是程序员自己也是可以修改的。
VC编译器的版本不同,mainCRTSartup函数也可能会有所不同,IDA中将mainCRTSartup函数命名为___tmainCRTStartup。

main函数有三个参数,分别为命令行参数个数、命令行参数信息和环境变量信息。根据main函数调用的特征会将3个参数压入栈内作为函数的参数。所以查找用户入口main()前必然会有3个push指令。

IDA中的基本数据类型-局部变量
测试代码
局部变量有三个int、float、char。分别赋值。
int main()
{
//局部变量
// 整型
int nNum = 1;
// 浮点型
float fNum = 2.5;
// 字符型
char ch = 'A';
printf("int %d , float %f ,char %c", nNum, fNum, ch);
return 0;
}
vs反汇编结果
在掌握IDA反汇编工具之前,先调试VS编译的debug版本程序熟悉int 型变量、float型变量、char型变量反汇编后的指令,因为经过VS编译器优化过所以看起来比较容易理解。VS快捷键【alt+8】打开反汇编窗口。

IDA汇编结果
IDA的逆向结果中 var_ 是局部变量,为了让逆向时更容易弄懂这些参数。可以使用快捷键【n】将变量改名。

在IDAF5键大法转换为源码前,可以看到float型变量是16进制,char变量是16进制。那么我们可以点击数值,右键或者R键将char型变量的值直接显示出来。

而float型变量双击dword_415878,在IDA中【edit】->【Operand type】->【Number】->【Floatingpoint】,将值改为float显示。这里将40200000h转换成了2.5。
.text:004113F5 movss xmm0, ds:dword_415878 ; fNum

修改之后的反汇编代码。

再次按F5后,IDA将反汇编的源码转换后我们可以得到与源码近乎相同的伪C代码,但是变量类型上还有一些偏差。

参考:
C++反汇编与逆向分析技术揭秘,46页
【逆向工具】IDA使用2-VS2015版本release查找main函数入口,局部变量的更多相关文章
- 【逆向工具】IDA使用1-VS2015版本debug查找Main函数,加载符号文件
IDA 常见操作 空格,切换反汇编视图 选择CALL或是跳转 进入函数内部或是跳转处 返回键 ESC daq.exe 分析32位程序 ,生成的IDA数据库文件是 .idb Idap64.exe 分析6 ...
- 利用detours写了一个工具用于instrument任意指定dll的任意指定函数入口
目录 wiki Disas Dtest Simple withdll load一个dll到指定进程 tracebld显示相关进程涉及的文件读写操作 My Instrumentation tool: w ...
- 【逆向工具】IDA使用4-控制台逆向分析 Reverse004.exe 获取密码
工具 吾爱破解版本OD.IDA6.8 OD使用-动态分析 OD快捷方式 F2 下断点,也就是指定断点的地址F3加载一个可执行程序,进行调试分析F4程序执行到光标处 F5 缩小.还原当前窗口 F7 单步 ...
- 【逆向工具】IDA使用3-全局变量、数组、结构体
全局变量 测试代码 全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建.全局变量是可以被本程序所有对象或函数引用.下面这段代码中将int.float.char变量定义在main函数之外. / ...
- 逆向中静态分析工具——IDA初学者笔记之字符串分析
逆向中静态分析工具——IDA初学者笔记之字符串分析 程序中往往包含很多字符串资源,这些资源存在于PE文件的rdata段,使用IDA反编译后,可以查找到这些字符串, 逆向破解程序通常需要一个突破点,而这 ...
- 逆向中静态分析工具——IDA初学者笔记
逆向中静态分析工具——IDA初学者笔记 //****************************************************************************** ...
- 几种Android混淆和逆向工具介绍
针对Android面临的安全风险,一些防止逆向的方法应运而生.代码混淆在X86架构上曾经被广泛研究,他被用于保护软件的只是产权,但是恶意软件也常常使用他来对抗杀毒软件或者对抗逆向分析者,代码混淆可以给 ...
- Android常用逆向工具+单机游戏破解
android开发环境搭建 我理解的学习路线是首先要掌握和了解常见的工具.搭建环境.然后就是缓慢的积累特征,通过长期的练习使自己进步,通过android逆向课程的学习.常用的工具如下: android ...
- java里poi操作excel的工具类(兼容各版本)
转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...
随机推荐
- python numpy 数组拼接
我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2], [3, 4, 5], [6, 7, ...
- MT【68】一边柯西一边舍弃
求$\sqrt{x-5}+\sqrt{24-3x}$的最值. 通常考试时会考你求最大值,常见的方式有三角代换,这里给如下做法: 证明:$\sqrt{x-5}+\sqrt{24-3x}=\sqrt{x- ...
- MT【27】对数方程组求范围
解答:3 评论:此类题目通性通法为换元后化归为线性规划问题.当然不等式凑配也是常见技巧,只是容易范围扩大或者缩小.
- BZOJ5286: [Hnoi2018]转盘 (线段树)
题意 给你绕成一圈的物品共 \(n\) 个 , 然后从其中一个开始选 , 每次有两种操作 , 一是继续选择当前物品 , 二是选择这个后一个物品 . 选择后一个物品要求当前的时刻大于后一个的 \(T_i ...
- linux保存住github的账号和密码
我是用 shell 命令来执行 git 操作的,所以就决定在 --global 配置一下用户名和密码,不用每次手动输入了. 设置步骤 1. 首先需要 ftp 连接到你的 Linux 服务器,在根目录( ...
- 机器学习工作流程第一步:如何用Python做数据准备?
这篇的内容是一系列针对在Python中从零开始运用机器学习能力工作流的辅导第一部分,覆盖了从小组开始的算法编程和其他相关工具.最终会成为一套手工制成的机器语言工作包.这次的内容会首先从数据准备开始. ...
- android GridView 的使用 实现多项选择
今天小研究了一下GridView,目的是为了实现 下面的效果(GridView多项选择): 首先,在布局文件添加GridView ,创建适配器的items... 具体的都在注释里边了,下面是 程序源码 ...
- 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)
[LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...
- 【POJ3090】Visible Lattice Points
题目大意:求 \[\sum\limits_{i=2}^n\phi(i)\] 题解:利用与埃筛类似的操作,可在 \(O(nlogn)\) 时间求出结果. 代码如下 #include <cstdio ...
- ASP: Response 对象 错误 'ASP 0251 : 80004005' 解决办法
Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 这种情况一般是因为需要输出的网页内容太大了,由于asp在输入内容到客户的浏览器上之前,会把需要输出的全部内 ...