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

【Android 逆向】Android 进程注入工具开发 ( EIP 寄存器指向 dlopen 函数 | ESP 寄存器指向栈内存 | 调试程序收回目标进程控制权 )

EIP 寄存器中 ; 目标进程 恢复运行 , 就会执行 dlopen 函数 ; 二、ESP 寄存器指向栈内存 ---- 除了函数外 , 还要传递参数 , x86 架构中 , 函数参数是通过 栈...进行传递 ; 使用 libc.so 中 mmap 函数 堆 中申请一块内存 S , 内存中存储 dlopen 参数 , 这个参数就是 动态库 路径 ; ESP 寄存器指向位置就是栈内存地址..., 用于存放函数参数 ; 将 S 内存作为 栈 : 将 S 内存首地址赋值给 ESP 寄存器 ; 三、调试程序收回目标进程控制权 ---- dlopen 函数执行完毕 , 调试程序 需要将...attach 获取到 目标进程控制权 , 如果进程崩溃 , 调试程序会回收控制权 ; 因此这里需要让程序崩溃 , 返回地址中 , 设置 0x00 00 00 00 地址 , 该地址是内存最前端..., 这个地址是保留给系统 , 应用程序不允许访问 , 如果用户进程读取该内存地址数据 , 直接崩溃 , 返回不可读错误 ; 此时 目标进程 控制权又回到了 调试程序 手中 ; 后续可以再执行 读写内存

33610

linux系统编程之基础必备(一):计算机体系结构一点基础知识

但是x86比较特殊,x86于设备有独立端口地址空间,CPU核需要引出额外地址线来连接片内设备(和访问内存所用地址线不同),访问设备寄存器时用特殊in/out指令(汇编),而不是和访问内存用同样指令...x86平台上,硬盘是挂在IDE、SATA或SCSI总线上设备,保存在硬盘上程序是不能被CPU直接取指令执行,操作系统执行程序时会把它从硬盘拷贝到内存,这样CPU才能取指令执行,这个过程称为加载...程序加载到内存之后,成为操作系统调度执行一个任务,就称为进程(Process)。进程和程序不是一一。...操作系统和MMU是这样配合: 1.操作系统初始化或分配、释放内存时会执行一些指令物理内存中填写页表,然后用指令 设置MMU,告诉MMU页表物理内存什么位置。...我们程序中使用变量和函数都有各自地址,程序被编译,这些地址就成了指令中地址, 指令中地址被CPU解释执行,就成了CPU执行单元发出内存地址,所以启用MMU情况下,程序中使用地址都是虚拟地址

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

MIT 6.858 计算机系统安全讲义 2014 秋季(一)

