# 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

Untitled

xor eax,eax

是异或运算,两数相反为 1;两数相同为 0。由于这两个数相同,异或后等于清 0

由于它比 mov eax,0 效率高,所以一般用它!

xor eax,eax 异或后寄存器清零

函数执行完后,下面的指令是 add esp,8
因为我们之前声明了两个变量,占用了 8 个字节,现在 add 函数调用完了,我们已经不需要了,所以将 esp+8

汇编指令 retn 用来结束当前过程返回到上一调用过程

当 retn 指令执行时是将 esp 指向地址的值弹出到 EIP 指令指针寄存器
Untitled

# SMC

SMC(Self-Modifying Code)(自解码),可以在一段代码执行前对它进行修改。常常利用这个特性,把代码以加密的形式保存在可自行文件中,然后在程序执行的时候进行动态解析。这样我们在采用静态分析时,看到的都是加密的内容,从而阻断了静态调试的可能性。

# 从汇编角度理解函数调用过程

ebp: 基地址寄存器 -> 栈底

esp:stack pointer-> 栈顶

参数传递 入栈 从右往左

调用 function 了

前面一定是

push ebp (ebp 入栈)

mov ebp esp

局部变量怎么取值呢

ebp 为基准

image-20230803144521494

# 网络

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++ 值传递和引用 (地址) 传递

image-20231113015036311

更新于 阅读次数