jmp

汇编Shellcode的技巧

断了今生、忘了曾经 提交于 2020-11-24 06:13:34
汇编Shellcode的技巧 来源 https://www.4hou.com/technology/3893.html 本文参考来源于pentest 我们在上一篇提到要要自定义shellcode,不过由于这是个复杂的过程,我们只能专门写一篇了,本文,我们将会给大家介绍shellcode的基本概念,shellcode在编码器及解码器中的汇编以及几种绕过安全检测的解决方案,例如如何绕过微软的 EMET(一款用以减少软件漏洞被利用的安全软件)。为了理解本文的内容,大家需要具了解x86汇编知识和基本文件格式(如COFF和PE)。 专业术语 进程环境块(PEB) :PEB(Process Environment Block)是Windows NT操作系统中的一种数据结构。由于PEB仅在Windows NT操作系统内部使用,其大多数字段不面向其他操作系统,所以PEB就不是一个透明的数据结构。微软已在其MSDN Library技术开发文档中开始修改PEB的结构属性。它包含了映像加载器、堆管理器和其他的windows系统DLL所需要的信息,因为需要在用户模式下修改PEB中的信息,所以必须位于用户空间。PEB存放进程信息,每个进程都有自己的 PEB 信息。准确的 PEB 地址应从系统的 EPROCESS 结构的 1b0H 偏移处获得,但由于 EPROCESS在进程的核心内存区,所以程序不能直接访问。

CPU的内部架构和工作原理-原文

旧时模样 提交于 2020-11-22 19:28:35
CPU从逻辑上可以划分成3个模块,分别是、和,这三部分由CPU内部总线连接起来。如下所示: 控制单元 :控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)等,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。 运算单元 :是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。 存储单元 :包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。但因为受到芯片面积和集成度所限

操作系统之bios

六月ゝ 毕业季﹏ 提交于 2020-11-09 09:30:53
操作系统之bios、mbr 系统上电之后发生了什么 bios相关内容 mbr相关内容 写在最后 系统上电之后发生了什么 bios是每个芯片出场的每个厂家写死在rom中的一段代码,这段代码在系统一开始上电之后首先运行的代码,负责检查电脑硬件是否存在问题,确认没有任何问题之后,会去内存中找到主引导扇区mbr,将主引导扇区加载至0c7c00的地址(这一部分后面会具体解释),mbr会负责将处于磁盘中的操作系统加载进来,然后将控制权交给操作系统,至此,控制权交给操作系统。 bios相关内容 bios的代码是一开始便写好的,放在rom里面,所以,cpu一开始应该找到rom中bios的地址,然后加载至cpu中进行执行,这部分是怎么实现的呢? 首先,最初的操作系统是8086系统,后面的操作系统都兼容了8086,所以在一开始的实模式下都类似于8086系统,所以接下来我们讨论8086系统。 8086是16位的cpu,但是有20根地址总线,所以,采用基址+偏移量的方式寻址,使寻址空间增加到2^20,也就是1M的空间(高16位左移4位,加上低16位)。 所以,一开始的rom放在哪里决定了后面的系统一开始上电的时候去哪个地址寻址。 由于不同的计算机厂商生产的计算机所带的外设不一样,因此,这段程序大小也限机型的不同而不一样,如果厂商A的rom大小有1K,厂商B的rom大小有2K,那么程序员开始地址就会不一致

oCam v515.0去广告方法和Reverse分析

╄→гoц情女王★ 提交于 2020-11-09 07:21:45
oCam为Delphi开发,未注册版的主界面下方会有广告,关闭主界面后会出现一个弹窗,这个弹窗要等待3秒才能关闭,关闭弹窗后又会在默认浏览器中打开他们的网站。如果直接用OllyDbg或者x32dbg打开oCam.exe,然后用F8单步执行,若不加任何断点,要不了几步就会提示“已停止,调试结束”,这是oCam刻意加入的反调试技术,可能和812C75处的CreateMutexW有关,我没有深入研究,采取另外一种方法绕过:直接启动oCam,然后用OllyDbg或x32dbg去附加,(使用x32dbg时要注意勾选 调试>高级>隐藏调试器(PEB),否则容易出现异常)。附加后,点击菜单>注册,电子邮箱和序列号随便填,比如都填1,点击“确定”会报“无效的邮件地址”,把邮箱地址改为1@x.com,再点“确定”就会报“无效用户名或注册码”,在报错的同时也会有系统提示音。这个提示音就是PoJie的起点。使用bp MessageBeep命令下断点,点击“确定”后观察栈的内容,可以找到来自79F8A3的调用。79F8A3下方不远处(79F8B2)又有对CreateMessageDialog的调用,说明79F8A3和79F8B2所在的函数79F838就是用来带提示音报错的,在IDA或x32dbg中查找对79F838的引用,发现只有两处引用,其中一处引用是_TfrmRegister_btnOKClick

