# original entry point 原始入口点
常见脱壳知识:1.PUSHAD (压栈) 代表程序的入口点
2.POPAD (出栈) 代表程序的出口点,与 PUSHAD 对应,一般找到这个 OEP 就在附近拉!
3.OEP:程序的入口点,注意这点:软件加壳就是隐藏了 OEP(或者用了假的 OEP),
只要我们找到程序真正的 OEP,就可以立刻脱壳。
网上说的 esp 定律脱壳时都说到 “当 esp 变红时下访问断点” 却没说明为什么,其实 od 当寄存器变化时就会变红,也就是说实质是留意堆栈什么时候变化。
而把壳当成一个 call,当调用壳这个 call 时会压栈,esp 变红。
# C++ 中数值的后缀
在 C++ 中,数字表达提供了一系列的后缀进行表示,如下:
u 或 U 表示数字是无符号整型数,如:123u,但并不说明是长整型还是短整型
l 或 L 表示数字是长整型数,如:123l;而 123ul 就是无符号长整型数;而 34.4l 就是长双精度浮点数,等效于双精度浮点数
i64 或 I64 表示数字是长长整型数,其是为 64 位操作系统定义的,长度比长整型数长。如:43i64
f 或 F 表示数字是单精度浮点数,如:12.3f
e 或 E 表示数字的次幂,如:34.4e-2 就是 0.344;0.2544e3f 表示一个单精度浮点数,值为 254.4
当什么后缀都没写时,则根据有无小数点及位数来决定其具体类型,如:123 表示的是有符号整型数,而 12341434 则是有符号长整型数;而 34.43 表示双精度浮点数。
# 杂
IDA 中右击代码选择 Hide casts
,可以隐藏那些看着比较乱的指针
rsp 是栈指针寄存器,64 位。指向栈顶。相当于 32 位汇编里的 esp,16 位的 sp
如何理解栈?把瓶子倒过来
# huibian
xor eax,eax
是异或运算,两数相反为 1;两数相同为 0。由于这两个数相同,异或后等于清 0
由于它比 mov eax,0 效率高,所以一般用它!
xor eax,eax 异或后寄存器清零
函数执行完后,下面的指令是 add esp,8
因为我们之前声明了两个变量,占用了 8 个字节,现在 add 函数调用完了,我们已经不需要了,所以将 esp+8
汇编指令 retn 用来结束当前过程返回到上一调用过程
当 retn 指令执行时是将 esp 指向地址的值弹出到 EIP 指令指针寄存器
# SMC
SMC(Self-Modifying Code)(自解码),可以在一段代码执行前对它进行修改。常常利用这个特性,把代码以加密的形式保存在可自行文件中,然后在程序执行的时候进行动态解析。这样我们在采用静态分析时,看到的都是加密的内容,从而阻断了静态调试的可能性。
# 从汇编角度理解函数调用过程
ebp: 基地址寄存器 -> 栈底
esp:stack pointer-> 栈顶
参数传递 入栈 从右往左
调用 function 了
前面一定是
push ebp (ebp 入栈)
mov ebp esp
局部变量怎么取值呢
ebp 为基准
# 网络
https://www.zhihu.com/tardis/zm/art/72616216?source_id=1005
https://blog.csdn.net/stone_tmp/article/details/118386484
网络协议是计算机之间为了实现网络通信而达成的一种 “约定” 或者” 规则 “,有了这种” 约定 “,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。
HTTP 协议是超文本传输协议的缩写,英文是 Hyper Text Transfer Protocol。它是从 WEB 服务器传输超文本标记语言 (HTML) 到本地浏览器的传送协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
HTTP 原理 HTTP 是一个基于 TCP/IP 通信协议来传递数据的协议,传输的数据类型为 HTML 文件,、图片文件,查询结果等。HTTP 协议一般用于 B/S 架构()。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。
什么是 HTTPS? 为了解决上述 HTTP 存在的问题,就用到了 HTTPS。HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):一般理解为 HTTP+SSL/TLS,通过 SSL 证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。** 那么 SSL 又是什么?**SSL(Secure Socket Layer,安全套接字层):1994 年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999 年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0 和 TLS1.0 由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是 TLS 1.1、TLS 1.2。
总结 HTTPS 和 HTTP 的区别 HTTPS 是 HTTP 协议的安全版本,HTTP 协议的数据传输是明文的,是不安全的,HTTPS 使用了 SSL/TLS 协议进行了加密处理。http 和 https 使用连接方式不同,默认端口也不一样,http 是 80,https 是 443。
点(.)是用于结构体变量访问成员,箭头(->)是用于结构体指针访问成员。
# C 语言中 static 的作用
https://www.runoob.com/w3cnote/c-static-effect.html
# extern 与头文件 (*.h) 的区别和联系
https://www.runoob.com/w3cnote/extern-head-h-different.html
https://www.runoob.com/cprogramming/c-header-files.html
**.h 文件中的所有内容会被写到包含它的.c 文件中,而所有的.c 文件以一个共同的 main 函数作为可执行程序的入口。** 一个程序只能有一个入口点
https://blog.csdn.net/qq_55125921/article/details/123962419
https://blog.csdn.net/weixin_46919419/article/details/112550651
C++ 值传递和引用 (地址) 传递