jmp

【原创】初谈缓冲区栈溢出

与世无争的帅哥 提交于 2019-12-20 01:53:35
作者 作者:admin-神风 本文章是为了写出来让人们交流学习的~~末尾我会放上我写这篇文章时所遇到的问题。希望看完本帖的人可以在末尾评论留言自己的问题和解决的答案和思路~ 黑客是一种分享的精神!但现在看来却是在慢慢消失,所以--我希望看完本帖的人们能传递下去! 由于技术问题 本帖有错误的地方望各位大牛斧正! 缓冲区溢出介绍    缓冲区溢简单说,是大的数据存入了小缓冲区,又不对存入数据进行边界判断,最终导致小缓冲区被撑爆。大的数据污染了小缓冲区附近的内存。污染的内存可能带来改变程序控制流、夺取操作系统、禁止访问等多种结果。就好比一杯水,倒满了水 多余的就溢出到外面来了。    缓冲区溢出主要可以分成三种:静态数据溢出、栈溢出和堆溢出。产生这三种不同的溢出根源在于win的内存结构;win的内存可以被分成两个层面:物理内存和虚拟内存。我们一般看到的其实只是windows的虚拟内存。在XP下windows会给所有进程都分配4G内存(无论物理内存真实多大);windows会把4G内存分成代码区、数据区、堆区、栈区。数据区存储的是进程的全局变量。如果利用这里的数据进行缓冲区溢出那么就被称为静态数据溢出。同样利用栈区和堆区进行缓冲区溢出,则相应被称作栈溢出和堆溢出。静态数据溢出虽然技术难度低但是灵活性和可以利用范围低,所以本文就不介绍了。堆溢出相对复杂,将在别的文章介绍

《30天自制操作系统》笔记(12)——多任务入门

