看雪逆向-Security Documentation

  • 一 、基础知识
    • 1.1 cpu体系架构
      • 1.1-1 RISC和CISC
      • 1.1-2 CPU工作的基本原理
    • push ebp // 实现压入操作的指令
    • POP //实现弹出操作的指令
    • // ESP是堆栈指针 总是指向栈顶位置。一般堆栈的栈底不能动 无法暂借使用
    • MOV指令 //数据传送指令
    • push -0x1
    • F12暂停法 Alt+K
    • F8单步
    • fstsw 可以把状态寄存器读取到一个双字节内存位置或者AX寄存器中
    • fstcw 指令获取当前控制寄存器的值
    • fldcw 指令把 值加载到控制寄存器
    • fstcw 指令检查当前控制寄存器的值
    • ALT+M 内存镜像
    • ALT+E 调用了那些系统模块 该模块的存放地址和文件名
    • 程序领空 OD载入程序 程序本身的代码
    • 系统领空 USE32 程序调用的咱们系统的一个函数模块
    • AX、BX、CX、DX 用于存放数据 数据寄存器
    • EIP CPU下次要执行的指令的地址
    • EBP 栈的栈底指针 栈基址 (ESP传递给)
    • ESP 栈的栈顶。并且始终指向栈顶

一 、基础知识

1.1 cpu体系架构



1.1-1 RISC和CISC

RISC(精简指令集计算机)Reduced Instruction Set Computer
CISC(复杂指令集计算机)Complex Instruction Set Computer
当前CPU的两种架构。

区别在于不同的CPU设计理念和方法。

早期的CPU全部是CISC架构,
它的设计目的是要用最少的机器语言指令来完成所需的计算任务。

比如对于乘法运算,
在CISC架构的CPU上,
您可能需要这样一条指令:MUL ADDRA, ADDRB
就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作
全部依赖于CPU中设计的逻辑来实现。

这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。
比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。
今天只有Intel及其兼容CPU还在使用CISC架构。

RISC架构要求软件来指定各个操作步骤。
上面的例子如果要在RISC架构上实现,

将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作
都必须由软件来实现,比如:
MOV A, ADDRA;
MOV B, ADDRB; MUL A, B; STR ADDRA, A。

这种架构可以降低CPU的复杂性
以及允许在同样的工艺水平下生产出功能更强大的CPU,
但对于编译器的设计有更高的要求。



1.1-2 CPU工作的基本原理
  • 如何设计一个简单的16位CPU模型
    中央处理器(central processing unit,简称CPU)

计算机的组成结构
数字电路基础
编程的基础

实现 一个RISC指令集的CPU
要自己为这个CPU设计指令并且编码

英特尔的 叫特德·霍夫(Ted Hoff)的工程师
设计和生产专用集成电路芯片
用于实现桌面计算器
各实现一种特定的功能
想法:
为什么不能用一块通用的芯片加上程序来实现几块芯片的功能呢?
当需要某种功能时,只需要把实现该功能的一段程序代码(称为子程序)加载到通用芯片上,其功能与专用芯片会完全一样。

计算器的新的体系结构图,
其中包含4块芯片:
一块通用处理器芯片,实现所有的计算和控制功能;
一块可读写内存(RAM)芯片,用来存放数据;
一块只读内存(ROM)芯片,用来存放程序;
一块输入输出芯片,实现键入数据和操作命令、打印结果等等功能

例1-1:

mov eax,0
repeat:inc eax
jmp repeat

例1-2:

 int main()
{unsigned int i = 0;
while(1)
i++;
}

例1-3:

以上三个例子都产生了一个从0不断增加的序列
而且前两个例子会一直加到溢出又从0开始
(这个取决于计算机的字长也就是多少位的CPU,
eax是32位寄存器所以必然是加到4294967295然后回0,
而后面那个c程序则看不同编译器和不同平台不一样)

后面那个例子则看你用的是什么样的加法器和多少个D触发器

假设要一个递减的序列

例2-1:

 mov eax,0
repeat:dec eax
jmp repeat

例2-2:

 int main()
{unsigned int i = 0;
while(1)
i--;
}

例2-3:

