Reverse Core 第一部分 代码逆向技术基础
@date: 2016/10/14
《逆向工程核心原理》笔记 记录书中较重要的知识,方便回顾
ps. 因有一些逆向基础,所以我本来就比较熟悉的知识并未详细记录
第一章 关于逆向工程
目标,激情,谷歌 QAQ
第二章 逆向分析Hello World程序
VS2010 x86
- 入口点 Entry Point
call 0040270c
jmp 0040104F
- 程序开头会有一段VC的启动函数(Stub Code)
- OD的快捷键
ctrl+f2, f8, f7, f9, ctrl+f9(exec till return),f4(exec till cursor),ctrl+G(Go to)
光标选中+enter(preview call/jmp address)
- 设置”大本营“
1.Goto命令
2.设置断点
3.注释(快捷键 ;)
4.标签(快捷键 :)
- 快速查找指定代码的四种方法
1.代码执行法
2.字符串检索法
直接在代码窗口右键查找参考字符串可能会找不到目标字符串,因为OD右键搜索只搜索当前模块
可以在数据窗口中搜索字符串,或结合IDA使用
3.API检索法1: 在调用代码中设置断点
右键->search for -> all intermodular calls(所有模块间调用)
4.API检索法2: 在API代码中设置断点
右键->search for -> Name in all calls(所有模块中的名称)
- 修改字符串的两种方法
1.直接修改字符串缓冲区
2.在其他内存区域新建字符串并传递给消息函数
第三章 小端序标记法
Intel x86 CPU采用小端序
第四章 IA-32寄存器基本讲解
IA-32 (Intel Architecture 32位)
通用寄存器: EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
段寄存器 : CS,DS,SS,ES,FS,GS
程序状态与控制寄存器: EFLAGS
指令指针寄存器: EIP
E: extended 扩展
第五章 栈
栈由高地址向低地址增长
第六章 分析abex' crackme#1
汇编编写的程序
函数传参与基本堆栈操作
第七章 栈帧
ebp 栈帧指针
最新的编译器中都带有一个“优化” (Optimization)选项,使用该选项编译器简单的函数将不会生成栈帧
--------------------------- main ---------------------------------
call function_address == push eip+4, jump function_address
add esp,8
---------------------------- function ---------------------------
push ebp
mov ebp, esp
sub esp, 8
...
mov esp, ebp
pop ebp
ret == pop eip
第八章 abex' crackme #2
VB程序 abexcm2-voiees.exex
VB使用名为MSVBVM60.dll的VB专用引擎(也称The Thunder Runtime Engine)
VB采用Windows操作系统的事件驱动方式工作,所以main()或WinMain()中并不存在用户代码(希望调试的代码),用户代码存在于各个事件处理程序(event handler)中。
EP:
jmp THunRTMain
push 401E14 => EP ,push ThunRTMain的参数RT_MainStruct结构体(地址为401E14)
call jmp.&ThunRTMain
以c++ string类一样,VB中string使用的是字符串对象,对象中存着指向Unicode字符串的指针,在OD数据窗口右键->Long->Address with ASCII,即可显示通过指针引用的字符串
Win32 API程序读取输入框字符串:GetWindowText, GetDlgItemText
第九章 Process Explorer
Windows下优秀的进程管理工具
《深入理解Windows操作系统》《Windows核心编程》
sysinternals
第十章 函数调用约定
函数调用后如何处理ESP,这是函数调用约定要解决的问题
- cdecl
主要是C语言中使用的方式,调用者负责处理栈
cdecl的好处在于,它可以像C语言的printf函数一样,向被调用函数传递长度可变的参数。这种长度可变的参数在其他调用约定中很难实现。
- stdcall
常用于Win32 API,被调用者清理栈
retn 8 == retn+pop 8字节
虽然Win32 API是使用C语言编写的库,但是它使用的是stdcall方式,而不是C语言默认的cdecl方式,这是为了获得更好的兼容性,使C语言之外的其他语言(Delphi ,VB等)也能直接调用API
- fastcall
与stdcall方式基本相似,但通常使用寄存器去传递部分参数(前两个),前两个参数分别是用ECX,EDX传递
第十一章 视频讲座
去除消息框 -> 寻找注册码
VB中调用消息框的函数为MSVBVM50.rtcMsgBox
第十二章 如何学习代码逆向分析
目标 -> 积极心态 -> 感受乐趣 -> 检索 -> 最重要的是实践 -> 平和的心态
Reverse Core 第一部分 代码逆向技术基础的更多相关文章
- PC逆向之代码还原技术,第一讲基本数据类型在内存中的表现形式.浮点,指针寻址公式
目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮 ...
- JNI技术基础(2)——从零开始编写JNI代码
书接上文: <JNI技术基础(1)——从零开始编写JNI代码> 2.编译源程序HelloWorld.java并生成HelloWorld.class 3.生成头文件HelloWorld.h ...
- PC逆向之代码还原技术,第五讲汇编中乘法的代码还原
目录 PC逆向之代码还原技术,第五讲汇编中乘法的代码还原 一丶简介乘法指令 1.乘法指令 2.代码还原注意问题 二丶乘法的汇编代码产生的格式 1.高级代码观看 2.乘法的汇编代码还原. 三丶乘法总结 ...
- PC逆向之代码还原技术,第四讲汇编中减法的代码还原
目录 PC逆向之代码还原技术,第四讲汇编中减法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 三丶根据高级代码IDA反汇编的完整代码 四丶知识总结 PC逆向之代码还原技术,第 ...
- PC逆向之代码还原技术,第三讲汇编中加法的代码还原
目录 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 总结 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 在讲解加 ...
- Android Studio 单刷《第一行代码》系列 03 —— Activity 基础
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- PC逆向之代码还原技术,第二讲寻找程序入口点
PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...
- Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- Android逆向-Android基础逆向(5)
本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...
随机推荐
- 在linux上如何通过composer安装yii
Composer可以理解成一个依赖管理工具 它能解决以下问题 a) 你有一个项目依赖于若干个库. b) 其中一些库依赖于其他库. c) 你声明你所依赖的东西. d) Composer 会找出哪个版 ...
- 使用 win+r 命令行打开我们的桌面应用(处女座的福音)
首先新建一个文件夹,名为quickapp,然后在地址栏复制文件目录地址,进入系统高级设置,修改系统环境变量Path,双击后选择新建,输入quickapp文件目录地址,确认保存. 如何修改path变量? ...
- Uncaught RangeError: Maximum call stack size exceeded 超出最大调用值(个人解释)
写了段jq后,报这个错,度娘未解,灵光一闪,找到原因,上代码: Html 结构: <a href="javascript:;" class="item-pic&qu ...
- Leetcode 15. 3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- Datatables事件
DataTables格式化渲染加上的html代码按一般方式绑定事件可能会没效果,通过以下方式可以解决 $(document).on("click","#checkchil ...
- 【Phylab2.0】Beta版本发布说明
新版本特性 1. 新的物理实验 1020314等 2. 讨论区与报告界面的整合 3. 在线脚本管理功能 4. 管理员功能 有在线脚本管理功能的支持后加入了管理员模式,可以向其他学校开放,招募管理员并添 ...
- thinkphp3.2.3中U()方法和redirect()方法区别
今天博主看3.1的教程,学着3.2,就遇到了这个坑,怎么就是不跳转呢,很纳闷!! 在thinkphp3.1 中 U()方法是可以执行跳转的(看视频教程里面是可以的,博主没有测试过). 但是在think ...
- RabbitMQ学习
参考链接:http://www.cnblogs.com/leocook/p/mq_rabbitmq_0.html
- SQL Server 2016正式版安装(超多图)
微软数据库SQL Server 2016正式版在2016年6月就发布,由于近期工作忙,一直拖到现在才有时间把安装过程写到博客上,分享给大家.本人一直习惯使用英文版,所以版本和截图都是英文版的.废话少说 ...
- phpcms 添加memcache支持
1,修改caches/configs/cache.php <?php return array ( 'file1' => array ( 'type' => 'file', 'deb ...