这篇文章是16年年底写的,一直忘记发,之前也都是分析第三方应用,对于自身应用和第三方应用有这样两种感觉
- 逆向第三方应用好像是拆别人家东西自己用
- 逆向自身应用就像是给自己家添置家居
@小学生是我学习逆向的道路上的基友,我们经常一起折腾东西。有一天@小学生 对我讲说:咦小马哥,我们做个拦截短信的插件吧。就这样我们折腾了这个东西,现在讲下大概思路:
随着网络欺诈的日益壮大,越来越多的人被钓鱼网站欺骗造成个人信息泄露严重的还会造成经济上的损失,这类欺诈短信大部分是以短信的形式发给你说中奖了或者说你的apple账户有风险,一旦你点进去,输入了你的账号和密码来登录,你的apple账户就成功泄露了,那么我们改如何着手去做一个拦截钓鱼网站的插件呢?
首先说到短信,既然是苹果系统自带的app,肯定遵循MVC架构,既然想要拦截钓鱼网站,肯定是要把它与正确的网址作对比,然后再出来个弹框提示这个可能是钓鱼网站,并由用户选择是否继续或者进入正确的网址,这样,大概的思路流程也就出来了。
接下来,我们打开短信接发消息的界面,先看看他的视图层次。
- 首先打开
短信
,远程连接到手机,我们需要输入ps -e | grep /Applications
来找到目标app的进程名 - 然后我们向
短信
注入Cycript来打印视图层次
[[[UIWindow keyWindow] rootViewController] _printHierarchy].toString()
可以来打印一些大范围的层次,这样一来看起来更加精简。
从打印出来的视图层次来看,我们所在收发消息界面的controller应该是CKMessagesController,其他的如:CKTranscriptCollectionViewController等都是苹果的私有框架,我们找到它后发现并没有找到一些关键信息
既然这样,我们先通过class-dump出他的头文件以备后续判断。
这时候,我们应该这样想,既然是要,点击这个链接后才执行判断以及警告,结合正向知识,应该是一个openURL之类的函数,我们把短信
的二进制文件拖进hopper中,搜索openURL,结果看到有两个地方出现了分别是-[SMSApplication applicationOpenURL:]:
和-[SMSApplication openURL:]:
那么到底这两个中有没有我们所需呢?别着急,让我们祭起debugserver和lldb来印证猜想
debugserver运行在iOS上,顾名思义,它作为服务端,实际执行LLDB(作为客户端)传过来的命令,再把执行结果反馈给LLDB
,显示给用户,即所谓的“远程调试”。
首先
然后查看他的ASLR偏移
接下来我们结合之前的偏移量和函数的地址来下断点
首先在第一个地方下断点后,我们点击短信中的链接时没有任何反应,
然后我们在第二个地方下断点,结果在点击了链接后触发了断点,这是便初步印证了我们的猜想
接下来我们在导出的头文件中找到SMSApplication.h文件,进去后找到一个具体的openURL函数,接下来就要着手写算法来判断是否为钓鱼网站了
这里我们通过分别遍历目标网址和正确网址的字符串,并计算相似度,如果相似度接近1或者过低就为正确网址,否则为钓鱼网址,然后我们在openURL中加上这个判断,再写上一个弹窗,出发点击事件,就可以完成我们的目标了。
ps:在这里遇到一个正向开发的坑,之前的弹窗都是用UIAlerView,结果处理按钮点击事件的时候,arg1这个动态参数的值传不过来,请教了朋友之后才知道iOS8的新特性中使用UIAlertController,在UIAlertAction中通过block回调可以拿到这个动态参数
最后我们编写完成tweak后注入到app中看看效果如何
我们先在短信中输入
www.baudu.com
,然后点击它,会出现一个警告弹框如果我们点击
继续前往
,就会继续进入这个网站
- 如果点击
正确网址
,就会进入百度
这个正确的网站
这样我们最终就完成了这个拦截钓鱼网站的目标