博文

目前显示的是 七月, 2013的博文

HTTPS Interception In Action

最近我喜欢上了玩iphone游戏,整天琢磨着怎么作弊。比如刷刷排行榜。于是我就先从抓包入手,看它给服务器发了些什么,哪些是我可以改的。首先,我把我的windows7,做成了一个wifi热点。然后让iphone连上去。假设我iphone获得的IP是192.168.137.4,那么网关就是192.168.137.1。这个IP对应我pc上的一个虚拟网卡。用wireshark对这个interface进行抓包即可。很遗憾。这个游戏的所有网络通信全是HTTPS。我用wireshark抓到的全是加密后的数据,看不懂了。于是man-in-the-middle proxy就上场了。HTTPS的身份认证大部分是单向的,client只检查server是否是真的,而server不检查client的身份。所以我们只需要把client欺骗过去就行了。client的检查方法很简单,看server的证书是否是通过一个证书链颁发,而最根上那个证书是一个可信赖的Certificate Authority(CA)。于是,我们只需要在client上植入一个假的CA证书即可。通常来说,只需要修改下系统设置,而不用更改App。首先推荐的是来自微软的fiddler2。网上大多数文章讲到这里就停下来了,因为他们除了会下个软件然后打开运行下,啥都不会。而fiddler2只能解决最初级的问题。我得先解释下什么是proxy。proxy分两种,正向(forward)和反向(reverse)。正向代理是给最终用户用的,填在浏览器、iphone的网络设置里,当你访问任何一个网页的时候,请求先发给代理服务器,然后由这个代理服务器再转出去。反向代理是给网站服务器用的,假如我们有一个网站,它的服务器只有内网IP,但是又希望能从外网访问,那么就找一个有公网IP的服务器,在它上面用nginx、squid、varnish之类的工具反向代理到内网来。反向代理对最终用户是不可见的。Fidder2是一个正向代理,也就是说,需要用户把它的IP和端口号填在iphone的网络设置里(就在填wifi密码的那个界面)。然后当打开浏览器上网的时候,如果浏览器检测到代理设置,那么它发出的HTTP请求的path部分就是一个full url。如本来request应该发送:GET / HTTP/1.1
Host: www.baidu.com因为要使用代理,所以r…

算法:货币兑换问题

这是一个很经典的问题:假如我现在有3种硬币:1分、2分、5分。然后我要用这三种硬币凑成14分钱,有多少种组合方式? 以3分为例,有两种:3个1分的,或者1个2分加1个1分。有人会说,那还可以"1个1分加1个2分"。哦不,这个其实和1个2分加1个1分是一样的,这种不能被重复计数。这个问题该怎么用程序解决呢?如果我们用f(x,n)表示待求解的问题。x代表需要凑成多少分,n代表可用的硬币种类中面值最大的。那么原题就是要求f(14,5)。经观察发现,f(14,5) = f(9,5) + f(14,2)。即,f(x,n) = f(x-n, n) + f(x,prev(n))。 其中prev(n)指硬币种类中,比n略小的那种硬币。即prev(5)=2, prev(2)=1。再加一个边界条件:f(0,n) = 1 对于任意的n >=0f(x,1) = 1 对于任意的x >=0。这个问题就可以递归求解了。f(14,5)=f(14,2)+f(9,2)+f(4,2) = 8 + 5 + 3= 16。实际上这是一个动态规划问题。UVA上有两道类似的题:674 - Coin ChangeSuppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make changes with these coins for a given amount of money.For example, if we have 11 cents, then we can make changes with one 10-cent coin and one 1-cent coin, two 5-cent coins and one 1-cent coin, one 5-cent coin and six 1-cent coins, or eleven 1-cent coins. So there are four ways of making changes for 11 cents with the above coins. Note that we count that there is one way of making change for ze…