这里照常去做CS的免杀加载器的实现,因为用先有的c2框架是非常方便顺手,当然你自己开发的c2框架也行,肯定也有生成shellcode这个功能,也需要进行内存执行的需求。
整理复习汇编语言的知识点,以前在学习《Intel汇编语言程序设计 - 第五版》时没有很认真的整理笔记,主要因为当时是以学习理解为目的没有整理的很详细,这次是我第三次阅读此书,每一次阅读都会有新的收获,这次复习,我想把书中的重点,再一次做一个归纳与总结(注:16位汇编部分跳过),并且继续尝试写一些有趣的案例,这些案例中所涉及的指令都是逆向中的重点,一些不重要的我就直接省略了,一来提高自己,二来分享知识,转载请加出处,敲代码备注挺难受的。
本章主要是as86与gas两种汇编语言的简要介绍,C语言与汇编语言的相互嵌套,目标文件的结构与及makefile文件的简要语法。
LEA指令用来计算第二个操作数(源操作数)的有效地址,并且将该地址保存到第一个操作数(目的操作数)中。源操作数是CPU寻址模式中的内存寻址模式(支持偏移量)。而目标操作数是一个通用寄存器(GPR,general-purpose register)。这条指令被地址大小和操作数大小属性所影响,如上表所示。指令的操作数大小决定于使用的寄存器,而地址大小决定于代码段。
汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。
本节我们看看X86指令集以及X86的硬件体系架构。在汇编语言中最常见的指令就是mov,他将数据从一个地方转移到指定位置,该指令能将数据转移到特定位置的内存或是给定寄存器。mov指令的格式为(mov 目的,源头),源头指的是要被挪到的数据,目的是数据被挪动的目的地, 我们看几个具体例子: mov eax, ebx (把寄存器ebx中的数据拷贝到eax寄存器) mov eax, 0x42 (把数值0x42赋值给eax寄存器) mov eax, [0x4037c4](把地址为0x4037c4的4字节数据拷贝到eax寄存器] mov eax, [ebx] (先从寄存器ebx中获取数值,然后找到该数值对应的内存地址,接着再把地址所在处4字节数据赋值给寄存器eax) mov eax, [ebx + esi*4] (取出ebx中的数值,取出esi寄存器中的数值,将后者乘以4后加上前者,所得结果作为内存地址,并把给定地址的4字节数据拷贝到eax寄存器)
SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基址、服务函数个数等,SSDT 通过修改此表的函数地址可以对常用 Windows 函数进行内核级的Hook,从而实现对一些核心的系统动作进行过滤、监控的目的。
转自陈莉君一书《深入分析Linux内核源码》http://www.kerneltravel.ne运维
上一篇文章中,我们详细讲解了 32 位保护模式下的分页机制,最终,我们将 4GB 的内存区域划分为了连续的 1023 个分页,页表保存在 4MB 的空间中。 详解操作系统分页机制与实战 但是我们的内存大小到底是多少呢?如果内存总共只要 8MB,那上面的分页程序执行完,光是页表就占用了 4MB,空间已经所剩无几,可见,按需使用内存,合理规划页表的大小是非常重要的,而这一切的前提是必须要搞清楚内存总共有多少。 本文我们就来通过一个程序获取计算机的内存信息。
简易 ShellCode 虽然可以正常被执行,但是还存在很多的问题,因为上次所编写的 ShellCode 采用了硬编址的方式来调用相应API函数的,那么就会存在一个很大的缺陷,如果操作系统的版本不统一就会存在调用函数失败甚至是软件卡死的现象,下面我们通过编写一些定位程序,让 ShellCode 能够动态定位我们所需要的API函数地址,从而解决上节课中 ShellCode 的通用性问题。
include irvine32.inc; .data i dword 0; sum qword 0; str1 byte “请输入16进制的(32位整数)乘数和被乘数”,0 str2 byte “乘积为:”,0; j dword 0;
32位CPU中EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP能用作间接寻址
究极丧心病狂的题,只能使用元素周期表组合以及数字填充进行shellcode构造。顺带一提,题目名字二氧化锰的来由是写入shellcode的固定地址转ascii转译后的结果。
刚开始学逆向,先学了OD的使用,学了个大概之后就开始了实践,边学习边实践,破解一些crackme,因为是刚开始入门,所以有些算法还是不理解,无法逆向出算法,但是爆破,去nag是没问题的,这里有个crackme,试着破解并逆向它的算法。
汇编语言是所有程序设计语言中最古老的,它与计算机机器语言最为接近,通过汇编语言可以直接访问计算机的硬件,能够直接与CPU对话,可以说汇编语言是所有编程语言中语法格式最自由的,但自由的代价就是需要了解计算机体系结构和操作系统的大量细节,每编写一段程序都需要考虑各种硬件的状态,从而导致使用汇编写程序效率非常低.
文章标题】: UPX脱壳详细分析 【文章作者】: index09 【使用工具】: UPX + OD + Stud_PE + Import REC ——————————————————————————– 【详细过程】 又被R公司鄙视了,每次都被相同的理由鄙视。哭…… 于是决定好好学一下逆向了。 首先做个幼儿级的脱壳练习,当做开始吧。 网上有很多类似文章,基本只写了找OEP的过程,这里稍加分析,高手莫笑。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
linux的shellcode就不用说了,直接通过一个int 0x80系统调用,指定想调用的函数的系统调用号(syscall),传入调用函数的参数,即可,懂的都懂。
ShellCode 通常是指一个原始的可执行代码的有效载荷,ShellCode 这个名字来源于攻击者通常会使用这段代码来获得被攻陷系统上的交互 Shell 的访问权限,而现在通常用于描述一段自包含的独立的可执行代码片段。
最近几天上qq总是发现nod32 蹦出个什么发现“Win32/AutoRun.Agent.NZ 蠕虫”这么个东西的提示,刚开始还以为是浏览网页留下的也没在意,今天运行其他软件的时候也发现了这么个东东才知道情况不是自己想的那么简单了。找到被感染的程序和没有感染的做了下比较发现没什么大的差距,很明显不是捆绑了,那就是添加了新代码了,用Peid查看发现程序增加了一个区段
在这篇文章中,让我们看看如何使用 GOT 覆盖和解引用技巧。来绕过共享库地址随机化。我们在第一部分中提到过,即使可执行文件没有所需的 PLT 桩代码,攻击者也可以使用 GOT 覆盖和解引用技巧来绕过 ASLR。
算术运算指令集是计算机中的一组基本操作,用于对数字执行常见的算术运算操作。这些指令都是计算机中非常基础的运算指令,可以用于实现所有常见的算术运算操作,并可以通过组合使用实现更加复杂的数学运算。在实际编程中,程序员可以根据具体需求选择合适的运算指令,实现程序中的算术运算操作。
每种汇编语言都有进行操作数移位的指令,移位和循环移位指令在控制硬件设备,加密数据,以及实现高速图形运算时特别有用,移位指令也是汇编语言中最具特征的指令集,移位(Shifting)的含义是在操作数内向左或向右移动数据位,Intel处理器提供了多种移位指令,具体如下表所示:
本文 githbu代码:https://github.com/Ldpe2G/ThreadSwitch--Simulation
文件系统是所以操作系统的核心,系统的数据必须以文件的方式存储和组织。我们现在的系统没有硬盘,因此所有信息都存储在磁盘里,在内核加载时,引导扇区程序就会把磁盘上相关数据全都拷贝到内存里,于是所有文件内容在系统启动后,会从磁盘转存到内存中。 在前几节,我们已经建立了简易的文件系统,本节,我们为文件系统增加几个有利于文件读取操作的API.根据常用的文件API,我们提供的接口将支持以下几种操作: 1, 文件打开 api_fopen 2, 文件定位 api_fseek 3, 文件读取 api_fread 4, 文件
第二届ZCTF逆向题分析(一) From ChaMd5安全团队核心成员 Poyoten 比赛时由于第二天有事,第三题re没做,所以也就没有写WP。但是后来看了大佬们的WP,可能是题比较简单,所以写得也比较简略,我等菜鸟根本看不懂。于是乎就想尝试分析下这次比赛的逆向题,以希望对和我一样的小白能有所帮助。 (如果想要获得更好的观看效果,建议把本文分享出去,复制其链接在电脑上观看。) easy reverse 这题是一个dll文件,IDA载入,直接查看export,如下图,除了入口和两个tls,还有三个导出函数
在X86下,查看inter手册可以清楚的看到x86汇编的指令格式. 图标如下
前言: 本文主要是剖析NachOs的线程切换原理,并通过一个简化的例子(就是将线程部分代码抽取出来再加以修改) 来说明。本文 githbu代码:https://github.com/Ldpe2G/ThreadSwitch--Simulation 正文: Thread类的声明: #ifndef THREAD_H #define THREAD_H /* the offsets of the registers from the beginning of the thread object *
by hcl, nine8 of code audit labs of vulnhunt.com 1 概述 网上公开一个疑似CVE-2014-1761的RTF样本,翰海源分析发现该样本并非CVE-2014-1761,而是在一个RTF样本中同时包括了两个漏洞,分别为CVE-2012-0158和CVE-2013-3906,比较特殊。 昨日,macfee在其Blog上也公布了一篇一个RTF样本包含CVE-2010-3333和CVE-2013-3906两个漏洞的文章。两个样本比较相似。 2 样本分析 2.1 漏洞C
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)
本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令、逻辑计算指令、算数运算指令),以及函数的调用规则。个人认为:在理
从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。
ret2syscall,即控制程序执行系统调用,获取 shell。 可以理解为拼接成一个系统调用的栈。
r12 存储 kernel32 基址,通过 GetProcessAddress 将 LoadLibraryA 函数地址存储在 rax:
Private Sub Text2_Change() '4024F0 Dim var_1C As Variant loc_0040259D: If (Form1.Text2.Text = global_00401DC4) + 1 Then // 如果输入的内容为空 loc_004025AA: Set var_1C = Form1.Command1 // 按钮 loc_004025B7: var_1C.Enabled = False // 不启用 loc_004025BF: If var_1C >= 0 Then GoTo loc_004025F7 loc_004025C1: GoTo loc_004025E5 loc_004025C3: End If loc_004025CE: Set var_1C = Form1.Command1 loc_004025DB: var_1C.Enabled = True // 有输入的内容则启用按钮 loc_004025E3: If var_1C >= 0 Then GoTo loc_004025F7 loc_004025E5: ' Referenced from: 004025C1 loc_004025F1: var_1C = CheckObj(var_1C, global_00401DC8, 140) loc_0040260C: GoTo loc_00402621 loc_00402620: Exit Sub loc_00402621: ' Referenced from: 0040260C End Sub
或者: para = 0x04 movl $para, %ebx 指令执行的结果是将立即数04h装入寄存器ebx。
在上一篇博客 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 ) 中 , 使用 IDA 反编译 Android SDK 中的 D:\001_Develop\001_SDK\Sdk\build-tools\26.0.3\renderscript\lib\intermediates\x86\libc.so 文件 , 并查找其中的 fork 方法 ;
领取专属 10元无门槛券
手把手带您无忧上云