<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Kye0m's Security</title>
    <link>https://yookyeom105.tistory.com/</link>
    <description>보안이랑 블록체인이랑 이것저것...ㅎㅎ</description>
    <language>ko</language>
    <pubDate>Mon, 11 May 2026 23:17:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Kye0m</managingEditor>
    <item>
      <title>[Diva] Access control issues(Part3)</title>
      <link>https://yookyeom105.tistory.com/22</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Diva - Access Control Issues(part3)&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1016&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BHIKi/btrNzE9Fxku/pW87mfm60BQQpJqvcZiDNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BHIKi/btrNzE9Fxku/pW87mfm60BQQpJqvcZiDNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BHIKi/btrNzE9Fxku/pW87mfm60BQQpJqvcZiDNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBHIKi%2FbtrNzE9Fxku%2FpW87mfm60BQQpJqvcZiDNK%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;1916&quot; height=&quot;1016&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1016&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목적 : 이것은 개인용 노트 앱이다. &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;PIN을 한 번 만들고 올바른 PIN을 입력한 후 노트에 액세스할 수 있습니다. 이제 PIN을 모르는 상태에서 앱 외부에서 개인 노트에 액세스해 보십시오.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;힌트 : &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;앱의 구성요소는 제대로 보호되지 않은 경우 다른 앱이나 사용자로부터 액세스할 수 있으며 일부는 외부 입력을 허용할 수도 있습니다. 활동, 서비스, 콘텐츠 공급자와 같은 구성 요소는 이러한 경향이 있습니다.&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd;&quot;&gt;PIN번호를 모르는 상태에서 NOTE에 엑세스하면 풀 수 있는 문제이다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WfX5j/btrNvZ8ebhT/K7wd4h1qQ3N7q4v9OTMkjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WfX5j/btrNvZ8ebhT/K7wd4h1qQ3N7q4v9OTMkjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WfX5j/btrNvZ8ebhT/K7wd4h1qQ3N7q4v9OTMkjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWfX5j%2FbtrNvZ8ebhT%2FK7wd4h1qQ3N7q4v9OTMkjK%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;723&quot; height=&quot;248&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xxU1i/btrNAwXPOsa/sQKsVxUOH2IV7J2FeA8Kd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xxU1i/btrNAwXPOsa/sQKsVxUOH2IV7J2FeA8Kd1/img.png&quot; data-alt=&quot;잚못된 핀번호를 입력했을 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xxU1i/btrNAwXPOsa/sQKsVxUOH2IV7J2FeA8Kd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxxU1i%2FbtrNAwXPOsa%2FsQKsVxUOH2IV7J2FeA8Kd1%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;529&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;708&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AndroidManifest.xml 파일을 열어보면 다음과 같은 구문을 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1664690175634&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;provider android:authorities=&quot;jakhar.aseem.diva.provider.notesprovider&quot; android:enabled=&quot;true&quot; android:exported=&quot;true&quot; android:name=&quot;jakhar.aseem.diva.NotesProvider&quot;/&amp;gt;&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;jakhar.aseem.diva.provider.notesprovider 의&amp;nbsp; exported값이 true로 설정되어있는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;android가 true로 설정되어 있을 경우, 다른 애플리케이션에서 활동에 엑세스 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 취약점을 이용해서, PIN번호를 모르지만 notes에 들어있는 정보에 접근할 것이다.&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;888&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIWQXK/btrNzFneoPS/VtKBfR4j6dZNtp99tcy4zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIWQXK/btrNzFneoPS/VtKBfR4j6dZNtp99tcy4zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIWQXK/btrNzFneoPS/VtKBfR4j6dZNtp99tcy4zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIWQXK%2FbtrNzFneoPS%2FVtKBfR4j6dZNtp99tcy4zK%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;888&quot; height=&quot;284&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jakhar.aseem.diva.NotesProvider에 들어가보면 notes정보가 담겨있는 위치가 하드코딩되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exported값이 true로 되어있는 점을 이용해서 adb에서 해당 파일을 실행할것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;adb 명령어를 사용하여 해당 경로를 실행시켜 보겠다.&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;850&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KYBbv/btrNwEP7NtK/OiC9B4wKlwPfWPqZaa7C5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KYBbv/btrNwEP7NtK/OiC9B4wKlwPfWPqZaa7C5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KYBbv/btrNwEP7NtK/OiC9B4wKlwPfWPqZaa7C5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKYBbv%2FbtrNwEP7NtK%2FOiC9B4wKlwPfWPqZaa7C5k%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;850&quot; height=&quot;126&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어를 통해서 노트 안에 들어있는 정보를 핀번호 없이 실행시킨 것을 확인할 수 있다.&lt;/p&gt;</description>
      <category>앱 모의해킹/Diva</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/22</guid>
      <comments>https://yookyeom105.tistory.com/22#entry22comment</comments>
      <pubDate>Sun, 2 Oct 2022 15:04:19 +0900</pubDate>
    </item>
    <item>
      <title>[Diva] Hardcoding issues(Part2)</title>
      <link>https://yookyeom105.tistory.com/21</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Diva - Hardcoding issues(part2)&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4wuvt/btrNs3P0tZ9/lDKiDN9V1d8kycX3Gmmw80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4wuvt/btrNs3P0tZ9/lDKiDN9V1d8kycX3Gmmw80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4wuvt/btrNs3P0tZ9/lDKiDN9V1d8kycX3Gmmw80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4wuvt%2FbtrNs3P0tZ9%2FlDKiDN9V1d8kycX3Gmmw80%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;1588&quot; height=&quot;760&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번문제도 특정 key값을 입력하여 푸는 문제이다.&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;[풀이과정]&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rOhNX/btrNsEVXNQi/DembKPr0VwXVCjmYe48Qk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rOhNX/btrNsEVXNQi/DembKPr0VwXVCjmYe48Qk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rOhNX/btrNsEVXNQi/DembKPr0VwXVCjmYe48Qk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrOhNX%2FbtrNsEVXNQi%2FDembKPr0VwXVCjmYe48Qk0%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;949&quot; height=&quot;276&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;access버튼을 눌렀을 때, 파일함수 후킹을 통해 Hardcode2Activity.access에서 함수가 실행되는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664508801117&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  public void access(View view) {
        EditText hckey = (EditText) findViewById(R.id.hc2Key);
        if (this.djni.access(hckey.getText().toString()) != 0) {
            Toast.makeText((Context) this, (CharSequence) &quot;Access granted! See you on the other side :)&quot;, 0).show();
        } else {
            Toast.makeText((Context) this, (CharSequence) &quot;Access denied! See you in hell :D&quot;, 0).show();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jadx-gui를 통해서 확인해보면, this.djni.access에 String을 입력했을 때, 참이되어서 나오면&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;pre id=&quot;code_1664508830480&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class DivaJni {
    private static final String soName = &quot;divajni&quot;;
    public native int access(String str);
    public native int initiateLaunchSequence(String str);
    static {
        System.loadLibrary(soName);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;divajni 라이브러리를 호출하는것을 알 수 있다.&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;874&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dh29zt/btrNoDKYrMR/z1e0yjg219Y25qk01UCJCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dh29zt/btrNoDKYrMR/z1e0yjg219Y25qk01UCJCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dh29zt/btrNoDKYrMR/z1e0yjg219Y25qk01UCJCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdh29zt%2FbtrNoDKYrMR%2Fz1e0yjg219Y25qk01UCJCk%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;874&quot; height=&quot;94&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;libdivanji.so를 분석을 위해, adb pull 명령어를 통해서 데스크탑으로 옮겨왔다.&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;1168&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjkLdh/btrNuewK4FN/0GzJbnUSKDo0AHxVfWo04K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjkLdh/btrNuewK4FN/0GzJbnUSKDo0AHxVfWo04K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjkLdh/btrNuewK4FN/0GzJbnUSKDo0AHxVfWo04K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjkLdh%2FbtrNuewK4FN%2F0GzJbnUSKDo0AHxVfWo04K%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;1168&quot; height=&quot;200&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ida로 분석을 해보면, Java_jakhar_aseem_diva_DivaJni_access에서 'olsdfgad;lh'와 memcmp를 한 결과를 반환한다.&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-origin-width=&quot;1600&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpw4Xh/btrNpsCHjsv/B7rVQnrgMdXzFRUKWkCJv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpw4Xh/btrNpsCHjsv/B7rVQnrgMdXzFRUKWkCJv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpw4Xh/btrNpsCHjsv/B7rVQnrgMdXzFRUKWkCJv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpw4Xh%2FbtrNpsCHjsv%2FB7rVQnrgMdXzFRUKWkCJv0%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;1600&quot; height=&quot;890&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;890&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;</description>
      <category>앱 모의해킹/Diva</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/21</guid>
      <comments>https://yookyeom105.tistory.com/21#entry21comment</comments>
      <pubDate>Sat, 1 Oct 2022 16:59:46 +0900</pubDate>
    </item>
    <item>
      <title>[Diva] - Hardcoding issues(Part1)</title>
      <link>https://yookyeom105.tistory.com/20</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Hardcoding issues Part1&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QtlDo/btrNk8RcImm/KMUbLD9xb282CNKk9RLER1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QtlDo/btrNk8RcImm/KMUbLD9xb282CNKk9RLER1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QtlDo/btrNk8RcImm/KMUbLD9xb282CNKk9RLER1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQtlDo%2FbtrNk8RcImm%2FKMUbLD9xb282CNKk9RLER1%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;1631&quot; height=&quot;769&quot; data-origin-width=&quot;1631&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;/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;h3 data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jakhar.aseem.diva.HardcodeActivity 에 들어가보면&lt;/p&gt;
&lt;pre id=&quot;code_1664430496344&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; public void access(View view) {
        EditText hckey = (EditText) findViewById(R.id.hcKey);
        if (hckey.getText().toString().equals(&quot;하드코딩된 key값&quot;)) {
            Toast.makeText(this, &quot;Access granted! See you on the other side :)&quot;, 0).show();
        } else {
            Toast.makeText(this, &quot;Access denied! See you in hell :D&quot;, 0).show();
        }
    }&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;getText().toString()을 통해 값을 입력받고, &quot;하드코딩된 key값&quot;과 같은지 equals를 통해 비교한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 string값을 직접 하드코딩하였기 때문에, 위와 같은 코드 취약점이 발생하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1583&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tbAGC/btrNjqrr98D/tDOlm4vlarGqAAEWhcZbYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tbAGC/btrNjqrr98D/tDOlm4vlarGqAAEWhcZbYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tbAGC/btrNjqrr98D/tDOlm4vlarGqAAEWhcZbYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtbAGC%2FbtrNjqrr98D%2FtDOlm4vlarGqAAEWhcZbYk%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;1583&quot; height=&quot;763&quot; data-origin-width=&quot;1583&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;하드코딩된 키 값&quot;을 입력하고 ACCESS버튼을 누르면 성공적으로 문제를 풀 수 있다.&lt;/p&gt;</description>
      <category>앱 모의해킹/Diva</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/20</guid>
      <comments>https://yookyeom105.tistory.com/20#entry20comment</comments>
      <pubDate>Thu, 29 Sep 2022 14:55:51 +0900</pubDate>
    </item>
    <item>
      <title>[Diva] -Insecure Logging</title>
      <link>https://yookyeom105.tistory.com/19</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Diva - Insecure Logging&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;환경구성&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/tjunxiang92/Android-Vulnerabilities&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/tjunxiang92/Android-Vulnerabilities&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664419620227&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - tjunxiang92/Android-Vulnerabilities: Covers Top 10 OWASP Mobile Vulnerabilities&quot; data-og-description=&quot;Covers Top 10 OWASP Mobile Vulnerabilities. Contribute to tjunxiang92/Android-Vulnerabilities development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/tjunxiang92/Android-Vulnerabilities&quot; data-og-url=&quot;https://github.com/tjunxiang92/Android-Vulnerabilities&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0Fbno/hyPWyM0xty/PYG2YuErVYTYQnPsSkVoc0/img.png?width=1200&amp;amp;height=600&amp;amp;face=988_133_1031_179&quot;&gt;&lt;a href=&quot;https://github.com/tjunxiang92/Android-Vulnerabilities&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/tjunxiang92/Android-Vulnerabilities&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0Fbno/hyPWyM0xty/PYG2YuErVYTYQnPsSkVoc0/img.png?width=1200&amp;amp;height=600&amp;amp;face=988_133_1031_179');&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;GitHub - tjunxiang92/Android-Vulnerabilities: Covers Top 10 OWASP Mobile Vulnerabilities&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Covers Top 10 OWASP Mobile Vulnerabilities. Contribute to tjunxiang92/Android-Vulnerabilities development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Diva 역시도 안드로이드 취약점 분석을 위한 모바일 어플리케이션이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 깃허브 링크에서 Diva를 다운받도록 한다.&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;Diva를 다운 후, adb install을 이용하여 설치하려고 하면, 설치가 되지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EXvQl/btrNhTtkbBz/Dcnw8QhalxUu8Hw1hCwrGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EXvQl/btrNhTtkbBz/Dcnw8QhalxUu8Hw1hCwrGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EXvQl/btrNhTtkbBz/Dcnw8QhalxUu8Hw1hCwrGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEXvQl%2FbtrNhTtkbBz%2FDcnw8QhalxUu8Hw1hCwrGK%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;961&quot; height=&quot;108&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어플리케이션에 대한 서명이 되지 않았기 때문인데, apk easy tool을 통해서 어플리케이션에 서명해주면, 설치할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;587&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQdrmp/btrNhif3ABl/F09fGEFPcmX3CKLev4ALH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQdrmp/btrNhif3ABl/F09fGEFPcmX3CKLev4ALH0/img.png&quot; data-alt=&quot;APK Easy Tool을 통한 서명 진행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQdrmp/btrNhif3ABl/F09fGEFPcmX3CKLev4ALH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQdrmp%2FbtrNhif3ABl%2FF09fGEFPcmX3CKLev4ALH0%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;530&quot; height=&quot;457&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;587&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;APK Easy Tool을 통한 서명 진행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rThhr/btrNhOFHemN/MkBEh4cqA0UxKJrE5KF8YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rThhr/btrNhOFHemN/MkBEh4cqA0UxKJrE5KF8YK/img.png&quot; data-alt=&quot;성공적으로 설치가 완료되었다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rThhr/btrNhOFHemN/MkBEh4cqA0UxKJrE5KF8YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrThhr%2FbtrNhOFHemN%2FMkBEh4cqA0UxKJrE5KF8YK%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;603&quot; height=&quot;60&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;60&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;h3 data-ke-size=&quot;size23&quot;&gt;1. Insecure Logging&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;931&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0vHqd/btrNjz10Top/3pEkjLIiKTkuyg9sOeSTIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0vHqd/btrNjz10Top/3pEkjLIiKTkuyg9sOeSTIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0vHqd/btrNjz10Top/3pEkjLIiKTkuyg9sOeSTIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0vHqd%2FbtrNjz10Top%2F3pEkjLIiKTkuyg9sOeSTIK%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;776&quot; height=&quot;444&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;931&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힌트 : insecure logging은 개발자가 의도적으로 또는 의도적이지 않게 자격증명, 세션 , ID, 제무 세부 정보등과 같은 중요한 정보를 기록할 때 발생합니다.&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;span class=&quot;imageblock&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bR3RFY/btrNlSfz71N/yD32XSuwFAKvNfBV1TsSqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bR3RFY/btrNlSfz71N/yD32XSuwFAKvNfBV1TsSqk/img.png&quot; data-alt=&quot;1.3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bR3RFY/btrNlSfz71N/yD32XSuwFAKvNfBV1TsSqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbR3RFY%2FbtrNlSfz71N%2FyD32XSuwFAKvNfBV1TsSqk%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;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 ps명령어를 통해서 어플리케이션의 설치경로를 알아낸다.&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;힌트에서 로그를 확인해보라고 했으니, 로그를 먼저 확인해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664422410900&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; logcat | grep &quot;diva&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트에 123123을 넣고 입력했을 때, 다음과 같은 로그가 찍히는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lyPiO/btrNmyOPAjy/kjq5MS9uuKFKnUdgQFXka1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lyPiO/btrNmyOPAjy/kjq5MS9uuKFKnUdgQFXka1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lyPiO/btrNmyOPAjy/kjq5MS9uuKFKnUdgQFXka1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlyPiO%2FbtrNmyOPAjy%2Fkjq5MS9uuKFKnUdgQFXka1%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;934&quot; height=&quot;48&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;48&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;jadx를 통해서 로그문을 검색했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOkb1n/btrNnrPBBM1/pVp8XlcwNOdoNtG8YTjVT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOkb1n/btrNnrPBBM1/pVp8XlcwNOdoNtG8YTjVT0/img.png&quot; data-alt=&quot;에러로그로 검색&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOkb1n/btrNnrPBBM1/pVp8XlcwNOdoNtG8YTjVT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOkb1n%2FbtrNnrPBBM1%2FpVp8XlcwNOdoNtG8YTjVT0%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;773&quot; height=&quot;487&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;에러로그로 검색&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1664422770782&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public void checkout(View view) {
        EditText cctxt = (EditText) findViewById(R.id.ccText);
        try {
            processCC(cctxt.getText().toString());
        } catch (RuntimeException e) {
            Log.e(&quot;diva-log&quot;, &quot;Error while processing transaction with credit card: &quot; + cctxt.getText().toString());
            Toast.makeText((Context) this, (CharSequence) &quot;An error occured. Please try again later&quot;, 0).show();
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jakhar.aseem.diva.LogActivity.checkout()을 통해서 로그가 찍히고 있음을 알 수 있다.&lt;/p&gt;</description>
      <category>앱 모의해킹/Diva</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/19</guid>
      <comments>https://yookyeom105.tistory.com/19#entry19comment</comments>
      <pubDate>Thu, 29 Sep 2022 12:42:23 +0900</pubDate>
    </item>
    <item>
      <title>[Uncrackable1]</title>
      <link>https://yookyeom105.tistory.com/18</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Uncrackable1&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1633&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bILGQ1/btrNkDCDucu/StojH7jmxLK3ayiyA1GLq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bILGQ1/btrNkDCDucu/StojH7jmxLK3ayiyA1GLq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bILGQ1/btrNkDCDucu/StojH7jmxLK3ayiyA1GLq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbILGQ1%2FbtrNkDCDucu%2FStojH7jmxLK3ayiyA1GLq0%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;800&quot; height=&quot;457&quot; data-origin-width=&quot;1633&quot; data-origin-height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Uncrackable은owasp에서 제공하는 앱취약점 공부용 모바일 어플리케이션이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Uncrackable1.apk를 다운 받은 후, Nox 에뮬레이터에 설치하면 위와 같은 화면이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rooting이 감지되었다고 뜨는 것을 보아, 우선 해당 과정을 우회하는 것이 먼저인듯 하다.&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;826&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lg6y0/btrNkDo6dwU/KkHrf7Kf5AAPfS5WxEehEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lg6y0/btrNkDo6dwU/KkHrf7Kf5AAPfS5WxEehEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lg6y0/btrNkDo6dwU/KkHrf7Kf5AAPfS5WxEehEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flg6y0%2FbtrNkDo6dwU%2FKkHrf7Kf5AAPfS5WxEehEk%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;826&quot; height=&quot;74&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ps | grep &quot;uncrable&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;위에서 얻은 경로를 통해 프리다를 사용할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/0xdea/frida-scripts&quot;&gt;https://github.com/0xdea/frida-scripts&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;span&gt; 에서 제공하는 파일함수 후킹 코드를 통해서&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;어떤 함수가 실행되는지 알아보면,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GN3oF/btrNiNTymD1/HWHh41FKd8bvcZiWc7XzPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GN3oF/btrNiNTymD1/HWHh41FKd8bvcZiWc7XzPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GN3oF/btrNiNTymD1/HWHh41FKd8bvcZiWc7XzPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGN3oF%2FbtrNiNTymD1%2FHWHh41FKd8bvcZiWc7XzPk%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;1208&quot; height=&quot;143&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;onCreate()와 verify()가 실행되는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;APK Easy Tool로 디컴파일을 진행하여 onCreate부분을 살펴보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;    protected void onCreate(Bundle bundle) {
        if (c.a() || c.b() || c.c()) {
            a(&quot;Root detected!&quot;);
        }

        if (b.a(getApplicationContext())) {
            a(&quot;App is debuggable!&quot;);
        }
        super.onCreate(bundle);
        setContentView(2130903040);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c클래스의 a와 b,c중에서 하나의 조건만 맞으면 루팅이 되었다고 감지되는 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;public class c {
    public static boolean a() {
        for (String str : System.getenv(&quot;PATH&quot;).split(&quot;:&quot;)) {
            if (new File(str, &quot;su&quot;).exists()) {
                return true;
            }
        }
        return false;
    }

    public static boolean b() {
        String str = Build.TAGS;
        return str != null &amp;amp;&amp;amp; str.contains(&quot;test-keys&quot;);
    }


    public static boolean c() {
        for (String str : new String[]{&quot;/system/app/Superuser.apk&quot;, &quot;/system/xbin/daemonsu&quot;, &quot;/system/etc/init.d/99SuperSUDaemon&quot;, &quot;/system/bin/.ext/.su&quot;, &quot;/system/etc/.has_su_daemon&quot;, &quot;/system/etc/.installed_su_daemon&quot;, &quot;/dev/com.koushikdutta.superuser.daemon/&quot;}) {
            if (new File(str).exists()) {
                return true;
            }
        }
        return false;
    }
}&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;위 조건이 참이되는 것을 막기 위해 프리다 후킹을 사용할 것이다.&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;실습&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 루팅탐지 우회&lt;/h4&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;size18&quot;&gt;&lt;b&gt;1-1. return값을 변조하여 우회하는 방법&lt;/b&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;c클래스의 a,b,c가 반환하는 값이 모두 false가 되면, 루팅탐지가 되지 않으므로 a,b,c의 반환값을 모두 false로 바꿀 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1664378496193&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Script loaded successfully &quot;);
Java.perform(function x() {
	console.log(&quot;Inside java perform function&quot;);
	var my_class = Java.use(&quot;sg.vantagepoint.a.c&quot;);

	my_class.a.implementation = function (args) {
		console.log(&quot;\n0***************************************************&quot;);
		return false;
	}
	my_class.b.implementation = function (args) {
		console.log(&quot;\n1***************************************************&quot;);
		return false;
	}
	my_class.c.implementation = function (args) {
		console.log(&quot;\n2***************************************************&quot;);
		return false;
	};
});&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1664380177284&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;frida -U -f owasp.mstg.uncrackable1 -l 자바스크립트 --no-pause&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프리다를 실행하여 a,b,c함수에 return값을 false로 고정해주면&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;1636&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EhxXN/btrNhPqNcK4/zVXC4UkK08Y3TiuxeNFw71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EhxXN/btrNhPqNcK4/zVXC4UkK08Y3TiuxeNFw71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EhxXN/btrNhPqNcK4/zVXC4UkK08Y3TiuxeNFw71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEhxXN%2FbtrNhPqNcK4%2FzVXC4UkK08Y3TiuxeNFw71%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;1636&quot; height=&quot;594&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&lt;b&gt;1-2. system.exit()를 후킹하는 방법&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&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-origin-width=&quot;1637&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO8MtN/btrNhDYk6vV/sOmSc1KNINKZmOOaUsV9s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO8MtN/btrNhDYk6vV/sOmSc1KNINKZmOOaUsV9s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO8MtN/btrNhDYk6vV/sOmSc1KNINKZmOOaUsV9s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO8MtN%2FbtrNhDYk6vV%2FsOmSc1KNINKZmOOaUsV9s0%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;1637&quot; height=&quot;753&quot; data-origin-width=&quot;1637&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;루팅이 탐지되었을 때, 위 사진의 OK버튼을 누르게 되면, system.exit()가 실행되면서, 앱이 닫히게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;frida를 통해, 해당 system.exit()를 후킹하여, 어플리케이션을 종료하지 않는 스크립트 구문을 작성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1664382988508&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;running hook&quot;);
Java.perform(function() {
	console.log(&quot;script loaded!!&quot;);
	var exit = Java.use(&quot;java.lang.System&quot;);
	exit.exit.implementation = function() {
		console.log(&quot;[*] System.exit called&quot;);
	}
});&lt;/code&gt;&lt;/pre&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;1600&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceOzaA/btrNhDcZ8sy/tXUcFtQSnCi1HTnkWKjbh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceOzaA/btrNhDcZ8sy/tXUcFtQSnCi1HTnkWKjbh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceOzaA/btrNhDcZ8sy/tXUcFtQSnCi1HTnkWKjbh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceOzaA%2FbtrNhDcZ8sy%2FtXUcFtQSnCi1HTnkWKjbh0%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;1600&quot; height=&quot;664&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;664&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;h4 data-ke-size=&quot;size20&quot;&gt;2. Secret Key 얻기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초반에 같이 실행되던 verify부분으로 가보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664380451084&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void verify(View view) {
        String str;
        String obj = ((EditText) findViewById(2130837505)).getText().toString();
        AlertDialog create = new AlertDialog.Builder(this).create();
        if (a.a(obj)) {
            create.setTitle(&quot;Success!&quot;);
            str = &quot;This is the correct secret.&quot;;
        } else {
            create.setTitle(&quot;Nope...&quot;);
            str = &quot;That's not it. Try again.&quot;;
        }
        create.setMessage(str);
        create.setButton(-3, &quot;OK&quot;, new DialogInterface.OnClickListener() { // from class: sg.vantagepoint.uncrackable1.MainActivity.2
            @Override // android.content.DialogInterface.OnClickListener
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
            }
        });
        create.show();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력한 String을 obj에 저장한 후 a.a()에 집어 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664380864508&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class a {
    public static boolean a(String str) {
        byte[] bArr;
        byte[] bArr2 = new byte[0];
        try {
            bArr = sg.vantagepoint.a.a.a(b(&quot;8d127684cbc37c17616d806cf50473cc&quot;), Base64.decode(&quot;5UJiFctbmgbDoLXmpL12mkno8HT4Lv8dlat8FxR2GOc=&quot;, 0));
        } catch (Exception e) {
            Log.d(&quot;CodeCheck&quot;, &quot;AES error:&quot; + e.getMessage());
            bArr = bArr2;
        }
        return str.equals(new String(bArr));
    }

    public static byte[] b(String str) {
        int length = str.length();
        byte[] bArr = new byte[length / 2];
        for (int i = 0; i &amp;lt; length; i += 2) {
            bArr[i / 2] = (byte) ((Character.digit(str.charAt(i), 16) &amp;lt;&amp;lt; 4) + Character.digit(str.charAt(i + 1), 16));
        }
        return bArr;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a.a()를 살펴보면 &lt;span style=&quot;color: #000000;&quot;&gt;8d127684cbc37c17616d806cf50473cc를 b()에 넣은 값과, 5UJiFctbmgbDoLXmpL12mkno8HT4Lv8dlat8FxR2GOc=를 Base64로 디코딩한 값을,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sg.vantagepoint.a.a.a&lt;/span&gt;()를 호출하여 bArr에 저장한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664381126829&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package sg.vantagepoint.a;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/* loaded from: C:\Users\JaeKyeom\AppData\Local\Temp\jadx-14703332321562638944.dex */
public class a {
    public static byte[] a(byte[] bArr, byte[] bArr2) {
        SecretKeySpec secretKeySpec = new SecretKeySpec(bArr, &quot;AES/ECB/PKCS7Padding&quot;);
        Cipher cipher = Cipher.getInstance(&quot;AES&quot;);
        cipher.init(2, secretKeySpec);
        return cipher.doFinal(bArr2);
    }
}&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;sg.vanagepoint.a.a.a()를 보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AES복호화를 진행하는 구문이다.&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;span style=&quot;color: #000000;&quot;&gt;후킹한 리턴 값을 retval 변수에 하나씩 저장하고, 그 변수들을 secret_string에 합쳐서 문자열 형태로 저장해 출력시키는 스크립트를 작성했다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664382060689&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;!!!!!&quot;)
	Java.perform(function() {
		console.log(&quot;script loaded!!&quot;);

	var a = Java.use(&quot;sg.vantagepoint.a.a&quot;);
	a.a.implementation = function(a,b) {
		console.log(&quot;[*]Hooking in a Class&quot;);
		var retVal = this.a(a,b);
		var passcode='';
		for(var i=0;i&amp;lt;retVal.length;i++){
			passcode+=String.fromCharCode(retVal[i]);
		}
		console.log(&quot;Secret Key : &quot; + passcode);
		return retVal;
	}
});&lt;/code&gt;&lt;/pre&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;780&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7GCp8/btrNjrpaHyu/1aQ86Wirzcyk1Np1IwxXL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7GCp8/btrNjrpaHyu/1aQ86Wirzcyk1Np1IwxXL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7GCp8/btrNjrpaHyu/1aQ86Wirzcyk1Np1IwxXL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7GCp8%2FbtrNjrpaHyu%2F1aQ86Wirzcyk1Np1IwxXL0%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;780&quot; height=&quot;488&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qZj56/btrNjzOa3f8/8iGNU2pajCRkjYo7Bo2UMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qZj56/btrNjzOa3f8/8iGNU2pajCRkjYo7Bo2UMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qZj56/btrNjzOa3f8/8iGNU2pajCRkjYo7Bo2UMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqZj56%2FbtrNjzOa3f8%2F8iGNU2pajCRkjYo7Bo2UMK%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;1635&quot; height=&quot;707&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얻어낸 secret key를 입력하면 성공적으로 풀이할 수 있다.&lt;/p&gt;</description>
      <category>앱 모의해킹/Uncrackable</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/18</guid>
      <comments>https://yookyeom105.tistory.com/18#entry18comment</comments>
      <pubDate>Thu, 29 Sep 2022 01:40:17 +0900</pubDate>
    </item>
    <item>
      <title>[AndroGoat] Network Intercepting</title>
      <link>https://yookyeom105.tistory.com/17</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Androgoat - Network Intercepting&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSL 피닝문제이다. Nox를 버프슈트와 연결한 후, http와 https버튼을 누르면 각각의 패킷이 성공적으로 잡히는것을 볼 수 있다. 하지만 CERTIFICATE PINNING 버튼을 누르면 그렇지 않다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1KDWY/btrMiKbQgew/OKoLZhk8oIQ83AjrgcAJz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1KDWY/btrMiKbQgew/OKoLZhk8oIQ83AjrgcAJz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1KDWY/btrMiKbQgew/OKoLZhk8oIQ83AjrgcAJz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1KDWY%2FbtrMiKbQgew%2FOKoLZhk8oIQ83AjrgcAJz0%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;1582&quot; height=&quot;804&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uic6j/btrMhWxzwzN/zkeWtrMNrnPYpKm0333nXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uic6j/btrMhWxzwzN/zkeWtrMNrnPYpKm0333nXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uic6j/btrMhWxzwzN/zkeWtrMNrnPYpKm0333nXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuic6j%2FbtrMhWxzwzN%2FzkeWtrMNrnPYpKm0333nXK%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;811&quot; height=&quot;296&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wgpn4/btrMffq3FM6/h8l3eHhnWIFkjufYtnCTw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wgpn4/btrMffq3FM6/h8l3eHhnWIFkjufYtnCTw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wgpn4/btrMffq3FM6/h8l3eHhnWIFkjufYtnCTw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwgpn4%2FbtrMffq3FM6%2Fh8l3eHhnWIFkjufYtnCTw1%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;783&quot; height=&quot;266&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;266&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;h3 data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;trafficActivity.smali 파일을보면&lt;/p&gt;
&lt;pre id=&quot;code_1663319565771&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public final String getHttpurl() {
        return this.httpurl;
    }

    public final void setHttpurl(String str) {
        Intrinsics.checkParameterIsNotNull(str, &quot;&amp;lt;set-?&amp;gt;&quot;);
        this.httpurl = str;
    }

    public final String getHttpsurl() {
        return this.httpsurl;
    }

    public final void setHttpsurl(String str) {
        Intrinsics.checkParameterIsNotNull(str, &quot;&amp;lt;set-?&amp;gt;&quot;);
        this.httpsurl = str;
    }&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;해당함수를 통해서,http와 https버튼을 누를때, http url과 https url을 넘겨주게된다.&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_1663320461614&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public final void run(String url) {
        Intrinsics.checkParameterIsNotNull(url, &quot;url&quot;);
        try {
            Request request = new Request.Builder().url(url).build();
            Toast.makeText(this, &quot;Request sent to &quot; + url + &quot; Please intercept using Proxy&quot;, 1).show();
            this.client.newCall(request).enqueue(new Callback()
       		}
        catch (Exception e) {
            e.printStackTrace();
        	}
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;run함수에서는 Request.Builder를 이용하여 요청을 발생시킨다.&lt;span style=&quot;background-color: #1e1f21; color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;final class TrafficActivity$doPinning$1 extends Lambda implements Function1&amp;lt;AnkoAsyncContext&amp;lt;TrafficActivity&amp;gt;, Unit&amp;gt; {
    public static final TrafficActivity$doPinning$1 INSTANCE = new TrafficActivity$doPinning$1();

    TrafficActivity$doPinning$1() {
        super(1);
    }

    @Override // kotlin.jvm.functions.Function1
    /* renamed from: invoke */
    public /* bridge */ /* synthetic */ Unit mo1134invoke(AnkoAsyncContext&amp;lt;TrafficActivity&amp;gt; ankoAsyncContext) {
        invoke2(ankoAsyncContext);
        return Unit.INSTANCE;
    }

    /* renamed from: invoke  reason: avoid collision after fix types in other method */
    public final void invoke2(AnkoAsyncContext&amp;lt;TrafficActivity&amp;gt; receiver) {
        Intrinsics.checkParameterIsNotNull(receiver, &quot;$receiver&quot;);
        try {
            CertificatePinner pinner1 = new CertificatePinner.Builder().add(&quot;owasp.org&quot;, &quot;sha256/gdU/UHClHJBFbIdeKuyHm/Lq/aQvMLyuTtcvTEE/1JQ=&quot;).add(&quot;owasp.org&quot;, &quot;sha256/YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=&quot;).add(&quot;owasp.org&quot;, &quot;sha256/Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys=&quot;).build();
            OkHttpClient client = new OkHttpClient.Builder().certificatePinner(pinner1).build();
            Request.Builder builder = new Request.Builder();
            Request request = builder.url(&quot;https://owasp.org&quot;).build();
            Response response = client.newCall(request).execute();
            ResponseBody body = response.body();
            Log.v(&quot;Response&quot;, body != null ? body.string() : null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Certificate pinning버튼을 누를경우 CertificatePinner를 통해 &quot;https://owasp.org&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;프리다를 통해 자바스크립트 코드를 작성해서 CertificatePinner클래스의 check를 후킹해볼것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1663322190747&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Script loaded successfully&quot;);
Java.perform(function x() {
    console.log(&quot;java perform function&quot;);
    var CertificatePinner = Java.use('okhttp3.CertificatePinner');
    CertificatePinner.check.overload('java.lang.String','java.util.List').implementation = function (p0, p1) {
        console.log('! Intercepted okhttp3: ' + p0);
        return;
    };
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프리다로 코드를 실행해보면, BurpSuite에서 패킷이 잡히는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J79hM/btrMiPzhHgO/a0GrGJZwuqYKOeEpkNUACK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J79hM/btrMiPzhHgO/a0GrGJZwuqYKOeEpkNUACK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J79hM/btrMiPzhHgO/a0GrGJZwuqYKOeEpkNUACK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ79hM%2FbtrMiPzhHgO%2Fa0GrGJZwuqYKOeEpkNUACK%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;777&quot; height=&quot;348&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;348&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ4jON/btrMkNzu0qP/0vrhLL8Vnjc5IxookX6Rwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ4jON/btrMkNzu0qP/0vrhLL8Vnjc5IxookX6Rwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ4jON/btrMkNzu0qP/0vrhLL8Vnjc5IxookX6Rwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ4jON%2FbtrMkNzu0qP%2F0vrhLL8Vnjc5IxookX6Rwk%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;846&quot; height=&quot;311&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>앱 모의해킹/AndroGoat</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/17</guid>
      <comments>https://yookyeom105.tistory.com/17#entry17comment</comments>
      <pubDate>Fri, 16 Sep 2022 19:01:10 +0900</pubDate>
    </item>
    <item>
      <title>[AndroGoat] Binary Patching</title>
      <link>https://yookyeom105.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;AndroGoat - Binary Patching&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문제는Admin 권한을 활성화 시켜서 해당버튼을누르면 되는 문제이다.&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;1582&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd9J19/btrMe67mzCH/EqI5Cj34GQbfO19OIyxKrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd9J19/btrMe67mzCH/EqI5Cj34GQbfO19OIyxKrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd9J19/btrMe67mzCH/EqI5Cj34GQbfO19OIyxKrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd9J19%2FbtrMe67mzCH%2FEqI5Cj34GQbfO19OIyxKrk%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;1582&quot; height=&quot;383&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Smali변조를 통해서 해당 문제를 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jadx로 BinaryPatching.smali 파일을 열어보면 다음과 같은 구문을 볼 수있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;onCreate에서 if(this.Admin) 을 보면 is.Admin이라는함수에서 어드민 여부를 검사하는것을 알 수 있다.&lt;/p&gt;
&lt;pre data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_binary_patching);

        if (this.isAdmin) {

            TextView isAdminText = (TextView) _$_findCachedViewById(R.id.isAdminText);

            Intrinsics.checkExpressionValueIsNotNull(isAdminText, &quot;isAdminText&quot;);

            isAdminText.setText(&quot;You are Admin Now&quot;);

            Button adminButton = (Button) _$_findCachedViewById(R.id.adminButton);

            Intrinsics.checkExpressionValueIsNotNull(adminButton, &quot;adminButton&quot;);

            adminButton.setEnabled(true);

        }

        ((Button) _$_findCachedViewById(R.id.adminButton)).setOnClickListener(new View.OnClickListener() { // from class: owasp.sat.agoat.BinaryPatchingActivity$onCreate$1

            @Override // android.view.View.OnClickListener&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;BinaryPatching.smali 파일을 에디터로 열어서 if 부분을 변경해준다.&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;516&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eigcsQ/btrMd5Pr5rO/Vk2t2I9QIGp0x02qYSoll1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eigcsQ/btrMd5Pr5rO/Vk2t2I9QIGp0x02qYSoll1/img.png&quot; data-alt=&quot;수정 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eigcsQ/btrMd5Pr5rO/Vk2t2I9QIGp0x02qYSoll1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeigcsQ%2FbtrMd5Pr5rO%2FVk2t2I9QIGp0x02qYSoll1%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;516&quot; height=&quot;101&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수정 전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bR5ns3/btrMhCLQe85/NUnDyuklkWT1e5aYvCBfC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bR5ns3/btrMhCLQe85/NUnDyuklkWT1e5aYvCBfC0/img.png&quot; data-alt=&quot;수정 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bR5ns3/btrMhCLQe85/NUnDyuklkWT1e5aYvCBfC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbR5ns3%2FbtrMhCLQe85%2FNUnDyuklkWT1e5aYvCBfC0%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;506&quot; height=&quot;94&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;94&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;조건문이 참인 조건을 반대로 변경해주어서, admin이라고 인식하게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apk easy tool을 통해서 컴파일 후, 설치해주면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RwZ4a/btrMekrY5Pi/NoslfgPHgwD2rbQCYKLOGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RwZ4a/btrMekrY5Pi/NoslfgPHgwD2rbQCYKLOGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RwZ4a/btrMekrY5Pi/NoslfgPHgwD2rbQCYKLOGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRwZ4a%2FbtrMekrY5Pi%2FNoslfgPHgwD2rbQCYKLOGK%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;1570&quot; height=&quot;796&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 버튼이 활성화 된다.&lt;/p&gt;</description>
      <category>앱 모의해킹/AndroGoat</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/16</guid>
      <comments>https://yookyeom105.tistory.com/16#entry16comment</comments>
      <pubDate>Fri, 16 Sep 2022 13:15:28 +0900</pubDate>
    </item>
    <item>
      <title>[AndroGoat] Emulator Detection bypass</title>
      <link>https://yookyeom105.tistory.com/15</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;AndroGoat - Emulator Detection&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제는 AndroGoat에 있는 에뮬레이터탐지를 우회하기 위한 문제이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;927&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwQa1Q/btrL8SJlSIW/yypfgQrqAh6T51lso17ds0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwQa1Q/btrL8SJlSIW/yypfgQrqAh6T51lso17ds0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwQa1Q/btrL8SJlSIW/yypfgQrqAh6T51lso17ds0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwQa1Q%2FbtrL8SJlSIW%2FyypfgQrqAh6T51lso17ds0%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;1628&quot; height=&quot;927&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;927&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nox를 통해 Emulator Detection에서 Check Emulator 버튼을 누르면 에뮬레이터가 아니라고 나온다.&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_1663167856830&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public final boolean isEmulator() {
        String str = Build.FINGERPRINT + Build.DEVICE + Build.MODEL + Build.BRAND + Build.PRODUCT + Build.MANUFACTURER + Build.HARDWARE;
        if (str != null) {
            String builddtls = str.toLowerCase();
            Intrinsics.checkExpressionValueIsNotNull(builddtls, &quot;(this as java.lang.String).toLowerCase()&quot;);
            return StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;generic&quot;, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) EnvironmentCompat.MEDIA_UNKNOWN, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;emulator&quot;, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;sdk&quot;, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;vbox&quot;, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;genymotion&quot;, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;x86&quot;, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;goldfish&quot;, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) &quot;test-keys&quot;, false, 2, (Object) null);
        }
        throw new TypeCastException(&quot;null cannot be cast to non-null type java.lang.String&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EmulatorDetectionActivity를 jadx로 열었을 때, isEmulator()함수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수는 6번째줄을 통해서 &quot;generic&quot;,&quot;emulator&quot;,&quot;sdk&quot;,&quot;vbox&quot; 등등 에뮬레이터 정보를 이용한 탐지를 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;김남수, 김성호, 박민수 and 조성제. (2021). 모바일 게임용 안드로이드 에뮬레이터 탐지 기법. 한국소프트웨어감정평가학회 논문지, 17(1), 41-50.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 참고하면 기존탐지기법에 해당하는 에뮬레이터의 특징이 Nox에 포함되어 있지않아 탐지하지 못한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr4EW5/btrMabnmOXB/o2PT7xJsk8ro8anMQ1C3v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr4EW5/btrMabnmOXB/o2PT7xJsk8ro8anMQ1C3v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr4EW5/btrMabnmOXB/o2PT7xJsk8ro8anMQ1C3v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr4EW5%2FbtrMabnmOXB%2Fo2PT7xJsk8ro8anMQ1C3v1%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;370&quot; height=&quot;750&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수가 Nox를 에뮬레이터로 탐지하지 못하므로, 반대로 에뮬레이터로 탐지하게끔 하는 실습을 진행할 예정이다.&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;문제풀이&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Smali 변조를 통한 우회&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caotvO/btrL7uu9SsK/a9W5qYHdqN28xnJMACkuB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caotvO/btrL7uu9SsK/a9W5qYHdqN28xnJMACkuB1/img.png&quot; data-alt=&quot;수정 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caotvO/btrL7uu9SsK/a9W5qYHdqN28xnJMACkuB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaotvO%2FbtrL7uu9SsK%2Fa9W5qYHdqN28xnJMACkuB1%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;399&quot; height=&quot;210&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;210&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;해당 부분이 에뮬레이터의 정보를 받아온 후, 반환해주는 부분이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;336라인과 337라인 사이에 return true를 넣어서 항상 에뮬레이터로 탐지하게끔 하는 것이 목표이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;423&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xjjVt/btrMabHFzrX/NO2uoCvpqePQxKkIuIF5Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xjjVt/btrMabHFzrX/NO2uoCvpqePQxKkIuIF5Nk/img.png&quot; data-alt=&quot;수정 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xjjVt/btrMabHFzrX/NO2uoCvpqePQxKkIuIF5Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxjjVt%2FbtrMabHFzrX%2FNO2uoCvpqePQxKkIuIF5Nk%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;423&quot; height=&quot;211&quot; data-origin-width=&quot;423&quot; data-origin-height=&quot;211&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;실행해보면 성공적으로 에뮬레이터로 탐지하는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJBE2/btrMbz87KPL/6IJCcctz0W7pGJKnzJUO0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJBE2/btrMbz87KPL/6IJCcctz0W7pGJKnzJUO0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJBE2/btrMbz87KPL/6IJCcctz0W7pGJKnzJUO0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJBE2%2FbtrMbz87KPL%2F6IJCcctz0W7pGJKnzJUO0K%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;1632&quot; height=&quot;929&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프리다를 통한 우회&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1663300662624&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Script loaded successfully&quot;);
Java.perform(function x() {
	console.log(&quot;Inside function&quot;);
	var my_class = Java.use(
		&quot;owasp.sat.agoat.EmulatorDetectionActivity&quot;);
		console.log(&quot;check&quot;)
	my_class.isEmulator.implementation = function (args) {
		console.log(&quot;\ncomplete!!!!&quot;)
		return true;
	};
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 스크립트를 통해서 항상 t값을반환하게 하여, 항상 에뮬레이터라고 인식하게해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1663300759994&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;frida -U -f owasp.sat.agoat -l 자바스크립트 --no-pause&lt;/code&gt;&lt;/pre&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-origin-width=&quot;1632&quot; data-origin-height=&quot;928&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cabtrz/btrMecOeFV4/QUrjzC2TCOw8lBGT6RWVK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cabtrz/btrMecOeFV4/QUrjzC2TCOw8lBGT6RWVK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cabtrz/btrMecOeFV4/QUrjzC2TCOw8lBGT6RWVK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcabtrz%2FbtrMecOeFV4%2FQUrjzC2TCOw8lBGT6RWVK0%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;1632&quot; height=&quot;928&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;928&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>앱 모의해킹/AndroGoat</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/15</guid>
      <comments>https://yookyeom105.tistory.com/15#entry15comment</comments>
      <pubDate>Fri, 16 Sep 2022 12:59:52 +0900</pubDate>
    </item>
    <item>
      <title>[AndroGoat] Root Detection Bypass</title>
      <link>https://yookyeom105.tistory.com/14</link>
      <description>&lt;h1&gt;AndroGoat - 루팅탐지 우회&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AndroGoat라는 실습용 앱을 통해서 앱후킹 및 탐지우회들을 실습해볼 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AndroGoat는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/satishpatnayak/MyTest&quot;&gt;https://github.com/satishpatnayak/MyTest&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 다운받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 실습과 마찬가지로 앱을 다운받고 APK EASY TOOL을 써서 디컴파일 시켜줬다.&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://yookyeom105.tistory.com/6&quot;&gt;https://yookyeom105.tistory.com/6&lt;/a&gt;)&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;문제풀이&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;923&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by7DJm/btrMaedfrEY/AQ3cKaxaWfkwJ6Rdrd0mQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by7DJm/btrMaedfrEY/AQ3cKaxaWfkwJ6Rdrd0mQ1/img.png&quot; data-alt=&quot;Root Detection&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by7DJm/btrMaedfrEY/AQ3cKaxaWfkwJ6Rdrd0mQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby7DJm%2FbtrMaedfrEY%2FAQ3cKaxaWfkwJ6Rdrd0mQ1%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;1634&quot; height=&quot;923&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;923&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Root Detection&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AndroGoat앱을 설치 후 앱을 실행해보면 Root Detection이라는 항목이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Check Root버튼을 눌러보면, 디바이스가 루팅되었다고 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 에뮬레이터 또는 안드로이드 기기가 루팅이 되었는지 확인해주는 부분인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, CHECK ROOT 버튼을 눌렀을 때, 어떠한 함수가 실행되는지 확인해봐야 한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 알려진 메소드 코드인 &lt;a href=&quot;https://github.com/0xdea/frida-scripts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/0xdea/frida-scripts&lt;/a&gt; 에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크립트 코드를 참고하여, 실행되는 Method들을 추적해봤다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;947&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mx1Xh/btrMHJk9YQn/CYjxIwxNRosgPJE3olckP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mx1Xh/btrMHJk9YQn/CYjxIwxNRosgPJE3olckP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mx1Xh/btrMHJk9YQn/CYjxIwxNRosgPJE3olckP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMx1Xh%2FbtrMHJk9YQn%2FCYjxIwxNRosgPJE3olckP0%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;719&quot; height=&quot;947&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;947&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CHECK ROOT 버튼을 눌렀을 때, is rooted() 함수가 실행되는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xBJT2/btrMUkynd0q/eG4enGg3nOjkDjp2qIH24k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xBJT2/btrMUkynd0q/eG4enGg3nOjkDjp2qIH24k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xBJT2/btrMUkynd0q/eG4enGg3nOjkDjp2qIH24k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxBJT2%2FbtrMUkynd0q%2FeG4enGg3nOjkDjp2qIH24k%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;1181&quot; height=&quot;371&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 부분을 Smali 변조와, Frida를 통한 후킹을 통한 변조를 통해서,&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;h2 data-ke-size=&quot;size26&quot;&gt;1. smali변조를 통한 루팅탐지 우회&lt;/h2&gt;
&lt;pre id=&quot;code_1663161201059&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public final boolean isRooted() {
        String[] file = {&quot;/system/app/Superuser/Superuser.apk&quot;, &quot;/system/app/Superuser.apk&quot;, &quot;/sbin/su&quot;, &quot;/system/bin/su&quot;, &quot;/system/xbin/su&quot;, &quot;/data/local/xbin/su&quot;, &quot;/data/local/bin/su&quot;, &quot;/system/sd/xbin/su&quot;, &quot;/system/bin/failsafe/su&quot;, &quot;/data/local/su&quot;, &quot;/su/bin/su&quot;, &quot;re.robv.android.xposed.installer-1.apk&quot;, &quot;/data/app/eu.chainfire.supersu-1/base.apk&quot;};
        boolean result = false;
        for (String files : file) {
            File f = new File(files);
            result = f.exists();
            if (result) {
                break;
            }
        }
        return result;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RootDetectionActivity.smali파일을&amp;nbsp; jadx로 열어보면 다음과 같은 함수가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열로 되었는 file변수를 확인해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/app/Superuser/Superuser.apk&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/app/Superuser.apk&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/sbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/bin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/xbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/local/xbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/local/bin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/sd/xbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/bin/failsafe/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/local/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/su/bin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;re.robv.android.xposed.installer-1.apk&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/app/eu.chainfire.supersu-1/base.apk&quot;&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;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. su 바이너리 탐지&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;해당 함수의 탐지목록에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/sbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/bin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/xbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/local/xbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/local/bin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/sd/xbin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/bin/failsafe/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/local/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/su/bin/su&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등이 해당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;루팅을 하는경우 시스템 권한을 이용하기 위해 각 디렉토리에 &quot;su&quot;파일을 남겨놓게 된다.&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;h4 data-ke-size=&quot;size20&quot;&gt;2. 패키지 리스트 탐지&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수의 탐지 목록에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/app/Superuser/Superuser.apk&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/system/app/Superuser.apk&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;re.robv.android.xposed.installer-1.apk&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;/data/app/eu.chainfire.supersu-1/base.apk&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등이 해당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;루팅과 관련된 apk파일들을 탐지하는 기법이다.&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;RootDetectionActivity.smali파일을 에디터로 열고,&amp;nbsp; 파일 내에서 &quot;탐지경로&quot;에 해당하는 부분을&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-origin-width=&quot;933&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dI43dy/btrMbxKa5D7/2VyXXnkAOQRONt8V2lhwkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dI43dy/btrMbxKa5D7/2VyXXnkAOQRONt8V2lhwkK/img.png&quot; data-alt=&quot;수정 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dI43dy/btrMbxKa5D7/2VyXXnkAOQRONt8V2lhwkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdI43dy%2FbtrMbxKa5D7%2F2VyXXnkAOQRONt8V2lhwkK%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;745&quot; height=&quot;240&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;301&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zH8KV/btrMabAP7hS/lyyIVn0WUkTjo3691pgUK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zH8KV/btrMabAP7hS/lyyIVn0WUkTjo3691pgUK1/img.png&quot; data-alt=&quot;수정 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zH8KV/btrMabAP7hS/lyyIVn0WUkTjo3691pgUK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzH8KV%2FbtrMabAP7hS%2FlyyIVn0WUkTjo3691pgUK1%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;607&quot; height=&quot;237&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;237&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;h3 data-ke-size=&quot;size23&quot;&gt;2. Frida를 통한 루팅탐지 우회&lt;/h3&gt;
&lt;pre id=&quot;code_1663163606256&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Script loaded successfully &quot;);
Java.perform(function x() {
	console.log(&quot;Inside java perform function&quot;);
	var my_class = Java.use (
	&quot;owasp.sat.agoat.RootDetectionActivity&quot;);

	my_class.isRooted.implementation = function (args) {
		console.log(&quot;\n0**********************************&quot;)
		return false;
};

})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 자바스크립트를 통해 isRooted함수의 반환값을 false로 바꿔서 반드시 루팅탐지가 되어있지 않다고 바꾼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1663164865894&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;frida -U -f owasp.sat.agoat -l test.js --no-pause&lt;/code&gt;&lt;/pre&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-origin-width=&quot;769&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs5OZT/btrL9JR82df/GVMfmbLQTbfWS9XFGFXUN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs5OZT/btrL9JR82df/GVMfmbLQTbfWS9XFGFXUN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs5OZT/btrL9JR82df/GVMfmbLQTbfWS9XFGFXUN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs5OZT%2FbtrL9JR82df%2FGVMfmbLQTbfWS9XFGFXUN1%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;769&quot; height=&quot;344&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/donDYa/btrL808b9N7/a3aJBPGIbdz1k4r4zwOJKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/donDYa/btrL808b9N7/a3aJBPGIbdz1k4r4zwOJKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/donDYa/btrL808b9N7/a3aJBPGIbdz1k4r4zwOJKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdonDYa%2FbtrL808b9N7%2Fa3aJBPGIbdz1k4r4zwOJKk%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;1638&quot; height=&quot;929&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>앱 모의해킹/AndroGoat</category>
      <category>AndroGoat</category>
      <category>Frida</category>
      <category>smali</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/14</guid>
      <comments>https://yookyeom105.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 14 Sep 2022 23:16:26 +0900</pubDate>
    </item>
    <item>
      <title>[injuredandroid.apk] Flag Six - Login3</title>
      <link>https://yookyeom105.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Login 1,2 문제와 마찬가지로 특정 플래그 값을 입력하여 푸는 문제이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1629&quot; data-origin-height=&quot;927&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB8az3/btrLOno7t6h/yKGnoSLkbfULKtNYGc2zX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB8az3/btrLOno7t6h/yKGnoSLkbfULKtNYGc2zX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB8az3/btrLOno7t6h/yKGnoSLkbfULKtNYGc2zX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB8az3%2FbtrLOno7t6h%2FyKGnoSLkbfULKtNYGc2zX1%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;718&quot; height=&quot;409&quot; data-origin-width=&quot;1629&quot; data-origin-height=&quot;927&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;h3 data-ke-size=&quot;size23&quot;&gt;문제풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1662958744885&quot; class=&quot;reasonml&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public final void submitFlag(View view) {
        EditText editText = (EditText) findViewById(i.editText3);
        d.m.b.d.b(editText, &quot;editText3&quot;);
        if (d.m.b.d.a(editText.getText().toString(), k.a(&quot;k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ==&quot;))) {
            Intent intent = new Intent(this, FlagOneSuccess.class);
            FlagsOverview.D = true;
            new j().b(this, &quot;flagSixButtonColor&quot;, true);
            startActivity(intent);
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FlagSixLoginActivity중 submitFlag 부분만 가져왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문을 통해, 입력받은 값과 k클래스의 a(k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ==)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값과 비교한다는 것을 알 수 있다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;public static String a(String str) {
    if (c(str)) {
        try {
            SecretKey generateSecret = SecretKeyFactory.getInstance(&quot;DES&quot;).generateSecret(new DESKeySpec(f1917a));
            byte[] decode = Base64.decode(str, 0);
            Cipher cipher = Cipher.getInstance(&quot;DES&quot;);
            cipher.init(2, generateSecret);
            return new String(cipher.doFinal(decode));
        } catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException | BadPaddingException | IllegalBlockSizeException | NoSuchPaddingException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println(&quot;Not a string!&quot;);
    }
    return str;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 따라가보면 입력받은 값을 Base64로 디코딩하여, DES를 통한 암호화를 진행하는 것을 알 수 있다.&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;이번엔 Frida를 이용해서 애플리케이션 내부에 자바스크립트 코드를 삽입하여 복호화를 진행해볼 예정이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZL9Oc/btrLPcOuy5V/ZD1x7uEcFu94OaueQYTkN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZL9Oc/btrLPcOuy5V/ZD1x7uEcFu94OaueQYTkN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZL9Oc/btrLPcOuy5V/ZD1x7uEcFu94OaueQYTkN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZL9Oc%2FbtrLPcOuy5V%2FZD1x7uEcFu94OaueQYTkN1%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;526&quot; height=&quot;54&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 adb shell 을 통해서 nox에서 프리다 서버를 실행시켜준다.&lt;/p&gt;
&lt;pre id=&quot;code_1662960138313&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;frida -U b3nac.injuredandroid -l 실행시킬 자바스크립트파일&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;자바 스크립트 파일은 아래와 같이 작성해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1662983701163&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Script loaded successfully&quot;);
Java.perform(function x() {
	var my_class = Java.use(&quot;b3nac.injuredandroid.k&quot;);

	var string_class = Java.use(&quot;java.lang.String&quot;);

	my_class.a.overload(&quot;java.lang.String&quot;).implementation = function (args) {

		var my_string = string_class.$new(&quot;k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ==&quot;);
		var ret = this.a(my_string);
		console.log(&quot;Return value: &quot; + ret);
		return ret;
	};
});&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;d.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjohLp/btrLYkECkjd/Hh5bSMywRRsBGoztHKBYOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjohLp/btrLYkECkjd/Hh5bSMywRRsBGoztHKBYOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjohLp/btrLYkECkjd/Hh5bSMywRRsBGoztHKBYOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjohLp%2FbtrLYkECkjd%2FHh5bSMywRRsBGoztHKBYOK%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;760&quot; height=&quot;332&quot; data-filename=&quot;d.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;332&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;</description>
      <category>앱 모의해킹/Injuredandroid.apk</category>
      <author>Kye0m</author>
      <guid isPermaLink="true">https://yookyeom105.tistory.com/13</guid>
      <comments>https://yookyeom105.tistory.com/13#entry13comment</comments>
      <pubDate>Mon, 12 Sep 2022 20:56:56 +0900</pubDate>
    </item>
  </channel>
</rss>