第一次逆向,想先直接调用UI函数来hook;遇到了一个问题:

第一个UI函数是:
[ContactInfoViewController OnSelectSession:SessionSelectController:]
另一个函数是:
[RemarkViewController showTagEdit]
我的第一个Tweak想先调用UI函数,没能力挑战刨根问底的找到“安静的牵一发,而不动全身的“方法””,
目前遇到的问题是:如何获取当前页面中的ContactInfoViewController 和 RemarkViewController;

ContactInfoViewControllerRemarkViewController初始化时各retain一个全局变量,留着自己用;这是我曾经用过的方法,现在已不忍直视 :neutral_face:

今晚补充:利用Hopper,尝试着把第一个函数:[ContactInfoViewController:OnSelectSession:(session)SelectSessionController:(Controller)]静态调用逆向出来,一看吓一跳,7个msgsend。其中有3个方法比较重要分别是:
5:[[[MMServiceCenter defaultCenter] getService:[ShareMyfriendLogicController class]]setM_contactShareToWho:session]
6:[[[MMServiceCenter defaultCenter] getService:[ShareMyfriendLogicController class]]setM_ContactToShare:ContactInfoViewController]
7[[[[MMServiceCenter defaultCenter] getService:[ShareMyfriendLogicController class]]setM_contactShareToWho:session]start];觉得第5个函数可能是我需要的函数(我只是想得到点击这个session的函数;明天会继续尝试用LLDB和Debugserver来看运行时的参数)

THX!!T T 那更好的方式是继续往下挖函数是么?找到被嵌套的核心函数么。。。

[[[MMServiceCenter defaultCenter] getService:[ShareMyfriendLogicController class]]setM_contactShareToWho:session]
看起来只是个setter;
[[[[MMServiceCenter defaultCenter] getService:[ShareMyfriendLogicController class]]setM_contactShareToWho:session]start]
我认为比较可疑。

其实看到MMServiceCenter之后,你就已经脱离UI接触到了微信的逻辑层,从ShareMyfriendLogicController里的“Logic”就可以看出;这也是我现在的一般做法。微信的架构,大概是最上一层UI以及UIController,下一层是model以及modelController,再下一层就是C以及C++对数据的操作。
另:微信的几个关键modelController,都是通过MMServiceCenter来获取的,对于大多数功能来说,逆向时如果接触到了MMServiceCenter,就说明方向是对的

谢谢!今天继续尝试!

楼主也在逆向微信吗~我也在逆向,才玩一周,还不怎么会dugserver+lldb调试,做了一个自动抢红包的tweak,有机会可以交流下~

1 个赞

哇塞你好厉害。。。我才刚开始。。

我也是才开始玩的,慢慢玩吧,微信太大了,可以交流发现的一些东西~

好的,待我能够有一些进步。。。。

18日使用了LLDB+Debug,设置的断点一个都没被触发。检查了下工具没有问题,是函数找错了。这个页面有点奇怪,明明是ContactInfoViewController,(在微信对话中,点击对方头像进入的第一个页面),但是我没能通过 actionForTarget:forControlEvent:或者nextResponder定位到UI函数,只能通过对ContactViewController的头文件来判断;但最后还是错了。
于是我重新换了方向,在新的RemarkViewController去逆向[RemarkViewController showTagEdit]
目前逆向出:[[ContactTagViewController alloc]initWithContact: (CContact实例)]
起床继续努力。。

我建议你把整个逆向的过程记录下来,在逆向出想要的功能之后梳理总结一下,然后在干货区发个帖;这既是温故而知新的实践,能够让你对逆向工程技术有更深的理解,也可以造福其他刚刚开始逆向工程学习的朋友,让他们有非常接地气的参考资料。功德无量啊~

恩,一定!! ~

今天不知怎么的就开窍了!搞定了!!!!!回头好好写一个梳理,整理下思路和新的,我实在太开心了!!!

1 个赞

因为你的思路是对的,只要思路对了,工具只是辅助,即使不熟悉,也可以达到最终目的。恭喜你入门了:grinning_face_with_smiling_eyes:

THX!!!!~