上面
(例1-3)中是个加法器,
减法器(例2-3)!

例3:

使用了一个加法器一个减法器,没比上面的电路省
(加上一个负数的补码确实就是减去一个数)

多了一组多路器,少了一组D触发器
而sel信号就是用来选择的(0是递增,1是递减)。

push ebp // 实现压入操作的指令

POP //实现弹出操作的指令

//缺省对堆栈操作的寄存器 ESP 和 EBP 扩展基址指针寄存器(extended base pointer)

// ESP是堆栈指针 总是指向栈顶位置。一般堆栈的栈底不能动 无法暂借使用

一般使用 EBP 来存取堆栈

调用中有两个参数

在 push 第一个参数前的堆栈指针 ESP 为 X,那么压入两个参数后的 ESP 为 X-8

计算机转移到调用的 子程序 call指令

//把返回地址压入堆栈 ESP 为 X-C 这时已经在子程序中了

可以开始使用 EBP 来存取参数

为了在返回时恢复 EBP 的值,我们还是再需要一句 push ebp

来先保存 EBP 的值,这时 ESP 为 X-10

再执行一句 mov ebp,esp

实际上这时候 [ebp + 8] 就是参数1,[ebp + c]就是参数2

MOV指令 //数据传送指令

//用于将一个数据从源地址传送到目标地址

(寄存器间的数据传送本质上也是一样的)。

其特点是不破坏源地址单元的内容

push -0x1

-1=FFFFFFFF

1=00000000

F12暂停法 Alt+K

显示调用 下断点

F8单步

FPU :(Float Point Unit,浮点运算单元)

状态寄存器

控制寄存器

fstsw 可以把状态寄存器读取到一个双字节内存位置或者AX寄存器中

fstcw 指令获取当前控制寄存器的值

fldcw 指令把 值加载到控制寄存器

fstcw 指令检查当前控制寄存器的值

ALT+M 内存镜像

ALT+E 调用了那些系统模块 该模块的存放地址和文件名

程序领空 OD载入程序 程序本身的代码

系统领空 USE32 程序调用的咱们系统的一个函数模块

放在WINDOWS目录下SYSTEM32文件夹里的一个DLL文件

esp定律 向 堆栈 中压入下一行程序的地址

逆向破解 暴力破解 绕过注册机制 追踪注册码

混淆器 壳 侦壳程序进行识别 伪装技术来混淆侦壳程序

压缩壳 程序进行体积缩小化处理

保护壳混淆或加密代码防止他人进行逆向程序、破解程序

EP段

AX 8086CPU微处理器中8个 通用寄存器之一

AX、BX、CX、DX 用于存放数据 数据寄存器

按16位使用时主要用于存放数据 临时用于存放地址

每一个都可以拆开成为两个独立的8位寄存器使用

分别用高字节和低字节表示

AH,AL等,按8位使用时只能用于存放数据

系统 地址 寄存器

EIP CPU下次要执行的指令的地址

EBP 栈的栈底指针 栈基址 (ESP传递给)

调用前 ESP存储的是栈顶地址,也是栈底地址

ESP 栈的栈顶。并且始终指向栈顶

三个指针 系统中栈 栈的数据结构 后进先处

1.栈是用来存储临时变量,函数传递的中间结果。
2.操作系统维护的,对于程序员是透明的。
函数调用 栈实现 原理

函数压栈 再出栈