大兔子大兔子 提交于 2019-12-16 23:42:14
《30天自制操作系统》笔记(12)——多任务入门 进度回顾 上一篇 介绍了设置显示器高分辨率的方法。本篇讲一下操作系统实现多任务的方法。 什么是多任务 对程序员来说,也许这是废话,不过还是说清楚比较好。 多任务就是让电脑 同时 运行多个程序(如一边写代码一边听音乐一边下载电影)。 电脑的CPU只有固定有限的那么一个或几个, 不可能 真的同时运行多个程序。所以就用近似的方式,让多个程序 轮换 着运行。当轮换速度够快(0.01秒),给人的 感觉 就是"同时"运行了。 多任务之不实用版 我们首先从最基本的想法开始,做一个不实用版的多任务作为例子。在学习这个例子的过程中引入真正的多任务必须的TSS、TR、far模式JMP的概念,为后续内容打基础。 当你向CPU发出任务切换的指令时,CPU会先把寄存器中的值全部 写入 内存某处;然后,从内存另一位置把所有寄存器的值 读取 出来。这就完成了一次任务切换。 任务切换消耗的时间就是读写内存消耗的时间,大概为 0.0001秒 。 任务状态段TSS 存取全部寄存器的值这件事,当然需要有一个数据结构,这就是 "任务状态段" (Task Status Segment)简称TSS。 1 struct TSS32 2 { 3 int backlink, esp0, ss0, esp1, ss1, esp2, ss2, cr3; 4 int eip,

[收藏]恐龙快打dino恐龙新世纪Cadillacs and Dinosaurs暴击值easy48K汇编代码修正版本

拜拜、爱过 提交于 2019-12-16 13:31:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> [收藏]恐龙快打dino恐龙新世纪Cadillacs and Dinosaurs暴击值easy48K汇编代码修正版本 此版本 修正语法错误 如 ($c6,A6) 改成 $c6(A6) 编译运行成功。 测试版本: easy48K版本v5.16.01 M68000 IDA Pro mame0.216 rom dino.zip *----------------------------- 暴击显示 挪到奇怪的位置 ---------------------------------- org $018D88 ;一直会运行的某个血条相关程序 START: ; first instruction of program jmp _bjxscx ;插入“暴击程序” org $106500 ;存放暴击程序的空白地址(可以改成别的) _bjxscx bsr _bjxscx1 ;跳到暴击显示子程序 tst.w ($6c,A6) *原来的不管 bgt _18d48 *原来的不管 jmp $18d90 *原来的不管 _18d48 jmp $18dC6 *原来的不管 ;/////////////////////////////////////////////////////////////////////////////////

冬天OS(三):jmp to kernel

99封情书 提交于 2019-12-11 07:59:16
-------------------------------------------------------- 打印内存信息 开启分页 jmp to kernle -------------------------------------------------------- 上节我们说过,在进入保护模式之后紧接着就要 jmp 到 kernel ,jmp 之前我们还要做几件事情... 一,显示可用内存并开启分页 ; ---------------------------- ; <loader.asm> ; Jack Zheng 11.26 ; ---------------------------- .... ; ---------------------------- ; ---- ; 在实模式下获得可用内存信息 ; ---- mov ebx, 0 ; ebx = 后续值, 开始时需为 0 mov di, _MemChkBuf ; es:di 指向一个地址范围描述符结构(Address Range Descriptor Structure) .MemChkLoop: mov eax, 0E820h ; eax = 0000E820h mov ecx, 20 ; ecx = 地址范围描述符结构的大小 mov edx, 0534D4150h ; edx = 'SMAP' int

手脱FSG(2.0)

拟墨画扇 提交于 2019-12-06 16:51:55
1.查壳 2.x32dbg脱壳 在第二个xchg处使用ESP定律脱壳; 由于FSG壳特性,在跳转后位置向上查找,找到js\jne\jmp,jmp就是OEP位置; 在此处使用工具进行脱壳; 完成! 3.总结 在进行FSG脱壳时,遇见了一些问题,最开始是使用OD进行脱壳的,前面都没有太大问题,在使用ImportREC进行修复IAT表时,会出现修复不全,此问题属于 ImportREC问题,并未解决,之后使用x64dbg后使用工具Scylla x86进行IAT修复,成功运行; 来自为知笔记(Wiz) 来源: https://www.cnblogs.com/HOPEAMOR/p/11995581.html

探秘Runtime

此生再无相见时 提交于 2019-12-06 00:31:40
该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/014af0de67cd 方法调用 在OC中方法调用是通过 Runtime 实现的, Runtime 进行方法调用本质上是发送消息,通过 objc_msgSend() 函数进行消息发送。 例如下面的OC代码会被转换为 Runtime 代码。 原方法:[object testMethod] 转换后的调用:objc_msgSend(object, @selector(testMethod)); 发送消息的第二个参数是一个 SEL 类型的参数,在项目里经常会出现,不同的类定义了相同的方法,这样就会有相同的 SEL 。那么问题就来了,也是很多人博客里都问过的一个问题,不同类的 SEL 是同一个吗? 然而,事实是通过我们的验证,创建两个不同的类,并定义两个相同的方法,通过 @selector() 获取 SEL 并打印。我们发现 SEL 都是同一个对象,地址都是相同的。由此证明,不同类的相同 SEL 是同一个对象。 @interface TestObject : NSObject - (void)testMethod; @end @interface TestObject2 : NSObject - (void)testMethod; @end //

Bran的内核开发教程(bkerndev)-08 中断服务程序(ISR)

牧云@^-^@ 提交于 2019-12-05 14:33:20
中断服务程序(ISR)   中断服务程序(ISR)用于保存当前处理器的状态, 并在调用内核的C级中断处理程序之前正确设置内核模式所需的段寄存器。而工作只需要15到20行汇编代码来处理, 包括调用C中的处理程序。我们还需要将IDT条目指向正确的ISR以正确处理异常。   异常是导致处理器无法正常执行的特殊情况, 比如除以0结果是未知数或者非实数, 因此处理器会抛出异常, 这样内核就可以阻止进程或任务引起任何问题。如果处理器发现程序正尝试访问不允许其访问的内存, 则会引起一般保护错误。当你设置内存页时, 处理器将会产生页面错误, 但这是可以恢复的: 你可以将内存页映射到错误的地址(但这需要另开一篇教程来讲解)。   IDT的前32个条目与处理器可能产生的异常对应, 因此需要对其进行处理。某些异常会将另一个值压入堆栈中: 错误代码, 该值为每个异常的特定代码。 Exception # Description Error Code? 0 Division By Zero Exception No 1 Debug Exception No 2 Non Maskable Interrupt Exception No 3 Breakpoint Exception No 4 Into Detected Overflow Exception No 5 Out of Bounds Exception

stack pivoting

强颜欢笑 提交于 2019-12-05 10:52:25
stack pivoting 翻为堆栈旋转 操作是利用' jmp esp' 控制程序流程 X-CTF Quals 2016 - b0verfl0w 可以溢出并且没有开启NX 但是这里只允许溢出14位 很难进行rop 那么可以在栈上布置shelcode 现在的目标就是让eip跳到栈上shelcode位置 因为程序本身会开启 ASLR 保护 我们很难知道栈上的地址 又退栈的时候esp相对shellcode偏移可以计算 也就是0x20+p32(_ebp)+p32(ret_addr)=0x28 因为eip会返回到ret_addr 我们将‘jmp esp’ 作为ret_addr 那么 程序就等价于执行ret_addr的下面一个语句 找一下jmp 然后 esp减0x28 然后跳转到esp去执行shellcode from pwn import * io=process('./flow') shellcode= "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73" shellcode+= "\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0" shellcode+= "\x0b\xcd\x80" # shellcode=asm(shellcraft.sh()) jmp_esp=0x08048504 sub_esp_jmp=asm('sub esp

王爽汇编实验(八)

流过昼夜 提交于 2019-12-05 08:29:33
分析下面的程序,在运行前思考:这个程序可以正确返回吗? 运行后再思考:为什么时这种结果? 通过这个程序加深对相关内容的额理解。 assume cs:codesg codesg segment mov ax,4c00h int 21h start:mov ax,0 s:nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax s0:jmp short s s1:mov ax,0 int 21h mov ax,0 s2:jmp short s1 nop codesg ends end start 初看时到s1,然后是返回中止? 不多说,运行分析 是从start开始的指令,与想法没错,end start告诉了masm那里是入口 JMP 0008是S的标号地址,后来JMP 0000 这样一来发现了原本的IP是0005,是前面两个返回语句,是直接略过的 jmp 0008下一条是jmp0000,nop执行后分配90H机器码空间,跳转到codesg 结束 来源: https://www.cnblogs.com/otakus/p/11878693.html

深入了解tcmalloc(一):windows环境下无缝拦截技术初探

柔情痞子 提交于 2019-12-04 02:16:31
概述: 又到了一个总结提炼的阶段,这次想具体聊聊游戏引擎中使用的内存管理模块 tcmalloc 组件的使用心得。项目的前期曾经遇到过内存瓶颈,特别是 windows 系统下的客户端程序在经历长时间运行之后会出现内存占用率很高疑似泄漏的现象,排查了很久都没有找到原因,甚至一度无法定位问题出自游戏脚本层还是引擎层,后来在引擎中链接了 tcmalloc 组件,通过实时 dump 程序的内存信息最终找出了泄漏的元凶。 tcmalloc 的另一个优势就是通过高效率内存分配来提高游戏运行时性能,不得不说在使用 tcmalloc 之后,整个游戏的稳定性和效率都有了很大的提升。为了今后更有效和稳定地使用 tcmalloc 组件,就在这里深入剖析一下这个神器。 Tcmalloc 是 Google Perftools 中的一个组件,提供一整套高效健壮的内存管理方案,比传统 glibc 的内存分配和释放要快数倍;其次,基于 tcmalloc 之上的 heapprofiler 可以实时 dump 程序中 heap 的使用信息,是一个很好的检测内存泄漏的辅助工具;同时 tcmalloc 的使用又是极其方便,只需要在编译时增加一个链接选项,就可以无缝拦截 (patch) 原生操作系统运行库中的内存分配和释放接口,而无需修改已经完成的项目工程代码,大大减少移植整合的成本。 在 windows 平台下,