【逆向工具】IDA使用1-VS2015版本debug查找Main函数,加载符号文件
2017-03-25 19:33
645 查看
IDA 常见操作
空格,切换反汇编视图选择CALL或是跳转 进入函数内部或是跳转处
返回键 ESC
daq.exe 分析32位程序 ,生成的IDA数据库文件是 .idb
Idap64.exe 分析64位程序, 生成的IDA数据库文件是 .i64
查找程序main函数入口点
在exports选项卡下找到入口点双击start_0 就进到了函数入口处。在没有导入签名库识别库函数前,显示的是sub_XXXX这样的地址。
使用IDA签名文件识别库函数
签名(view->open subviews->Signatures,右键->Apply new signature,可以用来指定加载IDA的库函数签名文件。这个是IDA的非常有用的一个功能。在逆向过程中,MFC、SDK、Delphi编写的程序都会用到大量的库函数,而IDA的库函数签名文件能够识别出大部分的库函数。我们分析用户函数时,根据这些库函数推测出用户函数的作用。不同语言编写的程序也需要选择使用相对应的签名文件。例如MFC则选择使用vc32mfc,控制台则选择使用vc32rtf等。库函数名显示出来了
快捷键
除了使用图形化外,还可以通过记忆快捷键加快逆向速度。使用快捷键,shift+F5打开签名窗口
使用快捷键Insert导入VC的签名库
动态调试验证分析
F2在调试处下断点,在平台选择的下拉列表选择【Local Win32 debugger】,点击旁边的 绿色三角启动按键。单步步入与单步步过跟OD的按键一样,都是F7、F8修改main函数的名字
找到main函数后,使用快捷键 【n】 修改签名文件识别出来的___tmainCRTStartup函数改名成main。可以将main函数的默认参数显示出来,【修改前与修改后对比】
修改之后出现的_cdecl为函数调用协议。
相关知识点:
__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。
调用协议常用场合
__stdcall:Windows API默认的函数调用协议。__cdecl:C/C++默认的函数调用协议。
__fastcall:适用于对性能要求较高的场合。
函数参数入栈方式
__stdcall:函数参数由右向左入栈。__cdecl:函数参数由右向左入栈。
__fastcall:从左开始不大于4字节的参数放入CPU的ECX和EDX寄存器,其余参数从右向左入栈。
栈内数据清除方式
__stdcall:函数调用结束后由被调用函数清除栈内数据。__cdecl:函数调用结束后由函数调用者清除栈内数据。
__fastcall:函数调用结束后由被调用函数清除栈内数据。
函数调用方式例子:
●printf 是什么方式?答:C方式,_cdecl,CALL完之后在函数外面平衡参数的堆栈
●MessageBoxW是什么方式?
答:_stdcall方式,CALL内部平衡堆栈
参考:
逆向分析点滴http://blog.csdn.net/iiprogram/article/details/1665392
相关文章推荐
- 【逆向工具】IDA使用2-VS2015版本release查找main函数入口,局部变量
- 【逆向工具】IDA使用6-签名文件制作
- 工具(1):使用lua生成vs2015的工程文件/将已有的C++文件生成vs2015工程文件
- Sandcastle Help File Builder(.NET帮助文档工具)的版本选择心得——支持VS2010至VS2015,高版本项目文件问题
- 使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
- ffmpeg在windows下使用MinGW+msys+VS2015编译(x86或64版本,链接x264库,VS2015中可debug调试)
- 转:使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
- VS 2005使用map文件查找程序崩溃原因
- VS2008提示无法读取项目文件 无法识别工具版本4.0 的解决方法
- 【独立开发者er Cocos2d-x实战 008】BMFont生成位图字体工具和Cocos2dx使用加载fnt文件
- linux文件内容查找与vim工具的使用
- 使用vs的时候,遇到这个:当前不会命中断点 还没有为该文档加载任何符号
- XE7 & IOS开发之开发账号(3):证书、AppID、设备、授权profile的申请使用,附Debug真机调试、Ad hoc下iPA文件生成演示(XCode5或以上版本推荐,有图有真相)
- VS 2005使用map文件查找程序崩溃原因
- webview4.4以上版本使用loadurl加载过长js文件失效问题
- 今天使用VS2015遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
- 使用VS连接SQLServe时提示未能加载文件或程序集“System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKey
- VS 2005使用map文件查找程序崩溃原因(转载,很好)
- 使用VS2013加载文件:使用Unicode(UTF-8)加载文件时。。。。
- 安装vs2008 sp1后程序出错--VC2008中 “Debug\Ckeshe.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)