• 欢迎访问奇跡の海网站,本站不上传任何资源,所有资源均来自于网络,欢迎加入奇跡の海~!奇跡の海-WordPress QQ群
  • 本站下载资源为网络上收集整理而来,并且以计算机技术研究交流为目的,版权归原作者所有,仅供大家参考,学习,不存在任何商业目的与商业用途.
  • 本站系统镜像均来自于官方原版,ed2k可视为P2P下载链接。所有操作系统默认均为试用版,如有正版密钥可以有效激活,本站不提供任何激活和相关服务。

AutoIt3(au3)源码-文件夹加密程序

AutoIT3 奇跡の海 2年前 (2017-11-08) 960次浏览 已收录 0个评论 扫描二维码

代码简介

AutoIt3(au3)源码-文件夹加密程序
基于winrar的,其实就是把文件通过winrar压缩放了起来,用的时候再通过密码解压缩

AU3源码

#Region ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
#AccAu3Wrapper_OutFile=文件夹加密_32.exe
#AccAu3Wrapper_UseX64=n
#AccAu3Wrapper_Res_Language=2052
#AccAu3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#EndRegion ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
#include <WinAPI.au3>
#include <WinAPIProc.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
Global $x;
Global $y;
Global $pid
Global $pwd
Global $pwdConfirm="123456"
Global $rarDir
Global $dir="E:\测试文件夹"
Global $dirverDir="E:\"
Global $fileName="测试文件夹"
Opt("TrayIconHide",1)
_getScreenSize($x,$y)
While 1
        $flag=_checkRar()
        If Not $flag Then
                MsgBox(0,"消息","找不到Winrar!");非常简单,基于winrar的,其实就是把文件通过winrar压缩放了起来,用的时候再通过密码解压缩- -
                Exit                                                        ;标准的方法应该是用ICopyHook,通过callback函数禁止文件夹操作,并用FindFirstChangeNotification和FindNextChangeNotification监视文件夹的目录操作,这个还在研究中
        EndIf
        If _checkAllFile() Then
                Sleep(60000)                        
        Else
        _checkOpen()
                If DirGetSize($dir)>0 Then
                        _efs()
                EndIf
        $pid=WinWait($fileName,"")
        $handle = WinGetHandle("Program Manager")
        WinSetState($pid,"",@SW_HIDE)
        WinMinimizeAll()
        Do
                $pwd=InputBox("访问加密的文件夹","请输入密码","","*",250,190,($x-250)/2,($y-190)/2,0,$handle)
        Until $pwd==$pwdConfirm
        _releaseefs()
        WinSetState($pid,"",@SW_SHOW )
        Sleep(60000)
        EndIf
WEnd

Func _getScreenSize(ByRef $px, ByRef $py);得到屏幕大小
        $s=_WinAPI_GetDesktopWindow()
        $px=_WinAPI_GetClientWidth($s)
        $py=_WinAPI_GetClientHeight($s)
EndFunc

Func _checkRar();检查是否有winrar
        If FileExists("C:\Program Files\WinRAR\Rar.exe") Then
                $rarDir="C:\Program Files\WinRAR\Rar.exe"
                Return 1
        ElseIf FileExists("C:\Program Files (x86)\WinRAR\Rar.exe") Then
                $rarDir="C:\Program Files (x86)\WinRAR\Rar.exe"
                Return 1
        Else
                Return 0
        EndIf
        
EndFunc

Func _checkOpen();检查文件夹是否打开了
        $p=WinGetHandle($fileName,"")
        If $p>0 Then
                WinClose($p)
        EndIf
EndFunc

Func _checkAllFile();检查文件夹目录下的所有文件是否有被打开的
Local $pid = ProcessList()
For $i = 1 To $pid[0][0]
        $cwin = _WinAPI_EnumProcessWindows($pid[$i][1])
                If @error==0 Then
                        For $j = 1 To $cwin[0][0]
                                Local $name= _WinAPI_GetWindowText($cwin[$j][0])
                                Local $exeName=StringLeft($name,StringInStr($name,"-")-2)
                                Local $lastName
                                If StringLen($exeName)<5 Then
                                        $lastName=StringRight($exeName,4)        ;剔除名称开头的无效字符
                                ElseIf StringLen($exeName)<8 Then
                                        $lastName=StringRight($exeName,5)
                                ElseIf StringLen($exeName)<10 Then
                                        $lastName=StringRight($exeName,8)
                                ElseIf StringLen($exeName)<13 Then
                                        $lastName=StringRight($exeName,9)
                                Else
                                        $lastName=StringRight($exeName,10)
                                EndIf
                                Local $flag=_iterator($dir,$exeName)
                                If $flag Then
                                        Return 1
                                EndIf
                        Next
                EndIf
Next
Return 0
EndFunc

Func _iterator($inDir,$file);递归文件目录中的文件,与进程中的文件名进行比对
$fileArray=_FileListToArray($inDir)
If @error==0 Then
For $i=1 To $fileArray[0]
        If StringInStr($fileArray[$i],".")>0 Then
                If StringInStr($fileArray[$i],$file)>0 Then
                        Return 1
                EndIf
        Else
                _iterator($inDir & "\" & $fileArray[$i],$file)
        EndIf
Next
Else
        
        ConsoleWrite($inDir & @LF)
EndIf
Return 0
EndFunc

Func _efs();压缩文件夹
        If Not FileExists(@WindowsDir & '\myEFS') Then
        DirCreate(@WindowsDir & '\myEFS')
EndIf
If Not FileExists(@WindowsDir & '\myEFS\prepared.rar') Then
                RunWait($rarDir & ' a -k -r -s -m1 -o+ -df -p'& $pwdConfirm & ' ' & @WindowsDir & '\myEFS\prepared.rar ' & $dir, "", @SW_HIDE)
                FileCopy(@WindowsDir & '\myEFS\prepared.rar',@WindowsDir & '\myEFS\efs.rar')
                ;FileCopy(@WindowsDir & '\myEFS\prepared.rar','D:\efs.rar')
        Else
                FileDelete(@WindowsDir & '\myEFS\efs.rar')
                RunWait($rarDir & ' a -k -r -s -m1 -o+ -df -p'& $pwdConfirm & ' ' & @WindowsDir & '\myEFS\efs.rar ' & $dir, "", @SW_HIDE)
        EndIf
DirCreate($dir)
EndFunc

Func _releaseefs();解压文件
        RunWait($rarDir & ' x -k -r -s -m1 -o+ -p'& $pwdConfirm & ' ' & @WindowsDir & '\myEFS\efs.rar ' & $dirverDir, "", @SW_HIDE)
EndFunc

版权声明:本站所有文章和资源使用CC BY-NC-SA 4.0协议授权发布 , 转载应当以相同方式注明文章来自“SeaOMC.COM->AutoIt3(au3)源码-文件夹加密程序!在下边可以分享本文哦!
喜欢 (0)
[]
分享 (0)
奇跡の海
关于作者:
一个WordPress菜鸟!
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址