web-dev-qa-db-ja.com

「開発者モード拡張機能を無効にする」ポップアップを取り除く方法

最近、Googleはこの迷惑なポップアップをdevチャンネルに追加しました。

誰かがここで答えて( Chromeで開発者モード拡張ポップアップを無効にする )chrome.dllを編集してポップアップを削除します。

ただし、そこに記載されている方法はもう機能しないようです。

さらに、Googleが新しい更新をプッシュした場合にchrome.dllにパッチを適用するバッチスクリプトがあると便利です。

編集:wOxxOmが便利なスクリプトのメンテナンスを停止したため、新しいハッキングを受け入れます(手動の方法も古いようです)

43
Emerson

Dev/canaryビルドを使用できない場合、ポップアップを削除する最も簡単な方法は、拡張機能をパッケージ化してから、グループポリシーを使用してそれをホワイトリストに登録することです。以下に概要を示します。 https://stackoverflow.com/a/38011386/991321

1
Emerson

このパッチは、新しいChrome=ビルドでは機能しないため、以下のスニペットにアーカイブされます。

Chrome Canaryを使用してください。これは警告を表示しません。

または、 [〜#〜] hiew [〜#〜] を使用して手動でパッチを適用できます。

  1. exit Chromeを押して完全に CtrlShiftQ WindowsタスクマネージャーのProcessesタブ(既定のタブではなく、2番目のタブ)でchrome.exeプロセスを終了します。
  2. hiewでchrome.dllを開きます
  3. 押す Enter ビューを切り替えるには
  4. 押す F7、最初の入力フィールドにExtensionDeveloperModeWarningを貼り付け、を押します Enter
  5. 押す F3 編集モードに入る
  6. タイプ00
  7. 押す F9 保存する
  8. 押す Left 00にカーソルを置く
  9. 押す F6 参照を見つける

    enter image description here

  10. 画面および上下の隣接する数ページでcmp eax,3またはcmp eax,2を探します

    enter image description here

  11. を使用してカーソルをナビゲートする Up そして Down その行のバイナリコード(左側の列)
  12. 押す F3 編集モードに入る
  13. を使用してカーソルをナビゲートする Left そして Right その行のコードの03または02
  14. タイプ09
  15. 押す F9 保存する
  16. Hiewを閉じると、Chromeは起動しません。
<# :
@echo off
copy/b "%~f0" "%temp%\%~n0.ps1" >nul
powershell -v 2 -ep bypass -noprofile "%temp%\%~n0.ps1" "'%cd% '" "'%~1'"
del "%temp%\%~n0.ps1"
echo: & pause
exit /b
#>
param([string]$cwd='.', [string]$dll)

function main {
  write-Host -f white -b black `
    "Chrome 'developer mode extensions' warning disabler 2017.12.08"
  $pathsDone = @{}
  if ($dll -and (gi -literal $dll)) {
    doPatch "DRAG'n'DROPPED" ((gi -literal $dll).directoryName + '\')
    exit
  }
  doPatch 'CURRENT DIRECTORY' ((gi -literal $cwd).fullName + '\')
  ('HKLM', 'HKCU') | %{ $Hive = $_
    ('', '\Wow6432Node') | %{
      $key = "${Hive}:\SOFTWARE$_\Google\Update\Clients"
      gci -ea silentlycontinue $key -r | gp | ?{ $_.CommandLine } | %{
        $path = $_.CommandLine -replace '"(.+?\\\d+\.\d+\.\d+\.\d+\\).+', '$1'
        if (!$pathsDone[$path.toLower()]) {
          doPatch REGISTRY $path
          $pathsDone[$path.toLower()] = $true
        }
      }
    }
  }
}

function doPatch([string]$pathLabel, [string]$path) {
  $dll = Join-Path $path chrome.dll
  if (!(Test-Path -literal $dll)) {
    return
  }
  ''
  $localAppData = [Environment]::GetFolderPath('LocalApplicationData')
  "$pathLabel $((split-path $dll).Replace($localAppData, '%LocalAppData%'))"

  "`tREADING Chrome.dll..."
  $bin = [IO.BinaryReader][IO.File]::OpenRead($dll)
  $bytes = $bin.ReadBytes(1MB)

  # process PE headers
  $BC = [BitConverter]
  $coff = $BC::ToUInt32($bytes,0x3C) + 4
  $is64 = $BC::ToUInt16($bytes,$coff) -eq 0x8664
  $opthdr = $coff+20
  $codesize = $BC::ToUInt32($bytes,$opthdr+4)
  $imagebase32 = $BC::ToUInt32($bytes,$opthdr+28)

  # patch the flag in data section
  $bin.BaseStream.Position = $codesize
  $data = $BC::ToString($bin.ReadBytes($bin.BaseStream.Length - $codesize))
  $bin.Close()
  $flag = 'ExtensionDeveloperModeWarning'
  $stroffs = $data.IndexOf($BC::ToString($flag[1..99]))
  if ($stroffs -lt 0) {
    write-Host -f red "`t$flag not found"
    return
  }
  if ($data.substring($stroffs-3, 2) -eq '00') {
    write-Host -f darkgreen "`tALREADY PATCHED"
    return
  }
  $stroffs = $stroffs/3 - 1 + $codesize

  $centbrowser = $data.indexOf($BC::ToString('CentBrowser'[0..99])) -gt 0

  $EA = $ErrorActionPreference
  $ErrorActionPreference = 'silentlyContinue'
  $exe = join-path (split-path $path) chrome.exe
  while ((get-process chrome -module | ?{ $_.FileName -eq $exe })) {
    forEach ($timeout in 15..0) {
      write-Host -n -b yellow -f black `
        "`rChrome is running and will be terminated in $timeout sec. "
      write-Host -n -b yellow -f darkyellow "Press ENTER to do it now. "
      if ([console]::KeyAvailable) {
        $key = $Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyDown,NoEcho")
        if ($key.virtualKeyCode -eq 13) { break }
        if ($key.virtualKeyCode -eq 27) { write-Host; exit }
      }
      sleep 1
    }
    write-Host
    get-process chrome | ?{
      $_.MainWindowHandle.toInt64() -and ($_ | gps -file).FileName -eq $exe
    } | %{
      "`tTrying to exit gracefully..."
      if ($_.CloseMainWindow()) {
        sleep 1
      }
    }
    $killLabelShown = 0
    get-process chrome | ?{
      ($_ | gps -file | select -expand FileName) -eq $exe
    } | %{
      if (!$killLabelShown++) {
        "`tTerminating background chrome processes..."
      }
      stop-process $_ -force
    }
    sleep -milliseconds 200
  }
  $ErrorActionPreference = $EA

  $bytes = [IO.File]::ReadAllBytes($dll)
  $bytes[$stroffs] = 0
  "`tPATCHED $flag flag"

  # patch the channel restriction code for stable/beta
  $rxChannel = '(?!<41-)83-F8-(?:03-7D|02-7F|02-0F-8F)'
  # old code: cmp eax,3; jge ...
  # new code: cmp eax,2; jg ... (jg can be 2-byte)
  function patch64 {
    $patterns = @(
      "(?<ch>$rxChannel)-.{1,100}-(?<flag>48-8D-)"
      # 48-8D-15-F3-78-87-00 first flag ref
      # 48-8D-15-A4-78-87-00 second flag ref
      "(?<flag>4[8C]-8D-).{9}(.{6}).{100,600}4[8C]-8D-.{9}\1.{600,2000}(?<ch>$rxChannel)"
      "84-C0.{18,48}(?<ch>$rxChannel)-.{30,60}84-C0"
    )
    forEach ($pattern in $patterns) {
      $pos = 0
      $rx = [regex]$pattern
      $patternDisplay = $pattern -replace '^(.{40}).+', '$1'
      write-Host -n -f darkgray "`tLooking for $patternDisplay"
      do {
        $m = $rx.match($code, $pos)
        write-Host -n -f darkgray .
        if (!$m.success) { break }
        $chanpos = $searchBase + $m.groups['ch'].index/3 + 2
        $pos = $m.groups['flag'].index + $m.groups['flag'].length
        $offs = $BC::ToUInt32($bytes, $searchBase + $pos/3+1)
        $diff = $searchBase + $pos/3+5+$offs - $stroffs
        #write-Host ("`n{0,16:x}`t{1}" -f ($offs, $diff))
      } until ($diff -ge 0 -and $diff -le 6000 -and $diff % 256 -eq 0)
      write-Host
      #write-Host ("{0,16:x}" -f ($searchBase + $pos/3))
      if ($m.success) { break }
      $chanpos = 0
    }
    $chanpos
  }
  function patch86 {
    $flagOffs = [uint32]$stroffs + [uint32]$imagebase32
    $flagOffsStr = $BC::ToString($BC::GetBytes($flagOffs))
    #write-Host $flagOffsStr
    $variants = "(?<ch>$rxChannel-.{1,300})-(68-(?<flag>`$1-.{6}`$2.{100,200})){2}",
                "68-(?<flag>`$1-.{6}`$2).{300,500}E8.{12,32}(?<ch>$rxChannel)",
                "E8.{12,32}(?<ch>$rxChannel).{300,500}68-(?<flag>`$1-.{6}`$2)"
    forEach ($variant in $variants) {
      $pattern = $flagOffsStr -replace '^(..)-.{6}(..)', $variant
      $patternDisplay = $pattern -replace '^(.{40}).+', '$1'
      write-Host -f darkgray "`tLooking for $patternDisplay..."
      $minDiff = 65536
      foreach ($m in [regex]::matches($code, $pattern)) {
        $maybeFlagOffs = $BC::toUInt32($bytes, $searchBase + $m.groups['flag'].index/3)
        $diff = [Math]::abs($maybeFlagOffs - $flagOffs)
        #write-Host ("`n{0,16:x}`t{1}" -f ($maybeFlagOffs, $diff))
        if ($diff % 256 -eq 0 -and $diff -lt $minDiff) {
          $minDiff = $diff
          $chanpos = $searchBase + $m.groups['ch'].index/3 + 2
        }
      }
    }
    $chanpos
  }
  $passes = 3
  foreach ($pass in $passes..1) {
    if ($centbrowser) { break }
    $searchBase = [int]($codesize/$passes * ($pass-1))
    $code = $BC::ToString($bytes, $searchBase, [int]($codesize/$passes) + 2000)
    $chanpos = if ($is64) { patch64 } else { patch86 }
    if ($chanpos) { break }
    $searchBase = 0
  }
  if ($chanpos) {
    #write-Host ('{0:x}' -f $chanpos)
    $bytes[$chanpos] = 9
    "`tPATCHED Chrome release channel restriction"
  } elseif (!$centbrowser) {
    write-Host -f red "`tUnable to find the channel code, try updating me"
    write-Host -f red "`thttp://stackoverflow.com/a/30361260"
    return
  }

  "`tWriting to a temporary dll..."
  [IO.File]::WriteAllBytes("$dll.new",$bytes)

  "`tBacking up the original dll..."
  move -literal $dll "$dll.bak" -force

  "`tRenaming the temporary dll as the original dll..."
  move -literal "$dll.new" $dll -force

  write-Host -f green "`tDONE.`n"
  [GC]::Collect()
}

main
# DevWarningPatch.bat Dec 08, 2017 
**for 32/64-bit Chrome 44.0.2398.0 and newer, stable/beta/dev/canary**

1. Save the code to `DevWarningPatch.bat` somewhere  
  (on the Desktop, for example or in the folder with chrome.dll)
2. Exit Chrome.  
  Or let the script close it including its hidden background processes.
3. Rightclick the batch file and run it as administrator: it will find & patch all applicable chrome.dll  
  Alternatively you can drag'n'drop chrome.dll onto the batch file

**If the pop-up message occurs after running the batch file** try renaming the file `chrome.dll.bak` to `chrome.dll` inside Chrome's application folder, then run the batch file again.
88
wOxxOm

この問題を解決する公式の方法をここに追加しますが、それらが最適ではないことはわかっていますが、これらの解決策がここに存在することは理にかなっています。

最初の解決策で最も複雑な解決策は、Google Store Accountそして、すべての手順を実行してアクティブにします。それを使用して、extension packageそしてそれをPrivateにしておくと、このパッケージへのリンクをインストールする必要のある人と共有できます。この方法では、拡張機能はGoogleチームによって承認され、安全です。

2番目のオプションは、Chrome Dev Browser、リンク ここ 、ダウンロードしていることを画面に表示しませんDev Channel、あなたはそれが起こっていると信じなければなりません。このバージョンのブラウザは公式バージョンと並んで機能するため、アンインストールなどを行う必要はありません。すべての設定が分離されているため、実際には別のブラウザのようになります。

私はそれのバージョン64を使用しており、拡張機能に関する問題を解決しました。

4
Zorkind