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

【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )

文章目录 一、调试进程中寄存器的作用 二、通过 EIP 寄存器控制程序运行 三、EIP 寄存器的存档与恢复 一、调试进程中寄存器的作用 ---- 内存是一个线性结构 , 将动态库加载到内存中后 , 每个动态库文件都是一块连续的内存空间...x86 架构的 , 因此整个调试系统以 x86 架构为准 ; 二、通过 EIP 寄存器控制程序运行 ---- 通过寄存器控制程序运行 : x86 架构的 CPU 中 , 16 位 有 IP 寄存器 ,...32 位 有 EIP 寄存器 , 现在主流的架构是 32 位 , 64 位兼容 32 位 ; EIP 寄存器中存储的值是下一条将要执行的指令 ; 目标进程的内存地址范围是 A ~ B , EIP 寄存器的值可以是...A ~ B 之间的任何地址 ; 一旦设置了 EIP 寄存器的值 X , 那么下一条指令 , 就将从 X 地址位置开始执行 ; 三、EIP 寄存器的存档与恢复 ---- EIP 寄存器值的存档与恢复 :...存档 : 在 attach 目标进程后 , 开始进行调试之前 , 先要将 EIP 寄存器的值保存起来 , 存档 ; 恢复 : 在 detach 目标进程前 , 要先恢复 EIP 寄存器的值 ,

47810

常见注入手法第一讲EIP寄存器注入

