首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么IP地址与Mac地址缺一不可?为了方便理解,来讲个故事:再深一:

而理论上,世界上的IP地址和Mac地址也是独一无二的,为什么通信过程中,既需要Mac地址又需要IP地址呢简单的讲,是因为网络环境太复杂了.网络通信要经过许多路由器转发信息,才能实现双方的通信.所以才需要...在上面的故事里: 昭昭等同于发送方ip 小Y等同于接收方ip 由于我的胳膊不够长,就只能借助小伙伴们的胳膊来传纸条,胳膊可以看做Mac地址,不同人的胳膊就是不同的Mac地址(每个人都有两条胳膊,...总结一下,IP地址负责标记发送方和接收方,而MAC地址负责传输过程中的分段传送,所以二者缺一不可....再深一: 传纸条一定要加自己的名字么这个,其实吧,如果不加自己名字的话,人家小Y收到后怎么回你呢帮忙传纸条的小伙伴是何许人也在实际的网络中,这些帮我传纸条的小伙伴们就是网关(可以理解为我们平时家里装的无线路由器...为什么每个路由器都需要两个mac地址因为,收发是两个动作,一个mac负责收,一个mac地址负责发,当然高端的路由器也也可以像哪吒一样拥有三头六臂,也就是拥有大量的网卡.这样的路由器一般性能都很强!

76970
您找到你想要的搜索结果了吗?
是的
没有找到

APT之旅 - PE蠕虫感染(捆绑马制作)(补)

从 PE 静态文件到执行时加载到内存时步骤如下: 检查 NT Headers 中 Optional Header 记录的 ImageBase 地址0x400000 这是应用程式动态加载时被存放的位置(...检查 NT Headers 中 Optional Header 记录的 SizeOflmage,获取在 ImageBase 位置上需要 0xDEAD 字节才能存放该 PE 动态加载的内容,然后在 0x400000...LdrplnitializeProcess 开始执行入程式装载器函数将程式修正并跳至执行程式入口(0×401234),整个程式成功执行起来。...通过第一个 Section Header 记录的 PointerToRawData,即 Section Data 的开始地址减去 Section Headers 的末尾地址。...最后 如果希望在捆绑 shellcode 之后还能执行原程序内容,可以在加载器中利用线程调用原程序调用原程序入口,如下,假如原程序入口是 0x1123: 但是不要使用 WaitForSingleObject

20220

程序一定要从main函数开始运行吗?

Q: 链接器如何为他们分配在输出文件中的空间和地址?...Tips: 外部符号指的是目标文件需要引用的符号,但是定义在其它目标文件中,链接前外部符号地址都是000000之类,链接后的可执行文件就可以看见这些外部符号都是有地址的。...链接就是把相似的段放在一起,先找到段的偏移地址,再找出符号在段中的偏移,这样可以确定符号在整个可执行程序中的地址。...注意:我们代码里明明用的是printf,为什么它却引用了puts的符号呢,因为编译器默认情况下会把只用一个字符串参数的printf替换成puts, 可以节省格式解析的时间,使用-fno-builtin会关闭这个内置函数优化选项...Linux一般程序的入口是__start函数,程序有两个相关的段: init段:进程的初始化代码,一个程序开始运行时,在main函数调用之前,会先运行.init段中的代码。

1.2K30

PWN-BROP笔记

BROP BROP是在没有给出题目文件的情况下,只能通过尝试来确定栈的大小,以及其他函数啥的地址 攻击条件 程序必须存在溢出漏洞,以便攻击者可以控制程序流程 进程崩溃以后可以重启,而且重启之后的地址与先前的地址一样...dump出程序来找到更多的gadget 栈溢出 从 1 开始暴力枚举,直到程序崩溃 Stack Reading 通过按照字节爆破比枚举数值更快 每个字节最多有256种可能,所以在32位的情况下,我们最多需要爆破...,找到能够实现这个功能的地址就找到了这个函数的 plt 比如: 'A'*72 +p64(pop_rdi_ret)+p64(0x400000)+p64(addr)+p64(stop_gadget) 如果能过把...再找一个能让程序不崩溃的地址(stop_gadgets): from pwn import * def getStopGadgets(length): addr = 0x400000 while...然后把基址改成 0x400000: 编辑 -> 段 -> 重新设置基址 ? 设置为 0x400000 ?

84830

BROP 攻击技术 | PWN

其实这种 stop_gadget 很多,比如函数入口什么的 能想到这种招的人真的不简单呀,佩服 根据上面的描述,使用如下 Python3 代码: # 这个函数用来获取 stop_gadget 的地址 #...如果从程序的基地址 0x400000 开始寻找的话,按照 Linux ELF执行的顺序,优先找到的肯定是 _start 函数,所以这里也可以说是寻找 _start 函数,对于我们的需求来说,找到 _start...提供参数,如果参数是可控的并且已知的,我们从基地址开始遍历,如果执行到某个地址的指令真的把我们提供的参数打印了出来,那么这个地址就是 puts 的 plt 地址了 如果再获取到 puts 的 plt...dump 内存 有了 puts 的 plt 地址我们就可以调用 puts 函数来打印每一个地址的内容了,我们用它来 dump 内存 为什么要 dump 内存,dump 内存的意义何在呢?...这个非常非常重要,但是非常简单,本来我们获取到各种地址后,就跟常规的 ROP 没有什么区别了,也就是调用 system 函数 但是刚才我们也看到了, puts 函数的地址每次连接都是变化的,也就是说我们获取后

2.6K21

AMD Artix 7 FPGA OTA 在线升级的实现

AXI GPIO 0的bit-0,也就是SW2的靠角落(DS23、SW4)的开关1在1的状态(靠液晶屏、7A200T芯片侧),则加载0x400000的bit文件。...第二种方式,通过AXI HWICAP写入IPROG命令,在下发IPROG命令前,可以任意指定Flash地址,非常灵活。...但是需要嵌入MicroBlaze和AXI HWICAP,需要占用部分FPGA资源,也需要一软件开发。 Artix FPGA OTA 在线升级的流程 首先分配Flash的存储空间。...Flash里 0x0 地址存放Golden Bit; Flash里 0x400000 地址存放 Update Bit; 其中0x400000需要根据压缩后的bit文件大小修改。...FPGA使用新的Update Bit配置,之后Update Bit开始工作。 如果后来芯片断电之后再上电,Update Bit能直接加载Update Bit。

59220

编译、链接到载入、运行的大致过程----2.链接

”, 也有叫做“文件虚拟地址”的,我觉得都是一个意思:就是说 这个segment 是从这个 虚拟地址开始的,那么结束怎么计算呢?...看FileSiz 字段的值,这个值表示segment 的长度,开始地址加上长度就是结束地址了; 从上面readelf -l 输出的segment head的信息中: 对于cat (/usr/bin/cat...)这个程序,编号为02的LOAD的segment 的地址范围是: 0x400000~0x40adcc,这个非常容易理解, 开始地址加上长度就是结束地址, 至此,我们已经获得了其中一个type为LOAD的...: 0x400000~0x40adcc 通过计算segment所包含的section, 获得的地址是: 0x400238~0x40adcc 为什么上述两种方式得到的同一个segment的地址会有偏差呢...如果segment 的开始地址不是在page的开头,结束地址不是在page的结尾,那么这两个地址都需要 进行page 对齐的调整;所以对上述的地址按照page对齐(4KB对齐就是 以0x1000为单位进行对齐

76430

从零开始仿写一个抖音App——日志和埋以及后端初步架构本项目的 github 地址:MyTikTok

本项目的 github 地址:MyTikTok 这两周实在是太忙了,第一个需求即将上线加了一周的班,然后第二周又团建了三天导致这次的文章滞后了两周,估计大家都以为我要弃坑了。...讨论2:本系列文章是标题党,蹭抖音的热度 1.首先明确一为什么我要以抖音为例子,原因就是我的公司就是开发短视频的,技术上有类似的地方,而本公司的产品是不可能作为例子开发的,所以我就以抖音为例希望能过一遍大公司的项目开发流程和架构...3.网络请求 日志:用于开发人员在本地对网络请求 debug 4.本地文件 日志:用于记录在 app 上线之后出现的bug,将日志打到文件中,可以通过一个入口让用户手动点击上传日志。...3.有人会问你为什么要用几种不同的语言来实现后端的服务呢?这不是多此一举吗。...连载文章 1.从零开始仿写一个抖音app——开始 2.从零开始仿写一个抖音App——基本架构与MVPs 3.从零开始仿写一个抖音App——Apt代码生成技术、gradle插件开发与protocol协议

1.8K50

ESP8266 SDK开发: 外设篇-内存分布说明及Flash读写

芯片是4096KB字节 = 4096*1024 = 4194304字节 = 0x400000 eagle.flash.bin 从flash的最开始地址开始存储 eagle.irom0text.bin...(0x10000 = 65536) 偏移了65536字节即64KB esp_init_data_default.bin (0x3FC000) 从倒数第4个扇区开始存储 (注:0x400000 -...4096-4096-4096-4096 = 0x3FC000) blank.bin (0x3FE000)从倒数第2个扇区开始存储 (注:0x400000 - 4096-4096 = 0x3FE000)...4KB) 假设咱感觉存储咱自己的数据只使用4KB就可以了,那么就是在 0x3EB000地址开始存储咱自己的数据. 0x3FC000 - 4KB = 0x3EB000 即从倒数第5个扇区开始存储数据 ?...0x3FE000 总共有8KB,所有中间有两个扇区 因为esp_init_data_default.bin 的大小是固定的哈不会超过4KB, 所以0x3FE000 左面的那个4KB的扇区也是可以使用的 开始地址

1.6K30

lokibot样本分析

申请空间 读入wdxw2bfd6vcc5n文件的数据4.文件句柄关闭函数3a0a2b解密出PE文件图片又创建了自己 并且是挂起状态获取进程的线程上下文图片图片在新创建的Frhdgr.exe进程申请空间 首地址为...0x00400000向新创建的Frhdgr.exe进程拷贝PE文件(按内存对齐展开) 注:此pe文件就是wdxw2bfd6vcc5n文件解密后的图片运行程序本进程退出图片第四层代码-新创建的Frhdgr.exe进程开始会检查有没有...-u参数如果有就睡10秒获取键值图片键值计算的哈希值作为互斥体的名称 创建互斥体防多开图片此函数循环调用了65个函数 没有仔细的一个一个看 进去几个 都是在获取用户机上已经安装的 病毒作者感兴趣的app...图片返回完整的post请求数据包图片通过以下的域名和端口返回了 addrinfo结构的链表图片EDI为addrinfo结构图片连接的服务器就是通过getaddrinfo返回的 Connect连接的IP地址...线程回调处理接收到的数据图片线程部分线程处理接收数据 可再次获取浏览器的信息 支持下载数据 创建进程 加载模块和打开网页等操作核心函数sub_40648B 通过参数的不同执行不同的操作 参数介绍: 1.要下载数据的地址

20620

lokibot样本分析

读入wdxw2bfd6vcc5n文件的数据 4.文件句柄关闭 函数3a0a2b解密出PE文件 又创建了自己 并且是挂起状态 获取进程的线程上下文 在新创建的Frhdgr.exe进程申请空间 首地址为...向新创建的Frhdgr.exe进程拷贝PE文件(按内存对齐展开) 注:此pe文件就是wdxw2bfd6vcc5n文件解密后的 运行程序 本进程退出 第四层代码-新创建的Frhdgr.exe进程 开始会检查有没有...-u参数如果有就睡10秒 获取键值 键值计算的哈希值作为互斥体的名称 创建互斥体防多开 此函数循环调用了65个函数 没有仔细的一个一个看 进去几个 都是在获取用户机上已经安装的 病毒作者感兴趣的...返回完整的post请求数据包 通过以下的域名和端口返回了 addrinfo结构的链表 EDI为addrinfo结构 连接的服务器就是通过getaddrinfo返回的 Connect连接的IP地址...线程部分 线程处理接收数据 可再次获取浏览器的信息 支持下载数据 创建进程 加载模块和打开网页等操作 核心函数sub_40648B 通过参数的不同执行不同的操作 参数介绍: 1.要下载数据的地址

16920

PE知识复习之PE的重定位表

如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234....这也是为什么很多游戏外挂.等等.都选择DLL注入. 因为系统帮你重定位了各种信息. 代码写在DLL中即可. 如下图: B DLL 从0x20.... 展开了.规避了使用相同地址 ?...虽然这样解决了入口基址不一样.内存展开不一样. 但是我们知道.PE文件中有很多RVA .RVA 是相对于ImageBase的偏移进行存放的. 如果PE文件中都是 RVA 那就好办了. 但是不一定呀....比如我们有地址 101234 101235 101236 这种修正的地址有10000个. 那么每个地址有4个字节的. 那么 4 * 10000 = 4万个字节....所以修复的位置是 0x116b0的位置. 0x116b0 + 当前PE文件的ImageBase就是要进行重定位的位置 当前PE的Imagebase为0x400000 重定位地方为 0x4116b0位置

1.5K30

实战某游戏厂商FPS游戏CRC检测的对抗与防护

四、对自己的CRC程序的防护测试 ⒈运行自己的程序并用CheatEngine添加地址: ?...⒈针对0x402000这个地址,在CheatEngine工具中鼠标右键,查找访问,操作如下: ? 2.检测出现了! ?...⒊下断走一遍流程刚开始的时候,注意观察eax: ? 单步往下执行,下面会有个强制性的向上跳转: ? 继续执行走到初始位置: ?...该游戏可实现除草功能,地图除草方法:CheatEngine工具搜索字节数组:55 8B EC 8B 45 08 83 EC 08 8B 48 10 8B 01,找到的地址减去0x22,对该地址nop即可实现除草...⒉分析一下除草地址的检测由于我们是搜索代码特征字节得到的,该游戏的除草功能也是通过修改代码段nop实现的,所以触发了代码的CRC校验检测,符合我们今天讲的知识查找访问,发现四条访问地址,这个即为我们的CRC

2.9K10

使用方法

看起来和0x1126差了一个0x400000 而官方描述里面这个对应的参数叫offset, 这下就明白设计意图了,我们告诉内核两个信息 要trace的程序的路径 程序加载到进程内存空间之后,断点距离加载起始地址的偏移...ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] 这里可以看出,uprobe_test是被映射到了0x400000...这是可能会有一个疑问,为什么不直接告诉内核断点的真实位置是0x401126呢,让内核去找起始地址再加上偏移,得到的不也是这个值吗,这不是多此一举吗。...的确,当前编译出来的uprobe_test的文件中的符号地址确实就是0x401126,但如果我们用地址无关的方式编译,效果会是怎样呢?...,也就是说,有时我们没法从一个二进制程序中的符号计算出它真正在地址空间中的地址,我们只能知道它距离映射起始地址处的偏移量。

38610
领券