@date: 2016/10/14

《逆向工程核心原理》笔记 记录书中较重要的知识,方便回顾

ps. 因有一些逆向基础,所以我本来就比较熟悉的知识并未详细记录

第一章 关于逆向工程

目标,激情,谷歌 QAQ

第二章 逆向分析Hello World程序

VS2010 x86

  1. 入口点 Entry Point
  1. call 0040270c
  2. jmp 0040104F
  1. 程序开头会有一段VC的启动函数(Stub Code)
  2. OD的快捷键
  1. ctrl+f2, f8, f7, f9, ctrl+f9(exec till return),f4(exec till cursor),ctrl+G(Go to)
  2. 光标选中+enter(preview call/jmp address)
  1. 设置”大本营“
  1. 1.Goto命令
  2. 2.设置断点
  3. 3.注释(快捷键 ;)
  4. 4.标签(快捷键 :)
  1. 快速查找指定代码的四种方法
  1. 1.代码执行法
  2. 2.字符串检索法
  3. 直接在代码窗口右键查找参考字符串可能会找不到目标字符串,因为OD右键搜索只搜索当前模块
  4. 可以在数据窗口中搜索字符串,或结合IDA使用
  5. 3.API检索法1: 在调用代码中设置断点
  6. 右键->search for -> all intermodular calls(所有模块间调用)
  7. 4.API检索法2: API代码中设置断点
  8. 右键->search for -> Name in all calls(所有模块中的名称)
  1. 修改字符串的两种方法
  1. 1.直接修改字符串缓冲区
  2. 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)选项,使用该选项编译器简单的函数将不会生成栈帧

  1. --------------------------- main ---------------------------------
  2. call function_address == push eip+4, jump function_address
  3. add esp,8
  4. ---------------------------- function ---------------------------
  5. push ebp
  6. mov ebp, esp
  7. sub esp, 8
  8. ...
  9. mov esp, ebp
  10. pop ebp
  11. 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:

  1. jmp THunRTMain
  2. push 401E14 => EP ,push ThunRTMain的参数RT_MainStruct结构体(地址为401E14
  3. call jmp.&ThunRTMain

以c++ string类一样,VB中string使用的是字符串对象,对象中存着指向Unicode字符串的指针,在OD数据窗口右键->Long->Address with ASCII,即可显示通过指针引用的字符串

Win32 API程序读取输入框字符串:GetWindowText, GetDlgItemText

第九章 Process Explorer

Windows下优秀的进程管理工具

《深入理解Windows操作系统》《Windows核心编程》

sysinternals

第十章 函数调用约定

函数调用后如何处理ESP,这是函数调用约定要解决的问题

  1. cdecl

​ 主要是C语言中使用的方式,调用者负责处理栈

​ cdecl的好处在于,它可以像C语言的printf函数一样,向被调用函数传递长度可变的参数。这种长度可变的参数在其他调用约定中很难实现。

  1. stdcall

​ 常用于Win32 API,被调用者清理栈

​ retn 8 == retn+pop 8字节

​ 虽然Win32 API是使用C语言编写的库,但是它使用的是stdcall方式,而不是C语言默认的cdecl方式,这是为了获得更好的兼容性,使C语言之外的其他语言(Delphi ,VB等)也能直接调用API

  1. fastcall

​ 与stdcall方式基本相似,但通常使用寄存器去传递部分参数(前两个),前两个参数分别是用ECX,EDX传递

第十一章 视频讲座

去除消息框 -> 寻找注册码

VB中调用消息框的函数为MSVBVM50.rtcMsgBox

第十二章 如何学习代码逆向分析

目标 -> 积极心态 -> 感受乐趣 -> 检索 -> 最重要的是实践 -> 平和的心态

Reverse Core 第一部分 代码逆向技术基础的更多相关文章

  1. PC逆向之代码还原技术,第一讲基本数据类型在内存中的表现形式.浮点,指针寻址公式

    目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮 ...

  2. JNI技术基础(2)——从零开始编写JNI代码

    书接上文: <JNI技术基础(1)——从零开始编写JNI代码> 2.编译源程序HelloWorld.java并生成HelloWorld.class 3.生成头文件HelloWorld.h ...

  3. PC逆向之代码还原技术,第五讲汇编中乘法的代码还原

    目录 PC逆向之代码还原技术,第五讲汇编中乘法的代码还原 一丶简介乘法指令 1.乘法指令 2.代码还原注意问题 二丶乘法的汇编代码产生的格式 1.高级代码观看 2.乘法的汇编代码还原. 三丶乘法总结 ...

  4. PC逆向之代码还原技术,第四讲汇编中减法的代码还原

    目录 PC逆向之代码还原技术,第四讲汇编中减法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 三丶根据高级代码IDA反汇编的完整代码 四丶知识总结 PC逆向之代码还原技术,第 ...

  5. PC逆向之代码还原技术,第三讲汇编中加法的代码还原

    目录 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 总结 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 在讲解加 ...

  6. Android Studio 单刷《第一行代码》系列 03 —— Activity 基础

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  7. PC逆向之代码还原技术,第二讲寻找程序入口点

    PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...

  8. Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  9. Android逆向-Android基础逆向(5)

    本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...

随机推荐

  1. [转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的asp.net示例

    原文地址:http://www.stepday.com/topic/?459 作文一个ExtJs的入门汉子,学习起来的确是比较费劲的事情,不过如今在这样一个网络资源如此丰富的时代,依然不是那么难了的. ...

  2. C#-WebForm-Session、Cookie-登录验证(未登录跳至登录界面)、隐藏地址栏传值

    Post 传值(看不见的传值) Get 传值(看得见的传值) Session - 全局变量组 存放位置:服务端 作用:只要里面有内容,那么这个网站中所有的C#端都能访问到这个变量 -- object类 ...

  3. 学记:为spring boot写一个自动配置

    spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...

  4. Android 样式 (style) 和主题(theme)

    转载:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字 ...

  5. github拉取和推送

    登入github 创建一个开源项目 然后打开安装好的git 首先进入一个指定的文件夹 例如: 1)E:\>cd miaov/testGit 回车 进入E盘的testGit文件夹 2)E:\mia ...

  6. jquery缓存使用jquery.cookies.2.2.0.min.js

    $.cookies.set(key, obj, { hoursToLive: 2}); key标识的键 , obj存入的值可以缓存json对象, hoursToLive 缓存小时数 $.cookies ...

  7. Fedora中显示windows下的文件

    目录 一些预备知识: 在中国windows的编码是本地编码 , 即GBK,GB2312,GB18030等 GBK  也就是windows-986 Windows现在只支持Unicode (UTF-16 ...

  8. Eclispe远程调试tomcat设置

    首先在catelina.sh中添加 JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=23787,server=y,su ...

  9. [Storm] Storm与asm的恩恩怨怨

    asm的引用冲突 1. Jersey & Storm 0.9.3 jersey 1.8 (which depends on asm 3.0) Storm 0.93 (which depends ...

  10. ACM之鸡血篇

    一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...