发表回复 
关于隐藏第三方程序文件
2013-07-18, 12 : 46 (这个帖子最后修改于: 2013-07-18 13 : 38 by binghez.)
关于隐藏第三方程序文件
最近碰见要隐藏第三方程序的问题,最好的办法是将程序读到内存,然后从内存中读取运行该程序。
搜索了下,官网论坛上有个BinRun()可以实现从内存中读程序运行,需要<_Struct>和<sizeof>,BinRun()原理是用CreateProcess创建suspended进程,然后将程序复制到该进程,最后再恢复线程运行。
目前我的解决方法是用FileInstall将程序暂时释放到硬盘,再用FileRead将程序读到变量中,再删除硬盘文件,最后用BinRun()运行该变量中的程序,​可以解决这个问题。
但程序始终要释放硬盘,虽说是临时的,总不是完美的解决办法,不知道各位高人们有更好的解决方法吗?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-18, 13 : 32
RE: 关于隐藏第三方程序
你所说的隐藏第三方程序,指的是隐藏文件还是隐藏进程?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-18, 13 : 38 (这个帖子最后修改于: 2013-07-18 13 : 39 by binghez.)
RE: 关于隐藏第三方程序
隐藏程序文件,我修改下主题标题

不过隐藏进程我也很感兴趣,挂在某个进程下面还是彻底都没进程?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-18, 13 : 40
RE: 关于隐藏第三方程序文件
代码: (全选)
if 0
fileinstall 程序

编译后 程序 储存在 exe的rcdata里,运行时也不会释放,直接loadresource exe里的rcdata,再lockresource,获得指针,copymemory到指定变量
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-18, 23 : 23
RE: 关于隐藏第三方程序文件
(2013-07-18 13 : 40)nepter 提到:  
代码: (全选)
if 0
fileinstall 程序

编译后 程序 储存在 exe的rcdata里,运行时也不会释放,直接loadresource exe里的rcdata,再lockresource,获得指针,copymemory到指定变量

十分感谢nepter,一语惊醒梦中人,准备写个HideRun()的函数来隐藏第三方程序的执行文件,努力中...

不过以前真的以为if 0, 都不会编译FileInstall命令,受教了
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-19, 06 : 26 (这个帖子最后修改于: 2013-07-19 06 : 45 by binghez.)
RE: 关于隐藏第三方程序文件
又仔细看了下BinRun(),发现已有从资源文件中加载资源的功能...
代码: (全选)
If pData
      If pData is not digit
      {    
        ; Try first reading the file from Resource
        If res := DllCall("FindResource","PTR",lib:=DllCall("GetModuleHandle","PTR",0,"PTR"),"Str",pData,"PTR",10,"PTR")
          VarSetCapacity(data,sz :=DllCall("SizeofResource","PTR",lib,"PTR",res))
          ,DllCall("RtlMoveMemory","PTR",&data,"PTR",DllCall("LockResource","PTR",hres:=DllCall("LoadResource","PTR",lib,"PTR",res,"PTR"),"PTR"),"PTR",sz)
          ,DllCall("FreeResource","PTR",hres)
          ,BinRun_Uncompress(data)
        else ; else try reading file from disc etc...
          FileRead,Data,*c %pData%
        pData:=&Data
      }
先从资源中加载资源,如果找不到再从硬盘读文件

If 0
FileInstall, FileName, DestName
BinRun("FileName")
就可以实现了,之前走弯路了,再次感谢楼上的提醒
另外FileInstall里面的资源应该是压缩和加密过,不知道提取资源后能不能直接运行,但BinRun()里面也可以BinRun_Uncompress()还原数​据
已测试这种方法可以运行。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-19, 23 : 17
RE: 关于隐藏第三方程序文件
通过资源句柄加载是解过密的。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-22, 21 : 03
RE: 关于隐藏第三方程序文件
被调用程序,跟硬盘上的程序反应一样么,例如窗口啊,参数什么的

原帐号linpinger停用,作品页地址
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-07-23, 12 : 12 (这个帖子最后修改于: 2013-07-23 12 : 30 by binghez.)
RE: 关于隐藏第三方程序文件
这种方法调用的和读取硬盘的程序是一样的,只是进程名称会变成当前进程名,当然你也可以隐藏窗口运行。

目前我没搞明白的一个问题是,如果一个第三方程序要需从它自己目录下读取配置文件或资源文件,而我自己的脚本目录是另外一个,如何设置使通过这种方法启动的第三方程序去读​取它自己目录下的文件,SetWorkingDir还是在调用createprocess时设置lpCurrentDirectory?正在研究中...
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-05-27, 09 : 11 (这个帖子最后修改于: 2017-05-27 09 : 45 by gdqb521.)
RE: 关于隐藏第三方程序文件
if 0语句简化前怎么写?这个条件应该是不成立吧。不成立的时候,后面
If 0
FileInstall, FileName, DestName
BinRun("FileName")
后两句一直不执行,if 0 的作用没看明白?
另外,BinRun()这个函数下载不到,没法测试。能否论坛中传一个?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-05-31, 17 : 47
RE: 关于隐藏第三方程序文件
@gdqb521 我没看上下文。
If 0中,0好像是指脚本运行时传入的参数的数目?而非恒假。
并且此If仅成立后会执行其下一行的语句,而非“后两句一直不执行”。
BinRun看来是英文官网的内容,我也没有,可以自行去搜索看看autohotkey.com。

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合