Post

macOS에서 프로그램을 argument와 같이 실행시켜보자.

목차


개요

Windows에서는 Chrome에서 https, http2를 테스트하기 위해 환경변수에 SSLKEYLOGFILE을 설정하고 크롬을 재실행하면 끝이었다.

macOS에서는 export SSLKEYLOGFILE=/path/to/sslkeylog.log 로 환경변수를 설정하고 크롬을 재실행해도 https, http2 패킷이 계속 암호화되어 보이는 것으로 보아 적용되지 않고 있다고 판단했다.

확인한 결과 크롬을 모두 종료하고 아래 명령어를 통해 크롬을 실행하면 wireshark 등에서 https, http2 로그를 확인할 수 있다.

1
open -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --ssl-key-log-file=/path/to/sslkeylog.log

하지만 매번 이렇게 실행하는 것이 상당히 번거롭기 때문에 크롬을 실행할 때마다 항상 --ssl-key-log-file 해당 옵션이 적용되는 방법은 없는지 찾아보았다.


방법1 - 실패

참조한 stackoverflow 링크

해당 방법대로라면 /Applications/Google\ Chrome.app 패키지에서 옵션을 추가하여 바이너리를 실행하는 쉘 스크립트를 추가로 만든 뒤 Contents/Info.plist 파일을 열어서 실행하는 바이너리명을 해당 스크립트 이름으로 변경하면 된다고 했다.

Info.plist 파일을 열어 CFBundleExecutable 또는 Executable File 항목을 찾아 수정하면 된다고 했다.

Google Chrome의 경우 Info.plist에 CFBundleExecutable 항목이 있어서 해당 항목을 수정했다.

1
2
- <string>Google Chrome</string>
+ <string>parameterized-app.sh</string>

그리고 아래 명령어를 실행해 parameterized-app.sh 파일을 생성하고 실행권한을 부여했다.

1
2
touch MacOS/parameterized-app.sh
chmod 755 MacOS/parameterized-app.sh

parameterized-app.sh 파일을 열고 아래 내용을 추가했다.

1
2
#!/bin/bash
open -a /Applications/_argChrome.app/Contents/MacOS/Google\ Chrome --args --ssl-key-log-file=/path/to/sslkeylog.log

하지만 유효성 검증을 진행하는지 아래와 같은 에러가 발생했다.

확인 결과, Google Chrome 패키지에 어떠한 파일이나 디렉토리에 변조를 가하면 브라우저 내 기본 세션 (구글 로그인 등)이 무조건 끊기는 것으로 파악했다.


방법2 - 성공

macOS 에서 듀얼 카카오톡을 실행하는 방법과 유사한 방법으로 진행하면 어떨까 싶어서 알아보았다.

듀얼 카카오톡 생성 방법
1
2
3
4
5
6
7
8
9
10
11
12
test -d /Applications/KakaoTalkDev.app && rm -rf /Applications/KakaoTalkDev.app
test -d /Applications/DuelKakaoTalk.app && rm -rf /Applications/DuelKakaoTalk.app
cp -a /Applications/KakaoTalk.app /Applications/KakaoTalkDev.app

mv /Applications/KakaoTalkDev.app/contents/MacOS/KakaoTalk /Applications/KakaoTalkDev.app/Contents/MacOS/KakaoTalkDev
cd /Applications/KakaoTalkDev.app/Contents/
/usr/bin/sed -i .bak "s/KakaoTalk<\/string>/KakaoTalkDev<\/string>/g" Info.plist
/usr/bin/sed -i .bak "s/com.kakao.KakaoTalkMac<\/string>/com.kakao.KakaoTalkDevMac<\/string>/g" Info.plist
codesign --force --deep --sign - /Applications/KakaoTalkDev.app

mv /Applications/KakaoTalkDev.app /Applications/DuelKakaoTalk.app
# open /Applications/DuelKakaoTalk.app

이후 Spotlight 또는 Alfred에 duel만 쳐도 duelkakaotalk이 뜬다.

즉, 구상한 방법은 다음과 같다.

  1. Google Chrome.app 패키지를 _argChrome.app 패키지로 복사한다.
1
cp -a /Applications/Google\ Chrome.app /Applications/_argChrome.app
  1. Google Chrome.app 패키지의 Google Chrome 바이너리를 지운다.
1
rm -rf /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
  1. Google Chrome.app 패키지 내 Info.plist를 수정하여 패키지명을 변경하고, Google Chrome 스크립트를 생성하여 _argChrome.app 패키지를 실행시키게 한다.
1
2
touch /Applications/_argChrome.app/Contents/MacOS/Google\ Chrome
chmod 755 /Applications/_argChrome.app/Contents/MacOS/Google\ Chrome

이후 Google Chrome 스크립트를 열어 아래 내용을 추가한다.

1
2
#!/bin/bash
open -a /Applications/_argChrome.app/Contents/MacOS/Google\ Chrome --args --ssl-key-log-file=/path/to/sslkeylog.log

Info.plist 파일을 열고 수정한다.

  • com.google.Chrome 내용을 com.google.ChromeArg로 변경한다.
  • CFBundleDisplayName 항목의 내용을 Google Chrome 에서 Google ChromeArg로 변경한다.

검색 대상에서 _argChrome.app 앱 제외

이후 시스템 설정 > Siri 및 Spotlight > Spotlight 개인정보 보호 에서 _argChrome.app을 추가해 검색 대상에서 _argChrome.app 항목을 제외시킨다.

finder에서 _argChrome.app 항목을 드래그 해 가져온다.

alfred 사용자는 이후 알프레드 검색 창을 띄워 Reload Alfred Cache 를 실행시켜 제외 대상을 반영시킨다.

이후 alfred, spotlight로 크롬을 실행시키면 wireshark에서 크롬의 복호화된 트래픽을 확인할 수 있다.

번외 (SSLKEYLOGFILE 환경변수 설정)

1
2
cd ~/Library/LaunchAgents
touch tlskeylogger.plist

tlskeylogger.plist 파일을 열고 아래 내용을 추가한다.
launchctl setenv SSLKEYLOGFILE /path/to/sslkeylog.log
/path/to/sslkeylog.log 부분은 실제 파일 경로로 수정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>sslkeylogger</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>
    launchctl setenv SSLKEYLOGFILE /path/to/sslkeylog.log
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
1
2
launchctl load ~/Library/LaunchAgents/tlskeylogger.plist
launchctl start ~/Library/LaunchAgents/tlskeylogger.plist

크롬 브라우저를 재시작한다.

This post is licensed under CC BY 4.0 by the author.