常见注入手法第一讲EIP寄存器注入 鉴于注入手法太多,所以这里自己整理一下,每个注入单独一片博客。方便大家简单理解。...但是有的注入可能需要需要注入方法的相结合,什么意思,也就是说以前我们写的汇编代码注入,原理就是通过远程线程注入得来的 所以前提你就要理解远程线程注入 今天我们讲一下EIP寄存器注入。...我们昨天,也就是异常第一讲的时候,我们知道了我们可以设置寄存器的值,或者获取寄存器的值,微软也帮我们提供了API 但是现在这个API正是我们要用的时候了。...我们开始吧 昨天简单说了下思路 /* 思路: 1.查找窗口,获得窗口句柄 2.获得线程ID进程PID 3.获得线程句柄,同时也要获得进程的句柄 4.挂起线程 5.获得寄存器的值 6.修改EIP的值 7....获取寄存器的值,主要是为了我们要获取当前的EIP的值.然后还回去的时候也需要.

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

windows eip 直通

Windows EIP直通原理:内网流量走辅助网卡内网IP,外网流量走主网卡外网IP,主网卡的内网IP用不到、辅助网卡的外网IP也用不到,主网卡只配主网卡的外网IP,辅助网卡只配辅助网卡的内网IP 注意...中文系统执行eip_windows_direct_cn.bat http://windows-1251783334.cos.ap-shanghai.myqcloud.com/eip_windows_direct_en.bat...-Outfile c:\eip_windows_direct_en.bat wget http://windows-1251783334.cos.ap-shanghai.myqcloud.com/eip_windows_direct_cn.bat...:https://cloud.tencent.com/document/product/1199/41709 步骤:找售后开通EIP直通白名单 → 下载EIP直通脚本到CVM内,必须先下载脚本,必须先下载脚本...,必须先下载脚本 → 绑定辅助网卡 → 控制台开启EIP直通 → 系统内关闭防火墙和安全软件,总之,能拦截.bat脚本执行的都关掉,然后运行第一步下载的EIP直通脚本 → 运行时如果弹了wscript

1.5K50

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

文章目录 一、EIP 寄存器指向 dlopen 函数 二、ESP 寄存器指向栈内存 三、调试程序收回目标进程控制权 一、EIP 寄存器指向 dlopen 函数 ---- 代码段中 , 一般都有 dlopen..., 并返回动态链接库的句柄 包含头文件 : #include 函数原型 : void * dlopen( const char * pathname, int mode); 将 EIP...寄存器指向 dlopen 函数 , 也就是将 dlopen 函数的地址设置到 EIP 寄存器中 ; 目标进程 恢复运行后 , 就会执行 dlopen 函数 ; 二、ESP 寄存器指向栈内存 ----..., 用于存放函数的参数 ; 将 S 内存作为 栈 : 将 S 内存的首地址赋值给 ESP 寄存器 ; 三、调试程序收回目标进程控制权 ---- 在 dlopen 函数执行完毕后 , 调试程序 需要将...这个地址是保留给系统的 , 应用程序不允许访问 , 如果用户进程读取该内存地址数据 , 直接崩溃 , 返回不可读错误 ; 此时 目标进程 的控制权又回到了 调试程序 手中 ; 后续可以再执行 读写内存 , 读写寄存器

35110

操作系统进程的实现---中---05

好了,CPU得到TSS描述符后,就会将其加载到任务寄存器TR中,然后根据TSS描述符的信息(主要是基址)找到任务的tss内容(包括所有的寄存器信息,如eip),根据其内容就可以开始新任务的运行。...这些寄存器现场都会被写入原任务的tss结构里,值得注意的是,EIP会指向引起任务切换指令(第7行)的下一条指令(第8行),所以,很明显,当原任务有朝一日再次被调度运行时,它将从EIP所指的地方(第8行)...首先,将当前父进程的eip和cs放在tss中,说明子进程一会如果执行的话,会从父进程在中断进入内核态时,压入栈中的eip和cs处开始执行 然后eax设置为了0,这一点很重要 因为linux 0.11...1,这里ret就是存放的中断返回后,将会赋值给eip寄存器的值。...---- 终于可以让A执行了… eip[0]指向的就是+28地址处,即存放中断返回后eip的地方,这里将ex.a_entry赋值给了eip[0],ex.a_entry是可执行程序入口地址,即我们上面说的

82260

EIP-1167: 代理合约

EIP-1167 本文的主要参考资料是:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1167.md 以及 https://learnblockchain.cn...比如关于代理合约,就存在 EIP-1167 的一个专门介绍代理合约知识点的 EIP。...下面我们将主要基于该 EIP-1167 分析: 要解决的问题: 避免重复部署同样的合约代码,取而代之的是只部署一次合约代码,当需要一份拷贝的时候,就只需要部署一个简单的代理合约。...EIP-1167 标准是为了以不可改变的方式简单而廉价地克隆目标合约的功能,它规定了一个最小的字节码实现,它将所有调用委托给一个已知的固定地址。...success) { return(0, rSize) //将存放在内存中的返回值返回回去 } revert(0, rSize) } } 注意:为了尽可能减少 gas 成本,上述字节码依赖于 EIP

2.5K30

Linux内核之旅张凯捷——系统调用分析(2)

(4)将ia32_sysenter_target(sysenter指令的接口函数)设置到MSR_IA32_SYSENTER_EIP。...将SYSENTER_EIP_MSR的值装在到eip寄存器。 将SYSENTER_CS_MSR的值加8(Ring0的堆栈段描述符)装载到ss寄存器。...将寄存器edx的值装载到eip寄存器。 将SYSENTER_CS_MSR的值加24(Ring3的堆栈段描述符)装载到ss寄存器。 将寄存器ecx的值装载到esp寄存器。 将特权级切换到Ring3。...3.3 sysenter的系统调用处理 3.3.1 linux2.6.39内核sysenter系统调用 正如刚才对IA32_SYSENTER_EIP寄存器中传入sysenter的系统调用函数入口地址ia32...3.3.2 linux4.20内核sysenter系统调用 在linux4.20内核中,对IA32_SYSENTER_EIP寄存器中传入的是entry_SYSENTER_32函数。

1.9K20

缓冲区溢出实战-slmail

EIP中的41是十六进制数,转换为字母就是A,也就是说此时EIP寄存器全部填满了A,ESP寄存器也被填满了A,每四个字节为一个存储单元进行存储, EIP就是当前邮件服务器SLmail下一个需要执行的指令的内存地址...此时cpu会到EIP所在的内存地址中寻找指令代码,而该指令内存已被A全部覆盖,此时程序就会奔溃无法继续运行。 漏洞利用:可以用shellcode填充EIP寄存器地址,这样就可能控制目标机器。 ? ?...windows调试进程暂停,可以看到,EIP寄存器的值为39694438。 ? ?...运行脚本之后,调试的进程显示如下,满足预先计算的结果,则可验证字符位置是正确的,可以看到,EIP寄存器的数据即是脚本中buffer中设置的4个B(ASCII的Hex值为42),而ESP寄存器存放的正是脚本中...将该EIP修改为shellcode代码的内存地址,将shellcode写入到该地址空间,程序读取EIP寄存器的数值,将跳转到shellcode代码段并执行。

1.9K20

程序执行的本质

CPU中有三个寄存器,分别是eip、ebp和esp,情景如图所示。 ?...对代码区和动态数据区的管控 其中eip永远指向代码区将要执行的下一条指令,它的管控方式有两种,一种是“顺序执行”,即程序执行完一条指令后自动指向下一条执行;另一种是跳转,也就是执行完一条跳转指令后跳转到指定的位置...初始情景: eip指向main函数的第一条指令,此时程序还没有运行,栈空间里还没有数据,ebp和esp指向的位置是程序加载时内核设置的(详情请看《Linux内核设计的艺术》一书)。...什么是EIP、ESP、EBP 堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。 允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称入栈和出栈。...ESP寄存器存放当前线程的栈顶指针; EBP寄存器中保存当前线程的栈底指针; call main下面的一条指令地址EIP(也称返回地址)寄存器; 程序开始执行main函数第一条指令,eip自动指向下一条指令

83810

Procedure Call and Stack

1-Stacks 2-Procedure Calls and Returns 3-Stack-based languages 4-Linux stack frame 5-Registers and variables...esp专门作为存放当前线程的栈顶指针; eip用于存放下一个待执行的CPU指令的内存地址,当CPU执行完当前指令后会从eip寄存器读取下一个指令的地址并继续执行 eax是累加器,例如:add eax...0x108,eip寄存器存储了下一条准备执行的指令 804854e 在准备执行call 8048b90 之前....存储了下一条待执行的地址0x8048553 接下来,准备执行 call  8048b90,所eip寄存器存储了8048b90作为待执行的指令 在call调用的方法执行结束后,需要返回到Caller...如下图: 8048591: 表示return到caller,结束当前方法的调用 因为马上要执行ret命令,因此将8048591指令存到了eip寄存器,表示下一条待执行的指令是0x8048591

1.5K290

80386的各种寄存器一览

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题...(16位) • CS:代码段寄存器 • DS:数据段寄存器 • SS:堆栈段寄存器 • ES、FS 及GS:附加数据段寄存器 这些段寄存器中存放的不再是某个段的基地址,而是某个段的选择符(Selector...3、标志和控制寄存器(32位) 标志寄存器 EFLAGS 指令指针 EIP 机器状态字 CR0 Intel 预留 CR1 页故障地址 CR2 页目录地址 CR3 指令指针寄存器EIP)中存放下一条将要执行指令的偏移量...• 任务状态寄存器TR(Task State Register)是16 位寄存器,用于保存任务状态段TSS 段的16 位选择符。 ? 5、调试寄存器和测试寄存器(32位) ?...80386 有两个32 位的测试寄存器TR6 和TR7。TR6 是测试命令寄存器,其内存放测试控制命令。TR7 是数据寄存器,其内保存转换旁路缓冲器测试的数据。

1.6K00
领券