2.逆向分析Hello World!程序-上
- 先写一个HelloWorld程序(vs2015 / C++)

- 编译链接生成可执行文件XX.exe,然后用OD[OllyDbg]打开调试:

代码窗口:默认用于显示反汇编代码,还用于各种注释、标签,分析代码时显示循环、跳转位置等信息
寄存器窗口:实时显示CPU寄存器的值,可用于修改特定的寄存器
数据窗口:以Hex/ASCII/Unicode值的形式显示进程的内存地址,也可在此修改内存地址
栈窗口:实时显示ESP寄存器指向的进程栈内存,并允许修改
- EP(EntryPoint,入口点)
EP是Windows可执行文件(EXE、DLL、SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置,它依赖于CPU。用OD调试XX.exe刚开始默认跳转的位置就是EP处。

- 接下来是尝试找出main()函数中的MessageBox()函数的代码。
先补充几个快捷键:
Ctrl+F2 重新开始调试(终止正在调试的进城后再次运行)
F7 单步步入,可以进入到函数里
F8 单步步过,不进入任何函数,往下走一条指令
Ctrl+F9 一直执行,知道遇到RETN指令,跳出函数
加载exe到od里,直接来到EP处,然后就是一路F7/F8[这个是刚开始,后期有经验了就不会这么无脑的从头开始找了]call,是函数调用,遇到call想进函数里看看就F7想路过就F8然后是找到这么一个地方(注意你的地址和我的地址可能不同)

我的PE文件代码段FOA(400)->RVA(1000)->VA(1341000)这个计算方式以后说。
然后就F7进去看看:

红色注释部分就是我们要找的函数。而且在call之前各种把参数push进去,还有就是看到了字符串地址在013420F8处,从栈和内存里也能清楚的看到:

同时现在考虑下,这个调用MessageBox函数的函数不就是main函数吗?执行到这个函数的return处,在F8返回上一层:

回来后就准备开始执行add了,那么上面那个call NXYod.00341000就是main函数地址码。这个其实是可以算出来的。还是根据FOA->RVA->VA 最后那个RVA->VA在OD里可以直接Ctrl+G输入RVA他会自动跳转到VA处,比如我的FOA是400,我算出来RVA是1000(我自己写了个计算工具),然后我在OD里直接Ctrl+G

OK之后直接跳转到:

这直接就是main函数了。
2.逆向分析Hello World!程序-上的更多相关文章
- 3.逆向分析Hello World!程序-下
5.继续补充,常用操作指令: Ctrl+G Go to 移动到指定地址,用来查看代码或内存,运行时不可用 F4 Execute till Cursor 执行到光标位置, ...
- [工控安全]西门子S7-400 PLC固件逆向分析(一)
不算前言的前言:拖了这么久,才发现这个专题没有想象中的简单,学习的路径大致是Step7->S7comm->MC7 code->firmware,我会用尽量简短的语言把前两部分讲清楚, ...
- cm2 逆向分析
目录 cm2 逆向分析 前言 查壳 逆向分析 encrypt函数 POC代码 cm2 逆向分析 前言 这是逆向实战之CTF比赛篇的第3篇,在这里我就不再讲的特别小白了,有些简单操作可能会略过. 查壳 ...
- 路由器逆向分析------在QEMU MIPS虚拟机上运行MIPS程序(ssh方式)
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69652258 在QEMU MIPS虚拟机上运行MIPS程序--SSH方式 有关在u ...
- 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序
0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...
- IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习
相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...
- C++反汇编与逆向分析技术揭秘
C++反汇编-继承和多重继承 学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...
- 一文了解安卓APP逆向分析与保护机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- Android逆向分析(2) APK的打包与安装背后的故事
前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...
随机推荐
- C# 基础 - 日志捕获二使用 log4net
引入 log4net.dll 项目->添加->新建项->应用程序配置文件,命名为 log4net.config,并把属性的复制到输出目录设置为 如果较新则复制,后续客户端需要读取在 ...
- unittest系列(一)unittest简介和示例
unittest - 单元测试框架 单元测试框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格.其支持测试自动化,配置共享和关机代码测试.支持将测试样例聚合到测试集中,并将测 ...
- 涂鸦基于OAuth2在开发者平台上的探索与实践
前言 开发授权(OAuth2)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资料(如照片.视频.联系人列表),而无需将用户名和密码提供给第三方应用. OAuth2允许用户提供一 ...
- E - Recursive sequence HDU - 5950 (矩阵快速幂)
题目链接:https://vjudge.net/problem/HDU-5950 思路: 构造矩阵,然后利用矩阵快速幂. 1 #include <bits/stdc++.h> 2 #inc ...
- python3 循环位移动
python3 中 >> 为算术右移位,高位补符号位: <<为左移位,低位补0: 1 # 假如将一个无符号的数据val,长度为N,需要循环移动n位.可以利用下面的公式: 2 ...
- Django使用数据库(配置数据库,基本的增删改查a)
第一步在setting文件中配置DATABASES设置 然后更改__init__文件 打开APP中models文件,导入并创建数据库 最后打开终端执行以下命令 python manage.py mak ...
- PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642
PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...
- 实现FTP+PAM+MySQL环境,批量配置虚拟用户
实现FTP+PAM+MySQL环境,批量配置虚拟用户 搭建环境: CentOS6.5或CentOS6.7 [root@vhost3 ~]# uname -a Linux vhost3 2.6.32-5 ...
- golang 入门之环境搭建
[安装运行时] 直接上官网下载运行时安装即可:golang 官网 根据自己操作系统选择 golang 运行时版本,例如windows 当然我们也可以直接选择下面的稳定版本进行下载 下载安装后,安装程序 ...
- 冒泡算法(BubbleSort)
/*冒泡排序原理 比较相邻的元素.如果前一个元素比后一个元素大,就交换这两个元素的位置. 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素.最终最后位置的元素就是最大值.实现步骤 1 ...