如果应用程序正在执行安全性,应用程序级别的错误会导致漏洞。 例子:苹果 iCloud 密码猜测速率限制。 人们经常选择弱密码;通常可以几次尝试(1K-1M)猜中。...提供长输入,覆盖缓冲区栈数据。 关键观察 1: 攻击者可以覆盖返回地址,使程序跳转到攻击者选择位置!...: OOB 指针中设置最高有效位,然后将地址空间上半部分页面标记为不可访问。...例如,攻击者可能进行缓冲区溢出并尝试用usleep(16)地址覆盖返回地址,然后查看连接是否 16 秒挂起,或者是否崩溃(在这种情况下,服务器会使用相同 ASLR 偏移量 fork 一个新 ASLR...服务器崩溃并重新启动,如果金丝雀设置为不正确

11410

MIPS架构深入理解1-MIPS和RISC架构体系介绍

希望龙芯能够CPU领域继续深耕,逐步完善生态系统,实现真正国产芯片自主化吧。 1.5 MIPS和CISC对比 大部分程序汇编语言认知都来源于X86架构,毕竟是最早CPU架构之一。...所以,对内存变量进行操作时候,先将其加载到寄存器中,然后寄存器进行算术逻辑操作。完成,将将结果再存储到内存中对应位置。...它把程序重新运行地址保存到一个特定寄存器中,修改机器状态,然后禁止中断。做完这些,跳转到一段保存到低内存预定义好程序,之后工作完全由软件控制。...MIPS架构规定,分支指令指令总是分支目标指令之前执行。跟随分支指令指令位置被称为分支延迟槽,具体物理意义有点抽象,对应上图的话,就是横向上一格。...也就是说,load指令下一条指令还是不能使用数据。 那么load指令位置,就称为加载延时槽。带有优化编译器总是尝试利用这个加载延时槽。有时候,编译器会把这个位置填充一个nop操作。

7.1K11

《Learning ELK Stack》7 Kibana可视化和仪表盘

举个例子,如果指定@timestamp字段作为桶,且时间区间为一周,那么文档将基于每周数据分组,然后可以对分组文档计算度量,如计数、平均值等 直方图 直方图与日期直方图相似,除了要求指定字段和区间都是数字类型...度量 度量是每个桶中字段进行计算 例如计算文档总数、平均值 、最小 或最大 。度量通常代表区域图、垂直柱状图和折线图Y轴。...度量可用类型如下 Count(计数) Average(平均值) Sum(求和) Unique Count(唯一计数) Min(最小) Max(最大) Percentile(百分比) Percenntile...相应地为聚合中数字字段计算平均值求和、最小 和最大 Unique Count 类似于SQL中COUNT (DISTINCT fieldname)功能,计算出字段唯一数量 ?...度量 用于显示字段单个数字类型分析。可以用来计算一个字段总命中数、总和或平均值。例如,下面的度量可以用来显示应用程序一段时间内平均响应时间 ?

2.7K30

QEMU架构浅析

从物理硬件架构和角度上来说,不可能在一个处理器上运行为另一个处理器指令架构(ISA)编译机器代码,例如,x86处理器上ARM机器代码。...执行过程中,如果遇到了需要翻译代码块,执行动作就会暂停并回会跳回到Hypervisor(虚拟机管理程序),Hypervisor(虚拟机管理程序)就会使用和协调TCG需要进行二进制翻译源处理器指令...TCG运行和翻译失败,从而导致程序复现异常或崩溃。...此外,翻译过程中,如果新处理器使用寄存器多于x86处理器并且具有许多复杂指令,那么TCG进行编程以处理和适应新CPU仿真就可能需要大量工作。...本文将不展开QEMU存储协议栈进行细述。 2.5 软件MMU 传统处理器中内存管理单元(MMU)处理计算机内存位置访问。当处理器想要访问某个存储器地址时,MMU获取该地址内容。

8.6K52

新手经常忽略嵌入式基础知识点,你都掌握了吗?

PC CPU 上电时复位为默认,它是计算机中第一条待执行指令地址。这条指令通常是一种不可内置程序,用于加载计算机基本功能。 许多个人计算机中,这种程序称为BIOS(基本输入输出系统)。...CPU 神奇之处在于可以指示它向PC 中写入新,从而实现执行过程分支,或“跳转”到存储器其他位置。这种分支可以是有条件。...为实现与外界通信,程序必须进行输入与输出操作,如打开文件、屏幕上显示消息、打开网络连接等。但不同计算机采用不同硬件,因此程序不可能直接支持所有不同类型屏幕、声卡或网卡。...因此,使用x86 处理器Windows 中编译程序,无法使用x86处理器Mac 中运行。除针对特定CPU 体系结构外,编译代码还会针对特定操作系统。...时间局部性与空间局部性 尝试尽量减少RAM 访问时,计算机科学家开始注意到两个事实。 ◎ 时间局部性:访问某个存储地址时,可能很快会再次访问该地址。

37620

恶意代码分析实战总结

硬件断点:使用四个调试寄存器(DR0,DR1,DR2,DR3)来设定地址,用DR7设定状态,执行到光标所在处(F4)也是利用调试寄存器原理,相当于一次性硬件断点 内存断点:所设地址设为不可访问/不可写属性...,这样当访问/写入时候就会产生异常,Ollydbg截获异常比较异常地址是不是断点地址,如果是就中断。...DLL被加载才能执行 SSDT hook:ntoskrnl.exe模块地址在一定范围内,一旦不在,说明SSDT被hook了 是否C++程序有所了解 虚函数中决定调用哪个函数是在运行时进行 C+...中都有一个项 虚函数表vtable按照偏移访问,用sub_####标记,switch偏移表用loc_####标记,子类虚函数表比父类大 是否64位程序有所了解 x64和x86区别: 所有地址和指针都是...,一次是写入数据,一次是写入代码 进程替换:dll注入可能让进程崩溃,进程替换关键是以挂起状态创建,会被载入内存,恢复主线程,开始执行。

2.3K20

总结c++ primer中notes

C++ 中,把负值赋给 unsigned 对象是完全合法,其结果是该负数该类型取值个数。...所以,如果把 -1 赋给8位 unsignedchar,那么结果是 255,因为 255 是 -1 256 。...也就是说,赋值时是取该该类型取值数目。然而我们不能保证编译器都会这样处理 signed 类型。 如果您要处理只是非负整数,那么应该优先使用unsigned 打头那些整数类型。...C++中每一个变量都有特定类型,该类型决定了变量内存大小和布局、能够存储于该内存取值范围以及可应用在该变量上操作。C++ 程序员常常把变量称为“变量”或“对象(object)”。...都是合法——虽然这个不可能是程序员想要。因为这个合法,所以使用它也不可能会导致程序崩溃。可能结果是导致程序错误执行和/或错误计算。

1.6K90

扒虫篇-Debug几个实用方法

程序执行到断点你可以输入LLDB命令操作调试过程。 ?...我们可以viewDidLoad:里面设置断点,然后程序中断时候输入下面的命令: call [self.view setBackgroundColor:[UIColor redColor]] 此时view...如果想了解更详细内容,戳这里。 控制台左侧调试区: 左侧调试区  右键 选择“Add Expression” 输入你想要显示变量名称,即可立即显示(注意这个变量不可以是不直观)。...所以我们要提高野指针崩溃率好来帮我们快速找到有问题代码。对象释放只有出现被随机填入数据是不可访问时候才会必现Crash。 这个地方我们可以做一下手脚,把这一随机过程变成不随机过程。...对象释放内存上填上不可访问数据,其实这种技术其实一直都有,xcodeEnable Scribble就是这个作用。 ?

1.5K10

Linux之进程信号(下)

signal(signo, handler)本质是拿到信号函数指针数组下标,然后将用户层设置handler函数放入该数组下标所对应位置。...程序崩溃本质是因为进程访问了未申请空间,导致程序异常,OS向进程发送了终止进程信号,但是实际上数组编译器在编译代码时,栈上开辟空间大小与编译器是强相关(并不仅由程序决定开辟多大空间,但是至少和程序申请一样大...[100]进行操作时,数组虽然越界访问,但是程序并没有崩溃;而对arr[10000]进行操作时,程序崩溃了。...函数(要将Node2头插到链表中:Node2节点next指向下一个节点位置然后让headnext指向Node2,如此完成Node2头插),信号捕捉完就成功将Node2头插到链表中。...而while循环因为代码优化,导致检测quit时读取是寄存器中,而不是内存,因此一直循环,就导致了程序不退出结果。 这就相当于寄存器中quit覆盖率物理内存中quit变量值。

18820

分布式学习和联邦学习简介​

为了w,使用梯度下降法(GD),从一个随机w开始,然后通过沿误差相反方向100个数据点上最小化模型误差。...因此将总误差定义为所有数据点平方误差平均值,如下所示: 强调一下这个总误差或者说损失函数关键点是所有数据点平均值,也就是说每个数据点总误差贡献是相等。...如果我们按照上面的公式重写梯度并将其分为2部分求和时,每个和式都有其意义。第一部分实际上是前50个点数据平均梯度,第二部分是数据50个点数据平均梯度。...我们可以将数据分成两部分然后分别计算每个部分梯度,然后这两个梯度平均值,来计算整个数据梯度。这就是D-SGD主要思想。 现在,我们有两个客户机分布式SGD。...该协调器会对两个梯度平均值然后计算整个数据梯度或叫全局梯度。服务器返回这个全局梯度给两个客户端,客户端使用这个全局梯度来更新他们b或他们模型。

30220

分布式学习和联邦学习简介​

为了w,使用梯度下降法(GD),从一个随机w开始,然后通过沿误差相反方向100个数据点上最小化模型误差。...因此将总误差定义为所有数据点平方误差平均值,如下所示: 强调一下这个总误差或者说损失函数关键点是所有数据点平均值,也就是说每个数据点总误差贡献是相等。...如果我们按照上面的公式重写梯度并将其分为2部分求和时,每个和式都有其意义。第一部分实际上是前50个点数据平均梯度,第二部分是数据50个点数据平均梯度。...我们可以将数据分成两部分然后分别计算每个部分梯度,然后这两个梯度平均值,来计算整个数据梯度。这就是D-SGD主要思想。 现在,我们有两个客户机分布式SGD。...该协调器会对两个梯度平均值然后计算整个数据梯度或叫全局梯度。服务器返回这个全局梯度给两个客户端,客户端使用这个全局梯度来更新他们b或他们模型。

69720

一网打尽!深度学习常见问题!

1 前言 传统软件工程中,程序问题(即Bugs)会导致程序崩溃,但开发人员可以通过检查错误来了解原因。 然而,深度学习中,代码可能会在没有明确原因情况下崩溃。...2.3 数据/模型拟合 我们可以ImageNet数据上预训练模型,然后将其应用到更为复杂自动驾驶汽车图像数据上进行拟合。...归一化输入输入数据进行归一化,减去均值并除以方差;对于图像,将缩放为 [0, 1] 或 [-0.5, 0.5](例如除以 255)。 简化问题。...• 基准数据(例如 MNIST)上模型结果; • 类似数据类似模型结果; • 超级简单基线(例如,输出平均值或线性回归)。...当测试分发中标记数据访问受到限制及可以获得大量相对相似的数据时要考虑领域适配。包括自监督领域适配和无监督领域适配。

8910

带你通过字节跳动面试---操作系统复习

中,如果有些指令用错会使系统崩溃,所以用户程序不可,无论程序员是否有意,都可能把系统弄崩溃。 分了内核态和用户态之后,操作系统对内核级别指令进行封装,然后为用户提供系统服务。...若其他进程想要访问该资源,只能等待到占用资源进程使用完。 请求和保持条件。进程获得一定资源,又对其他资源发出请求。如果其他资源被占用,此时请求阻塞,但该进程不会释放以有的资源。 不可剥夺条件。...进程获得资源使用完成之前不可被剥夺,只能自己使用完释放。 循环等待条件。发生死锁时,一定存在一个 进程——资源 循环链。 解决死锁方法: 破坏请求和保持条件。...当某个文件描述符就绪时,就会返回所有的描述符然后应用程序去检查哪个文件描述符上有事件发生。...返回时不可以把有事件描述符筛选出来,需要在遍历一遍,而 返回时会加到一个链表中,然后直接链表操作。

1.3K20

1.1 熟悉x64dbg调试器

x64dbg中,硬件执行断点可以通过指令前面的地址上设置“e”来实现。硬件读取断点 - 当程序尝试从指定内存地址读取数据时,触发硬件读取断点。...这种断点类型适用于特定内存位置上调试程序,例如检测某个变量何时被更改。x64dbg中,硬件读取断点可以通过指定内存地址上设置“r”来实现。...硬件写入断点 - 当程序尝试向指定内存地址写入数据时,触发硬件写入断点。这种断点类型适用于特定内存位置上调试程序,例如检测某个变量何时被更改。...x64dbg中,内存断点可以根据不同操作类型进行分类,内存断点被分为内存访问内存执行,内存写入,内存读取等,他们之间应用各不相同;内存访问断点(Access breakpoint):当程序试图访问特定内存地址时触发...(2)反汇编检索命令x64dbg中,读者可通过Ctrl+F快捷键命令调出命令搜索窗口,并输入一条反汇编指令,即可实现检索模块内具备命令位置,当用户勾选整块搜索时,x64dbg会搜寻整个进程内所有匹配命令

49630

1.1 熟悉x64dbg调试器

x64dbg中,调试这可以通过F2快捷键在所需下断点位置下断,当该位置被下断点,则调试器会以红色标注,而当前EIP指针则会使灰色显示,如下图所示; 此外软件断点同样可以使用bp/bpx等命令下断...这种断点类型适用于特定内存位置上调试程序,例如检测某个变量何时被更改。x64dbg中,硬件读取断点可以通过指定内存地址上设置“r”来实现。...硬件写入断点 - 当程序尝试向指定内存地址写入数据时,触发硬件写入断点。这种断点类型适用于特定内存位置上调试程序,例如检测某个变量何时被更改。...x64dbg中,内存断点可以根据不同操作类型进行分类,内存断点被分为内存访问内存执行,内存写入,内存读取等,他们之间应用各不相同; 内存访问断点(Access breakpoint):当程序试图访问特定内存地址时触发...(2)反汇编检索命令 x64dbg中,读者可通过Ctrl+F快捷键命令调出命令搜索窗口,并输入一条反汇编指令,即可实现检索模块内具备命令位置,当用户勾选整块搜索时,x64dbg会搜寻整个进程内所有匹配命令

56530

1.1 熟悉x64dbg调试器

x64dbg中,硬件执行断点可以通过指令前面的地址上设置“e”来实现。硬件读取断点 - 当程序尝试从指定内存地址读取数据时,触发硬件读取断点。...这种断点类型适用于特定内存位置上调试程序,例如检测某个变量何时被更改。x64dbg中,硬件读取断点可以通过指定内存地址上设置“r”来实现。...硬件写入断点 - 当程序尝试向指定内存地址写入数据时,触发硬件写入断点。这种断点类型适用于特定内存位置上调试程序,例如检测某个变量何时被更改。...x64dbg中,内存断点可以根据不同操作类型进行分类,内存断点被分为内存访问内存执行,内存写入,内存读取等,他们之间应用各不相同;内存访问断点(Access breakpoint):当程序试图访问特定内存地址时触发...(2)反汇编检索命令x64dbg中,读者可通过Ctrl+F快捷键命令调出命令搜索窗口,并输入一条反汇编指令,即可实现检索模块内具备命令位置,当用户勾选整块搜索时,x64dbg会搜寻整个进程内所有匹配命令

56820

C语言重点突破(五) 动态内存管理

例如,操作大型数据时,可以只分配所需内存块,从而减少内存浪费和内存碎片可能性,提高程序运行效率。...C/C++中,NULL指针是一种特殊指针,其取值为0,进行指针解引用操作时,程序会试图访问地址为0内存,这个地址是无效,可能会导致程序崩溃。...动态开辟空间越界访问也是一种未定义行为,可能导致程序崩溃或其他未知行为。...这个地址数据可能是其他程序数据,也可能是系统保留数据,这些数据都是不属于我们程序,可能会导致程序崩溃,或者产生其他不可预测行为。...free”,会导致程序运行时不可预测行为,比如崩溃内存泄漏、数据损坏等。

8510
领券