iOS逆向开发中如何锁定APP的目标类与函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
之前介绍了怎么获取APP的所有类的结构信息,这个有什么用呢?用处大了,比如以这一步为基础,下一步通过注入来做更多研究工作。
注入的最小单位是函数,实际上,编译执行的程序在编译后,类就不复存在了,留下来的只是二进制代码(指令或数据都是一样的二进制代码)。所幸的是,跟我们打交道的,并不是二进制代码(那会困难很多),而是函数,而且是某个类的函数。
那么,在用classdump拿到成千上万个类与函数后,哪个函数才是我们关心的呢?怎么锁定它们呢?
下面介绍锁定目标类与函数的可行的办法。
基本上小程研究的目标APP都有丰富的界面,而小程关心的场景基本都是由特定的界面触发,所以,从界面入手是个不错的选择。
有没有办法找出某个界面对应哪一个类呢?这样就可以在classdump拿到的众多的类中仔细研究这个界面类拥有的函数与成员变量。
小程觉得目前最好的办法就是使用Reveal工具。
先下载一个Reveal(有破解版本),比如1.6版本或1.5版本,或2.0版本。
Reveal最大的一个作用是把手机上的某个APP的界面同步显示到电脑上,要做到这个效果,Reveal既要在电脑上运行,同时也要把一个“内鬼”打入到手机。这个打入手机的“内鬼”就是libReveal.dylib。
在电脑上运行Reveal后,点击菜单Help,选择Show Reveal Library in Finder,再点击iOS Library,就可以找到libReveal.dylib。
拷贝到DynamicLibrary目录下:
scp libReveal.dylib root@192.168.2.57:/Library/MobileSubstrate/DynamicLibraries
基本上,手机上的APP在启动运行后,都可以加载DynamicLibraries里面的动态库(以dylib为后缀),至于加载哪个动态库,则由plist文件决定。这个知识点很重要,这意味着你可以写一个plist文件,让某个APP在启动时加载你写的动态库,这是注入的前提。
/Library/MobileSubstrate/DynamicLibraries,这个目录,在手机成功越狱后就会存在。
对于Reveal2.0版本,也以上面的办法定位动态库文件,但这个文件名叫“RevealServer”,可以拷贝过去后命名为“libReveal.dylib”即可。
找一个plist文件来修改,或者直接写一个plist文件,命名为libReveal.plist。
libReveal.plist文件要指定让哪个APP启动时加载Reveal.dylib,比如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Filter</key>
<dict>
<key>Bundles</key>
<array>
<string>com.tencent.QQKSong</string>
</array>
</dict>
</dict>
</plist>
上面的plist内容,让“全民k歌”启动时,加载Reveal.dylib。
com.tencent.QQKSong,是“全民k歌”的BoudleID。至于目标APP的BoundleID是多少,有很多办法可以查到,比如找到它的plist文件来查看,比如ps看进程信息,比如动态调试等等。
小白:如果不指定这个Filter呢,是不是所有的APP启动时都加载?
小程:iOS8之前的版本是这样的,但之后的版本都需要指定APP。所以,不管3724,加上这个Filter总是不会错的。
然后,拷贝libReveal.plist到手机:
scp libReveal.plist root@192.168.2.57:/Library/MobileSubstrate/DynamicLibraries
之后,在电脑上再次启动Reveal就可以连接目标APP,来分析界面类了。
比如,在手机上重启全民k歌,在电脑上重启Reveal并选择菜单项,连接全民k歌。可以看到,全民k歌的一个页面是这样(右下角的类名是重点):
为了“感性”一点,小程做一个演示,通过Reveal定位到全民k歌的目标类,并让全民k歌启动后自动切换至歌手页面。
首先通过Reveal,定位到底部导航条的所在的viewcontroller类是KSRootTabBarController。
然后,通过查看classdump翻译到的类结构中,找到这个类。可以看到,点击“我要唱”按钮,实际就是触发KSRootTabBarController::onClickTabBarItem函数。
接着,就可以hook这个类了,让目标APP自动跳转。这一步的具体操作,小程会在后续详细介绍,你只需要“感性”地知道这回事就好。
最终,自动跳转的效果是这样的:
以上讲解了Reveal的使用。Reveal是定位目标类与函数的有效的办法,除了这个办法,还有一个办法就是,观察所有类的类名,猜测可能有关系的类(比如应该具备某个关键字),再注入这些类的函数并用NSLog输出信息,或者动态调试观察执行的流程,最终确定目标类与函数。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。