查看原文
其他

安卓逆向 | Java/Native方法强制调用实现方案(一)

李鹏博 燕幕自安 2021-03-07
一、前言
书接上回饿了麽APP逆向及爬虫实现详参中,最后没有写完的,三个参数的强制调用生成,欠了这么久,今天来补上,讲一下我怎么用自己的程序调用第三方app中某些方法
没关注的关注一下,我们开冲!
二、适用场景
在逆向过程中,因为部分参数生成的算法在so中,如果不能或不想对so进行研究,更简单的办法是,通过外部提供参数调用app内部某函数,完成参数计算并返回。
这么我们主要讲一下xposed下的插件方案,另外可以达到这个目的的还有frida的rpc调用,我们下次再讲。
三、逆向分析
没有看过饿了麽APP逆向及爬虫实现详参的,墙裂建议再返回去看一下,这接下来的是接着上次文章没完成的几个参数继续写。
deadpool相关三个参数
上次我们找到,这三个参数是由函数sneer生成:
从这张图可以看出,这是个典型的静态调用so,我们一定能在lib目录找到一个名叫libuiseris.so的文件。
用IDA打开这个so看一眼:
果然找到了实现,不过今天我们不讲so逆向,所以不用做这一步。
找到了sneer的native方法就可以,我们来写插件强制调用。
四、xposed插件
和正常的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消息发回,我们计算机上的程序得到返回。

以上。迎阅读转发~


想要转载的朋友请告知我之后转载,并注明原帖来源。
如有问题,请关注公众号回复【作者】获取我的联系方式。
想了解更多技术分享,请长按识别下方二维码关注我吧。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存