• Design Details: Paper by Facebook →

    Brian Lovin이 쓴 페이스북 Paper의 디자인 디테일에 관한 글이다.

    페이스북 Paper가 나온 지 하루가 지났고 대부분의 리뷰가 다소 갈리고 있다. 나는 페이스북의 열성적 팬은 아니지만, Paper의 디자인과 디테일에 쏟은 관심은 비길 데 없으며 이는 다른 디자이너들과 공유할 가치가 있다.

    Paper 앱의 애니메이션을 총 23종의 GIF 파일로 기록하고 리뷰해 놓았다. Paper 앱이 출시되고 꽤 시간이 지났지만 앱을 사용하면서 눈치채지 못했던 점이 많아 지금이라도 공유한다.

  • Octopress에서 Facebook Open Graph와 Twitter Cards 지원하기

    블로그에 글을 쓰고 나면 트위터나 페이스북에 링크를 공유하곤 하는데 페이스북의 미리보기가 적절히 표시되지 않고 있다는 사실을 깨달았다. 또한 트위터도 그와 비슷한 기능을 제공하는데, 둘 다 지원하면 좋겠다는 생각을 했다. 이를 제대로 지원하려면 Facebook Open Graph tagsTwitter Cards에 대해 알아야 한다. 웹 페이지에 적절한 메타 태그를 추가해 주면 페이스북과 트위터에서 인식하고 올바른, 작성자가 의도한 미리보기를 보여준다. 기본적으로 Zac Clancy가 쓴 Octopress에서 이 두 가지를 지원하는 글에 상세히 설명되어 있다.

    Read on →

  • Apple's SSL/TLS bug →

    iOS 7.0.6, iOS 6.1.6, Apple TV 6.0.2가 배포됐다. 애플에서 공개한 iOS 7.0.6의 보안 문제는 다음과 같다.

    Impact: An attacker with a privileged network position may capture or modify data in sessions protected by SSL/TLS

    Description: Secure Transport failed to validate the authenticity of the connection. This issue was addressed by restoring missing validation steps.

    그런데 이 문제의 원인이 된 소스 코드가 흥미롭다. Adam Langley의 이 버그에 관한 글에 따르면 실제 소스(sslKeyExchange.c)는 이렇다.

    static OSStatus
    SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
                                     uint8_t *signature, UInt16 signatureLen)
    {
        OSStatus        err;
        ...
    
        if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)
            goto fail;
        if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)
            goto fail;
        if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
            goto fail;
        if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
            goto fail;
            goto fail;
        if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
            goto fail;
        ...
    
    fail:
        SSLFreeBuffer(&signedHashes);
        SSLFreeBuffer(&hashCtx);
        return err;
    
    }
    

    단지 goto fail; 라인이 하나 더 있어서 if문과 관계 없이 두 번째 goto문이 실행되어 signature verification을 무조건 통과하게 된다.

    Note the two goto fail lines in a row. The first one is correctly bound to the if statement but the second, despite the indentation, isn’t conditional at all. The code will always jump to the end from that second goto, err will contain a successful value because the SHA1 update operation was successful and so the signature verification will never fail.

    또한 OS X 10.9.1에는 아직 이 문제가 있는 것으로 보인다.

  • Ghost in the Shellcode 2014: inview Write-up

    Question 3 - inview

    Points: 150

    The key is in view, what is it? File

    If the above link doesn’t work, please use this link.

    Extract file with this code:

    mv inview-324b8fb59c14da0d5ca1fe2c31192d80cec8e155 inview-324b8fb59c14da0d5ca1fe2c31192d80cec8e155.xz
    xz -d inview-324b8fb59c14da0d5ca1fe2c31192d80cec8e155.xz
    

    Then we can see some trailing whitespace in inview-324b8fb59c14da0d5ca1fe2c31192d80cec8e155.

    How to Highlight Trailing Whitespace in Vim

    Add this code to your .vimrc:

    highlight ExtraWhitespace ctermbg=red guibg=red
    autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
    autocmd InsertEnter * match ExtraWhitespace //
    autocmd InsertLeave * match ExtraWhitespace /\s\+$/
    if version >= 702
      autocmd BufWinLeave * call clearmatches()
    end
    

    Then Vim highlights trailing whitespace to red color.

    How to Solve

    I felt something weird, so I converted the file to hex code. In Vim:

    :%!xxd
    

    Looking at whitespace, I realized there are 09(Tab), 0A(New Line), 20(Space) with no rule. Right after that I came up with Whitespace. Also there is a interpreter written in JavaScript. Almost done! Just copy and paste the file content to site and press ‘Exec’ button. If you want to execute it in local, you can use whitespacers.

    Finally the key is:

    WhitespaceProgrammingIsHard
    
  • How to Check and Toggle WiFi or 3G/4G State in Android

    Overview

    1. Check if WiFi or 3G/4G is Enabled (by User)
      1. WiFi
      2. 3G/4G
    2. Check if WiFi or 3G/4G is Connected
      1. WiFi
      2. 3G/4G
    3. Toggle WiFi or 3G/4G Programmatically
      1. WiFi
      2. 3G/4G

    At some point, we want to know whether the device is connected to network so that we can do some network processes. Also we want to know if user make WiFi or 3G/4G disabled on purpose. Both things are able to know.

    Read on →