<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <title>做个俗人  贪财好色</title>
        <subtitle></subtitle>
        <icon>https://winston950213.github.io/images/favicon.ico</icon>
        <link>https://winston950213.github.io</link>
        <author>
          <name>折花载酒z</name>
        </author>
        <description>终是庄周梦了蝶 亦是情缘亦是劫</description>
        <language>zh-CN</language>
        <pubDate>Fri, 04 Nov 2022 06:49:43 +0000</pubDate>
        <lastBuildDate>Fri, 04 Nov 2022 06:49:43 +0000</lastBuildDate>
        <category term="Python" />
        <category term=" 爬虫" />
        <category term=" 逆向" />
        <category term=" 学习" />
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8F%8D%E9%80%89/</guid>
            <title>正则表达式反选</title>
            <link>https://winston950213.github.io/2022/11/04/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8F%8D%E9%80%89/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="tips" scheme="https://winston950213.github.io/tags/tips/" />
            <category term="正则" scheme="https://winston950213.github.io/tags/%E6%AD%A3%E5%88%99/" />
            <pubDate>Fri, 04 Nov 2022 06:49:43 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;正则表达式骚操作之反选&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;search-函数判断是否为-none&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#search-函数判断是否为-none&#34;&gt;#&lt;/a&gt; search 函数判断是否为 None&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;在有些时候我们使用 re 中的 search 的时候往往需要判断 search 里面的正则表达式是否为 None; 以前都是  &lt;code&gt;if ...else....&lt;/code&gt;  ; 这样当我们的正则表达式很长的时候写起来就和屎一样难看，虽然难看，但还是写了没办法～&lt;/li&gt;