转载->CPU的内部架构和工作原理

心不动则不痛 提交于 2020-11-06 08:00:19
CPU的内部架构和工作原理 本片博客转自:http://www.cnblogs.com/onepixel/p/8724526.html 感谢博主分享! 内部架构 CPU 的根本任务就是执行指令,对计算机来说最终都是一串由 0 和 1 组成的序列。CPU 从逻辑上可以划分成 3 个模块,分别是控制单元、运算单元和存储单元 。其内部架构如下: 【1】控制单元   控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器OC(Operation Controller) 等组成,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括:节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。 【2】运算单元   运算单元是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。 【3

x86汇编语言实践(3)

与世无争的帅哥 提交于 2020-10-28 20:06:53
0 写在前面   为了更深入的了解程序的实现原理,近期我学习了 IBM-PC 相关原理,并手工编写了一些 x86汇编程序 。   在2017年的计算机组成原理中,曾对 MIPS体系结构及其汇编语言 有过一定的了解,考虑到x86体系结构在目前的广泛应用,我通过两个月左右的时间对x86的相关内容进行了学习。   在 《x86汇编语言实践》系列 中(包括本篇、 x86汇编语言实践(1) 、 x86汇编语言实践(2) 、 x86汇编语言实践(4) 以及 x86汇编语言复习笔记 ),我通过几个具体案例对x86汇编语言进行实践操作,并记录了自己再编写汇编代码中遇到的困难和心得体会,与各位学习x86汇编的朋友共同分享。   我将我编写的一些汇编代码放到了github上,感兴趣的朋友可以点击屏幕左上角的小猫咪进入我的github,或请 点击这里 下载源代码。 1 递归调用计算N! 1-1 练习要点 递归调用 栈指针的维护 子程序编写与调用 1-2 实现思路 在数据段存储好待计算的N,和用以存储计算结果的RESULT 主程序中首先将N和RESULT压栈 调用CALCULATE进行阶乘的递归计算 结果返回至RESULT 调用DISP_VALUE打印输出阶乘计算结果 1-3 重点难点 参数传递:使用堆栈进行参数传递,需要将参数压栈,注意 子程序返回时,必须增加一个常数偏移量RET X

x86汇编语言实践(2)

空扰寡人 提交于 2020-10-28 14:02:08
0 写在前面   为了更深入的了解程序的实现原理,近期我学习了 IBM-PC相关 原理,并手工编写了一些 x86汇编程序 。   在2017年的计算机组成原理中,曾对 MIPS体系结构及其汇编语言 有过一定的了解,考虑到x86体系结构在目前的广泛应用,我通过两个月左右的时间对x86的相关内容进行了学习。   在 《x86汇编语言实践》系列 中(包括本篇、 x86汇编语言实践(1) 、 x86汇编语言实践(3) 、 x86汇编语言实践(4) 以及 x86汇编语言复习笔记 ),我通过几个具体案例对x86汇编语言进行实践操作,并记录了自己再编写汇编代码中遇到的困难和心得体会,与各位学习x86汇编的朋友共同分享。   我将我编写的一些汇编代码放到了github上,感兴趣的朋友可以点击屏幕左上角的小猫咪进入我的github,或请 点击这里 下载源代码。 1 十进制输入输出的乘法练习 1-1 练习要点 输入输出中断调用练习 宏练习 子程序编写与调用 1-2 实现思路 数据区使用byte类型存放两个十进制乘数NUM1和NUM2 输入采用宏GETNUM实现,从百位读到个位,调用乘法宏MULTI计算出NUM1和NUM2的值 调用乘法宏MULTI计算出结果,并保存到RESULT,以便debug调试 调用OUTPUT子程序进行输出,输出从RESULT中保存的结果 其他对于输入输出的控制对输出结果进行改进

我是一个流氓软件线程

