-
-
#30天写作挑战#某购物平台抢券功能粗略分析
-
发表于:
2020-9-13 21:08
17802
-
目录
分析步骤
这样就看到app 自己封装的类了,不过这里看到的还是app自己封装的网络类,没有看到具体的业务类,所以还得继续查找,这里我们直接hook 上图中的 HttpGroupAdapter 类,发现每次发起请求时会调用 add 方法;则我们就hook该add方法;
1.然后通过看代码,猜想是关键函数,然后写代码进行验证
android hooking watch class_method okhttp3.OkHttpClient.newCall --dump-args --dump-backtrace --dump-return
android hooking watch class_method com.android.volley.RequestQueue.add --dump-args --dump-backtrace --dump-return
function doRobCoupon() {
Java.perform(function () {
var jh = Java.use("com.xxxx.newcoupon.utile.h");
var jf = Java.use("com.xxxxx.newcoupon.c.f");
var batchId = "xxxxxxx";
var receiveKey = "xxxxxxx";
var jb = Java.use("com.xxx.coupon.lib.b");
var jc = "";
Java.choose("com.xxxx.newcoupon.c.c", {
onMatch: function (instance) {
jc = instance;
}, onComplete: function () {
}
})
Java.choose("com.xxxxx.newcoupon.activity.NewCouponCenterActivity", {
onMatch: function (instance) {
var newjc = Java.cast(jf.$new(jc), jb);
jh.a(instance, batchId, receiveKey, newjc);
}, onComplete: function () {
}
})
})
}
- 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
- 前段时间同事让我研究xx购物平台的优惠券,让我帮他抢个优惠券,所以就有了这篇文章,
- 本文主要是分享下我的逆向过程中找关键接口的一些思路; 如有不对的地方,请大神指点 ;
- 可能应网络的原因或者券少的关系吧,一直没有抢到过,(也不排除其他原因)
- 之前有试到过一次,返回xxx值不够的错误,后来发现领这个券是需要条件的 (全品类券【每天14/18/20/22点限量抢/xxx值5000以上)
- 都是套路啊,条件不够,后来就放弃了
- 通过Charles 抓包分析对比只有下面三个字段是变化的,所以接下去就找加密关键点了
- 通过上面的分析后,我们会发现数据都会经过 HttpSetting 这个类,这个类中有个 setSignature方法可以拿到sign的调用栈,
- 找到后 我就可以写 rpc 代码了(另外一些其他的字段我就不举例了,查找方法类似)这里就贴下关键的代码片段了,没什么技术含量
- 拿到一个app的时候,如何快速分析出想要的结果,好的思路可以事半功倍噢;
- 如果不涉及协议逆向的话(加密协议都在so层,比较菜还没研究),整体过程是没有什么太大的难点
- 这里推荐 r0ysue大佬的星球,可以学到很多东西
- 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
- 如有侵权,请联系作者删除
- objection
- frida
- Charles
- 拿到app的时候,先抓个包试试,打开app,切换到抢券界面,发现有很多抢券的按钮,
则随便点一个,看看抓的包信息,发现该app,http用的是基于okhttp框架;
- 接下来就用 Objection 来验证了 ,我们先打印app内所有的类,我们找到了关键类
- 为什么说 okhttp3.OkHttpClient 是关键类呢,因为如下图
- 所以 我们hook 该类的 newCall 方法,看调用栈,
android hooking watch class_method okhttp3.OkHttpClient.newCall --dump-args --dump-backtrace --dump-return
- 看调用并没有看到app自己的类,只是看到了另外个网络框架android volley 网络框架,由于对他不了解,所以就 百度呗,看看其用法
- 直接hook add方法
android hooking watch class_method com.android.volley.RequestQueue.add --dump-args --dump-backtrace --dump-return
-
这样就看到app 自己封装的类了,不过这里看到的还是app自己封装的网络类,没有看到具体的业务类,所以还得继续查找,这里我们直接hook 上图中的 HttpGroupAdapter 类,发现每次发起请求时会调用 add 方法;则我们就hook该add方法;
1.然后通过看代码,猜想是关键函数,然后写代码进行验证
function doRobCoupon() {
Java.perform(function () {
var jh = Java.use("com.xxxx.newcoupon.utile.h");
var jf = Java.use("com.xxxxx.newcoupon.c.f");
var batchId = "xxxxxxx";
var receiveKey = "xxxxxxx";
var jb = Java.use("com.xxx.coupon.lib.b");
var jc = "";
Java.choose("com.xxxx.newcoupon.c.c", {
onMatch: function (instance) {
jc = instance;
}, onComplete: function () {
}
})
Java.choose("com.xxxxx.newcoupon.activity.NewCouponCenterActivity", {
onMatch: function (instance) {
var newjc = Java.cast(jf.$new(jc), jb);
jh.a(instance, batchId, receiveKey, newjc);
}, onComplete: function () {
}
})
})
}
- 最终如下图,服务器已经返回错误(我这里用了一个过期的receiveKey 和一个正确的 receiveKey 测试),说明接口已经调用成功了
- 这里还有另外一种方法也可以查找到关键接口,可以通过搜索关键字来定位(这里不推荐哈)r0ysue大佬 一再强调我们要用开发的思路去逆向哈
内容摘要
分析思路
效果展示
协议研究(利用 frida rpc)
最后总结
本贴仅限学习交流使用,切勿用于非法行径,否则后果自付前段时间同事让我研究xx购物平台的优惠券,让我帮他抢个优惠券,所以就有了这篇文章,
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-9-14 09:59
被Snark编辑
,原因: 图片挂了,重新编辑下