&lt;li&gt;现在使用 bool () 就可以直接把 search 结果转换为 true or flase 可以直接判断 -----&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;bool(re.search(&#34;hi&#34;, &#34;abcdefghijkl&#34;))&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;True&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;bool(re.search(&#34;hi&#34;, &#34;abcdefgijkl&#34;))&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;False&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h2 id=&#34;正则表达式反选&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#正则表达式反选&#34;&gt;#&lt;/a&gt; 正则表达式反选&lt;/h2&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;p&gt;需要匹配出来 h1 标签 ps: 在实际开发中使用 h1 直接匹配太繁琐 so: 使用？！进行反选&lt;br /&gt;
 &lt;code&gt;&amp;lt;(?!div).\*?text-align: center.\*?/(?!div).\*?&amp;gt;&lt;/code&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/git%E6%8A%A5%E9%94%99%EF%BC%9A-fatal-remote-origin-already-exists/</guid>
            <title>git报错：&#39;fatal:remote origin already exists&#39;</title>
            <link>https://winston950213.github.io/2022/11/04/git%E6%8A%A5%E9%94%99%EF%BC%9A-fatal-remote-origin-already-exists/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <category term="git" scheme="https://winston950213.github.io/tags/git/" />
            <pubDate>Fri, 04 Nov 2022 06:47:04 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;只要两步，解决  &lt;code&gt;fatal:remote origin already exists&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先删除&lt;br /&gt;
 &lt;code&gt;$ git remote rm origin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;重新添加&lt;br /&gt;
 &lt;code&gt;git remote add origin git@github.com:username/repostery.git //关联本地仓库，远程库的名字为origin&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/win10%E5%AE%89%E8%A3%85mitmproxy%E6%8A%A5%E9%94%99-Failed-building-wheel-for-brotlipy/</guid>
            <title>win10安装mitmproxy报错&#39;Failed building wheel for brotlipy&#39;</title>
            <link>https://winston950213.github.io/2022/11/04/win10%E5%AE%89%E8%A3%85mitmproxy%E6%8A%A5%E9%94%99-Failed-building-wheel-for-brotlipy/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <category term="mitmproxy" scheme="https://winston950213.github.io/tags/mitmproxy/" />
            <pubDate>Fri, 04 Nov 2022 06:43:19 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;缺什么装什么&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;到这个网址下载 whl 文件，带路径安装&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL3d3dy5sZmQudWNpLmVkdS9+Z29obGtlL3B5dGhvbmxpYnMvI2x4bWw=&#34;&gt;Unofficial Windows Binaries for Python Extension Packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install xxx.whl&lt;/code&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/win10%E5%AE%89%E8%A3%85mitmproxy%EF%BC%8C%E6%88%90%E5%8A%9F%E4%B9%8B%E5%90%8E%E8%AE%BF%E9%97%AEmitm-it%E5%87%BA%E7%8E%B0%E4%B8%8D%E4%BA%86%E4%B8%8B%E8%BD%BD%E8%AF%81%E4%B9%A6%E9%A1%B5%E9%9D%A2/</guid>
            <title>win10安装mitmproxy，成功之后访问mitm.it出现不了下载证书页面</title>
            <link>https://winston950213.github.io/2022/11/04/win10%E5%AE%89%E8%A3%85mitmproxy%EF%BC%8C%E6%88%90%E5%8A%9F%E4%B9%8B%E5%90%8E%E8%AE%BF%E9%97%AEmitm-it%E5%87%BA%E7%8E%B0%E4%B8%8D%E4%BA%86%E4%B8%8B%E8%BD%BD%E8%AF%81%E4%B9%A6%E9%A1%B5%E9%9D%A2/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <category term="mitmproxy" scheme="https://winston950213.github.io/tags/mitmproxy/" />
            <category term="代理" scheme="https://winston950213.github.io/tags/%E4%BB%A3%E7%90%86/" />
            <category term="证书" scheme="https://winston950213.github.io/tags/%E8%AF%81%E4%B9%A6/" />
            <pubDate>Fri, 04 Nov 2022 06:41:09 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;浏览器代理老问题&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;错误重现&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#错误重现&#34;&gt;#&lt;/a&gt; 错误重现&lt;/h3&gt;
&lt;p&gt;所有都安装好之后，各种检测都通过时候依旧出现不了证书下载页面。&lt;/p&gt;
&lt;p&gt;此时检测一下浏览器或者计算机是否使用了代理【我就是因为使用了谷歌上网助手而导致不成功的 =-=】&lt;/p&gt;
&lt;h3 id=&#34;解决方法&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#解决方法&#34;&gt;#&lt;/a&gt; 解决方法&lt;/h3&gt;
&lt;p&gt;关闭所有代理工具，使用系统代理&lt;/p&gt;
&lt;h3 id=&#34;插件推荐&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#插件推荐&#34;&gt;#&lt;/a&gt; 插件推荐&lt;/h3&gt;
&lt;p&gt;使用 SwitchyOmega 是所有流量切换到固定端口，监听此端口&lt;/p&gt;
&lt;p&gt;SwitchyOmega: 一个强大的代理切换工具 (官方自述)&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/Ubuntu%E5%AE%89%E8%A3%85curl%E6%8A%A5%E9%94%99%EF%BC%9A%E8%BD%AF%E4%BB%B6%E5%8C%85%E6%9C%89%E6%9C%AA%E6%BB%A1%E8%B6%B3%E7%9A%84%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%EF%BC%9A-curl-%E4%BE%9D%E8%B5%96-libcurl4-7-58-0-2ubuntu3-10/</guid>
            <title>Ubuntu安装curl报错：软件包有未满足的依赖关系： curl : 依赖: libcurl4 (= 7.58.0-2ubuntu3.10)</title>
            <link>https://winston950213.github.io/2022/11/04/Ubuntu%E5%AE%89%E8%A3%85curl%E6%8A%A5%E9%94%99%EF%BC%9A%E8%BD%AF%E4%BB%B6%E5%8C%85%E6%9C%89%E6%9C%AA%E6%BB%A1%E8%B6%B3%E7%9A%84%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%EF%BC%9A-curl-%E4%BE%9D%E8%B5%96-libcurl4-7-58-0-2ubuntu3-10/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <category term="ubuntu" scheme="https://winston950213.github.io/tags/ubuntu/" />
            <pubDate>Fri, 04 Nov 2022 06:39:03 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;依赖关系错误的老问题了&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&#34;错误重现&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#错误重现&#34;&gt;#&lt;/a&gt; 错误重现&lt;/h4&gt;
&lt;p&gt;执行  &lt;code&gt;sudo apt install curl&lt;/code&gt; &lt;br /&gt;
 下列软件包有未满足的依赖关系：&lt;br /&gt;
curl : 依赖: libcurl4 (= 7.58.0-2ubuntu3.10) 但是 7.68.0-1ubuntu2.1 正要被安装&lt;br /&gt;
 E: 无法修正错误，因为您要求某些软件包保持现状，就是它们破坏了软件包间的依赖关系。&lt;/p&gt;
&lt;h4 id=&#34;解决方法&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#解决方法&#34;&gt;#&lt;/a&gt; 解决方法&lt;/h4&gt;
&lt;p&gt;依次执行:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;apt-get purge libcurl4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apt-get install curl&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/linux-ubuntu-pip3-list-%E5%87%BA%E7%8E%B0%E8%AD%A6%E5%91%8A/</guid>
            <title>linux ubuntu pip3 list 出现警告</title>
            <link>https://winston950213.github.io/2022/11/04/linux-ubuntu-pip3-list-%E5%87%BA%E7%8E%B0%E8%AD%A6%E5%91%8A/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <category term="ubuntu" scheme="https://winston950213.github.io/tags/ubuntu/" />
            <pubDate>Fri, 04 Nov 2022 06:37:05 +0000</pubDate>
            <description><![CDATA[ &lt;h4 id=&#34;错误重现&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#错误重现&#34;&gt;#&lt;/a&gt; 错误重现&lt;/h4&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 执行pip3 list后出现
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&#34;解决方法&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#解决方法&#34;&gt;#&lt;/a&gt; 解决方法&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;在  &lt;code&gt;/etc&lt;/code&gt;  下新建  &lt;code&gt;pip.conf&lt;/code&gt;  :&lt;br /&gt;
 &lt;code&gt;sudo nano /etc/pip.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;写入&lt;br /&gt;
 &lt;code&gt;[list] format=columns&lt;/code&gt; &lt;br /&gt;
 &lt;code&gt;ctrl x&lt;/code&gt;  Y 保存&lt;/li&gt;
&lt;li&gt;再次执行  &lt;code&gt;pip3 lsit&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/Command-python-setup-py-egg-info-failed-with-error-code-1-in-tmp-pip-build-thtq7d55-frida/</guid>
            <title>Command &#39;python setup.py egg_info&#39; failed with error code 1 in /tmp/pip-build-thtq7d55/frida/</title>
            <link>https://winston950213.github.io/2022/11/04/Command-python-setup-py-egg-info-failed-with-error-code-1-in-tmp-pip-build-thtq7d55-frida/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="python" scheme="https://winston950213.github.io/tags/python/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <pubDate>Fri, 04 Nov 2022 06:33:38 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;另一种方法解决 Command &amp;quot;python &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL3NldHVwLnB5&#34;&gt;setup.py&lt;/span&gt; egg_info&amp;quot; failed with error code 1 in /tmp/pip-build-thtq7d55/frida/&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&#34;错误重现&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#错误重现&#34;&gt;#&lt;/a&gt; 错误重现&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ubuntu20.04 下安装执行  &lt;code&gt;pip3 install frida&lt;/code&gt;  安装 frida 报错  &lt;code&gt;Command &amp;quot;python setup.py egg_info&amp;quot; failed with error code 1 in /tmp/pip-build-thtq7d55/frida/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;解决方法&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#解决方法&#34;&gt;#&lt;/a&gt; 解决方法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;搜索得知执行  &lt;code&gt;pip install --upgrade setuptools&lt;/code&gt;  就可以&lt;br /&gt;
&lt;img data-src=&#34;/images/legacy/202211042235236.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/Ubuntu%E6%8D%A2%E6%BA%90/</guid>
            <title>Ubuntu换源</title>
            <link>https://winston950213.github.io/2022/11/04/Ubuntu%E6%8D%A2%E6%BA%90/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="tips" scheme="https://winston950213.github.io/tags/tips/" />
            <pubDate>Fri, 04 Nov 2022 06:26:26 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;在使用 ububtu 的时候免不了切换安装源，网上其他的文本复制总会出现一些或大或小的问题，这里我以清华源为例&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;进入官方帮助&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9taXJyb3IudHVuYS50c2luZ2h1YS5lZHUuY24vaGVscC91YnVudHUv&#34;&gt; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;选择你想要的版本&lt;/li&gt;
&lt;li&gt;复制粘贴，解决问题&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/Kali-Linux-Failed-to-launch-preferred-application-for-category-TerminalEmulator-and-all-files-missing/</guid>
            <title>Kali Linux Failed to launch preferred application for category &#39;TerminalEmulator&#39; and all files missing</title>
            <link>https://winston950213.github.io/2022/11/04/Kali-Linux-Failed-to-launch-preferred-application-for-category-TerminalEmulator-and-all-files-missing/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <category term="kali" scheme="https://winston950213.github.io/tags/kali/" />
            <pubDate>Fri, 04 Nov 2022 06:23:46 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;I had a similar problem today. Installed Kali 2020.4 64-bit and ran sudo apt update &amp;amp;&amp;amp; sudo apt upgrade as you described. Rebooted the system and was unable to open terminal or browse files (I only tried via the &amp;quot;Home&amp;quot; folder on the desktop).&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I was still able to open QTerminal directly from the application menu to run commands. I was able to fix this by running the following. Hopefully this works for you.&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;apt&lt;/span&gt; update&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;apt&lt;/span&gt; upgrade&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;This returned a list of packages that &amp;quot;were automatically installed and are no longer required:&amp;quot; Remove these packages with the below command.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt autoremove&lt;/code&gt; &lt;br /&gt;
Reboot. Then run  &lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/code&gt;  again. The following packages were required. Reboot again and terminal/file browsing should be working as expected.&lt;/p&gt;
&lt;p&gt;I suspect one specific package &amp;quot;xfce4-helpers&amp;quot; is causing the issue. I&#39;m new to Linux so not sure of the cause (hopefully someone can elaborate).&lt;/p&gt;
&lt;p&gt;After completing the above steps, run  &lt;code&gt;sudo apt-get install xfce4-helpers&lt;/code&gt;  .&lt;/p&gt;
&lt;p&gt;After doing the above&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;right click the terminal and remove it from panel&lt;/li&gt;
&lt;li&gt;then right click somewhere on the panel bar and go to &amp;quot;panel&amp;quot;&lt;/li&gt;
&lt;li&gt;next go to &amp;quot;Add New&amp;quot; then scroll down to verve terminal and click on it.&lt;/li&gt;
&lt;li&gt;Add it to the bar panel (it will show up next to notifications).&lt;/li&gt;
&lt;li&gt;Right click again and go to move and move it to where it was.&lt;br /&gt;
(alternatively you can just go to app drop down menu and add Qterm to your desktop).&lt;br /&gt;
 原文指路 --&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9zdXBlcnVzZXIuY29tL3F1ZXN0aW9ucy8xNjE0MDQyL2thbGktbGludXgtZmFpbGVkLXRvLWxhdW5jaC1wcmVmZXJyZWQtYXBwbGljYXRpb24tZm9yLWNhdGVnb3J5LXRlcm1pbmFsZW11bGF0b3I=&#34;&gt;https://superuser.com/questions/1614042/kali-linux-failed-to-launch-preferred-application-for-category-terminalemulator&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/04/E-Unable-to-locate-package-neofetch/</guid>
            <title>E: Unable to locate package neofetch</title>
            <link>https://winston950213.github.io/2022/11/04/E-Unable-to-locate-package-neofetch/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="bug" scheme="https://winston950213.github.io/tags/bug/" />
            <category term="ubuntu" scheme="https://winston950213.github.io/tags/ubuntu/" />
            <pubDate>Fri, 04 Nov 2022 06:15:26 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;ubuntu16.04 在安装  &lt;code&gt;neofetch&lt;/code&gt;  的时候会遇到  &lt;code&gt;E: Unable to locate package neofetch&lt;/code&gt;  , 这里提供一种解决方式&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在遇到错误搜索之后发现，几乎所有的文章都是先  &lt;code&gt;sudo apt-get update&lt;/code&gt;  然后  &lt;code&gt;sudo apt-get install neofetch&lt;/code&gt;  . 但是我都未解决我的问题&lt;/li&gt;
&lt;li&gt;继续搜索之后发现这样可以解决
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo add-apt-repository ppa:dawidd0811/neofetch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install neofetch&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;来自一篇 16 年的文章:&lt;br /&gt;
 原文指路 ==&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9teS5vc2NoaW5hLm5ldC9saXV5dWFudGFvL2Jsb2cvODAwMzc1&#34;&gt;https://my.oschina.net/liuyuantao/blog/800375&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/02/%E7%BD%91%E5%9D%80%E5%A4%87%E5%BF%98/</guid>
            <title>网址备忘</title>
            <link>https://winston950213.github.io/2022/11/02/%E7%BD%91%E5%9D%80%E5%A4%87%E5%BF%98/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="工具" scheme="https://winston950213.github.io/tags/%E5%B7%A5%E5%85%B7/" />
            <category term="网址" scheme="https://winston950213.github.io/tags/%E7%BD%91%E5%9D%80/" />
            <category term="备忘" scheme="https://winston950213.github.io/tags/%E5%A4%87%E5%BF%98/" />
            <pubDate>Wed, 02 Nov 2022 06:07:40 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;常用的网址备忘&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL3dheWxhdS9naXQtZm9yLXdpbg==&#34;&gt;git 国内下载地址&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuNTJwb2ppZS5jbi9mb3J1bS5waHA/bW9kPXZpZXd0aHJlYWQmYW1wO3RpZD04MjI0MzQmYW1wO3BhZ2U9MSZhbXA7YXV0aG9yaWQ9OTk0MTA5&#34;&gt;吾爱破解从零开始学安卓逆向教程&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9odHRwYmluLm9yZy9nZXQ/c2hvd19lbnY9MQ==&#34;&gt;程序请求头测试网址&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9taXJyb3JzLnR1bmEudHNpbmdodWEuZWR1LmNuL2FuYWNvbmRhL2FyY2hpdmUv&#34;&gt;anaconda 清华大学下载地址&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9pbnRvbGkuY29tL2Jsb2cvbm90LXBvc3NpYmxlLXRvLWJsb2NrLWNocm9tZS1oZWFkbGVzcy9jaHJvbWUtaGVhZGxlc3MtdGVzdC5odG1s&#34;&gt;浏览器信息检测&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cubGZkLnVjaS5lZHUvfmdvaGxrZS9weXRob25saWJzLyN0d2lzdGVk&#34;&gt;twisted.whl 下载地址&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL2Nocm9tZWRyaXZlci5zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2luZGV4Lmh0bWw=&#34;&gt;Chromedriver 下载地址&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cubWFubmluZy5jb20vYm9va3MvZ3Jva2tpbmctYWxnb3JpdGhtcw==&#34;&gt;算法图解原版链接 (python2.7 实现&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL3d3dy5nZWV0ZXN0LmNvbS9kZW1vLw==&#34;&gt;极验 demo 地址&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/01/python%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%AD%A6%E4%B9%A0/</guid>
            <title>python多线程学习</title>
            <link>https://winston950213.github.io/2022/11/01/python%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%AD%A6%E4%B9%A0/</link>
            <category term="编程语言" scheme="https://winston950213.github.io/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/" />
            <category term="python" scheme="https://winston950213.github.io/tags/python/" />
            <category term="多线程" scheme="https://winston950213.github.io/tags/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" />
            <pubDate>Mon, 31 Oct 2022 08:53:01 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;python 多线程一点研究，有待深入&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&#34;线程模块&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#线程模块&#34;&gt;#&lt;/a&gt; 线程模块&lt;/h4&gt;
&lt;p&gt;在 Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;_thread 提供了低级别的、原始的线程以及一个简单的锁&lt;/li&gt;
&lt;li&gt;threading 对_thread 进行封装并且扩展了功能，所以现在基本上 python 多线程都使用 threading&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;创建线程&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#创建线程&#34;&gt;#&lt;/a&gt; 创建线程&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;方法一:&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;# 使用函数的方式创建&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; threading&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; time&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;arg&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;     time&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;sleep&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;     &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;thread &#39;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;arg&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34; running....&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; __name__ &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;     &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; i &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;         t &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; threading&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;Thread&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;target&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;func&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; args&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;         t&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;start&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;方法二:&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;# 使用继承 Thread 类的方式创建&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; threading&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;MyThread&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;threading&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;Thread&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;self&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; thread_name&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;# 注意：一定要显式的调用父类的初始化函数。&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token builtin&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;MyThread&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; self&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;__init__&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;name&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;thread_name&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;self&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s正在运行中......&#34;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;%&lt;/span&gt; self&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;name&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; __name__ &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; i &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        MyThread&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;thread-&#34;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;start&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;#此行代码也可分开写，先创建 MyThread 对象，在调用 start 方法&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;疑惑&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#疑惑&#34;&gt;#&lt;/a&gt; 疑惑&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;start&lt;/code&gt;  和  &lt;code&gt;join&lt;/code&gt;  干了什么？&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ctrl&lt;/code&gt;  + 左键点击进去 start 源码看到注释:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token triple-quoted-string string&#34;&gt;&#34;&#34;&#34;Start the thread&#39;s activity.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    It must be called at most once per thread object. It arranges for the&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    object&#39;s run() method to be invoked in a separate thread of control.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    This method will raise a RuntimeError if called more than once on the&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    same thread object.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&#34;&#34;&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;简单来说就是激活一个线程，在 run () 方法之后被独立调用，重复调用会抛出  &lt;code&gt;RuntimeError&lt;/code&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token triple-quoted-string string&#34;&gt;&#34;&#34;&#34;Wait until the thread terminates.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    This blocks the calling thread until the thread whose join() method is&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    called terminates -- either normally or through an unhandled exception&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    or until the optional timeout occurs.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    When the timeout argument is present and not None, it should be a&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    floating point number specifying a timeout for the operation in seconds&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    (or fractions thereof). As join() always returns None, you must call&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    is_alive() after join() to decide whether a timeout happened -- if the&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    thread is still alive, the join() call timed out.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    When the timeout argument is not present or None, the operation will&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    block until the thread terminates.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    A thread can be join()ed many times.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    join() raises a RuntimeError if an attempt is made to join the current&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    thread as that would cause a deadlock. It is also an error to join() a&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    thread before it has been started and attempts to do so raises the same&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    exception.&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &#34;&#34;&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;join () 会一直等待知道所有线程结束&lt;br /&gt;
就方法一中的代码如果直接在 for 循环中加入 join 的话会导致执行时间为 10s&lt;/p&gt;
&lt;p&gt;正确做法:&lt;/p&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; threading&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; time&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;arg&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    time&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;sleep&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;thread &#39;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;arg&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34; running....&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; __name__ &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    start &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; time&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;time&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    threads &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; i &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        t &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; threading&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;Thread&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;target&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;func&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; args&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        threads&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;append&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;t&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; t &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; threads&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        t&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;start&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; t &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; threads&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        t&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;join&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;time&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;time&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; start&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;同时写入多个文件&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; threading&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; time&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;func_fs&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;name&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string-interpolation&#34;&gt;&lt;span class=&#34;token string&#34;&gt;f&#34;&lt;/span&gt;&lt;span class=&#34;token interpolation&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;name&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;.txt&#34;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;w&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;as&lt;/span&gt; target&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        time&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;sleep&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;# 假装写入很久&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        target&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;write&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;这是一段很长的文本&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; __name__ &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;__main__&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    start &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; time&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;time&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    l_thread &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; i &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        t &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; threading&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;Thread&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;target&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;func_fs&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; args&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        l_thread&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;append&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;t&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; t &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; l_thread&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        t&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;start&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; t &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; l_thread&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        t&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;join&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;time&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;time&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; start&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;todo&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#todo&#34;&gt;#&lt;/a&gt; Todo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;lock&lt;/li&gt;
&lt;li&gt;生产者消费者模型&lt;/li&gt;
&lt;li&gt;Queue 队列&lt;/li&gt;
&lt;li&gt;爬虫实战&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;参考链接&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#参考链接&#34;&gt;#&lt;/a&gt; 参考链接:&lt;/h4&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy43L2xpYnJhcnkvdGhyZWFkaW5nLmh0bWw/aGlnaGxpZ2h0PXRocmVhZGluZyNtb2R1bGUtdGhyZWFkaW5n&#34;&gt;threading&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy43L2xpYnJhcnkvX3RocmVhZC5odG1sP2hpZ2hsaWdodD1fdGhyZWFkI21vZHVsZS1fdGhyZWFk&#34;&gt;_thread&lt;/span&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2022/11/01/python%E4%B8%BA%E8%A7%86%E9%A2%91%E6%B7%BB%E5%8A%A0%E6%B0%B4%E5%8D%B0/</guid>
            <title>python为视频添加水印</title>
            <link>https://winston950213.github.io/2022/11/01/python%E4%B8%BA%E8%A7%86%E9%A2%91%E6%B7%BB%E5%8A%A0%E6%B0%B4%E5%8D%B0/</link>
            <category term="操作备忘" scheme="https://winston950213.github.io/categories/%E6%93%8D%E4%BD%9C%E5%A4%87%E5%BF%98/" />
            <category term="python" scheme="https://winston950213.github.io/tags/python/" />
            <category term="水印" scheme="https://winston950213.github.io/tags/%E6%B0%B4%E5%8D%B0/" />
            <pubDate>Mon, 31 Oct 2022 08:50:08 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;python 去水印&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;环境配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#环境配置&#34;&gt;#&lt;/a&gt; 环境配置&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;笔者环境：win10 专业版， python3.8.0&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;官方文档：&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly96dWxrby5naXRodWIuaW8vbW92aWVweS9pbnN0YWxsLmh0bWwlRTMlODAlOTAlRTUlOEYlQUYlRTglODMlQkQlRTklOUMlODAlRTglQTYlODElRTklQUQlOTQlRTYlQjMlOTUlRTMlODAlOTE=&#34;&gt;https://zulko.github.io/moviepy/install.html【可能需要魔法】&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;pip install ez_setup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install moviepy&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;添加图片水印&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#添加图片水印&#34;&gt;#&lt;/a&gt; 添加图片水印&lt;/h4&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;import moviepy.editor as mp&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;#本地视频位置&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;video = mp.VideoFileClip(r&#34;D:\resource\myresource\4393644710024974337.mp4&#34;)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;#准备log图片&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;logo = (mp.ImageClip(r&#34;C:\Users\zrail\Downloads\touxiang.jpeg&#34;)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        .set_duration(video.duration) # 水印持续时间&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        .resize(height=100) # 水印的高度，会等比缩放&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        .margin(right=8, top=8, opacity=1) # 水印边距和透明度&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        .set_pos((&#34;left&#34;,&#34;center&#34;))) # 水印的位置&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;final = mp.CompositeVideoClip([video, logo])&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;# mp4文件默认用libx264编码， 比特率单位bps&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;final.write_videofile(&#34;test.mp4&#34;, codec=&#34;libx264&#34;, bitrate=&#34;10000000&#34;)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h5 id=&#34;报错&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#报错&#34;&gt;#&lt;/a&gt; 报错&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;RuntimeError: The current Numpy installation (&#39;C:\\Users\\zrail\\.conda\\envs\\py380\\lib\\site-packages\\numpy\\__init__.py&#39;) fails to pass a sanity check due to a bug in the windows runtime. See this issue for more information: https://tinyurl.com/y3dm3h86&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;使用搜索引擎找到解决方案，切换 numpy 版本，链接：&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL251bXB5L251bXB5L2lzc3Vlcy8xNzcyNg==&#34;&gt;https://github.com/numpy/numpy/issues/17726&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;添加文字水印&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#添加文字水印&#34;&gt;#&lt;/a&gt; 添加文字水印&lt;/h4&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;# -*- coding: utf-8 -*-&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;from moviepy.editor import VideoFileClip,CompositeVideoClip&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;#本地视频位置&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;from moviepy.video.VideoClip import TextClip&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;#subclip视频截取开始时间和结束时间&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;video = VideoFileClip(r&#34;D:\resource\myresource\4393644710024974337.mp4&#34;).subclip(0,1)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;#制作文字，指定文字大小和颜色&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;txt_clip = ( TextClip(&#34;zxl shuiyin&#34;,fontsize=30,color=&#39;red&#39;)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;             .set_position(&#39;center&#39;)#水印内容居中&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;             .set_duration(1) )#水印持续时间&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;result = CompositeVideoClip([video, txt_clip]) #在视频上覆盖文本&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;result.write_videofile(&#34;tttttest.mp4&#34;,fps=25)#fps:视频文件中每秒的帧数&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h5 id=&#34;报错-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#报错-2&#34;&gt;#&lt;/a&gt; 报错&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;`OSError: MoviePy Error: creation of None failed because of the following error:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;[WinError 2] 系统找不到指定的文件。.&lt;/p&gt;
&lt;p&gt;.This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn&#39;t specify the path to the ImageMagick binary in file &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL2NvbmYucHk=&#34;&gt;conf.py&lt;/span&gt;, or that the path you specified is incorrect`&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;翻译报错信息并使用搜索引擎找到解决方案，链接：&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTE5Mjg4MDcvbW92aWVweS1jYW50LWRldGVjdC1pbWFnZW1hZ2ljay1iaW5hcnktb24td2luZG93cw==&#34;&gt;https://stackoverflow.com/questions/51928807/moviepy-cant-detect-imagemagick-binary-on-windows&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;安装 ImageMagick，并修改源码链接：&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzOTQ0OTE1L2FydGljbGUvZGV0YWlscy84NjUxNDMwMQ==&#34;&gt;https://blog.csdn.net/qq_23944915/article/details/86514301&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;具体没有仔细研究，水印的各种细节有待处理，这里只是抛砖引玉。剩下的靠大家了&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2021/05/23/%E6%8A%93%E5%8C%85%E6%80%BB%E7%BB%93%E8%AE%B0%E5%BD%95/</guid>
            <title>抓包总结记录</title>
            <link>https://winston950213.github.io/2021/05/23/%E6%8A%93%E5%8C%85%E6%80%BB%E7%BB%93%E8%AE%B0%E5%BD%95/</link>
            <category term="逆向学习" scheme="https://winston950213.github.io/categories/%E9%80%86%E5%90%91%E5%AD%A6%E4%B9%A0/" />
            <category term="逆向" scheme="https://winston950213.github.io/tags/%E9%80%86%E5%90%91/" />
            <category term="安卓" scheme="https://winston950213.github.io/tags/%E5%AE%89%E5%8D%93/" />
            <category term="Frida" scheme="https://winston950213.github.io/tags/Frida/" />
            <category term="抓包" scheme="https://winston950213.github.io/tags/%E6%8A%93%E5%8C%85/" />
            <pubDate>Sun, 23 May 2021 04:50:13 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;逆向学习中抓包的一点总结记录&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;计算机网络基础&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#计算机网络基础&#34;&gt;#&lt;/a&gt; 计算机网络基础&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;互联网所有的数据都是基于网络传输，所以懂点网络在逆向过程中也是必不可少的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;http 与 https:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https 是披着 ssl 外壳的 http&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL3d3dy41MmltLm5ldC90aHJlYWQtMjg2Ni0xLTEuaHRtbA==&#34;&gt;http://www.52im.net/thread-2866-1-1.html&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;数据流向:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;TCP/IP 协议中，数据流向都是按着这个模式来，无出其右&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521003445.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;OSI 网络模型 和 TCP/IP 模型的对比&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521004109.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;读完 图解 HTTP 的一点碎碎念&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;IP 协议与 IP 地址:
&lt;ul&gt;
&lt;li&gt;我们经常说的 ip 一般表示 IP 地址，但是再谈到协议的时候 IP 一般指的是 IP 协议，并不是 IP 地址&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;代理 IP 与代理服务器
&lt;ul&gt;
&lt;li&gt;代理 IP 分为透明代理，高匿等
&lt;ol&gt;
&lt;li&gt;透明代理：目标服务器知道你使用了代理，[原理为首部的  &lt;code&gt;via&lt;/code&gt;  , 说法来源于网上]&lt;/li&gt;
&lt;li&gt;高匿代理：目标服务器不知道你使用了代理。这样会认为此次访问是一个真实的 IP 地址&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;代理服务器分为透明代理服务器，缓存服务器
&lt;ol&gt;
&lt;li&gt;透明代理服务器：不对请求响应内容处理的服务器，只做代理。对请求响应内容更改的的称作非透明代理服务器&lt;/li&gt;
&lt;li&gt;缓存代理服务器：将响应内容缓存到服务器，如果源服务器未更新资源则返回缓存内容&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;未完待续&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;基于工具的抓包&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#基于工具的抓包&#34;&gt;#&lt;/a&gt; 基于工具的抓包&lt;/h2&gt;
&lt;h3 id=&#34;charles-系统代理&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#charles-系统代理&#34;&gt;#&lt;/a&gt; charles + 系统代理&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;很早期的做法，但是随着 android7 以上不信任系统证书和检测手段增多现在不推荐这种抓包方式&lt;/p&gt;
&lt;p&gt;从 OSI 模型理解，修改系统代理的抓包方式，代理存在于应用层，而使用 VPN 转发的方式抓包在网络层。代理的位置更加底层，更难防护&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;charles-vpn-代理工具&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#charles-vpn-代理工具&#34;&gt;#&lt;/a&gt; charles + VPN 代理工具&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;VPN 代理工具有很多，比如 Brook, postern, proxyDaivd, drony&lt;/p&gt;
&lt;p&gt;笔者使用的是 postern, 觉得不怎么好，但是其他的用的也不怎么样好，相对之下选了一个相对好的就一直用了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;抓包环境搭建&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#抓包环境搭建&#34;&gt;#&lt;/a&gt; 抓包环境搭建&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;charles 安装与配置 [破解可耻，支持正版]&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;官网下载最新版:&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuY2hhcmxlc3Byb3h5LmNvbS9hc3NldHMvcmVsZWFzZS80LjYuMS9jaGFybGVzLXByb3h5LTQuNi4xX2FtZDY0LnRhci5neg==&#34;&gt;https://www.charlesproxy.com/assets/release/4.6.1/charles-proxy-4.6.1_amd64.tar.gz&lt;/span&gt; 解压即可使用&lt;/li&gt;
&lt;li&gt;破解 (行为可耻，请勿模仿):
&lt;ul&gt;
&lt;li&gt;在 &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuY2hhcmxlcy5yZW4v&#34;&gt;https://www.charles.ren/&lt;/span&gt; 填写 Registered Name, 并生成授权码&lt;/li&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210524001004.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210524001051.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;postern 安装与配置&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;谷歌下载 postern&lt;/li&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210524001259.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210524001344.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210524001413.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;证书安装&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;charles 将证书导出到 PC, 导出为 pem 格式&lt;/li&gt;
&lt;li&gt;计算文件名，文件名是一个 Hash 值，而后缀是一个数字。后缀名的数字是为了防止文件名冲突的，比如如果两个证书算出的 Hash 值是一样的话，那么一个证书的后缀名数字可以设置成 0，而另一个证书的后缀名数字可以设置成 1&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;openssl x509 -subject_hash_old -in &amp;lt;Certificate_File&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;
&lt;p&gt;修改证书名称&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;复制证书到设备上&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;复制到系统目录并修改权限（安卓 8.1.0 Magisk Root）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;adb push xxxxxxx.0 /sdcard/&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;figure class=&#34;highlight bash&#34;&gt;&lt;figcaption data-lang=&#34;bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;mount&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-o&lt;/span&gt; rw,remount /system 【不修改 没法写入】&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;mount&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-o&lt;/span&gt; rw,remount /&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;mv&lt;/span&gt; /sdcard/xxxxxxx.0 /etc/security/cacerts/ 移动文件到系统&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;chown&lt;/span&gt; root:root /etc/security/cacerts/xxxxxx.0 修改用户组&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;chmod&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;644&lt;/span&gt; /system/etc/security/cacerts/xxxxxxx.0 修改权限&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;
&lt;p&gt;重启手机验证&lt;/p&gt;
&lt;p&gt;&lt;code&gt;reboot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;—by:r0syue&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;由于证书先安装到用户目录再移动到系统目录这样的操作会被 app 将此证书拉黑，如果曾经有过此操作最好先刷机在移动证书.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;openssl x509 -subject_hash_old -in  &amp;lt;Certificate_File&gt;报错 ：PEM routines:get_name:no start line:crypto\pem\pem_lib.c:745:Expecting: TRUSTED CERTIFICATE&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;解决办法：使用这个命令  &lt;code&gt;openssl x509 -subject_hash_old -in &amp;lt;Certificate_File&amp;gt; -inform der&lt;/code&gt;  by: 嘴强王者&lt;br /&gt;
系统证书目录：  &lt;code&gt;/system/etc/security/cacerts/&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;httpcanypacket-capture&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#httpcanypacket-capture&#34;&gt;#&lt;/a&gt; HttpCany/Packet Capture&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;基于安卓手机。优点的话那就是省事。缺点的话可能是屏幕小&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;wireshark&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#wireshark&#34;&gt;#&lt;/a&gt; Wireshark&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9ib29rLmRvdWJhbi5jb20vc3ViamVjdC8yMTY5MTY5Mi8=&#34;&gt;https://book.douban.com/subject/21691692/&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;tcpdump&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#tcpdump&#34;&gt;#&lt;/a&gt; tcpdump&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9qdWVqaW4uY24vcG9zdC82ODQ0OTA0MDg0MTY4NzY5NTQ5&#34;&gt;https://juejin.cn/post/6844904084168769549&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;对抗&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#对抗&#34;&gt;#&lt;/a&gt; 对抗&lt;/h3&gt;
&lt;h4 id=&#34;证书&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#证书&#34;&gt;#&lt;/a&gt; 证书&lt;/h4&gt;
&lt;h5 id=&#34;证书锁定&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#证书锁定&#34;&gt;#&lt;/a&gt; 证书锁定&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;在代码中指定证书 hash 值&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;反证书锁定&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#反证书锁定&#34;&gt;#&lt;/a&gt; 反证书锁定&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;服务端校验客户端证书&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用 objection 自带命令&lt;/p&gt;
&lt;p&gt;&lt;code&gt;android sslpinning disable&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521144416.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用瘦蛟舞大佬的 DroidSSLUnpinning&lt;br /&gt;
&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL1dvb3l1bkRvdGEvRHJvaWRTU0xVbnBpbm5pbmc=&#34;&gt;https://github.com/WooyunDota/DroidSSLUnpinning&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用  &lt;code&gt;JustTrustMe&lt;/code&gt;  , 当然了珍惜大佬的升级版本也可以&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;原版: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL0Z1emlvbjI0L0p1c3RUcnVzdE1l&#34;&gt;https://github.com/Fuzion24/JustTrustMe&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;升级版: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL3cyOTY0ODgzMjAvWHBvc2VkT2tIdHRwQ2F0L3RyZWUvbWFzdGVyL2p1c3RUcnVzdE1lUGx1c2g=&#34;&gt;https://github.com/w296488320/XposedOkHttpCat/tree/master/justTrustMePlush&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;分析文章: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9iYnMucGVkaXkuY29tL3RocmVhZC0yNTQxMTQuaHRt&#34;&gt;https://bbs.pediy.com/thread-254114.htm&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自己分析 hook 点，去过掉证书锁定&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;java.io.File&lt;/li&gt;
&lt;li&gt;java.security.KeyStore&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;客户端校验服务端&lt;/p&gt;
&lt;p&gt;未完待续...&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;双向验证&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;典型的双向验证 Soul 分析，===&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL3poYW94aW5jaGVuZy5jb20vaW5kZXgucGhwLzIwMjAvMDcvMTUvb3VsYXBwJUU3JTlBJTg0JUU1JThGJThDJUU1JTkwJTkxJUU4JUFGJTgxJUU0JUI5JUE2JUU3JUEwJUI0JUU4JUE3JUEzLw==&#34;&gt;soul 双向证书破解&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;未完待续...&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;检测系统代理&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#检测系统代理&#34;&gt;#&lt;/a&gt; 检测系统代理&lt;/h4&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;System.getProperty(“http.proxyHost”);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;System.getProperty(“http.proxyPort”);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;反系统代理检测&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#反系统代理检测&#34;&gt;#&lt;/a&gt; 反系统代理检测&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;不使用系统代理的方式抓包，使用 VPN 代理方式&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;检测-vpn&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#检测-vpn&#34;&gt;#&lt;/a&gt; 检测 VPN&lt;/h5&gt;
&lt;figure class=&#34;highlight bash&#34;&gt;&lt;figcaption data-lang=&#34;bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;java.net.NetworkInterface.getName&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;android.net.ConnectivityManager.getNetworkCapabilities&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h5 id=&#34;反-vpn-检测&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#反-vpn-检测&#34;&gt;#&lt;/a&gt; 反 VPN 检测&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;分析 app,hook 掉检测&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;实战秀动 APP&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3MvVWl4RXhaa1BXSEpBVDNqQUQyc0pKZw==&#34;&gt;https://mp.weixin.qq.com/s/UixExZkPWHJAT3jAD2sJJg&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;看完这篇文章并跟着做了一遍，发现代码都一样，但是就是过不了，于是就使出了瞎几把 hook 大法，将  &lt;code&gt;ConnectivityManager&lt;/code&gt;  类全部 hook, 然后修改  &lt;code&gt;getActiveNetwork&lt;/code&gt;  返回值，最后成功&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;perform&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; ConnectivityManager &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;android.net.ConnectivityManager&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        ConnectivityManager&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;getActiveNetwork&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function-variable function&#34;&gt;implementation&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; Integer &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;android.net.Network&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; r1 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Integer&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;$&lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getActiveNetwork&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;result is =&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; r1&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210523232011.jpg&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;h5 id=&#34;文章收藏&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#文章收藏&#34;&gt;#&lt;/a&gt; 文章收藏&lt;/h5&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuYW5xdWFua2UuY29tL3Bvc3QvaWQvMTk3NjU3&#34;&gt;https://www.anquanke.com/post/id/197657&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3MvVWl4RXhaa1BXSEpBVDNqQUQyc0pKZw==&#34;&gt;https://mp.weixin.qq.com/s/UixExZkPWHJAT3jAD2sJJg&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuamlhbnNodS5jb20vcC8yNDc2Yzg4NThkYWY=&#34;&gt;https://www.jianshu.com/p/2476c8858daf&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9hcGktY2FsbGVyLmNvbS8yMDE5LzExLzA1L2NhcHR1cmUtbm90ZS8=&#34;&gt;https://api-caller.com/2019/11/05/capture-note/&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;hook-抓包&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#hook-抓包&#34;&gt;#&lt;/a&gt; hook 抓包&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;这个仁者见仁智者见智，方法不尽相同，记录几个小工具，方便抄袭&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;OkHttpLogger-Frida&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL3NpeXVqaWUvT2tIdHRwTG9nZ2VyLUZyaWRh&#34;&gt;siyujie/OkHttpLogger-Frida: Frida 实现拦截 okhttp 的脚本&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;基于 Okhttp 拦截器实现的各种抓包&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9iYnMucGVkaXkuY29tL3RocmVhZC0yNTIxMDAuaHRt&#34;&gt;https://bbs.pediy.com/thread-252100.htm&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9iYnMucGVkaXkuY29tL3RocmVhZC0yNTQ1MDMuaHRt&#34;&gt;https://bbs.pediy.com/thread-254503.htm&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;未完待续&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;r0capture&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL3IweXN1ZS9yMGNhcHR1cmU=&#34;&gt;r0ysue/r0capture: 安卓应用层抓包通杀脚本&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;hook  &lt;code&gt;ssl_read&lt;/code&gt;  ,  &lt;code&gt;ssl_write&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;光看 hook 点可能觉得很简单，你上你也行，但是分析的过程很重要&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自己分析，基于系统库的 hook&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;对抗-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#对抗-2&#34;&gt;#&lt;/a&gt; 对抗&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;anti_frida&lt;/li&gt;
&lt;li&gt;anti_xp&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;抓包骚操作&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#抓包骚操作&#34;&gt;#&lt;/a&gt; 抓包骚操作&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Android 结合 Wireshark 抓包，不用安装证书&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL2xhc3RpbmcteWFuZy9mcmlkYV9ieXBhc3Nfc3NsX2V4YW1wbGUvdHJlZS9tYXN0ZXIvQW5kcm9pZC9hbmRyb2lkX3dpcmVzaGFya190bHM=&#34;&gt;https://github.com/lasting-yang/frida_bypass_ssl_example/tree/master/Android/android_wireshark_tls&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuNTJwb2ppZS5jbi90aHJlYWQtMTQwNTkxNy0xLTEuaHRtbA==&#34;&gt;https://www.52pojie.cn/thread-1405917-1-1.html&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;高版本 android 证书问题&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;将证书直接 push 到系统根目录下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210521165953.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuNTJwb2ppZS5jbi90aHJlYWQtMTE0ODg5Mi0xLTEuaHRtbA==&#34;&gt;https://www.52pojie.cn/thread-1148892-1-1.html&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编译 ROM&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuNTJwb2ppZS5jbi90aHJlYWQtMTM4MjY4OC0xLTEuaHRtbA==&#34;&gt;https://www.52pojie.cn/thread-1382688-1-1.html&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2021/05/19/%E5%86%8D%E8%AF%BB-%E5%9B%BE%E8%A7%A3HTTP/</guid>
            <title>再读[图解HTTP]</title>
            <link>https://winston950213.github.io/2021/05/19/%E5%86%8D%E8%AF%BB-%E5%9B%BE%E8%A7%A3HTTP/</link>
            <category term="读书笔记" scheme="https://winston950213.github.io/categories/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/" />
            <category term="网络" scheme="https://winston950213.github.io/tags/%E7%BD%91%E7%BB%9C/" />
            <category term="基础" scheme="https://winston950213.github.io/tags/%E5%9F%BA%E7%A1%80/" />
            <pubDate>Tue, 18 May 2021 15:27:53 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;总的来说，这本书就好像是一本介绍 http 协议的发展史和一些基本的概念，基本没有很晦涩的概念&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;网络基础&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#网络基础&#34;&gt;#&lt;/a&gt; 网络基础&lt;/h3&gt;
&lt;h4 id=&#34;tcpip-协议簇&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#tcpip-协议簇&#34;&gt;#&lt;/a&gt; TCP/IP 协议簇&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;TCP/IP 协议簇 是互联网中所有协议的总称&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521003401.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TCP/IP 数据传输&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521003445.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;TCP/IP 的模型是分为四层，OSI 网络模型是七层，不过有的人也分为五层&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521004109.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DNS 域名解析服务&lt;/p&gt;
&lt;p&gt;通过域名查找 IP 地址，或通过 IP 地址查找域名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;三次握手与四次挥手&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521010819.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;在第三次握手的时候是可以传输数据的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521010903.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;http-协议&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#http-协议&#34;&gt;#&lt;/a&gt; HTTP 协议&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 协议无法保存状态&lt;/li&gt;
&lt;li&gt;HTTP 协议必须有客户端先发起请求&lt;/li&gt;
&lt;li&gt;HTTP 常用的请求方法
&lt;ul&gt;
&lt;li&gt;get, post, put, delete, options 等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;URL 和 URI
&lt;ul&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;由于 HTTP 是无状态且每进行一次 HTTP 通信就要断开一次 TCP 连接，所以为解决这些局限就产生了很多骚操作
&lt;ul&gt;
&lt;li&gt;升级 HTTP 协议，建立一次 TCP 连接进行多次 HTTP 请求&lt;/li&gt;
&lt;li&gt;不等待响应，类似现在的异步&lt;/li&gt;
&lt;li&gt;使用 cookie 保存用户状态，避免多次请求&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;http-报文信息&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#http-报文信息&#34;&gt;#&lt;/a&gt; HTTP 报文信息&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;这章感觉没什么实质的东西，主要就是编码，压缩和报文字段的解释&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuaHVhd2VpY2xvdWQuY29tL2FydGljbGVzLzE2ZTZmYzBmOTVjZDMyYTk1ZGJmOWFlNWFhODU2MTkzLmh0bWw=&#34;&gt;http 报文头各字段详细含义&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;http-状态码&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#http-状态码&#34;&gt;#&lt;/a&gt; HTTP 状态码&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;约定俗成的规矩，不遵守也没事.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210521012126.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;http-协议与-web-服务器&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#http-协议与-web-服务器&#34;&gt;#&lt;/a&gt; HTTP 协议与 WEB 服务器&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;单台服务器托管多个域名&lt;/p&gt;
&lt;p&gt;脑子抽了，还去专门开了两个虚拟机去做实验，虚拟出来的服务器的内网 ip 地址是不同的，所以在内网访问的话，ip 地址不同所以不冲突。如果穿透到公网的话就会冲突，这样就需要将域名的 80 端口映射到 ip 地址不同的端口了.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;数据转发&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代理 (此处指的是代理服务器)
&lt;ul&gt;
&lt;li&gt;缓存代理服务器：将内容缓存到服务器上，如果请求的源内容未更新，则从缓存服务器返回&lt;/li&gt;
&lt;li&gt;透明代理服务器：对内容不做处理，反之则成为非透明服务器&lt;/li&gt;
&lt;li&gt;代理服务器可有多级，以  &lt;code&gt;Via&lt;/code&gt;  首部进行区分&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;网关
&lt;ul&gt;
&lt;li&gt;网关可将 HTTP 协议转化为其他协议&lt;/li&gt;
&lt;li&gt;网关可以加密协议内容&lt;/li&gt;
&lt;li&gt;网关可以用各种方式去提高通信的安全性&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;隧道
&lt;ul&gt;
&lt;li&gt;进行加密通信内容&lt;/li&gt;
&lt;li&gt;将通信内容进行中转，一般用于远距离传输，防止信号衰弱&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;缓存&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;客户端缓存&lt;/li&gt;
&lt;li&gt;缓存服务器缓存&lt;/li&gt;
&lt;li&gt;缓存有效时间&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;http-首部&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#http-首部&#34;&gt;#&lt;/a&gt; HTTP 首部&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;都是一些常见的首部，不常见的用的也不多&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;https&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#https&#34;&gt;#&lt;/a&gt; HTTPS&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;HTTPS&lt;/code&gt;  就是 披着 SSL 外壳的 HTTP&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;HTTPS 加密方式:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTPS 为了安全性使用混合加密方式对通信内容加密
&lt;ul&gt;
&lt;li&gt;不使用对称加密是因为对称加密加解密的密钥相同，而且很容易倒推出原文&lt;/li&gt;
&lt;li&gt;使用混合加密方式，就是公开两把密钥，发送信息时使用对方公开的密钥进行加密，这样在对方接收到信息时就可以使用自己的密钥进行解密，避免了发送密钥时，密钥遭到窃取从而影响信息安全性&lt;/li&gt;
&lt;li&gt;公开两把密钥的缺点：无法确定公开的密钥一定是对方公开的且真实存在的密钥&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;由于公开密钥的问题诞生了证书认证机构 CA
&lt;ul&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210522033046.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;li&gt;证书机构的信誉很重要&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTPS 通信流程&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210522033145.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;通信中用户身份的认证&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#通信中用户身份的认证&#34;&gt;#&lt;/a&gt; 通信中用户身份的认证&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;感觉现在大多是表单认证了，其他不是很多&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;HTTP1.1 认证方式&lt;/li&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210522033419.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;基于-http-协议的追加协议&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#基于-http-协议的追加协议&#34;&gt;#&lt;/a&gt; 基于 HTTP 协议的追加协议&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;随着时代的发展，人们对网络传输的要求越来越高，于是诞生了许多解决 HTTP 协议痛点的追加协议&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ajax 技术&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Comet 通信&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SPDY [为何会话层在表示层上面表示不理解]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210522033840.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;li&gt;多路复用&lt;/li&gt;
&lt;li&gt;请求优先级&lt;/li&gt;
&lt;li&gt;压缩 HTTP 首部&lt;/li&gt;
&lt;li&gt;推送功能&lt;/li&gt;
&lt;li&gt;服务器提示功能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WebScocket&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img data-src=&#34;/images/legacy/20210522035359.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTP2.0&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;作者写的时候还不成熟，但是现在已经在普及了&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;服务器管理文件的 WebDAV&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;构建-web-内容技术&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#构建-web-内容技术&#34;&gt;#&lt;/a&gt; 构建 WEB 内容技术&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;静态 HTML&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;动态 HTML&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WEB 应用&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CGI&lt;/li&gt;
&lt;li&gt;Servlet&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;数据发布格式与语言&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XML&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;web-攻击技术&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#web-攻击技术&#34;&gt;#&lt;/a&gt; WEB 攻击技术&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;参考资料&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&amp;lt;&amp;lt;图解 HTTP&amp;gt;&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly96aHVhbmxhbi56aGlodS5jb20vcC8yNjgxOTY1MjU=&#34;&gt;OSI 七层模型和 TCP/IP 四层模型以及五层模型&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly95dWhvbmdqdW4uZ2l0aHViLmlvL3RlY2gvMjAyMC8xMS8zMC8lRTclOUMlOEIlRTYlODclODJIVFRQUy0lRTglQUYlODElRTQlQjklQTYlRTYlOUMlQkElRTYlOUUlODQtQ0EtJUU4JUFGJTgxJUU0JUI5JUE2LSVFNiU5NSVCMCVFNSVBRCU5NyVFNyVBRCVCRSVFNSU5MCU4RC0lRTclQTclODElRTklOTIlQTUtJUU1JTg1JUFDJUU5JTkyJUE1Lmh0bWw=&#34;&gt;看懂 HTTPS、证书机构（CA）、证书、数字签名、私钥、公钥&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly96aHVhbmxhbi56aGlodS5jb20vcC81MzM3NDUxNg==&#34;&gt;“三次握手，四次挥手” 你真的懂吗？&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2021/05/10/%E6%A8%B1%E8%8A%B1/</guid>
            <title>樱花</title>
            <link>https://winston950213.github.io/2021/05/10/%E6%A8%B1%E8%8A%B1/</link>
            <category term="逆向学习" scheme="https://winston950213.github.io/categories/%E9%80%86%E5%90%91%E5%AD%A6%E4%B9%A0/" />
            <category term="逆向" scheme="https://winston950213.github.io/tags/%E9%80%86%E5%90%91/" />
            <category term="安卓" scheme="https://winston950213.github.io/tags/%E5%AE%89%E5%8D%93/" />
            <category term="Frida" scheme="https://winston950213.github.io/tags/Frida/" />
            <category term="抓包" scheme="https://winston950213.github.io/tags/%E6%8A%93%E5%8C%85/" />
            <pubDate>Mon, 10 May 2021 01:12:53 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;实战樱花 app, 难度：有手就行，参数：请求  &lt;code&gt;req&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;抓包&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#抓包&#34;&gt;#&lt;/a&gt; 抓包&lt;/h2&gt;
&lt;p&gt;安装好之后先抓包，这次使用的是小黄鸟 + pixel&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由于之前在 N5x 上面小黄鸟打开抓包之后 VPN 图标并不能正常出现，这次换了一个版本好了，就可以用了 (孕气好)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210510172226.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;通过抓包可以看到服务器地址为:  &lt;code&gt;http://vip.yinlu.online/v1/svc/sms&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;参数:  &lt;code&gt;req=5rbFBgelHwvqcXtwsVAfWiMkqJ1cXwuEGEZmyEgOFjrmxVGEMK5jsTYpH1MHbo3yiPMCrO4J8OFeEw7HJyIH0qewUwcbSbH9fJ4N+Yz5ihb9cfCfFT8wnD+GOVy6x6ltWOVHjBNwwOqEzMTbDIFG0rD6CSwwwQBgteVJGiu7iRimwhkILBODqrqqgmmBTrKp0TxdgiLSwRbB6mXJhFItE1VXLhNlhZgbIz1L3DyN4gSmfPjXi79RkZTEqm8wE/wgZ0V4OVElEPWb7B6AA5MrVYWlbjse9Ht85SuLnUFYU1EqAPDq8/T52y6q5rtem1fP3n6Nq/HIU80z52ift5bibQdHDm/Vb3P0wm0hKnFk4UP5/dCZmUPbbSKKbQJQLslRL5vwjYEf7My2QDYysyeidd/ZlfsoF1K3ryB3jv/fg+3J+2XURyyB2eh9WbouB9T0kwYzvXts/jJmlH8HE5ZVCA==&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;参数分析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#参数分析&#34;&gt;#&lt;/a&gt; 参数分析&lt;/h2&gt;
&lt;p&gt;使用 jadx 打开 apk, 可以看到只是混淆了并没有加壳，搜索  &lt;code&gt;v1/svc/sms&lt;/code&gt;  可知:&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210510172742.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点进去可以看到下面有个 code get , 然后右键  &lt;code&gt;Find usage&lt;/code&gt;  , 只有两个结果看看就看到结果了&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210510173124.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;使用 objection 快速验证  &lt;code&gt;e.h.a.f.h.e&lt;/code&gt;  为收集参数值，在查看  &lt;code&gt;com.dasc.base_self_innovate.base_network.NetWorkStringUtil&lt;/code&gt;  为调用加解密.&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210510174332.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210510174419.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;不继续分析了，其中有个  &lt;code&gt;sign&lt;/code&gt;  , 其实静态分析一下就行.&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2021/05/07/%E7%A7%BB%E5%8A%A8TV/</guid>
            <title>移动TV</title>
            <link>https://winston950213.github.io/2021/05/07/%E7%A7%BB%E5%8A%A8TV/</link>
            <category term="逆向学习" scheme="https://winston950213.github.io/categories/%E9%80%86%E5%90%91%E5%AD%A6%E4%B9%A0/" />
            <category term="逆向" scheme="https://winston950213.github.io/tags/%E9%80%86%E5%90%91/" />
            <category term="安卓" scheme="https://winston950213.github.io/tags/%E5%AE%89%E5%8D%93/" />
            <category term="Frida" scheme="https://winston950213.github.io/tags/Frida/" />
            <category term="抓包" scheme="https://winston950213.github.io/tags/%E6%8A%93%E5%8C%85/" />
            <pubDate>Thu, 06 May 2021 20:22:10 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;实战移动 TV, 只分析了登录注册&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;更多详细内容可以参考指纹大佬的文章 ===&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9iYnMucGVkaXkuY29tL3RocmVhZC0yNTg3NzYuaHRt&#34;&gt;https://bbs.pediy.com/thread-258776.htm&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;抓包&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#抓包&#34;&gt;#&lt;/a&gt; 抓包&lt;/h2&gt;
&lt;p&gt;指纹大佬文章说的抓不到包于是就上了 hook 抓包，hook 抓包是可以的，但是也可以使用  &lt;code&gt;postern + charles&lt;/code&gt;  , 在抓包这里没必要纠结太久 (-- 珍惜大佬), 使用 httpcanary 也行.&lt;br /&gt;
 登录:&lt;br /&gt;
&lt;img data-src=&#34;/images/legacy/20210507134616.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;br /&gt;
注册:&lt;br /&gt;
&lt;img data-src=&#34;/images/legacy/20210507134713.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;可以看到校验还是比较少的，需要分析参数也就  &lt;code&gt;memi1&lt;/code&gt;  ,  &lt;code&gt;key&lt;/code&gt;  ,  &lt;code&gt;rightkey&lt;/code&gt;  .&lt;/p&gt;
&lt;h2 id=&#34;脱壳&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#脱壳&#34;&gt;#&lt;/a&gt; 脱壳&lt;/h2&gt;
&lt;p&gt;脱壳工具现在有很多了，我这里使用的是 youpk, 使用方法很简单，只需要配置一下就可以，前提是有一台 pixel1&lt;/p&gt;
&lt;p&gt;作者文章 ===&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9iYnMucGVkaXkuY29tL3RocmVhZC0yNTk4NTQuaHRt&#34;&gt;https://bbs.pediy.com/thread-259854.htm&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;参数分析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#参数分析&#34;&gt;#&lt;/a&gt; 参数分析&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;th&gt;处理&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;1111111&lt;/td&gt;
&lt;td&gt;传入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;123123&lt;/td&gt;
&lt;td&gt;传入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;memi1&lt;/td&gt;
&lt;td&gt;afb9d9b6577c0397&lt;/td&gt;
&lt;td&gt;android id 写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key&lt;/td&gt;
&lt;td&gt;3820....dd72&lt;/td&gt;
&lt;td&gt;包签名，写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rightkey&lt;/td&gt;
&lt;td&gt;376035775&lt;/td&gt;
&lt;td&gt;包签名，写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;register&lt;/td&gt;
&lt;td&gt;register&lt;/td&gt;
&lt;td&gt;register 字符串，login 同理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;apk 签名是不变的，android id 如果是要大批量生成，hook  &lt;code&gt;android.os.Build&lt;/code&gt;  应该可以，没测试&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;#内部类处理方法&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;android hooking search classes android.provider.Settings&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;android hooking &lt;span class=&#34;token function&#34;&gt;watch&lt;/span&gt; class_method android.provider.Settings&lt;span class=&#34;token variable&#34;&gt;$Secure&lt;/span&gt;.getString --dump-args --dump-backtrace --dump-return&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;从哪里看出来，meli1 是 Android id?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个 app 做了一定的混淆，把关键逻辑放到线程中去执行，这样打出来的调用栈就只有 Thread.run. 但是看到 onclick 方法:  &lt;code&gt;v()&lt;/code&gt;  返回的就是  &lt;code&gt;android id&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210507142705.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;尾声&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#尾声&#34;&gt;#&lt;/a&gt; 尾声&lt;/h2&gt;
&lt;p&gt;至于基于协议的登录注册，有手就行。我就不贴了&lt;/p&gt;
&lt;p&gt;基本 objection 可以一把梭分析&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2021/04/22/%E7%BA%A6%E5%8D%95/</guid>
            <title>约单</title>
            <link>https://winston950213.github.io/2021/04/22/%E7%BA%A6%E5%8D%95/</link>
            <category term="逆向学习" scheme="https://winston950213.github.io/categories/%E9%80%86%E5%90%91%E5%AD%A6%E4%B9%A0/" />
            <category term="逆向" scheme="https://winston950213.github.io/tags/%E9%80%86%E5%90%91/" />
            <category term="安卓" scheme="https://winston950213.github.io/tags/%E5%AE%89%E5%8D%93/" />
            <category term="Frida" scheme="https://winston950213.github.io/tags/Frida/" />
            <category term="实战" scheme="https://winston950213.github.io/tags/%E5%AE%9E%E6%88%98/" />
            <pubDate>Wed, 21 Apr 2021 16:13:06 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;约单 app 导游模块分析&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;抓包&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#抓包&#34;&gt;#&lt;/a&gt; 抓包&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这里使用 postern + charles 抓包&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210422205012.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;静态分析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#静态分析&#34;&gt;#&lt;/a&gt; 静态分析&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;通过抓包结果可知响应是加密的，请求参数也需要看一下。经过 jadx 静态反编译可以得知:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;分析结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;请求方式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/api3.0/user/box&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;api&amp;#123;https://and.iyuedan.com/api3.0/user/box&amp;#125;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;?tdid=388b6b40d00b627ce448595e2910f28d6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;time=1618816116054&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;时间戳&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;oaid=null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;token=1650097369I622d07d4e9IW66029678&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;deviceId 写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;role=1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;version=6.1.6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;sversion=1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;client=android&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;device=Nexus 5X&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;appname=yuedan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;market=xiaomi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;os_version=27&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;new_work=27&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;lang=cn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;ydmd=tmBmKE!VuK&amp;gt;H&amp;gt;E!_^K&amp;gt;H&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;母鸡，写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;and_class_name=Activity_UserInfo_V2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;user_id=53745578&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;用户 id 写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;position=2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写死&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;amp;ydtoken=6f9e3deb3afa8e2ccd4f015ca06fcef9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HTTP/1.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;http 协议&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;经过分析，tdid 是不变化的，也有可能是登陆时候生成的 (没有分析), 接下来搜索  &lt;code&gt;ydtoken&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210423140255.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;进过分析这里最为可疑，然后点进去看一下&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210423140918.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;可以看到这里是 MD5 加密，但是还是需要开启 objection 看一下.&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210423141809.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;但是在网页端使用 MD5 加密将原本的字符串加密之后结果并不一样，怀疑加盐了或者是自写的 MD5 加密，（但是一般不会是自写算法）. 我第一次在找盐的时候想错了。简单方法可以直接 hook 这个 md5 算法这样就会知道了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;接着分析响应加密&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;具体怎么找到的我也忘记了，只记得先找到了这个 decrypt 函数&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210423155651.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;然后写 frida 脚本测试一下是可以调用成功的，但是在把算法抠出来写入却始终报错，然后再试了试 hook  &lt;code&gt;convert&lt;/code&gt;  .&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210423160545.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;将这里的  &lt;code&gt;sohoKeyMap&lt;/code&gt;  和  &lt;code&gt;devKeyMap&lt;/code&gt;  重写，这样解密算法就完成了&lt;/p&gt;
&lt;p&gt;至于如何做成接口调用这不是有手就行？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 springboot (不得不说 java 的代码是真的繁琐)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;tips&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#tips&#34;&gt;#&lt;/a&gt; tips&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;脱壳&lt;/p&gt;
&lt;p&gt;我使用的是 yang 神的脱壳工具 &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL2xhc3RpbmcteWFuZy9mcmlkYV9kdW1w&#34;&gt;https://github.com/lasting-yang/frida_dump&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;合并 dex&lt;/p&gt;
&lt;p&gt;合并 dex 的方法有多种方法，我使用的是&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL1NpbXAxZXIvQW5kcm9pZFNlYy9ibG9iL21hc3Rlci9kZXgyYXBrLnB5&#34;&gt;https://github.com/Simp1er/AndroidSec/blob/master/dex2apk.py&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; os&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; zipfile&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; argparse&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;rename_class&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    files &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; os&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;listdir&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    dex_index &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; path&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;endswith&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;/&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        path &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; path&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; i &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;files&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; files&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;endswith&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;.dex&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            old_name &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; path &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;/&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; files&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; dex_index &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                new_name &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; path &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;/&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;classes.dex&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                new_name &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; path &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;/&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;classes%d.dex&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;%&lt;/span&gt; dex_index&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            dex_index &lt;span class=&#34;token operator&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; os&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;path&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;exists&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;new_name&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                &lt;span class=&#34;token keyword&#34;&gt;continue&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            os&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;rename&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;old_name&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; new_name&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;[*] 重命名完毕&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;extract_META_INF_from_apk&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;apk_path&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; target_path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    r &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; zipfile&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;is_zipfile&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;apk_path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; r&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;27&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        fz &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; zipfile&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;ZipFile&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;apk_path&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;r&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;28&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; fz&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;namelist&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;29&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;startswith&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;META-INF&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;30&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                fz&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;extract&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; target_path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;31&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;32&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;[-] %s 不是一个APK文件&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;%&lt;/span&gt; apk_path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;33&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;34&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;zip_dir&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;dirname&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; zipfilename&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;35&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    filelist &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;36&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; os&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;path&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;isfile&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;dirname&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;37&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; dirname&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;endswith&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;.dex&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;38&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            filelist&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;append&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;dirname&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;39&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;40&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; root&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; dirs&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; files &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; os&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;walk&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;dirname&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;41&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;dir&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; dirs&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;42&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                &lt;span class=&#34;token comment&#34;&gt;# if dir == &#39;META-INF&#39;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;43&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                &lt;span class=&#34;token comment&#34;&gt;# print(&#39;dir:&#39;, os.path.join(root, dir))&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;44&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                filelist&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;append&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;os&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;path&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;join&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;root&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;45&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; name &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; files&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;46&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                &lt;span class=&#34;token comment&#34;&gt;# print(&#39;file:&#39;, os.path.join(root, name))&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;47&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;48&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                filelist&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;append&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;os&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;path&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;join&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;root&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; name&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;49&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;50&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    z &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; zipfile&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;ZipFile&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;zipfilename&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;w&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; zipfile&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;ZIP_DEFLATED&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;51&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; tar &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; filelist&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;52&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        arcname &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; tar&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;dirname&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;53&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;54&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;META-INF&#39;&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; arcname &lt;span class=&#34;token keyword&#34;&gt;or&lt;/span&gt; arcname&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;endswith&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;.dex&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;.DS_Store&#39;&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;in&lt;/span&gt; arcname&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;55&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token comment&#34;&gt;# print(tar + &#34; --&gt;rar: &#34; + arcname)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;56&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            z&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;write&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;tar&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; arcname&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;57&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;[*] APK打包成功，你可以拖入APK进行分析啦！&#39;&lt;/span&gt;  &lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;58&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    z&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;close&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;59&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;60&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;61&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    parser &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; argparse&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;ArgumentParser&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;description&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;repackage dumped dex to apk for jeb/jadx analysis.&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;62&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    parser&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;add_argument&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;-a&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;--apk_path&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; required&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token boolean&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;63&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                        &lt;span class=&#34;token builtin&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;apk for extracting META-INF&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;64&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    parser&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;add_argument&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;-i&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;--dex_path&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; required&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token boolean&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;65&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                        &lt;span class=&#34;token builtin&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;path of dumped dex&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;66&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    parser&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;add_argument&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;-o&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;--output&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; default&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;repacked.apk&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;67&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                        &lt;span class=&#34;token builtin&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;apk path after zip&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;68&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    args &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; parser&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;parse_args&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;69&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;#print(args.apk_path)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;70&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; args&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;71&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;72&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; __name__ &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;73&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    args &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; parse_args&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;74&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    rename_class&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;args&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;dex_path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;75&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    extract_META_INF_from_apk&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;args&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;apk_path&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; args&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;dex_path&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;76&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;# zip_file(args.dex_path)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;77&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    zip_dir&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;args&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;dex_path&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; args&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;output&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;​ 但是有时候我们也许不要合并，使用  &lt;code&gt;ls -Sr&lt;/code&gt;  将 dex 按照大小排列，1.2.0 版本的 jadx 可以使用  &lt;code&gt;add files&lt;/code&gt;  将 dex 添加到项目中但是我添加了 6 个之后就崩了，但是不影响分析.&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2021/03/26/frida-rpc-%E5%AD%A6%E4%B9%A0/</guid>
            <title>frida rpc 学习</title>
            <link>https://winston950213.github.io/2021/03/26/frida-rpc-%E5%AD%A6%E4%B9%A0/</link>
            <category term="逆向学习" scheme="https://winston950213.github.io/categories/%E9%80%86%E5%90%91%E5%AD%A6%E4%B9%A0/" />
            <category term="逆向" scheme="https://winston950213.github.io/tags/%E9%80%86%E5%90%91/" />
            <category term="安卓" scheme="https://winston950213.github.io/tags/%E5%AE%89%E5%8D%93/" />
            <category term="Frida" scheme="https://winston950213.github.io/tags/Frida/" />
            <pubDate>Thu, 25 Mar 2021 23:55:06 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;Frida RPC 学习记录&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;rpc-开发环境搭建&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#rpc-开发环境搭建&#34;&gt;#&lt;/a&gt; RPC 开发环境搭建&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;抄代码的地方 ===&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL2ZyaWRhL2ZyaWRhLXB5dGhvbg==&#34;&gt;https://github.com/frida/frida-python&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;由于我们使用的是 frida-rpc,RPC 环境其实就是 frida 环境，只是多了一个内网穿透的搭建，这里使用的是 NPS, 具体可以详见&lt;a href=&#34;#%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F&#34;&gt;内网穿透&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;java-层主动调用&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#java-层主动调用&#34;&gt;#&lt;/a&gt; Java 层主动调用&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;先写 hook&lt;/p&gt;
&lt;p&gt;再写主动调用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在拿到一个 apk 时，首先要找一下 MainActivity,  &lt;code&gt;grep -ril &amp;quot;MainActivty&amp;quot; *&lt;/code&gt;  尤其是脱壳之后的 dex, 但是这里我们的 apk 比较简单，用 jadx 静态分析一下就可以.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;objection 试试&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;搜索&lt;br /&gt;
 &lt;code&gt;android hooking search classes MainActivity&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;hook 打参数及调用栈&lt;/p&gt;
&lt;p&gt;&lt;code&gt;android hooking watch class com.example.demoso1.MainActivity --dump-args --dump-backtrace --dump-return&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;写 frida 脚本&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;hook&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;   Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;perform&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;       &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; MainActivity &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;com.example.demoso1.MainActivity&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;       MainActivity&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;method01&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function-variable function&#34;&gt;implementation&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;           &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; s1 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;123123&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;           &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;method01&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;s1&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;           console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;str ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; str&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;           console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;s1 ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; s1&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;           console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;result ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;           &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; result&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;       &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;   &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;写主动调用脚本&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;fridamethod01&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;plaintext&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;perform&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; MainActivity &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;com.example.demoso1.MainActivity&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; JavaString &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;java.lang.String&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; MainActivity&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;method01&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;JavaString&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;$&lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;plaintext&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;fridamethod02&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;ciphertext&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;perform&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; JavaString &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;java.lang.String&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;choose&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;com.example.demoso1.MainActivity&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token function-variable function&#34;&gt;onMatch&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;instanca&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;                result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; instanca&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;method02&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;JavaString&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;$&lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;ciphertext&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;onComplete&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;制作 RPC&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;rpc&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;exports &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token literal-property property&#34;&gt;fridamethod01&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;fridamethod01&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token literal-property property&#34;&gt;fridamethod02&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;fridamethod02&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;
&lt;p&gt;暴露接口到公网&lt;/p&gt;
&lt;p&gt;详见&lt;a href=&#34;#%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F&#34;&gt;内网穿透&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;优化&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由于  &lt;code&gt;fridamethod02&lt;/code&gt;  方法中需要使用到  &lt;code&gt;Java.choose()&lt;/code&gt;  , 这个操作非常耗时，我们为了节省时间将这部分代码抽出，但是&lt;strong&gt;这种操作非常危险，万一获取不到 handle 会造成严重后果&lt;/strong&gt;，由于 MainActivity 一定存在就这样干了，但是其他类也许可以也许不可以.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; MainActivityHandle&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;perform&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// var JavaString = Java.use(&#34;java.lang.String&#34;);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// result = MainActivity.method02(JavaString.$new(ciphertext));&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;choose&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;com.example.demoso1.MainActivity&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token function-variable function&#34;&gt;onMatch&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;instanca&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            MainActivityHandle &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; instanca&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token comment&#34;&gt;// result = instanca.method02(JavaString.$new(ciphertext));&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;onComplete&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h2 id=&#34;so-层主动调用&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#so-层主动调用&#34;&gt;#&lt;/a&gt; So 层主动调用&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;普通 hook&lt;/p&gt;
&lt;p&gt;replace hook&lt;/p&gt;
&lt;p&gt;env, jclass,jobject,jsring 构造&lt;/p&gt;
&lt;p&gt;启动 rpc 服务并测试&lt;br /&gt;
部署到公网&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;普通 hook&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;hook_method&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;addr&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    Interceptor&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;attach&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;addr&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token function-variable function&#34;&gt;onEnter&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;args[0] ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; args&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;args[1] ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; args&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;args[2] ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getStringUtfChars&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;args&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;readCString&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token function-variable function&#34;&gt;onLeave&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;retvel&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;retvel is ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getStringUtfChars&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;retvel&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;readCString&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;replace hook&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;replacehook&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;addr&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; addrfunc &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;NativeFunction&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;addr&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    Interceptor&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;addr&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;NativeCallback&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;arg1&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; arg2&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; arg3&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;args[2] ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getStringUtfChars&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;arg3&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;readCString&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;addrfunc&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;arg1&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; arg2&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; arg3&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;retvel is ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getStringUtfChars&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;result&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;readCString&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;
&lt;p&gt;env, jclass,jobject,jsring 构造&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由于肉丝姐在上课时的案例中没有用到  &lt;code&gt;jobject&lt;/code&gt;  和  &lt;code&gt;jclass&lt;/code&gt;  , 所以只要传个指针过去就行，  &lt;code&gt;jstring&lt;/code&gt;  也是个指针，在实际情况中不建议这么做，构造代码初次骨头大佬&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; javaClass &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;com.example.demoso1.MainActivity&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JCLASS&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; javaClass&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;$getClassHandle&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;tryGetEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JOBJECT&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; javaClass&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;$getClassHandle&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;tryGetEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;启动 rpc 服务并测试&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;figcaption data-lang=&#34;javascript&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;invokemethod01&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;ENV is ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;ENV&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;method01 is ===&gt; &#34;, method01addr);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; method01 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;NativeFunction&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;method01addr&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; NewStringUTF &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;NativeFunction&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;addrNewStringUTF&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;pointer&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;pointer&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;pointer&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// var result = method01(env, jclass, jstring);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;perform&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; javaClass &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;com.example.demoso1.MainActivity&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// var JSTRING =Java.vm.getEnv().newStringUtf(Java.vm.getEnv(), Memory.allocUtf8String(&#34;123123123123&#34;))&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JSTRING&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;NewStringUTF&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;Memory&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;allocUtf8String&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;text&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JCLASS&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; javaClass&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;$getClassHandle&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;tryGetEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// var result = method01(env, jclass, jstring);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;method01&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JCLASS&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JSTRING&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;result is ===&gt; &#34;, result)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;readCString result is ===&gt; &#34;, Java.vm.getEnv().getStringUtfChars(result, null).readCString())&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;Memory.readCString result is ===&gt; &#34;, Memory.readCString(Java.vm.getEnv().getStringUtfChars(result, null)))&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getStringUtfChars&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;result&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;readCString&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;result&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; result&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;invokemethod02&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token parameter&#34;&gt;textenc&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    console&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;ENV is ===&gt; &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;ENV&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;method02 is ===&gt; &#34;, method02addr);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;27&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; method02 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;NativeFunction&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;method02addr&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pointer&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;28&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; NewStringUTF &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;token class-name&#34;&gt;NativeFunction&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;addrNewStringUTF&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;pointer&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;pointer&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;pointer&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;29&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;30&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// var result = method02(env, jobject, jstring);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;31&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;perform&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;32&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// var JSTRING =Java.vm.getEnv().newStringUtf(Java.vm.getEnv(), Memory.allocUtf8String(&#34;123123123123&#34;))&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;33&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; javaClass &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;com.example.demoso1.MainActivity&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;34&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JSTRING&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;NewStringUTF&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;Memory&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;allocUtf8String&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;textenc&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;35&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JOBJECT&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; javaClass&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;$getClassHandle&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;tryGetEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;36&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// var result = method02(env, jobject, jstring);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;37&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;method02&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JOBJECT&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;JSTRING&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;38&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;result is ===&gt; &#34;, result)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;39&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;readCString result is ===&gt; &#34;, Java.vm.getEnv().getStringUtfChars(result, null).readCString())&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;40&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token comment&#34;&gt;// console.log(&#34;Memory.readCString result is ===&gt; &#34;, Memory.readCString(Java.vm.getEnv().getStringUtfChars(result, null)))&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;41&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Java&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;vm&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getEnv&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;getStringUtfChars&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;result&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;readCString&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;42&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;43&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt;  result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;44&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;45&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;46&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;// RPC invoke SO step 4:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;47&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;// make exports&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;48&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;49&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;rpc&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;exports &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;50&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token literal-property property&#34;&gt;invoke1&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;invokemethod01&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;51&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token literal-property property&#34;&gt;invoke2&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;invokemethod02&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;52&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;测试详见&lt;a href=&#34;#%E6%B5%8B%E8%AF%95&#34;&gt;测试&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;
&lt;p&gt;暴露到公网&lt;/p&gt;
&lt;p&gt;详见&lt;a href=&#34;#%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F&#34;&gt;内网穿透&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;测试&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#测试&#34;&gt;#&lt;/a&gt; 测试&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;curl/postman&lt;/p&gt;
&lt;p&gt;sige&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;连通性测试&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#连通性测试&#34;&gt;#&lt;/a&gt; 连通性测试&lt;/h3&gt;
&lt;h4 id=&#34;curl&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#curl&#34;&gt;#&lt;/a&gt; curl&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;在开启服务之后简单测试接口是否通，可以用 curl, 更多操作可以参考:&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9jdXJsLnNlL2RvY3MvbWFucGFnZS5odG1s&#34;&gt;https://curl.se/docs/manpage.html&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;笔者只会一条命令还是刚学会:&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;curl&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-X&lt;/span&gt; POST &lt;span class=&#34;token parameter variable&#34;&gt;-H&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Content-Type: application/json&#34;&lt;/span&gt;     &lt;span class=&#34;token parameter variable&#34;&gt;-d&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;&amp;#123;&#34;data&#34;: &#34;zrail&#34;&amp;#125;&#39;&lt;/span&gt;  http://127.0.0.1:5000/encrypt&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;curl&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-X&lt;/span&gt; POST &lt;span class=&#34;token parameter variable&#34;&gt;-H&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Content-Type: application/json&#34;&lt;/span&gt;     &lt;span class=&#34;token parameter variable&#34;&gt;-d&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;&amp;#123;&#34;data&#34;: &#34;4a61203f8a1b640818230269bd1059ea&#34;&amp;#125;&#39;&lt;/span&gt;  http://127.0.0.1:5000/decrypt&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;postman&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#postman&#34;&gt;#&lt;/a&gt; postman&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;由于开发在虚拟机，postman 测试需要 :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;app&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;run&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;host&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;0.0.0.0&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; port&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;50000&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; threaded&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token boolean&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; debug&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token boolean&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;至于传参使用  &lt;code&gt;formdata&lt;/code&gt;  还是  &lt;code&gt;raw&lt;/code&gt;  , 这就要看服务端怎么写了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; json&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; flask &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; Flask&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; request&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;app &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Flask&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;__name__&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token decorator annotation punctuation&#34;&gt;@app&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;route&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;/encrypt&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; methods&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;POST&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;#url 加密&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;encrypt_class&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    data &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; request&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;get_data&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    json_data &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; json&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;loads&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;data&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;decode&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;utf-8&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    postdata &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; json_data&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;get&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;data&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;# print(&#34;data ===&gt; &#34;,postdata)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    res &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; script&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;exports&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;invoke1&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;postdata&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;# print(&#34;res ===&gt; &#34;, res)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; res&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token decorator annotation punctuation&#34;&gt;@app&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;route&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;/decrypt&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; methods&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;POST&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;#data 解密&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;decrypt_class&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    data &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; request&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;get_data&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    json_data &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; json&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;loads&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;data&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;decode&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;utf-8&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    postdata &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; json_data&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;get&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;data&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    res &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; script&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;exports&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;invoke2&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;postdata&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; res&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; __name__ &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;# app.run(host=&#34;0.0.0.0&#34;, port=50000, threaded=True, debug=False)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    app&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;run&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h3 id=&#34;压力测试&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#压力测试&#34;&gt;#&lt;/a&gt; 压力测试&lt;/h3&gt;
&lt;h4 id=&#34;siege&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#siege&#34;&gt;#&lt;/a&gt; siege&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;其他系统可能需要编译，但是 kali 自带，直接安装&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;具体操作参考: &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vY2hlbnhpYW9tZW5nL3AvMTMxMzA1MjYuaHRtbA==&#34;&gt;https://www.cnblogs.com/chenxiaomeng/p/13130526.html&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;siege 默认只支持 255 个并发数，可以自己自定义，修改 /root/.siege/siege.conf 下的 limit 数值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;命令:&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;siege &lt;span class=&#34;token parameter variable&#34;&gt;-c200&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-r10&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;http://127.0.0.1:5000/decrypt POST &amp;lt;./textenc.json&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;siege &lt;span class=&#34;token parameter variable&#34;&gt;-c200&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-r10&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;http://127.0.0.1:5000/decrypt POST &amp;lt;./text.json&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;figure class=&#34;highlight json&#34;&gt;&lt;figcaption data-lang=&#34;JSON&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;# text.json&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token property&#34;&gt;&#34;data&#34;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;123123123123123123&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;figure class=&#34;highlight json&#34;&gt;&lt;figcaption data-lang=&#34;JSON&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;# textenc.json&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token property&#34;&gt;&#34;data&#34;&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;53c6a31a21192365943a4f672fc97c7d&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;据说 &lt;strong&gt;Jmeter&lt;/strong&gt; 也挺好用，没试过&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;内网穿透&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#内网穿透&#34;&gt;#&lt;/a&gt; 内网穿透&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;将接口暴露至公网需要用到内网穿透工具，这里使用 NPS.github 地址:&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL2VoYW5nLWlvL25wcw==&#34;&gt;https://github.com/ehang-io/nps&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;tips&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#tips&#34;&gt;#&lt;/a&gt; Tips&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;安装比较简单，文档也够详细，有手就行 (😿我手呢？😿). 这里记录几个坑点&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;端口一定要开放，我就是一开始端口开少了.&lt;/li&gt;
&lt;li&gt;服务器开完端口之后需要等一会儿，这个时间长短不确定.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;主动调用内网穿透的两种方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#主动调用内网穿透的两种方式&#34;&gt;#&lt;/a&gt; 主动调用，内网穿透的两种方式&lt;/h3&gt;
&lt;h4 id=&#34;将-http-server-暴露至公网&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#将-http-server-暴露至公网&#34;&gt;#&lt;/a&gt; 将 http server 暴露至公网&lt;/h4&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210324175443.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果是此种方式，NPC 就是 linux 或者 windows 的版本&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;将-frida-server-暴露至公网&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#将-frida-server-暴露至公网&#34;&gt;#&lt;/a&gt; 将 frida server 暴露至公网&lt;/h4&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210324180537.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;此种方式 NPC 为 arm64 (手机). 模拟器应该是 x86 (没试过)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;tips-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#tips-2&#34;&gt;#&lt;/a&gt; Tips&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;暴露 frida server 比暴露 http server 快，但是也没快多少&lt;/li&gt;
&lt;li&gt;感觉手机和网络是瓶颈，选什么框架并无关系&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Todo&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#34;task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input type=&#34;checkbox&#34; id=&#34;cbx_0&#34; disabled=&#34;true&#34; /&gt;&lt;label for=&#34;cbx_0&#34;&gt; 脱离 apk. 将 so 注入到设置&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://winston950213.github.io/2021/03/23/%E9%80%86%E5%90%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/</guid>
            <title>逆向环境搭建</title>
            <link>https://winston950213.github.io/2021/03/23/%E9%80%86%E5%90%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/</link>
            <category term="逆向学习" scheme="https://winston950213.github.io/categories/%E9%80%86%E5%90%91%E5%AD%A6%E4%B9%A0/" />
            <category term="逆向" scheme="https://winston950213.github.io/tags/%E9%80%86%E5%90%91/" />
            <category term="安卓" scheme="https://winston950213.github.io/tags/%E5%AE%89%E5%8D%93/" />
            <pubDate>Mon, 22 Mar 2021 23:55:29 +0000</pubDate>
            <description><![CDATA[ &lt;p&gt;基于 kali linux 2019 的逆向环境搭建&lt;/p&gt;
&lt;p&gt;&lt;span id=&#34;more&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文基于 kali 2021.1, 种子地址:&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cub2ZmZW5zaXZlLXNlY3VyaXR5LmNvbS9rYWxpLWxpbnV4LXZtLXZtd2FyZS12aXJ0dWFsYm94LWltYWdlLWRvd25sb2FkLw==&#34;&gt;https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;基本配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#基本配置&#34;&gt;#&lt;/a&gt; 基本配置&lt;/h2&gt;
&lt;h3 id=&#34;修改用户及密码&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#修改用户及密码&#34;&gt;#&lt;/a&gt; 修改用户及密码&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;kali 开机默认账号  &lt;code&gt;kali&lt;/code&gt;  , 密码  &lt;code&gt;kali&lt;/code&gt;  , 一般在 root 用户下工作 (切勿用于生产环境)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;passwd&lt;/span&gt; root&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;New password:toor&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;Retype new password:toor&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h3 id=&#34;同步时区&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#同步时区&#34;&gt;#&lt;/a&gt; 同步时区&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;新版本可能会自动修改时区，如为自动修改则使用以下方法:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;dpkg-reconfigure tzdata&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;然后选择  &lt;code&gt;Asia→Shanghai&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;安装中文字体&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装中文字体&#34;&gt;#&lt;/a&gt; 安装中文字体&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;有些网页中文显示为乱码，许安装中文字体。新版本可能已经安装，如未自动安装则使用以下方法:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;apt&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; xfonts-intl-chinese&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;apt&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; ttf-wqy-microhei&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h3 id=&#34;安装中文输入法&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装中文输入法&#34;&gt;#&lt;/a&gt; 安装中文输入法&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;一般不建议安装&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzMzNjQxL2FydGljbGUvZGV0YWlscy84OTMyNTU3Ng==&#34;&gt;https://blog.csdn.net/qq_42333641/article/details/89325576&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;apt-get&lt;/span&gt; update&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;apt-get&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; ibus ibus-pinyin&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;配置如文中图&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316011939.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;修改电源设置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#修改电源设置&#34;&gt;#&lt;/a&gt; 修改电源设置&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;更改电源设置，防止息屏&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316013039.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316013253.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;切换到-bash&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#切换到-bash&#34;&gt;#&lt;/a&gt; 切换到 bash&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;kali 2021.1 默认使用 zsh, 在某些时候会出现问题，所以切换到 bash&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;zsh&lt;/code&gt;  切换到  &lt;code&gt;bash&lt;/code&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;chsh &lt;span class=&#34;token parameter variable&#34;&gt;-s&lt;/span&gt; /bin/bash&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;code&gt;bash&lt;/code&gt;  切换到  &lt;code&gt;zsh&lt;/code&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;chsh &lt;span class=&#34;token parameter variable&#34;&gt;-s&lt;/span&gt; /bin/zsh&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;为防止重启终端不彻底直接  &lt;code&gt;reboot&lt;/code&gt;  或者重启虚拟机使其生效&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;检查当前使用的 shell&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token builtin class-name&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;token environment constant&#34;&gt;$SHELL&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token builtin class-name&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;token variable&#34;&gt;$0&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;两个任选其一&lt;/p&gt;
&lt;h3 id=&#34;增大历史缓存&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#增大历史缓存&#34;&gt;#&lt;/a&gt; 增大历史缓存&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;有时候 app 数据太多，防止丢失&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;nano&lt;/span&gt; ~/.bashrc&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316014401.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在其后面增加三个 0,  &lt;code&gt;Ctrl&lt;/code&gt;  +  &lt;code&gt;x&lt;/code&gt;  +  &lt;code&gt;Y&lt;/code&gt;  +  &lt;code&gt;Enter&lt;/code&gt;  保存退出.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;  , 如果出现乱码，不要慌，  &lt;code&gt;reooot&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;工具安装&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#工具安装&#34;&gt;#&lt;/a&gt; 工具安装&lt;/h2&gt;
&lt;h3 id=&#34;htop-jnettop-tree&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#htop-jnettop-tree&#34;&gt;#&lt;/a&gt; htop , jnettop, tree&lt;/h3&gt;
&lt;p&gt;更新源&lt;/p&gt;
&lt;p&gt;&lt;code&gt;apt update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;安装&lt;/p&gt;
&lt;p&gt;&lt;code&gt;apt install htop jnettop tree&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;安装-android-studio&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-android-studio&#34;&gt;#&lt;/a&gt; 安装 Android Studio&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;建议在真机复制链接到虚拟机使用  &lt;code&gt;wget&lt;/code&gt;   下载&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;下载&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#下载&#34;&gt;#&lt;/a&gt; 下载&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;wget //redirector.gvt1.com/edgedl/android/studio/ide-zips/4.1.2.0/android-studio-ide-201.7042882-linux.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&#34;解压&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#解压&#34;&gt;#&lt;/a&gt; 解压&lt;/h4&gt;
&lt;p&gt;使用  &lt;code&gt;tar zxvf FileName.tar.gz&lt;/code&gt;  解压&lt;/p&gt;
&lt;h4 id=&#34;配置-adb&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#配置-adb&#34;&gt;#&lt;/a&gt; 配置 adb&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;如果默认安装 Android Studio 的话，adb 位置为  &lt;code&gt;PATH=/root/Android/Sdk/platform-tools&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;执行在  &lt;code&gt;nano ~/.bashrc&lt;/code&gt;  在 bashrc 中增加  &lt;code&gt;export PATH=/root/Android/Sdk/platform-tools:$PATH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;source 刷新&lt;/li&gt;
&lt;li&gt;输入 adb 不出现  &lt;code&gt;command not found&lt;/code&gt;  则成功&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;启动&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#启动&#34;&gt;#&lt;/a&gt; 启动&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;进入 /root/android-studio/bin&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./studio.sh&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;初始化第一个-android-项目&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#初始化第一个-android-项目&#34;&gt;#&lt;/a&gt; 初始化第一个 Android 项目&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;empty app 相信大家都会&lt;/p&gt;
&lt;p&gt;静静等待初始化完成&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;问题:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在初始化 NDK 环境的时候会出现一个玄学问题&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316041950.jpg&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;p&gt;介绍几种解决方法:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;大佬们的:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;重新下载 SDK:&lt;/p&gt;
&lt;p&gt;由于没有领会到意思，我重新解压也未解决&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;删除原来下载的 NDK 文件夹，开代理重新下载&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;开代理下载的 NDK 和不开代理下载的 NDK 不同，此法为解决版本冲突&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我试验了此法，未解决&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;手动下载 NDK&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5nb29nbGUuY24vbmRrL2Rvd25sb2Fkcz9obD16aF9jbg==&#34;&gt; https://developer.android.google.cn/ndk/downloads?hl=zh_cn&lt;/span&gt; 下载 NDK, 手动配置&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;未实验&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我瞎猫碰着死耗子的做法&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;瞎几把搜索，找到&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL3Byb2plY3RzL2luc3RhbGwtbmRrP2hsPXpoLWNu&#34;&gt; https://developer.android.com/studio/projects/install-ndk?hl=zh-cn&lt;/span&gt;, 于是我试着看看自己的 Android Studio&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;安装 &lt;strong&gt;CMake&lt;/strong&gt;, 就成功了&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210323233719.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;由于 NDK 已经安装过，就不需要再安装，只安装 CMake, 此时也不需要特定版本 [毕竟不是专业开发者]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;科学配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#科学配置&#34;&gt;#&lt;/a&gt; 科学配置&lt;/h3&gt;
&lt;h4 id=&#34;命令行科学&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#命令行科学&#34;&gt;#&lt;/a&gt; 命令行科学&lt;/h4&gt;
&lt;h5 id=&#34;proxychains&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#proxychains&#34;&gt;#&lt;/a&gt; proxychains&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;配置&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nano /etc/proxychains4.conf&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;注释掉 proxy-dns&lt;/li&gt;
&lt;li&gt;注释掉 socks4&lt;/li&gt;
&lt;li&gt;增加自己配置 (主机 ip + 科学端口)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316021834.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316021917.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;打开主机 VPN  &lt;code&gt;Allow LAN&lt;/code&gt;  即 允许局域网连接&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;验证是否成功&lt;/p&gt;
&lt;p&gt;&lt;code&gt;proxychains curl ip.sb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;输出不是自己 ip 即成功&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;redsocks&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#redsocks&#34;&gt;#&lt;/a&gt; redsocks&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;kali linux 自带，其他系统可能需要编译安装&lt;/p&gt;
&lt;p&gt;遗留问题：浏览器访问 google 有问题，但是其他正常&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;修改配置文件&lt;br /&gt;
&lt;img data-src=&#34;/images/legacy/20210316045229.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;前面的 log 开关可改可不改&lt;br /&gt;
 local_ip 与 local_port 可改可不改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cDovL3huLS1pcHRhYmxlcy0wbjNtbTI3by5zaA==&#34;&gt;修改 iptables.sh&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316045602.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;框中为你的主机地址&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;启动&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;redsocks&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;# 使用 `iptables.sh` 进行流量转发&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;sh&lt;/span&gt; iptables.sh&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;
&lt;p&gt;验证&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ss -lntp|more&lt;/code&gt;  查看监听端口&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps aux | grep 进程名&lt;/code&gt;  查看进程是否启动&lt;/li&gt;
&lt;li&gt;&lt;code&gt;curl ip.sb&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;其他操作系统参照&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pkeTBfMjAwNC9hcnRpY2xlL2RldGFpbHMvNDg0NzQ3MjE=&#34;&gt;https://blog.csdn.net/zdy0_2004/article/details/48474721&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vc2hhb2hlZi9wLzQ0Nzc4NjIuaHRtbA==&#34;&gt;https://www.cnblogs.com/shaohef/p/4477862.html&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;笔者未实验&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;安装-jadx&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-jadx&#34;&gt;#&lt;/a&gt; 安装 jadx&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;在 github-releases 直接下载最新版 &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL3NreWxvdC9qYWR4L3JlbGVhc2VzKCVFOCVCRiU4NyVFNyVBOCU4QiVFNSU4RiVBRiVFOCU4MyVCRCVFOSU5QyU4MCVFOCVBNiU4MSVFNyVBNyU5MSVFNSVBRCVBNik=&#34;&gt;https://github.com/skylot/jadx/releases (过程可能需要科学)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;proxychains wgethttps://github.com/skylot/jadx/releases/download/v1.2.0/jadx-1.2.0.zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7z x jadx-1.2.0.zip -ojadx1.2.0&lt;/code&gt;  解压即可使用 [-o 指定解压后的文件夹名]&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;安装-pyenv&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-pyenv&#34;&gt;#&lt;/a&gt; 安装 pyenv&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;安装尽量参照官方 README, 一般不会出现问题&lt;/p&gt;
&lt;p&gt;以下实验均在 kali linux bash 下运行&lt;/p&gt;
&lt;p&gt;官方地址 ==&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL3B5ZW52L3B5ZW52&#34;&gt;https://github.com/pyenv/pyenv&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;下载&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;git&lt;/span&gt; clone https://github.com/pyenv/pyenv.git ~/.pyenv&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;写入环境变量&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token builtin class-name&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;export PYENV_ROOT=&#34;$HOME/.pyenv&#34;&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&gt;&gt;&lt;/span&gt; ~/.bashrc&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token builtin class-name&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;export PATH=&#34;$PYENV_ROOT/bin:$PATH&#34;&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&gt;&gt;&lt;/span&gt; ~/.bashrc&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;初始化&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token builtin class-name&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-e&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#39;if command -v pyenv 1&gt;/dev/null 2&gt;&amp;amp;1; then\n  eval &#34;$(pyenv init -)&#34;\nfi&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&gt;&gt;&lt;/span&gt; ~/.bashrc&#39;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;刷新&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token builtin class-name&#34;&gt;exec&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;&lt;span class=&#34;token environment constant&#34;&gt;$SHELL&lt;/span&gt;&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;安装编译依赖&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight text&#34;&gt;&lt;figcaption data-lang=&#34;text&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;sudo apt-get update; sudo apt-get install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9naXRodWIuY29tL3B5ZW52L3B5ZW52L3dpa2kjc3VnZ2VzdGVkLWJ1aWxkLWVudmlyb25tZW50&#34;&gt;https://github.com/pyenv/pyenv/wiki#suggested-build-environment&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;
&lt;p&gt;常用命令&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pyenv --version # 查看版本&lt;/li&gt;
&lt;li&gt;pyrnv versions # 查看已经安装的 Python 版本&lt;/li&gt;
&lt;li&gt;pyenv local 3.8.0 # 局部切换到 3.8.0&lt;/li&gt;
&lt;li&gt;pyenv global system # 全局切换到 system, 即系统版本&lt;/li&gt;
&lt;li&gt;pyenv --help # 查看帮助&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;安装-miniconda&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-miniconda&#34;&gt;#&lt;/a&gt; 安装 Miniconda&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;下载安装脚本: proxychains wget &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9yZXBvLmFuYWNvbmRhLmNvbS9taW5pY29uZGEvTWluaWNvbmRhMy1sYXRlc3QtTGludXgteDg2XzY0LnNo&#34;&gt;https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;给安装脚本可执行权限: chmod +x Miniconda3-latest-Linux-x86_64.sh&lt;/li&gt;
&lt;li&gt;运行安装脚本: sh Miniconda3-latest-Linux-x86_64.sh&lt;/li&gt;
&lt;li&gt;安装过程脚本会自动修改 /.bashrc 文件，在脚本运行完毕最好检查一下 /.bashrc 文件并 source ~/.bashrc 刷新一下&lt;/li&gt;
&lt;li&gt;安装 python3.8.0 环境:proxychains conda create -n py380 python=3.8.0&lt;/li&gt;
&lt;li&gt;切换到 python3.8.0: conda activate py380&lt;/li&gt;
&lt;li&gt;安装 frida 12.8.0 全家桶:&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&#34;highlight bash&#34;&gt;&lt;figcaption data-lang=&#34;bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;proxychains pip &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;token assign-left variable&#34;&gt;frida&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;12.8&lt;/span&gt;.0&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;proxychains pip &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; frida-tools&lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;5.3&lt;/span&gt;.0&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;proxychains pip &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;token assign-left variable&#34;&gt;objection&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1.8&lt;/span&gt;.4&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;初始化环境就在 python 3.8.0 下:
&lt;ul&gt;
&lt;li&gt;将 conda activate py380 写入～/.bashrc&lt;/li&gt;
&lt;li&gt;或将 alias mfrida=&amp;quot;conda activate py380&amp;quot; 写入～/.bashrc&lt;/li&gt;
&lt;li&gt;手动切换也不是不行🙃&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;环境隔离 Miniconda 和 pyenv 二选一 (建议选择 conda)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;安装-010editer&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-010editer&#34;&gt;#&lt;/a&gt; 安装 010editer&lt;/h3&gt;
&lt;h4 id=&#34;安装&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装&#34;&gt;#&lt;/a&gt; 安装&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官网下载 ==&amp;gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuc3dlZXRzY2FwZS5jb20vMDEwZWRpdG9yLw==&#34;&gt;https://www.sweetscape.com/010editor/&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;傻瓜式安装&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;破解&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#破解&#34;&gt;#&lt;/a&gt; 破解&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;破解可耻，请支持正版&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;无限试用法&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;root 用户下删除  &lt;code&gt;/root/.local/share/SweetScape/010 Editor&lt;/code&gt;  和  &lt;code&gt;/root/.config/SweetScape&lt;/code&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight shell&#34;&gt;&lt;figcaption data-lang=&#34;Bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;rm&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-rf&lt;/span&gt; /root/.config/SweetScape&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;rm&lt;/span&gt; &lt;span class=&#34;token parameter variable&#34;&gt;-rf&lt;/span&gt; /root/.local/share/SweetScape/010 Editor&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;又来三十天&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;分析文章 ==&amp;gt; &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2s3YXJtL2FydGljbGUvZGV0YWlscy8xMDg5MTQwMjQ=&#34;&gt;https://blog.csdn.net/k7arm/article/details/108914024&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;安装-vscode&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-vscode&#34;&gt;#&lt;/a&gt; 安装 Vscode&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;官网下载 vscode  &lt;code&gt;proxychains wget https://vscode.cdn.azure.cn/stable/e5a624b788d92b8d34d1392e4c4d9789406efe8f/code_1.51.1-1605051630_amd64.deb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;dpkg -i &amp;quot;刚才下载的 vscode&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;安装-jeb&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-jeb&#34;&gt;#&lt;/a&gt; 安装 jeb&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9iYnMucGVkaXkuY29tL3RocmVhZC0yNTk4OTUtMS5odG0=&#34;&gt;https://bbs.pediy.com/thread-259895-1.htm&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;破解可耻，请支持正版&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;下载-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#下载-2&#34;&gt;#&lt;/a&gt; 下载&lt;/h4&gt;
&lt;p&gt;​ &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9tZWdhLm56L2ZpbGUvT0VKd1dhN0ojYW1vQUVhMEdHbldwV1hhUFl2R0JDM0U1RmpjaUdZUlhacFlpVVRGREU4SQ==&#34;&gt;https://mega.nz/file/OEJwWa7J#amoAEa0GGnWpWXaPYvGBC3E5FjciGYRXZpYiUTFDE8I&lt;/span&gt;&lt;br /&gt;
​ or&lt;br /&gt;
​ &lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9taXIuY3IvMDlVSENBVEQ=&#34;&gt;https://mir.cr/09UHCATD&lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&#34;安装-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-2&#34;&gt;#&lt;/a&gt; 安装&lt;/h4&gt;
&lt;p&gt;​ 解压运行  &lt;code&gt;./jeb_linux.sh&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&#34;运行&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#运行&#34;&gt;#&lt;/a&gt; 运行&lt;/h4&gt;
&lt;p&gt;​ 输入密码  &lt;code&gt;ilbtcdnwiuypbzeo&lt;/code&gt;  --&amp;gt;  &lt;code&gt;Accept&lt;/code&gt;  --&amp;gt;  &lt;code&gt;manual&lt;/code&gt;  激活 (用户名自己定义)---&amp;gt; 拷贝  &lt;code&gt;License Data&lt;/code&gt;  ---&amp;gt; 使用 &lt;strong&gt;Python2&lt;/strong&gt; 执行  &lt;code&gt;jebKeygen.py&lt;/code&gt;  ---&amp;gt; 粘贴  &lt;code&gt;License Data&lt;/code&gt;  ---&amp;gt; 拷贝 key---&amp;gt; 粘贴到 jeb---&amp;gt; 完成&lt;/p&gt;
&lt;h3 id=&#34;安装-scrcpy&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-scrcpy&#34;&gt;#&lt;/a&gt; 安装 scrcpy&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;在 kali 中使用无线投屏，结合 WiFiadb&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;apt search scrcpy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;apt install scrcpy&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用 adb connect 连接手机&lt;/li&gt;
&lt;li&gt;scrcpy 启动&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;安装-tmux&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-tmux&#34;&gt;#&lt;/a&gt; 安装 tmux&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;遇事不决，翻译提示&lt;/p&gt;
&lt;p&gt;第一次启动出现一个让你执行  &lt;code&gt;touch ~/.hushlogin&lt;/code&gt;  的提示，执行就完了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;安装-3&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装-3&#34;&gt;#&lt;/a&gt; 安装&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;apt install tmux&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&#34;运行-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#运行-2&#34;&gt;#&lt;/a&gt; 运行&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;tmux 默认  &lt;code&gt;Ctrl&lt;/code&gt;  +  &lt;code&gt;B&lt;/code&gt;  为命令前缀&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;更多操作命令&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;可以参考阮一峰大佬的文章 ==&amp;gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cucnVhbnlpZmVuZy5jb20vYmxvZy8yMDE5LzEwL3RtdXguaHRtbA==&#34;&gt;https://www.ruanyifeng.com/blog/2019/10/tmux.html&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;踩坑及备忘&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#踩坑及备忘&#34;&gt;#&lt;/a&gt; 踩坑及备忘&lt;/h2&gt;
&lt;h3 id=&#34;vm&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#vm&#34;&gt;#&lt;/a&gt; VM&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;vm 版本不要选择 15.0, 不要问为什么，问就是有坑，&lt;s&gt;16.0 没有试过&lt;/s&gt; 16 目前没发现什么大问题，目前选择 15.5 也是可以的&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vm 虚拟网络问题&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316141907.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;/images/legacy/20210316141934.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;/images/legacy/20210316142000.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果出现了实在无法解决的问题，且此时你不想重新解压一份虚拟机文件可以试试&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;/images/legacy/20210316142015.png&#34; alt=&#34;文章插图&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果还有无法解决的问题，重新解压虚拟机，重新配置🙃&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
    </channel>
</rss>
