[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 14# 304802301


    将7楼代码第22行换成下面的 ,因为使用的是字符串 ,base64解码后涉及字符串编码问题 ,简单的判断了下编码
  1. $pw="";if($str -match '(?<=uniquecode=")[^"]*(?=")'){
  2. if($Matches[0]){$pw=$matches[0];$o=$pw.Length%4
  3. if($o){$pw=$pw+'===='.Substring(0,4-$o)}
  4. $pwdc=[text.encoding]::utf8.getstring([convert]::FromBase64String($pw))
  5. if($pwdc -match '\?'){
  6. write-host "密码的编码可能不是utf8 ,将使用默认编码" -ForegroundColor yellow
  7. $pwdc=[text.encoding]::default.getstring([convert]::FromBase64String($pw))}
  8. $pw='-p"'+$pwdc+'"'
  9. }}
复制代码

TOP

啊 ,代码没有排除bat本身 ,bat的名字最好取个唯一的名字 ,也就是说不要有跟bat对应的文件夹

TOP

  1. #ANSI编码&cls&powershell -Version 5.1 -NoLogo -NoProfile -Command "gc -Encoding Oem -ReadCount 0 -LiteralPath '%~f0'|out-string|iex"&pause&exit/b
  2. dir -Directory | %{
  3.     $n = (dir -File ($_.Name + '.*'))[0]
  4.     $f = gc -Encoding UTF8 -Raw $n
  5.     cd $_
  6.     if ($f -match 'UniqueCode="(.*?)"') {
  7.         $p = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Matches[1]))
  8.         & "D:\7za.exe" a ..\tmp.zip ('-p' + $p) * | Out-Null
  9.     } else {
  10.         & "D:\7za.exe" a ..\tmp.zip * | Out-Null
  11.     }
  12.     cd ..
  13.     $b = [System.Convert]::ToBase64String((gc .\tmp.zip -Encoding Byte -Raw))
  14.     $utf8NoBom = New-Object System.Text.UTF8Encoding($false)
  15.     [System.IO.File]::WriteAllText($n, ($f -replace 'Value=""', ('Value="{0}"' -f $b)), $utf8NoBom)
  16.     rm .\tmp.zip
  17. }
复制代码
楼上大佬写的更好,我抄了一点 ,密码改用了解码后的

TOP

回复 16# Five66


    改一下 ,加上了密码base64解码后包含英文双引号时的处理
将7楼代码第22行换成下面的 ,因为使用的是字符串 ,密码base64解码后可能涉及字符串编码问题 ,简单的判断了下编码
代码没有排除bat本身 ,bat的名字最好取个唯一的名字 ,也就是说最好不要有跟bat对应的文件夹 ,不然对应的文件夹也会压缩处理
  1. $pw="";if($str -match '(?<=uniquecode=")[^"]*(?=")'){
  2. if($Matches[0]){$pw=$matches[0];$o=$pw.Length%4
  3. if($o){$pw=$pw+'===='.Substring(0,4-$o)}
  4. $pwdc=[text.encoding]::utf8.getstring([convert]::FromBase64String($pw))
  5. if($pwdc -match '\?'){
  6. write-host "密码的编码可能不是utf8 ,将使用默认编码" -ForegroundColor yellow
  7. $pwdc=[text.encoding]::default.getstring([convert]::FromBase64String($pw))}
  8. $pwdc=[regex]::replace($pwdc,'\\+"|""+|"',[scriptblock]::create('"\"+($args[0].value.tochararray() -join "\")'))
  9. $pw='-p"'+$pwdc+'"'
  10. }}
复制代码

TOP

返回列表