学习自:《Penetration Testing with Shellcode》 基本过程是首先使用汇编通过系统调用的方式实现程序功能,编译成可执行文件,然后使用 objdump 进行机器码提取 Hello...0 syscall 使用 objdump 提取 shellcode,这一长串的魔法般的正则我就不解释了我也不会 yichen@ubuntu:~$ objdump -M intel -D hello-world.../test shellcode length:2 t 因为 shellcode 中存在一些 \x00,我们称为:bad character,它会使字符串截断,就没有后面什么事情了,所以要想办法消除这些...写个shell 学会了这些基本的消除 bad character 的方法之后来写个真正的 shellcode 试试, 一个可以获得 shell 的 C 语言代码如下 char *const argv[]...rax 作为截断 push rdi mov rsi,rsp 以及系统调用号是 59,最后加一个 syscall add rax,59 syscall 把提取的 shellcode 放到之前的代码中编译~
1.使用C语言编写一个获得系统Shell的小程序。.../shell sh-4.2# ls 如果需要提取shellcode的话应该使用汇编来写提权代码,如下代码就是一段提权代码。.../shell [root@localhost root]# ls 发现能够获取到Root目录的权限,接着直接查询生成的机器码。...)); (*(void(*)()) shellcode)(); return 0; } 代码提权思路,下面这段代码配合 chmod u+s 权限的设置,可以提权,我们可以将这段代码的汇编格式提取出来...,然后将其注入到passwd等具有特权指令的目录下,然后就能完成权限的提升了。
基于输入检索的商品图片,可智能识别图片中的商品主体,在用户自建图片库中搜索相同或相似的商品图片,并给出相似度打分
的这个payload,本着一定要知道利用代码是怎么运行的想法,开始对该shellcode的详细分析。...实验环境 • 虚拟机:Kali Linux 2022.1 x64 • 物理机:Windows 10 21H2 家庭版 • 软件:x86dbg,scdbg,windbg,010 Editor 生成shellcode...使用Kali Linux生成shellcode: ┌──(selph㉿kali)-[~/桌面/shellcode] └─$ msfvenom -p windows/exec cmd=calc.exe...shellcode本身的地址,通过硬编码偏移获得shellcode末尾的字符串“calc.exe”,然后入栈3个参数call ebp(ebp的值是刚刚call进来的call指令的下一行) shellcode...,去依次调用接下来要调用的函数:GetVersion,ExitProcess 这里shellcode最后这个call ebp之后的内容,不是指令,是我们调用函数的字符串参数“calc.exe” 到这里shellcode
,这就是内存里的空间换时间 对齐的方式有很多,上面说的就是以一层楼(4字节,32位)为对齐方式 很明显,如果13层楼只占用了1个字节(8位),那么你的东西至少会放在14楼开始的地方,但是你的东西只有...shellcode,如果注释掉,如果换成下面我注释的那四行代表生成 64 位 exe。...加载 shellcode,可以自己写,也可以用这个项目里的 runshc64.exe 测试一下 https://github.com/hasherezade/pe_to_shellcode。...0x04 shellcode 退出 shellcode 执行完相应的功能,退出的方式有以下几种: 调用 kernel32!ExitProcess,适合直接终止整个程序 调用 kernel32!...之后的地方继续执行,会出现访问异常,这个调了一下,发现是 shellcode 执行过程把 rsi 寄存器改了,所以解决办法就是像 rbp 一样,先保存一下,最后恢复回去: push rsi
由于我们正在加密 shellcode,我们的二进制文件的熵相当高,这清楚地表明二进制文件中的代码部分被混淆了。...我们可以通过延迟执行我们的 shellcode 来滥用这个限制。简单地计算一个大素数是我个人的最爱。您可以更进一步,确定性地计算一个质数,并将该数字用作加密 shellcode 的(一部分)密钥。...简而言之,他的方法调整了典型 shellcode 加载器的以下行为: 与其分配一大块内存并直接将 ~250KB 植入 shellcode 写入该内存,不如分配小的连续块,例如 shellcode 写入分配的内存页面。 在上述每个操作之间引入延迟。这将增加执行 shellcode 所需的时间,但也会使连续执行模式变得不那么突出。...通过检查可疑进程中线程的返回地址,可以很容易地识别出我们的植入 shellcode。为了避免这种情况,想打破返回地址和shellcode之间的这种联系。Sleep()我们可以通过挂钩函数来做到这一点。
使用 LokiBot 的一个在野样本进行分析。...32 位 Shellcode 各种签名。...可以看到在两处匹配到了 GetIP: scDbg.exe 接着使用 Shellcode 模拟器 scDbg.exe 加载转存的二进制文件,并填入偏移位置以查看是否出现某种解码的 Shellcode:...深入查看转存的 oledump.unpack 文件的 402438 处,如下所示。...通过查看上面的十六进制,可以发现需要修改的位置在 0x77 处,可以用如下方式将其添加到 scDbg.exe 的起始点 这样我们就得到了很清晰的 ShellCode 内容。
ShellCode 如下 目录 strstr ShellCode实现 1.函数原型 2.ShellCode提取. 3.汇编代码如下 strstr ShellCode实现 1.函数原型 char* Mystrstr...const char* SrcStrPtr, const char* SubStrPtr) { int nCount; if (*SubStrPtr) //判断寻找的SubStr...{ while (*SrcStrPtr) //判断寻找的srcStr是否为空,不为空循环 { //内部循环判断.每次 str指针...nCount) == *(SubStrPtr + nCount); nCount++) { //如果substrptr + 1 没有.则返回找到的字符串...ShellCode 在内存中查看.可以看到其实自己已经重定位好了. 这是是方便直观贴出来的.
复制到可执行的内存页中 CopyMemory(shellcode,buf,shellcode_size); hThread = CreateThread( NULL, // 安全描述符...NULL, // 栈的大小 (LPTHREAD_START_ROUTINE)shellcode, // 函数 NULL, // 参数 NULL, // 线程标志...VirtualAlloc函数申请内存,然后使用CopyMemory将shellcode复制到目标内存中,CreateThread创建一个新的线程。...这里Shellcode 需要转换为字节集才可以在易语言上面运行 ? OK,成功运行,也就说明我们的思路是没有问题的。...加载器的思路没有问题,那么我们就可以对shellcode 进行加密免杀或者分离免杀。
这里先写个简单的静态加载到exe文件中,明天再来写个动态的 因为vs编译后自己会生成很多东西,我们稍微配置下 ? ?...看下偏移是400然后我们ue打开然后找到对应得偏移地址复制这个16进制就是我们需要的shellcode,然后把shellcode插入到进程中执行就可以了,这里我们可以静态得插入到未执行得exe文件中,或者动态的插入到正在执行得进程的内存中...这里是29行+4个,我用以前写的端口扫描做测试 先看看入口的文件偏移 ?...修改同样大小他shellcode替换了,所以只要运行这个exe就会运行我们的shellcode ? 然后我们保存运行 ?...说明我们的shellcode插入了这个exe中,执行他就执行了我们的shellcode 我们也可以把他shellcode生成为一个bin文件再写个加载器运行。
链接: ShellCode定位EIP 第一种类型方式1: [SECTION .text] BITS 32 global _start _start: fldz fnstenv
生成包含 base64 编码、AES 加密的 shellcode 的 .Net 二进制文件,该 shellcode 将在 Windows 目标上执行,绕过防病毒软件。...使用meterpreter_encryptor.py来创建加密的 base64 shellcode: root@kali:~# ....xojjB602MIUNeCPn4fqDp6NjEokELcgawbWNl1vKYo4QEYgtlhVmqIkk2ooz527AEQb5EWQhkaZEWr4AAmGO1YfvYDCTcfUwV9p/jkg 获取密钥和 shellcode...delegate Int32 ShellcodeDelegate(); static void Main(string[] args) { Shellcode...(); } static void Shellcode() { // attempt heuristics/behaviour
可以看到可读可写不可执行,修改保存就行了 因为shellcode在程序的全局区,没有可执行权限,代码所在内存必须可读可执行,但是重新编译不行,因为重新编译了就变了,所以还可以在当前程序申请一块可写可读可执行的代码区...0C6916Ch,他们之间是有强烈的依赖关系,所以我们如果直接把代码抽出来是无法利用的 ?...所以如果上面我们想要执行成功就要处理掉相关依赖,比如相关函数的地址,字符串地址 自己重定位了,shellcode:一段与地址无关的代码,只要把它放在任意32位程序中只要给他一个起点就能执行 所以我们要先开辟空间然后再写入...,这里shellcode为32位所以我们需要获取的也是32位的 //获取快照 HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS...: 定义控制台应用程序的入口点。
关于FUD-UUID-Shellcode FUD-UUID-Shellcode是一款功能强大的Shellcode注入工具,该工具基于C++语言开发,并使用了异或XOR加密技术UUID字符串混淆来尝试绕过...工作机制 Shellcode生成 首先,该工具会以二进制源码的形式生成一个Payload(使用CobaltStrike或msfvenom),以msfvenom举例,我们可以通过下列方式生成一个Payload...: msfvenom -p windows/messagebox -f raw -o shellcode.bin (向右滑动,查看更多) 然后工具会使用提供的Python 3脚本(bin_to_uuid.py.../bin_to_uuid.py -p shellcode.bin > uuid.txt 接下来,工具会使用另一个Python 3脚本(xor_encryptor.py)对uuid.txt中的UUID字符串进行异或...Shellcode注入执行 该工具实现的Shellcode注入技术由以下几个步骤序列组成: 1、使用VirtualAlloc给Payload的执行和持久化分配虚拟内存; 2、使用xor键值对Payload
(这个系列的都是基于python3的,包括后续会发的加载器、打包等) 先放一段最基础的Shellcode加载器 import ctypes,urllib.request,codecs,base64 data...转为bytes 这块就是将前面的shellcode,转为bytes类型,因为生成出来的payload为十六进制 然后在第八行中,通过bytearray来获取转为bytes类型后的shellcode...(len(shellcode)), #分配的大小 ctypes.c_int(0x3000), #分配的类型 ctypes.c_int(0x40)) #该内存的初始保护属性 这是上文的解释...对比一下加载器的代码 buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode) ctypes.windll.kernel32.RtlMoveMemory...buf, #指向要复制的内存地址的指针。 ctypes.c_int(len(shellcode)) #指定要复制的字节数。
前言 linux的shellcode就不用说了,直接通过一个int 0x80系统调用,指定想调用的函数的系统调用号(syscall),传入调用函数的参数,即可,懂的都懂。...编写shellcode 3.1 c++库文件配合内联汇编 先来针对指定系统的shellcode的编写,指定系统的,我们首先通过LoadLibraryA函数导入相应的dll文件,获得一个dll句柄,在把这个...,然后就天高任鸟飞了,实际的shellcode可能实际就封装成一个函数调用了 通过调试,需要去除push 0x0 这样的汇编会出现\x00这样的空字节,会截断字符串,所以用了一个push 寄存器来代替,...,代码逻辑很简单,就是要注意其中的堆栈平衡即可,从整个shellcode来看,前面找GetProcAddress和LoadLibraryA这两个函数是固定的,只要找到这两个,我们就能利用它们来查找任意的函数来执行...很麻烦,然后自己用c++写了个小程序,用nasm来把汇编代码编译成机器码,实际效果: 在_asm文件中放入我们写好的shellcode,当然你也可以指定其他文件名: ?
随着时间的流逝,防tic剂会发生变化,功能会不断变化,以最大限度地提高产品的效率。...一年前,我在我的博客上完整撰写了BattlEye的shellcode,这篇文章仅反映了对所说的shellcode所做的更改。...窗口标题 在先前的分析中,使用窗口名称标记了许多不同的作弊提供者,但是从那以后,shellcode不再检查那些窗口标题。...报告机制还发送有关该模块的一些基本信息,最有可能用于区分作弊行为与BattlEye服务器上的冲突。 7拉链 作弊场景的成员已将7-Zip广泛用作并且现在仍在使用中,它们是代码腔的内存中的占位符。...他们的解决办法?将检查移位8个字节,并继续使用相同的不良完整性检查方法。可执行部分是只读的,并且您要做的就是从磁盘加载7-Zip,并将重新定位的部分相互比较,如果有任何出入之处,那是错误的。
关于Shellcode-Encryptor Shellcode-Encryptor是一款功能强大的Shellcode加密、解密和执行工具,在该工具的帮助下,广大研究人员可以通过尝试利用Shellcode...从技术实现上来看,Shellcode-Encryptor使用了PowerShell来将源代码注入至内存中,这也是一种最有效的方法,并以此来实现绕过。...Shellcode-Encryptor能够生成一个经过Base64编码和AES加密的Shellcode,研究人员可以通过在目标Windows主机上运行这个Shellcode来实现反病毒产品的绕过。...项目下的meterpreter_encryptor.py主要负责创建经过Base64编码和AES加密的Shellcode: root@kali:~# ....antiscan.me的扫描结果: 项目地址 https://github.com/plackyhacker/Shellcode-Encryptor 参考资料 https://github.com/plackyhacker
0x00:原理 大部分脚本语言加载 shellcode 其实都是通过 c 的 ffi 去调用操作系统的api,其实并没有太多的技巧在里面,明白了原理,只需要查一下对应的脚本语言怎么调用 c 即可...那么我们只需要明白 c 通常是怎么加载 shellcode 的即可一通百通. 那么 c 是怎么加载 shellcode 呢,我们直接从汇编开始探究....shellcode 这个东西我们明白是一串可执行的二进制(一般可执行文件的拥有可执行权限的section为.text),那么我们先通过其他的手段开辟一片拥有可读可写可执行权限的区域放入我们的 shellcode...,然后跳转到 shellcode 首地址去执行就行了,汇编里面改变eip(即当前指令的下一条即将运行指令的虚拟地址)的方法有不少,最简单的就是直接 jmp 过去了.也就是写成伪码 大概意思就是 lea...这里也写一段伪码(因为本文的重点并不是在于 c 代码的编写) 那么按照刚才的思路,先申请一块可执行的内存,放入 shellcode 然后跳转过去执行即可. // shellcode unsigned char
基本介绍 DarkPulse是一个用go编写的shellcode Packer,可用于生成各种各样的shellcode loader,目前可过火绒,360,360核晶。...的路径 -enc : Shellcode加密方式 (默认: aes) -lang : 选择加载器的语言 (默认为 'c',可选值: c,rust)...-o : 输出文件 (默认: Program) -k : 加密的密钥长度 (默认: 16) -obf : 混淆Shellcode...version 1.2 2024.05 [+] 开始为您打包exe [+] 正在使用 sgn 工具进行编码 [+] 进行sgn编码后的shellcode..., 0x5a, 0x44, 0x44, 0x43, 0x4d, 0x6d, 0x6e, 0x58, 0x 63 [+] Using AES-128-CBC encryption [+] 进行加密后的shellcode
shellcode生成和测试 step1 测试shellcode的代码 step2 shellcode-32.asm源码 step3 使用汇编器nasm把shellcode编译成.o文件 step4...而ELF程序还包含有其它额外的信息,如段的加载地址,运行地址,重定位表,符号表。...Linux内核启动的时候往往是没有ELF Loader的,所以,只能采用raw binary格式。...step6 用python来给shell测试程序发送shellcode step7 测试 整体思路: 1、写好shellcode 2、用一个程序进行测试(提前编译好一份64的和32的) 3、启动我们的脚本来执行...,提取编译好的c程序的有用代码code段 4、python读code段执行shell 希望大家有所收获!!!
洞察 腾讯核心技术
剖析业界实践案例