首页
社区
课程
招聘
[原创]某宝联盟——淘口令解析
2019-12-5 19:45 12334

[原创]某宝联盟——淘口令解析

2019-12-5 19:45
12334

前言

本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系
在研究alimama的sgin过程中无意中发现的——淘口令解析。

工具准备

Android studio

Android模拟器

ddms

jadx工具

xposed工程

Smali工程

在线淘口令解析(有变更自行百度):http://www.91tool.com/tkljx

UI界面


全文搜索ClipboardManager

使用过淘口令的人都知道,要让ali系的app能自动识别淘口令的前提,必须是先复制淘口令到Android系统的粘贴板,所有我们就从 ClipboardManager进行入手。
全文搜索 ClipboardManager,然后进行分析排查。


逐步排除定位到关键代码:TaoCodeTransferPresenter-itemInfoListener

ddms抓取第一个位置TaoCodeTransferPresenter-itemInfoListener对象

分析后再用ddms进行轨迹跟踪, 发现其实ali系的app大量使用了RxJava技术。

if (rxMtopResponse.isReqSuccess) {
                TaoCodeItemInfo taoCodeItemInfo = (TaoCodeItemInfo) rxMtopResponse.result;
                if (taoCodeItemInfo != null && !TextUtils.isEmpty(taoCodeItemInfo.getRawUrl())) {
                    EventBus.getDefault().post(TaoCodeTransferEvent.success(TaoCodeTransferPresenter.this.mClipboardContent, taoCodeItemInfo));
                    TaoCodeTransferPresenter.this.cleanClipboard();
                    return;
                }
                return;
            }



第二个位置BaseActivity-》onTaoCodeTransferEvent






第三个位置TransformTaoCodeDialog


xposed大法,hook跟踪private final RxMtopResult<TaoCodeItemInfo> itemInfoListener = new RxMtopResult<TaoCodeItemInfo>() --TaoCodeTransferPresenter$2

hook对应原始代码:

private final RxMtopResult<TaoCodeItemInfo> itemInfoListener = new RxMtopResult<TaoCodeItemInfo>() {
        public void result(RxMtopResponse<TaoCodeItemInfo> rxMtopResponse) {
            。。。。
        }
    };



字段描述:
pictUrl :商品图片
rawUrl:商品信息地址
title:标题
couponAmount:优惠券金额
money:赚金额---转发优惠券
afterCouponAmount:优惠后金额
price:商品价格--优惠券前价格






淘口令的例子



debug方式启动

adb shell am start -D -n com.alimama.moon/com.alimama.moon.ui.WizardActivity

hook分析构造淘口令对象

TaoCodeTransferPresenter(@NonNull Context context)即this.itemInfoListener





开始构造hook代码

//new TaoCodeItemInfoRequest(this.mClipboardContent).sendRequest(this.itemInfoListener);
Object obj_mTaoCodeTransferPresenter = XposedHelpers.getObjectField(HookAlimama.appContext,"mTaoCodeTransferPresenter") ;
Object obj_itemInfoListener = XposedHelpers.getObjectField(obj_mTaoCodeTransferPresenter,"itemInfoListener");
Class<?>  clz_TaoCodeItemInfoRequest = HookAlimama.myWechatloader.loadClass("com.alimama.union.app.taotokenConvert.TaoCodeItemInfoRequest");
String str_taokouling = "【第一卫数据线三合一充电线器一拖三手机快充苹果安卓三头多头二合一多功能三线多用华为一拖二车载快冲3三用】https://m.tb.cn/h.evXxTjt?sm=0a657b 點ゞ撃°鏈バ接,再选择瀏覽→噐咑閞ヽ;或椱ァ製整句话¥dYQ5YD5Fn6o¥后咑閞手机天猫";
XposedHelpers.newInstance(clz_TaoCodeItemInfoRequest,str_taokouling);

添加回调代码


private static void callbackInTaoCodeTransferPresenter$2_result(ClassLoader classLoader) {
    try {
        Class<?>  clz_RxMtopResponse = classLoader.loadClass("com.alimama.union.app.rxnetwork.RxMtopResponse");
        XposedHelpers.findAndHookMethod("com.alimama.union.app.taotokenConvert.TaoCodeTransferPresenter$2"
                ,classLoader
                , "result"
                ,clz_RxMtopResponse
                , new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                        super.afterHookedMethod(param);

                        Object obj_result_param =param.args[0];
                        String retCode = (String) XposedHelpers.getObjectField(obj_result_param,"retCode");
                        if ("SUCCESS".equals(retCode)){
                            Object obj_result_param_result_Field = XposedHelpers.getObjectField(obj_result_param,"result");
                            String picUrl = (String)  XposedHelpers.getObjectField(obj_result_param_result_Field,"pictUrl");
                            String rawUrl = (String)  XposedHelpers.getObjectField(obj_result_param_result_Field,"rawUrl");
                            String title = (String)  XposedHelpers.getObjectField(obj_result_param_result_Field,"title");
                            Log.i(TAG,"picUrl= "+picUrl);
                            Log.i(TAG,"rawUrl= "+rawUrl);
                            Log.i(TAG,"title= "+title);

                        }
                    }


                });

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-12-10 19:20 被younghare编辑 ,原因:
收藏
点赞5
打赏
分享
最新回复 (12)
雪    币: 1454
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
愤怒的平头哥 2019-12-5 20:03
2
0
感谢大佬分享
雪    币: 1665
活跃值: (3967)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小黄鸭爱学习 2019-12-6 09:54
3
1
大厂app就是坦荡,从不混淆。反而是小厂子的东西又是混淆又是加壳的。
雪    币: 17834
活跃值: (59743)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2019-12-6 10:05
4
0
感谢分享~
雪    币: 171
活跃值: (394)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ying爵 2019-12-6 11:22
5
0
小黄鸭爱学习 大厂app就是坦荡,从不混淆。反而是小厂子的东西又是混淆又是加壳的。
最新监管要求 APP必须混淆或加壳什么的
雪    币: 8233
活跃值: (4941)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
大道在我 2019-12-7 20:09
6
0
小黄鸭爱学习 大厂app就是坦荡,从不混淆。反而是小厂子的东西又是混淆又是加壳的。
敢抄袭就是举报你
雪    币: 723
活跃值: (1241)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
skyun 3 2019-12-9 18:26
7
0
大佬你把解析算法发出来把
雪    币: 75
活跃值: (587)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jione 2019-12-12 17:11
8
0
ying爵 最新监管要求 APP必须混淆或加壳什么的
没有这个说法,只是有些应用商店上架,不让app加固
雪    币: 28
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lixumin 2020-1-13 17:23
10
0
大哥,HookAlimama的代码能贴下吗
雪    币: 11
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
huangbof 2020-1-27 13:39
11
0
小黄鸭爱学习 大厂app就是坦荡,从不混淆。反而是小厂子的东西又是混淆又是加壳的。
不一样啊,大厂的数据是服务端安全,因为你逃不开他们的数据,所以根本不需要太多的客户端安全。小厂不一样,客户端被破了,完全没有存在的必要了
雪    币: 3615
活跃值: (3763)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 2020-3-5 16:44
12
0
huangbof 不一样啊,大厂的数据是服务端安全,因为你逃不开他们的数据,所以根本不需要太多的客户端安全。小厂不一样,客户端被破了,完全没有存在的必要了
支持
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_gwqtrcab 2020-7-1 15:11
13
0
大侠,谁能告诉我在阿里妈妈后台哪里可以申请到这个淘口令解析权限,有偿服务,
游客
登录 | 注册 方可回帖
返回