首页
社区
课程
招聘
[原创]Java/Native方法强制调用实现方案(一)
发表于: 2020-3-1 14:14 9459

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

2020-3-1 14:14
9459

书接上回饿了麽APP逆向及爬虫实现详参中,最后没有写完的,三个参数的强制调用生成,欠了这么久,今天来补上,讲一下我怎么用自己的程序调用第三方app中某些方法。

没关注的关注一下,我们开冲!

在逆向过程中,因为部分参数生成的算法在so中,如果不能或不想对so进行研究,更简单的办法是,通过外部提供参数调用app内部某函数,完成参数计算并返回。

这次我们主要讲一下xposed下的插件方案,另外可以达到这个目的的还有frida的rpc调用,我们下次再讲。

没有看过饿了麽APP逆向及爬虫实现详参的,墙裂建议再返回去看一下,这接下来的是接着上次文章没完成的几个参数继续写。

deadpool相关三个参数

上次我们找到,这三个参数是由函数sneer生成:

从这张图可以看出,这是个典型的静态调用so,我们一定能在lib目录找到一个名叫libuiseris.so的文件。

用IDA打开这个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:端口'。

这样就完成了计算机本地到手机的端口转发。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (15)
雪    币: 3211
活跃值: (2553)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2020-3-1 16:31
0
雪    币: 3907
活跃值: (5817)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
3
XPOSED的主动调用和“API”暴露
2020-3-1 18:34
0
雪    币: 17
活跃值: (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
要是没有 instance 这个方法的话 怎么拿到类的实例呢
2020-3-2 09:35
0
雪    币: 634
活跃值: (1503)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
可以试试XServer的思路,将原函数调用变成HTTP远程调用,用Burp拦截各类参数,并直接修改、重放或爆破。
https://github.com/monkeylord/XServer
2020-3-3 09:56
2
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Monkeylord 可以试试XServer的思路,将原函数调用变成HTTP远程调用,用Burp拦截各类参数,并直接修改、重放或爆破。 https://github.com/monkeylord/XServer
支持
2020-3-5 15:56
0
雪    币: 234
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
如果参数数context 参数,应该怎么传入???
2020-3-6 11:39
0
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2020-3-11 12:53
0
雪    币: 0
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
请问你xp里面嵌入的是什么网络框架,可以分享下吗
2020-8-24 16:35
0
雪    币: 0
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
amwpecel 要是没有 instance 这个方法的话 怎么拿到类的实例呢
可以调用xp提供的api,newInstance,即可,但是要注意这是一个新的对象
2020-8-25 11:40
0
雪    币: 0
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
曹操223 如果参数数context 参数,应该怎么传入???
try {
    Class<?> ContextClass = findClass("android.content.ContextWrapper", loadPackageParam.classLoader);
    findAndHookMethod(ContextClass, "getApplicationContext", new XC_MethodHook() {
        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            super.afterHookedMethod(param);
            if (applicationContext != null)
                return;
            applicationContext = (Context) param.getResult();
            XposedBridge.log("CSDN_LQR-->得到上下文");
        }
    });
} catch (Throwable t) {
    XposedBridge.log("CSDN_LQR-->获取上下文出错");
    XposedBridge.log(t);
}
2020-8-25 11:42
0
雪    币: 1454
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢大佬分享
2020-8-27 10:15
0
雪    币: 129
活跃值: (4490)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
native 不对 instance 传入的上下文Context进行反调式吗
2020-8-27 11:01
0
雪    币: 1467
活跃值: (1054)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
14
乔治_331129 请问你xp里面嵌入的是什么网络框架,可以分享下吗
我用的nanohttp还蛮好用的~
2020-8-28 10:30
0
雪    币: 235
活跃值: (520)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
可以试试Inspeckage,里边集成了这功能,动态监测各种APP函数
2020-8-28 15:24
0
雪    币: 3071
活跃值: (4152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
Monkeylord 可以试试XServer的思路,将原函数调用变成HTTP远程调用,用Burp拦截各类参数,并直接修改、重放或爆破。 https://github.com/monkeylord/XServer
666
2020-9-1 15:34
0
游客
登录 | 注册 方可回帖
返回
//