看雪逆向-Security Documentation相关推荐

  1. 看雪学院课程《汇编语言详解与二进制漏洞初阶》笔记

    前言和声明 安全工程师这条路任重道远.如今国际形势复杂,网络战一旦爆发,安全势力弱的一方很快会处于竞争的下风,加上国家的安全人才缺口过大,我辈则应当肩挑重担,为祖国安全尽一份力. 本博客是博主在学习看 ...

  2. 技术人员的狂欢 | 看雪2020第四届安全开发者峰会顺利落幕

    在5G新基建的浪潮下,网络攻击手段不断升级,攻击范围也扩大到各个领域,新时代的网络安全将面临更复杂严峻的挑战. 10月23日,看雪2020第四届安全开发者峰会(看雪2020 SDC)顺应时代的变化,聚 ...

  3. 看雪安全接入KSA开放内测

    Kanxue Security Access 功能 无需公网IP,远程接入内网 安装流程 https://ksa.kanxue.com/ 下载地址:https://bbs.pediy.com/thre ...

  4. 看雪CTF2020 KCTF 秋季赛 签到题

    前言 佛系参加看雪CTF2020 最终只水了一个签到题 是个win64的逆向 解题过程 先运行看看 是个输入flag 然后进行判断对不对的小程序 扔进IDA F5看伪码 顺手按着习惯改了改变量名 需要 ...

  5. 看雪题库REVERSE的马到成功

    看雪题库REVERSE的马到成功 继续开启全栈梦想之逆向之旅~ 这题是看雪题库REVERSE的马到成功 . 今天复毛概,比较枯燥,看见看雪搞了个CTF题库就注册玩一下,简单写一道题. . . 照例下载 ...

  6. 5月10日12点,看雪.深信服2021 KCTF春季赛正式开赛!

    5月10日12点,看雪.深信服2021 KCTF春季赛正式开赛!想要在这盛大赛事大展身手的你们,一定要抓住这次机会! 在这里你会收获到相关的实战经验,与志同道合的网络安全人才交流.切磋的机会,同时还有 ...

  7. Android加密 看雪,Android加密与解密入门两题

    写在最前面 本次题目来自看雪2w班9月题.密码学一直是安全的基础,Android安全也不例外,这次9月份的题分别从java层和C层考察了密码学中常用的对称加密.hash函数以及一些基础的编码,但是不是 ...

  8. 2015阿里看雪移动安全挑战赛-第二题

    2015阿里&看雪移动安全挑战赛-第二题 题目传送门:AliCrackme 网上已经有很多writeup,我也是按照乌云上的2015移动安全挑战赛(阿里&看雪主办)全程回顾的基本思路来 ...

  9. 看雪学院五周年纪念收藏版

    近日,突然对逆向分析产生了很大兴趣,于是翻出原来买的<加密与解密>(第二版)来看. 已经阅读了第一章基础知识和第二章代码分析技术,正在接着看第三章静态分析技术. 这确实是本看雪论坛鼎立打造 ...

最新文章

  1. SpringBoot的修改操作
  2. Java学习小程序(9)冒泡排序算法实现
  3. comet for java_java comet tomcat推送
  4. Linus中帮助命令man
  5. Leetcode--149. 直线上最多的点数
  6. Netty空闲心跳检测机制
  7. Atititi atiitt eam pam资产管理 购物表去年.xlsx
  8. WPS Excel 模板设置与生成
  9. 服务器如何备份系统和配置,windows server 2008和2012如何设置完整备份+增量备份
  10. 单应矩阵计算旋转角和平移量
  11. Web前端学习路线笔记(六)html5
  12. virtio-blk简易驱动
  13. 什么是倒排索引?(转)
  14. 《30而已》烂尾,如果这样卖空山茶,顾佳会逆袭
  15. excel乘法公式怎么输入_智能考勤表,MM你再也不用加班了!【Excel教程】
  16. Linux 部署 nginx(下载、安装、启动)
  17. vue项目中的小知识--快捷键-vue插件版本号--vscode插件等
  18. java-php-net-python-校园OTO超市系统ssm-视频计算机毕业设计程序
  19. 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  20. 【Quant】BigQuant学习笔记(1) 可视化策略

热门文章

  1. 湖南省智慧教育装备展示体验中心关于暂停研学、暑假社会实践等活动通知
  2. 25k~50k,比特大陆招人啦!这次会是你吗?
  3. AndroidStudio查看模拟机生成的数据库文件
  4. 提升工作效率的常用mac命令行
  5. SWAN之ikev2/acert-fallback测试
  6. 【一起学Java第二期】JDK的安装使用用记事本写第一个程序
  7. 【erdas】使用行政界线分割栅格影像
  8. FatTree胖树拓扑结构
  9. Bootrap 项目实战(微金所前端首页)第三部分(CSS,js源码)
  10. 某喜欢研究车的80后,驾驶经验59条