开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4217|回复: 16
收起左侧

[易语言纯源码] 获取及修改其他进程启动命令行

[复制链接]
结帖率:100% (3/3)
发表于 2021-4-22 17:49:36 | 显示全部楼层 |阅读模式   河北省保定市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 11665583 于 2021-4-23 17:17 编辑

通过系统提供的命令 GetCommandLineA GetCommandLineW 获取到内存里命令行保存的地址,进而来读取或修改其他进程的命令地址.
因为进程内是保存了ansi 跟unicode两种字符串,所以对应的也就提供了2个查询及修改的命令.
缺了个常量,现在补上了.. 其实常量名子都没改,直接百度可以搜到的.

  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
_按钮1_被单击  
SetProcessCommandLine_A (7788, 到字节集 (“kslkjljljkjsdf”))
SetProcessCommandLine_W (7788, 编码_Ansi到Unicode (“ABCDDEFDSFSF”))
调试输出 (GetProcessCommandLine_A (7788))
调试输出 (GetProcessCommandLine_W (7788))
子程序名返回值类型公开备 注
GetProcessCommandLine_A文本型 
参数名类 型参考可空数组备 注
pid整数型
变量名类 型静态数组备 注
lProcess整数型 
mod整数型 
lpAddr整数型 
disAddr整数型 
tmp字节集 
dwPos整数型 
bRet整数型 
pCmdLine字节集 
dwPos = 1
pCmdLine = 取空白字节集 ( #MAX_PATH )
lProcess = OpenProcess ( #PROCESS_VM_READ, 0, pid)
如果真 (lProcess ≤ 0)
' 进程打开失败
返回 (“”)
' 获取mod
mod = GetModuleHandle (“kernel32”)
lpAddr = GetProcAddress (mod, “GetCommandLineA”)
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 235 tmp [dwPos + 1] = 5)
dwPos = dwPos + 7
如果真 (tmp [dwPos] = 255 tmp [dwPos + 1] = 37)
dwPos = dwPos + 2
lpAddr = 指针到整数 (lpAddr + dwPos - 1)
lpAddr = 指针到整数 (lpAddr)
dwPos = 1
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 161)
lpAddr = 指针到整数 (lpAddr + dwPos)
bRet = ReadProcessMemory (lProcess, lpAddr, disAddr, 4, 0)
如果真 (bRet > 0)
bRet = ReadProcessMemory_字节集 (lProcess, disAddr, pCmdLine, #MAX_PATH, 0)




CloseHandle (lProcess)
返回 (到文本 (pCmdLine))
子程序名返回值类型公开备 注
SetProcessCommandLine_A  
参数名类 型参考可空数组备 注
pid整数型
strCmdLine字节集
变量名类 型静态数组备 注
lProcess整数型 
mod整数型 
lpAddr整数型 
disAddr整数型 
tmp字节集 
dwPos整数型 
bRet整数型 
OldProtect整数型 
strCmdLine = strCmdLine + { 0, 0 }
dwPos = 1
lProcess = OpenProcess ( #PROCESS_ALL_ACCESS, 0, pid)
如果真 (lProcess ≤ 0)
' 进程打开失败
返回 ()
' 获取mod
mod = GetModuleHandle (“kernel32”)
lpAddr = GetProcAddress (mod, “GetCommandLineA”)
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 235 tmp [dwPos + 1] = 5)
dwPos = dwPos + 7
如果真 (tmp [dwPos] = 255 tmp [dwPos + 1] = 37)
dwPos = dwPos + 2
lpAddr = 指针到整数 (lpAddr + dwPos - 1)
lpAddr = 指针到整数 (lpAddr)
dwPos = 1
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 161)
lpAddr = 指针到整数 (lpAddr + dwPos)
bRet = ReadProcessMemory (lProcess, lpAddr, disAddr, 4, 0)
如果真 (bRet > 0)
bRet = API_VirtualProtectEx (lProcess, disAddr, 1024, #PAGE_EXECUTE_READWRITE, OldProtect)
调试输出 (取字节集长度 (strCmdLine))
WriteProcessMemory (lProcess, disAddr, 字节集_取指针 (strCmdLine), 取字节集长度 (strCmdLine), 0)
VirtualProtectEx (lProcess, disAddr, 4096, OldProtect, OldProtect)




CloseHandle (lProcess)
子程序名返回值类型公开备 注
GetProcessCommandLine_W文本型 
参数名类 型参考可空数组备 注
pid整数型
变量名类 型静态数组备 注
lProcess整数型 
mod整数型 
lpAddr整数型 
disAddr整数型 
tmp字节集 
dwPos整数型 
bRet整数型 
pCmdLine字节集 
c文本型 
dwPos = 1
pCmdLine = 取空白字节集 ( #MAX_PATH )
lProcess = OpenProcess ( #PROCESS_VM_READ, 0, pid)
如果真 (lProcess ≤ 0)
' 进程打开失败
返回 (“”)
' 获取mod
mod = GetModuleHandle (“kernel32”)
lpAddr = GetProcAddress (mod, “GetCommandLineW”)
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 235 tmp [dwPos + 1] = 5)
dwPos = dwPos + 7
如果真 (tmp [dwPos] = 255 tmp [dwPos + 1] = 37)
dwPos = dwPos + 2
lpAddr = 指针到整数 (lpAddr + dwPos - 1)
lpAddr = 指针到整数 (lpAddr)
dwPos = 1
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 161)
lpAddr = 指针到整数 (lpAddr + dwPos)
bRet = ReadProcessMemory (lProcess, lpAddr, disAddr, 4, 0)
如果真 (bRet > 0)
bRet = ReadProcessMemory_字节集 (lProcess, disAddr, pCmdLine, #MAX_PATH, 0)




CloseHandle (lProcess)
返回 (编码_Unicode到Ansi (pCmdLine))
子程序名返回值类型公开备 注
SetProcessCommandLine_W  
参数名类 型参考可空数组备 注
pid整数型
strCmdLine字节集
变量名类 型静态数组备 注
lProcess整数型 
mod整数型 
lpAddr整数型 
disAddr整数型 
tmp字节集 
dwPos整数型 
bRet整数型 
OldProtect整数型 
strCmdLine = strCmdLine + { 0, 0 }
dwPos = 1
lProcess = OpenProcess ( #PROCESS_ALL_ACCESS, 0, pid)
如果真 (lProcess ≤ 0)
' 进程打开失败
返回 ()
' 获取mod
mod = GetModuleHandle (“kernel32”)
lpAddr = GetProcAddress (mod, “GetCommandLineW”)
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 235 tmp [dwPos + 1] = 5)
dwPos = dwPos + 7
如果真 (tmp [dwPos] = 255 tmp [dwPos + 1] = 37)
dwPos = dwPos + 2
lpAddr = 指针到整数 (lpAddr + dwPos - 1)
lpAddr = 指针到整数 (lpAddr)
dwPos = 1
tmp = 指针到字节集 (lpAddr, 30)
如果真 (tmp [dwPos] = 161)
lpAddr = 指针到整数 (lpAddr + dwPos)
bRet = ReadProcessMemory (lProcess, lpAddr, disAddr, 4, 0)
如果真 (bRet > 0)
bRet = API_VirtualProtectEx (lProcess, disAddr, 1024, #PAGE_EXECUTE_READWRITE, OldProtect)
调试输出 (取字节集长度 (strCmdLine))
WriteProcessMemory (lProcess, disAddr, 字节集_取指针 (strCmdLine), 取字节集长度 (strCmdLine), 0)
VirtualProtectEx (lProcess, disAddr, 4096, OldProtect, OldProtect)




CloseHandle (lProcess)


i支持库列表   支持库注释   
spec特殊功能支持库
  
DLL命令名返回值类型公开备 注
OpenProcess整数型 将句柄返回给过程对象
DLL库文件名:
kernel32
在DLL库中对应命令名:
OpenProcess
参数名类 型传址数组备 注
dwDesiredAccess整数型
bInheritHandle整数型
dwProcessId整数型
DLL命令名返回值类型公开备 注
GetModuleHandle整数型 获取一个应用程序或动态链接库的模块句柄  如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError
DLL库文件名:
kernel32
在DLL库中对应命令名:
GetModuleHandleA
参数名类 型传址数组备 注
lpModuleName文本型指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD;
DLL命令名返回值类型公开备 注
GetProcAddress整数型 返回函数地址
DLL库文件名:
kernel32
在DLL库中对应命令名:
GetProcAddress
参数名类 型传址数组备 注
hModule整数型
lpProcName文本型
DLL命令名返回值类型公开备 注
CloseHandle整数型 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的  非零表示成功,零表示失败。会设置GetLastError
DLL库文件名:
kernel32
在DLL库中对应命令名:
CloseHandle
参数名类 型传址数组备 注
hObject整数型欲关闭的一个对象的句柄;
DLL命令名返回值类型公开备 注
ReadProcessMemory整数型 在进程中读内存
DLL库文件名:
kernel32
在DLL库中对应命令名:
ReadProcessMemory
参数名类 型传址数组备 注
hProcess整数型
lpBaseAddress整数型
lpBuffer整数型
nSize整数型
lpNumberOfBytesWritten整数型
DLL命令名返回值类型公开备 注
API_VirtualProtectEx整数型 修改虚拟保护
DLL库文件名:
kernel32
在DLL库中对应命令名:
VirtualProtectEx
参数名类 型传址数组备 注
hProcess整数型
lpAddress整数型
dwSize整数型
flNewProtect整数型
lpflOldProtect整数型
DLL命令名返回值类型公开备 注
ReadProcessMemory_字节集整数型 在进程中读内存
DLL库文件名:
kernel32
在DLL库中对应命令名:
ReadProcessMemory
参数名类 型传址数组备 注
hProcess整数型
lpBaseAddress整数型
lpBuffer字节集
nSize整数型
lpNumberOfBytesWritten整数型
DLL命令名返回值类型公开备 注
WriteProcessMemory整数型 在指定进程中写内存
DLL库文件名:
kernel32
在DLL库中对应命令名:
WriteProcessMemory
参数名类 型传址数组备 注
hProcess整数型
lpBaseAddress整数型
lpBuffer整数型
nSize整数型
lpNumberOfBytesWritten整数型

  
常量名称常量值公 开备 注
PROCESS_VM_READ16 
MAX_PATH260 
PROCESS_ALL_ACCESS2035711".常量 PAGE_EXECUTE_REA 


评分

参与人数 5好评 +1 精币 +6 收起 理由
ghost12 + 1 支持开源~!感谢分享
信易达 -1 -1 不如精易模块的 进程_取命令行好用,楼下反应不能用
bianyuan456 + 1 + 2 谢谢,但是win10最新版64位返回空!
kyo9766 + 2 感谢分享,很给力!~
亿意亦易 + 1 + 2 大哥直接上源码啊,找不到常量

查看全部评分


结帖率:60% (15/25)

签到天数: 18 天

发表于 2023-11-18 10:28:16 高大上手机用户 | 显示全部楼层   江苏省苏州市
谢谢分享,精易模块有吗
回复 支持 反对

使用道具 举报

发表于 2023-10-31 16:58:56 | 显示全部楼层   辽宁省鞍山市
v
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

发表于 2022-12-26 10:13:33 | 显示全部楼层   河南省郑州市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 2 天

发表于 2022-2-21 02:00:55 | 显示全部楼层   上海市上海市
很好很强悍,坚持下去哦~
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
 楼主| 发表于 2021-5-2 00:58:04 | 显示全部楼层   河北省保定市
dzscuz 发表于 2021-4-29 21:18
Win10的64位系统测试不通过

W10自己OD看下dll里命令的字节码.修改下就行了. 这里值有win7下的字节码.
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 19 天

发表于 2021-4-29 21:18:09 | 显示全部楼层   广东省茂名市
Win10的64位系统测试不通过
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)

签到天数: 2 天

发表于 2021-4-29 13:46:13 | 显示全部楼层   山东省潍坊市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2021-4-25 01:01:57 | 显示全部楼层   广东省潮州市
大神,请收下我的膝盖  
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
 楼主| 发表于 2021-4-23 17:19:02 | 显示全部楼层   河北省保定市
wuqingg 发表于 2021-4-23 08:38
是取进程接收的命令行吗?

是的,这个是用来读取跟修改其他进程的命令行.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表