ε祈祈猫儿з 提交于 2020-10-28 02:40:47
Hello, World! 我是一个流氓软件线程,我不像那些病毒和***,我只是通过人类的电脑赚一点小钱,并不会偷信息破坏电脑,但即便如此,那些安全软件还是不肯放过我。 我是第一次来到这片土地,这是一个实行Windows体制的国家。我的目标是篡改IE浏览器的主页,变成一个导航网站:hao235.com。只要IE访问它一次,回头我就能去hao235公司领到一分钱。只要我后面慢慢发展更多地盘,加起来也是一笔不少的费用了! 什么?你想问我hao235公司怎么知道是我而不是别人带来的流量?hao235公司给我分配了一个叫tn的标识码: 1345。我让IE访问hao235的时候带上这个号码,hao235公司就知道这是我的贡献了,就像这样: http://www.hao235.com/index.htm?tn=1345 这是干我们这行心照不宣的秘密。 我翻开《IE浏览器首页劫持手册》第一页:修改快捷方式。 我趁人不注意,悄悄的给explorer公司桌面部门管理的IE快捷方式加了一个参数: 这样一来,后面每次IE浏览器启动,就能自动打开hao235,为我赚一分钱了,开心 过了好几天,我还是没收到hao235让我领钱的通知。难道我的快捷方式被别人改了?我扫了一眼,没改啊,还是我的! 我想不通到底问题出在哪里,抓紧时间又望了一眼,这次我看清楚了,完整的写着: http://www.hao235

Control-Flow Integrity(控制流完整性) 的原理 ——本质上就是一个hash表记录持续返回地址 然后运行中对比 发现是否代码被恶意篡改

心不动则不痛 提交于 2020-10-19 18:42:20
展开 本文讨论的原理基于Control-Flow Integrity Principles, Implementations, and Applications这篇论文。 1 回顾为什么需要CFI 1.1 控制流劫持 攻击者能够通过控制流劫持来获取目标机器的控制权,甚至进行提权操作,对目标机器进行全面控制。 早期的攻击通常采用代码注入的方式,通过上载一段代码,将控制转向这段代码执行。 代码重用攻击使得硬件支持下的DEP保护机制仍能被绕过。 1.2 早期防范措施 堆栈金丝雀[Cowan et al. 1998],运行时消除缓冲区溢出[Ruwase and Lam 2004]等。 局限性:缓解范围有限,性能损失高,依赖于硬件修改等。 What we need:高可靠性,易于理解,强制执行,可部署性,低开销。 2 CFI概述 2.1 间接指令 CFI关注的是间接指令,所以在这里对汇编语言中不同寻址方式的指令进行补充说明。 在汇编语言中,根据寻址方式的不同可以分为两种跳转指令。一种是间接跳转指令,另一种是直接跳转指令。 直接跳转指令的示例如下所示: CALL 0x1060000F 1 在程序执行到这条语句时,就会将指令寄存器的值替换为0x1060000F。这种在指令中直接给出跳转地址的寻址方式就叫做直接转移。在高级语言中, 像if-else

汇编语言(王爽 第三版)检测点

社会主义新天地 提交于 2020-10-15 02:20:43
这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开《微机原理与汇编语言》这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东西,然后开始编程,我对编程语言的学习方面要求比较高,所以开始读这本王爽老师写的汇编语言,目前为止,这本书给我的感觉就是,你能学到很多底层的东西,尤其是像键盘的读写原理,屏幕的显示,特别是对内存的操作和管理,不像课本上给你一个中断让你就能显示字符之类的,它会一步一步教你怎么把要显示的东西写到显存里面,这本书显得比较浅显易懂,让人感觉不错,特别是读了这本书再去看那些难度较高的汇编代码及微机原理,效率会高很多,下面是我读这本书的过程中对书中检测点的解答,仅代表个人观点。 第一章 检测点1. 1 1 ) 13   (8kb = 8 * 1024 = 2 ^ 13)   2 ) 1024 0 1023 3 ) 8 * 1024 1024   ( 1 byte = 8 bit,计算机以byte为存储单位) 4 ) 1024 ^ 3 1024 ^ 2 1024 5 ) 2 ^ 6 1 2 ^ 4 2 ^ 2   (kb = 2 ^ 10 Mb = 2 ^ 20 Gb = 2 ^ 30) 6 ) 1 1 2 2 4 7 ) 512 256   (8086的寄存器为16位寄存器,一次可以读取两个字节