<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Patrice Tisserand</title>
    <description>The latest articles on DEV Community by Patrice Tisserand (@ptisserand).</description>
    <link>https://dev.to/ptisserand</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F61295%2Fe0b9e0a0-b084-42e5-b923-b093edecfbe5.png</url>
      <title>DEV Community: Patrice Tisserand</title>
      <link>https://dev.to/ptisserand</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ptisserand"/>
    <language>en</language>
    <item>
      <title>Mitmproxy and android emulator</title>
      <dc:creator>Patrice Tisserand</dc:creator>
      <pubDate>Tue, 31 Mar 2020 22:11:13 +0000</pubDate>
      <link>https://dev.to/ptisserand/mitmproxy-and-android-emulator-206b</link>
      <guid>https://dev.to/ptisserand/mitmproxy-and-android-emulator-206b</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.mitmproxy.org/stable/howto-install-system-trusted-ca-android/"&gt;https://docs.mitmproxy.org/stable/howto-install-system-trusted-ca-android/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using &lt;a href="https://mitmproxy.org/"&gt;mitmproxy&lt;/a&gt;, it's possible to analyze HTTP(s) communication made by an application running in android emulator.&lt;/p&gt;

&lt;h1&gt;
  
  
  mitmproxy setup
&lt;/h1&gt;

&lt;p&gt;To ease mitmproxy running, I'm using the following docker-compose.yml:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;External mitmproxy docker volume needs to be created with the following command:&lt;br&gt;
&lt;code&gt;$ docker volume create mitmproxy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once done, you can start mitmproxy:&lt;br&gt;
&lt;code&gt;$ docker-compose up&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The mitmproxy web interface is available at &lt;a href="http://localhost:8081"&gt;http://localhost:8081&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once started, mitmproxy will generate a certificate which you have to retrieve.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /tmp/mycert
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;pushd&lt;/span&gt; /tmp/mycert
&lt;span class="nv"&gt;$ &lt;/span&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/out &lt;span class="nt"&gt;-v&lt;/span&gt; mitmproxy:/in alpine &lt;span class="nb"&gt;cp&lt;/span&gt; /in/mitmproxy-ca-cert.cer /out
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;mitmproxy-ca-cert.cer &lt;span class="si"&gt;$(&lt;/span&gt;openssl x509 &lt;span class="nt"&gt;-inform&lt;/span&gt; PEM &lt;span class="nt"&gt;-subject_hash_old&lt;/span&gt; &lt;span class="nt"&gt;-in&lt;/span&gt; mitmproxy-ca-cert.cer | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Android emulator setup
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Proxy settings
&lt;/h2&gt;

&lt;p&gt;To use your mitmproxy, you need to configure proxy settings in android emulator&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4SD5Qb5r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b2cc4rw6wn41rj5291f7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4SD5Qb5r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b2cc4rw6wn41rj5291f7.png" alt="Emulator Proxy Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have done this settings, you can't anymore browse HTTPS webpage:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cC-j03zl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/je71zgirgk6mg1zlhubn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cC-j03zl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/je71zgirgk6mg1zlhubn.png" alt="Invalid certificate"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You need to install your generated mitmproxy certificate.&lt;/p&gt;
&lt;h3&gt;
  
  
  Permanent certificate installation using ADB
&lt;/h3&gt;

&lt;p&gt;Please note that permanent certificate installation could only be done with a NON google play images.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--diHcEPJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ssig5vrly6yd6o7sfv3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--diHcEPJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ssig5vrly6yd6o7sfv3c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the following commands to copy certificate to emulator (replace &lt;strong&gt;c8750f0d&lt;/strong&gt; by the &lt;strong&gt;hashed name&lt;/strong&gt; of mitmproxy-ca-cert.cer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;adb root
&lt;span class="nv"&gt;$ &lt;/span&gt;adb shell &lt;span class="s2"&gt;"mount -o rw,remount /"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;adb push c8750f0d.0 /system/etc/security/cacerts
&lt;span class="nv"&gt;$ &lt;/span&gt;adb shell &lt;span class="s2"&gt;"chmod 664 /system/etc/security/cacerts/c8750f0d.0"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;adb reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Certificate installation on google play images
&lt;/h3&gt;

&lt;p&gt;Once proxy is set, you need to go to &lt;strong&gt;mitm.it&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FyRpuQwb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/digxciifxse4t9p5ipmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FyRpuQwb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/digxciifxse4t9p5ipmx.png" alt="mitm.it"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then click to install your certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  After certificate is installed
&lt;/h2&gt;

&lt;p&gt;You can browse HTTPS webpage:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RBHmbg92--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rvvz27213hpkz50xx2r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RBHmbg92--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rvvz27213hpkz50xx2r6.png" alt="Dev.to valid"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iD_HYoaB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ynh9951a4jsgka7x31xf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iD_HYoaB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ynh9951a4jsgka7x31xf.png" alt="Certificate viewer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And at &lt;a href="http://localhost:8081"&gt;http://localhost:8081&lt;/a&gt;, you will have all your HTTP requests:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lC1_Kufu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z24o4zo4n7xwceczeltu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lC1_Kufu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z24o4zo4n7xwceczeltu.png" alt="mitmproxy flows"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For advanced usage, please refer to &lt;a href="https://mitmproxy.org/"&gt;mitmproxy homepage&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
    </item>
  </channel>
</rss>
