-
-
[原创]实现某app的抢红包功能
-
发表于:
2020-7-29 22:32
20280
-
目录
分析步骤
脱完壳之后会有很多dex, 这里我就没去找对应的dex,这里我是直接用脚本把所有的dex都 反编译成java代码,然后就sublime看的,这样感觉比较方便(个人喜好 )合并dex脚本
脱完壳后就开始找关键代码了,直接打开app 进入到收红包消息的界面,运行该命令,找到顶层的activety
adb shell dumpsys activity top | grep ACTIVITY
new RedpaperApi().getRedpaper(...) 这个接口
function hookChatRoom() {
Java.perform(function(){
var Gson = Java.use("com.google.gson.Gson");
var IMMessage = Java.use("com.netease.nimlib.sdk.msg.model.IMMessage");
var CustomBaseMode = Java.use("com.xxx.xx.module.nim.custom.CustomBaseMode");
var AnchorBean = Java.use("com.xxx.xx.model.AnchorBean");
var UserInfo = Java.use("com.xxx.xx.constant.UserInfo");
var GsonNew = Gson.$new();
var BaseChatRoomActivity = Java.use("com.xxx.xx.module.live.chatroom.BaseChatRoomActivity");
var YRequest = Java.use("com.hzlh.sdk.net.YRequest");
// hook http 请求的返回值
YRequest.handleResult.implementation = function(obj, callBack) {
console.log("YRequest.handleResult: ", GsonNew.toJson(obj));
return this.handleResult(obj, callBack);
}
BaseChatRoomActivity.handleCustomMessage.implementation = function(chatRoomMessage) {
var imMessage = Java.cast(chatRoomMessage, IMMessage);
var json = GsonNew.toJson(imMessage.getRemoteExtension());
var custMsg = GsonNew.fromJson(json, CustomBaseMode.class);
var customBaseMode = Java.cast(custMsg, CustomBaseMode);
var dataType = customBaseMode.getDataType();
var userId = UserInfo.getBase().getAppUserId();
if(dataType == 301){
//send("红包来了。。。。。。。。。。。。。。");
console.log("红包来了。。。。。。。。。。。。。。");
var redcontent = customBaseMode.getContent();
console.log("data: ", redcontent)
var authorId = Java.cast(GsonNew.fromJson(redcontent, AnchorBean.class), AnchorBean).getAnchorpersonId();
//创建一个线程 收到红包消息就去抢红包
var jRunnable = Java.use('java.lang.Runnable');
var MyRunnable = Java.registerClass({
name: 'com.example.MyRunnable',
implements: [jRunnable],
methods: {
run: function(){
console.log("thread run...");
var ChatRoomEventView = "com.xxx.xx.module.live.chatroom.event.ChatRoomEventView";
var RedpaperApi = Java.use("com.xxx.xx.Api.redpaper.RedpaperApi");
var AppCallBack = Java.use("com.xxx.xx.model.AppCallBack");
var a = 1;
Java.choose(ChatRoomEventView, {
onMatch:function(instance){
if(a == 1) {
console.log("getRedpaper : ", instance, authorId, userId);
RedpaperApi.$new().getRedpaper(instance.mContext.value, authorId, userId, AppCallBack.$new(instance.mContext.value));
a ++;
}
}, onComplete:function(){
}
})
}
}
});
//console.log("--------start thread--------");
var runnable = MyRunnable.$new();
runnable.run();
}else if(dataType == 64){
console.log("抽奖来了。。。。。。。。。。。。。");
console.log("data: ", customBaseMode.getContent())
}else if(dataType == 251){
console.log("福利来了。。。。。。。。。。。。。");
console.log("data: ", customBaseMode.getContent())
}
return this.handleCustomMessage(chatRoomMessage);
}
})
}
adb shell dumpsys activity top | grep ACTIVITY
new RedpaperApi().getRedpaper(...) 这个接口
- 写这个插件的原因是因为经常使用这个app,而且每天早上这个app都会发红包,然而每次都抢不到,很懊恼,而最近也一直跟着 r0ysue 大佬在学习安卓逆向相关的知识,就突发奇想,所以就拿来练练手了
- 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
- 工具
- objection
- frida
- jadx
-
分析步骤
- 先放到jadx中 发现该app是360的壳
- 碰到这个壳直接用大佬的脚本就可以脱
FART 或者 FRIDA-DEXDump
-
脱完壳之后会有很多dex, 这里我就没去找对应的dex,这里我是直接用脚本把所有的dex都 反编译成java代码,然后就sublime看的,这样感觉比较方便(个人喜好 )合并dex脚本
-
脱完壳后就开始找关键代码了,直接打开app 进入到收红包消息的界面,运行该命令,找到顶层的activety
adb shell dumpsys activity top | grep ACTIVITY
- 然后 打开objection hook 该 Activity, 然后查看调用堆栈;
- 最后定为到这里,到这里收红包消息的地方已经被我我们找到
![avatar]
- 接着就要找领红包的接口了,通过代码发现处理红包的逻辑在如下图的view中
- 然后在通过objection hook 对应view 观察发现
- 最终调用的地方是
new RedpaperApi().getRedpaper(...) 这个接口
- 接下来的话就是写代码 验证自己的猜想了 ,后来经过测试及调整 就有了如下代码:
- 附几张效果图
- 最后得到的结论有这么几点:
- 逆向过程中思路很重要,就像r0ysue 大佬说的一样,要站在开发的角度上去想问题,开发功底有多强,那你逆向分析水平也不会差;
- 另外选对好的工具也非常的重要,就像objection 这款基于frida开发的工具,真的是非常的好用,逆向过程中基本上都不用写代码;大部分靠objection就能快速的找到突破点;
- 关于这款app表明上是加了壳,但对代码没有做过多的混淆,脱完壳后,基本上就是源码了,在通过抓包分析(这里推荐的抓包环境charles + postern,然后配上线ssl unpinning 的处理脚本,基本上可以抓到大部分app的明文数据包)基本上可以做到脱机处理,所以基本上没有太多的难点;另外发现这款app的IM通讯用的是第三方的sdk (网易云信),然后我就试着下载官网的sdk包,然后用这款app的appkey 和token 写到对应的代码中,发现轻而易举的登陆成功了,也是很神奇;
- 这个抢红包功能相对于wx的抢红包功能,其实也是大同小艺,只是wx的抢红包功能多了一步就是需要拿到红包的key之后,才能在去抢红包;这款app只要收到红包消息就可以直接打开红包;只要一步就搞定了,相对来说是比较简单的了;
- 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
- 如有侵权,请联系作者删除
- objection
- frida
- jadx
- 先放到jadx中 发现该app是360的壳
- 碰到这个壳直接用大佬的脚本就可以脱
FART 或者 FRIDA-DEXDump
-
脱完壳之后会有很多dex, 这里我就没去找对应的dex,这里我是直接用脚本把所有的dex都 反编译成java代码,然后就sublime看的,这样感觉比较方便(个人喜好 )合并dex脚本
-
脱完壳后就开始找关键代码了,直接打开app 进入到收红包消息的界面,运行该命令,找到顶层的activety
adb shell dumpsys activity top | grep ACTIVITY
- 然后 打开objection hook 该 Activity, 然后查看调用堆栈;
- 最后定为到这里,到这里收红包消息的地方已经被我我们找到
![avatar]
- 接着就要找领红包的接口了,通过代码发现处理红包的逻辑在如下图的view中
- 然后在通过objection hook 对应view 观察发现
- 最终调用的地方是
new RedpaperApi().getRedpaper(...) 这个接口
- 接下来的话就是写代码 验证自己的猜想了 ,后来经过测试及调整 就有了如下代码:
- 逆向过程中思路很重要,就像r0ysue 大佬说的一样,要站在开发的角度上去想问题,开发功底有多强,那你逆向分析水平也不会差;
- 另外选对好的工具也非常的重要,就像objection 这款基于frida开发的工具,真的是非常的好用,逆向过程中基本上都不用写代码;大部分靠objection就能快速的找到突破点;
- 关于这款app表明上是加了壳,但对代码没有做过多的混淆,脱完壳后,基本上就是源码了,在通过抓包分析(这里推荐的抓包环境charles + postern,然后配上线ssl unpinning 的处理脚本,基本上可以抓到大部分app的明文数据包)基本上可以做到脱机处理,所以基本上没有太多的难点;另外发现这款app的IM通讯用的是第三方的sdk (网易云信),然后我就试着下载官网的sdk包,然后用这款app的appkey 和token 写到对应的代码中,发现轻而易举的登陆成功了,也是很神奇;
- 这个抢红包功能相对于wx的抢红包功能,其实也是大同小艺,只是wx的抢红包功能多了一步就是需要拿到红包的key之后,才能在去抢红包;这款app只要收到红包消息就可以直接打开红包;只要一步就搞定了,相对来说是比较简单的了;
内容摘要
分析思路
效果展示
最后总结
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2020-7-29 22:32
被Snark编辑
,原因: