书接上回饿了麽APP逆向及爬虫实现详参中,最后没有写完的,三个参数的强制调用生成,欠了这么久,今天来补上,讲一下我怎么用自己的程序调用第三方app中某些方法。在逆向过程中,因为部分参数生成的算法在so中,如果不能或不想对so进行研究,更简单的办法是,通过外部提供参数调用app内部某函数,完成参数计算并返回。这么我们主要讲一下xposed下的插件方案,另外可以达到这个目的的还有frida的rpc调用,我们下次再讲。从这张图可以看出,这是个典型的静态调用so,我们一定能在lib目录找到一个名叫libuiseris.so的文件。
果然找到了实现,不过今天我们不讲so逆向,所以不用做这一步。找到了sneer的native方法就可以,我们来写插件强制调用。和正常的xposed插件开发一样,我们先hook attach函数,拿到classloader,然后找到类me.ele.uis.eris.ErisEntry,通过类的静态函数instance函数,拿到类的实例,对sneer进行调用。(如果sneer本身也是static函数,那么直接用类调用就可以了,不用再找他的实例出来。)如上。我在手机上(xposed插件里)实现一个http服务器,当收到请求时,把对应body拿出来给这个函数进行计算。计算结果通过http再传回去。即完成了对第三方app函数的调用。但是,机智的小朋友已经发现了,这是在手机里面监听的端口,我代码跑在计算机上,这http消息发不过去啊,这咋整。
这时候我们需要用adb做一下消息转发,'adb forward tcp:端口 tcp:端口'。这样就完成了计算机本地到手机的端口转发。那我们代码用的时候怎么调用呢,直接发http请求到本地的端口即可,如下:这样我们代码直接调用我们自己实现的sneer函数即可。五、总结
把调用的消息转发路线总结一下:
待计算的参数从我们的程序发出到本地的某端口,该端口的消息经过adb转发到手机的某端口,手机的这个端口恰巧监听了http服务,拿到了我们发过来的http消息,解析消息,将参数送入自己之前拿到的方法中进行计算,计算完成将结果通过http消息发回,我们计算机上的程序得到返回。
以上。欢迎阅读转发~
如有问题,请关注公众号回复【作者】获取我的联系方式。想了解更多技术分享,请长按识别下方二维码关注我吧。