Java/Native方法强制调用实现方案(一)
2020-03-02 14:15:29 Author: bbs.pediy.com(查看原文) 阅读量:409 收藏

[原创]Java/Native方法强制调用实现方案(一)

23小时前 391

[原创]Java/Native方法强制调用实现方案(一)

一、前言

书接上回饿了麽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消息发回,我们计算机上的程序得到返回。

以上。欢迎阅读转发~

想要转载的朋友请告知我之后转载,并注明原帖来源。

[招生]科锐逆向工程师培训(3月6日远程教学报名特惠, 第37期)


文章来源: https://bbs.pediy.com/thread-257897.htm
如有侵权请联系:admin#unsafe.sh