首页
社区
课程
招聘
[原创]拼夕夕anti-token分析
发表于: 2022-5-12 21:13 40086

[原创]拼夕夕anti-token分析

2022-5-12 21:13
40086

前言:拼夕夕charles抓包分析发现跟商品相关的请求头里都带了一个anti-token的字段且每次都不一样,那么下面的操作就从分析anti-token开始了


选中跟http相关的类对这个方法进行打印堆栈

结合堆栈方法调用的情况找到具体anti-token是由拦截器类f.a方法调用的,在http.a.c()方法中生成并且http.p.e()方法中加入请求头

在http.a.c()方法中有个一个判断条件如果为true则走d.a().e()方法生成anti-token

如果为false则走j()方法生成anti-token

hook这个i()方法返回值可知获取商品详情接口返回值为false所以走的是j()方法进行计算anti-token。

SecureNative.deviceInfo3()方法生成,传入的str为pdd生成的固定id 一个字符串.

根据hook_libart 得到info3()方法是在libodd_secure.so中,那么ida打开看看这个so包



unidbg前期准备的代码这里就不发了直接调用这个info3方法


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

最后于 2022-5-18 13:23 被那年没下雪编辑 ,原因:
收藏
免费 8
支持
分享
打赏 + 80.00雪花
打赏次数 1 雪花 + 80.00
 
赞赏  Editor   +80.00 2022/06/13 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (25)
雪    币: 499
活跃值: (2189)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
nb 就完事了 
2022-5-14 16:35
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
厉害
2022-5-14 17:07
0
雪    币: 7201
活跃值: (21965)
能力值: ( LV12,RANK:550 )
在线值:
发帖
回帖
粉丝
4
很强
2022-5-15 21:04
0
雪    币: 634
活跃值: (1835)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
强!向大佬学习
2022-5-15 22:19
0
雪    币: 0
活跃值: (629)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
强,主要拼多多日志流风控太难过了,有anti算法也没有用,必须模拟日志流才行,不然账号直接异常。
2022-5-17 14:56
0
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
PddArmSysCallHand这个类去哪了呢
2022-5-17 19:21
1
雪    币: 5
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
hmlyn 强,主要拼多多日志流风控太难过了,有anti算法也没有用,必须模拟日志流才行,不然账号直接异常。
这个也很好解决的花点时间就出来了  选择这种电商事件流实时日志系统 基本上电商平台都有
2022-5-18 13:56
0
雪    币: 0
活跃值: (629)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
t.gif的rctk参数怎么加密出来的,楼主能分析一下吗?
2022-6-5 23:29
0
雪    币: 281
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
hmlyn t.gif的rctk参数怎么加密出来的,楼主能分析一下吗?
aes
2022-6-6 14:02
0
雪    币: 5
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
hmlyn t.gif的rctk参数怎么加密出来的,楼主能分析一下吗?
我前面分析过
2022-6-7 11:25
0
雪    币: 271
活跃值: (1229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大佬能否详细讲下fork进程以及syscallhandler自定义
2022-6-16 17:29
0
雪    币: 201
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
...
2022-6-20 14:43
0
雪    币: 232
活跃值: (1793)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
14
foryaoyaoho PddArmSysCallHand这个类去哪了呢

我试了一下应该是这样的
```java
package com.pdd;
import com.github.unidbg.Emulator;
import com.github.unidbg.arm.context.EditableArm32RegisterContext;
import com.github.unidbg.linux.file.ByteArrayFileIO;
import com.github.unidbg.linux.file.DumpFileIO;

import com.github.unidbg.memory.SvcMemory;
import com.sun.jna.Pointer;

import java.util.concurrent.ThreadLocalRandom;

public class PddArmSysCallHand extends com.github.unidbg.linux.ARM32SyscallHandler {
    public PddArmSysCallHand(SvcMemory svcMemory) {
        super(svcMemory);
    }
    @Override
    protected boolean handleUnknownSyscall(Emulator emulator, int NR) {
        switch (NR) {
            case 190:
                vfork(emulator);
                return true;
            case 359:
                pipe2(emulator);
                return true;
        }

        return super.handleUnknownSyscall(emulator, NR);
    }
    private void vfork(Emulator<?> emulator) {
        EditableArm32RegisterContext context = (EditableArm32RegisterContext) emulator.getContext();
        int childPid = emulator.getPid() + ThreadLocalRandom.current().nextInt(256);
        int r0 = 0;
        r0 = childPid;
        System.out.println("vfork pid=" + r0);
        context.setR0(r0);
    }


    @Override
    protected int pipe2(Emulator<?> emulator) {
        EditableArm32RegisterContext context = (EditableArm32RegisterContext) emulator.getContext();
        Pointer pipefd = context.getPointerArg(0);
        int flags = context.getIntArg(1);
        int write = getMinFd();
        this.fdMap.put(write, new DumpFileIO(write));
        int read = getMinFd();
        String stdout = "d29d36c7-df12-461f-96d7-c0804cb9686e\n";
        this.fdMap.put(read, new ByteArrayFileIO(0, "pipe2_read_side", stdout.getBytes()));
        pipefd.setInt(0, read);
        pipefd.setInt(4, write);
        System.out.println("pipe2 pipefd=" + pipefd + ", flags=0x" + flags + ", read=" + read + ", write=" + write + ", stdout=" + stdout);
        context.setR0(0);
        return 0;
    }

}

```

最后于 2022-6-21 10:12 被falconnnn编辑 ,原因:
2022-6-21 10:10
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
大佬666
2022-6-22 14:22
0
雪    币: 96
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
666666
2022-6-29 11:29
0
雪    币: 0
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
能不能留个联系方式
2022-7-26 17:21
0
雪    币: 27
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
方便交流一下么  我现在也在搞
2022-8-10 10:00
0
雪    币: 5
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
weisente 方便交流一下么 我现在也在搞
可以一起交流你的联系方式多少
2022-8-10 18:08
0
雪    币: 27
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
wx:XWSente  
2022-8-16 16:33
0
雪    币: 27
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
大肥猪 可以一起交流你的联系方式多少
XWSente
2022-8-16 16:33
0
雪    币: 107
活跃值: (811)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
22
我是android安全新手哈,完全不懂java,以前只学过pc软件破解.
看了这个精彩的文章后,尝试运行你的代码的时候有一个疑惑:
在代码的最后几行:  return FileResult.success(new ByteArrayFileIO(oflags, pathname, info.getBytes(StandardCharsets.UTF_8)));
idea提示ByteArrayFileIO转换不成AndroidFileIO ,编译出错, 大虾您有空给我点提示吗?
2022-8-29 19:55
0
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
大哥,怎么联系啊。
2022-9-8 02:14
0
雪    币: 193
活跃值: (1215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
可以生成,是不是要在后面加2个==号???
2023-11-9 09:37
0
雪    币: 236
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
可是 各位大佬们,想抓包改hook 那个函数呢
2024-7-25 15:32
0
游客
登录 | 注册 方可回帖
返回
//