Simple Shellcode Loader
type
status
date
slug
summary
tags
category
icon
password
前言
之前的东西,加了个功能又学到了新东西,练下代码;
这一篇都非常简单!!!这垃圾代码再改改,硬编码下字符串、隐藏下WinAPI等,肯定效果很更好点。
开冲
就是简单的三部曲
- 申请内存
- 写入内存
- 然后加载
还有很多类似的这种..
ExecBin
这个就比较简单了,
通过ReadFIle读取二进制文件,放入到一个变量中,最后把这个变量CopyMemory拷贝进一块内存中,最后加载执行。
ExecTxt
像那种原始的shellcode payload,直接整进内存再加载,极为方便所以一些AV看的就比较严了。
我就在想原来看人家通过txt加载(正常文本反正不会杀吧),所以有了这个函数。
这里和上面其实差不了太多,核心的功能其实就是 读取Hex字符串转换为Shellcode
想要弄明白就调试一下,我直接用的@idiotc4t师傅的demo来做测试了
首先看没有转换的
可以从内存窗口看出就是单纯的字符串,要是拷贝进内存中,拷贝进去的不是shellcode而是这些字符串!这是踩了个坑 基础太差
然后接着跟进
可以看出来就是根据字符串转为对应的16进制的数据然后重新写入shellcode里
然后我们再看第二组
调试出为72 对应的ASCII也就是H,然后拷贝进内存就是对应的48了(ASCII的H转换为十六进制也就是48)
所以这样一个个走下去,一组转换为int类型,然后int类型转换为对应的十六进制,最后就放到对应的shellcode[i]里
只是找到对应的了,假如shellcode字符串里的是48(hex)就转换为ascii 10进制的72,在字符串中显示的就是H,但是在内存中显示的就是48(hex)了;这样以此类推下去 每个取2位然后进行转换,我是这样理解的 有不对的请师傅们指出
这里放出来转换前和转换后的俩图,大家一看就明白了
注意看内存窗口 就是单纯的字符串,我们所需的shellcode也没有在内存中,你加载执行的只是这些字符串并不是所需的shellcode
我们在比对下转换后的
这样shellcode就正常在内存中了
这样一搞明白ExecTxt这个函数的原理就很简单了
就是把\x or 0x删除(这个功能我没写 我直接从就删除了然后到txt里),申请块内存,通过ReadFIle读取进来,然后把对应的字符串的16进制数据重新写入
xue_buf
里,最后CopyMemory拷贝进内存,CreateThread加载。测试
最后测下免杀性了
Windows Defender
我擦 可以
起初我还不大敢相信 又放在downloads下 测试了一遍确实可以,加载bin就不出意外的杀了