首页
社区
课程
招聘
[原创]非常规安卓签名校验
发表于: 2024-6-28 15:17 4146

[原创]非常规安卓签名校验

2024-6-28 15:17
4146

前言

阅读了许多大佬文章
珍惜大佬的
正己大佬的
mt去签名原理
等等。
总结前辈经验,不难发现常规签名校验的原理:
都是对本地存储的apk文件进行检测
大多数软件并没有对载入内存的文件进行检测
我也搜索的很多资料
并没有对内存上校验有过多的论述
所以我分享我实现的一种方法:
dex内存校验

实现原理

通过maps 对内存中的dex进行校验

实现步骤

1.通过maps获取内存的dex
2.遍历每个dex.header.signature
3.将获取的signature 进行比对

实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
bool  isMyDexSignaures(){
    char path[1024];
    sprintf(path,"/proc/%d/maps",getpid());
 
    FILE  * f = fopen(path,"r");
 
    if(f == NULL){
        log("error fopen!");
    };
    char buffer[4096];
    string sig="";
    while(fgets(buffer,sizeof (buffer),f)){
        if(strstr(buffer,"classes")&& strstr(buffer,"base.apk")){
            log("%s",buffer);
            char *temp = strtok(buffer,"-");
            long addr= strtoul(temp,NULL,16);
            log("dex 头部magic: %s",(char *)addr);
            log("dex特征打印:%s",getsignature((char *)addr).c_str());
            sig.append(getsignature((char *)addr));
        }
    }
 
    log("signature: %s",sig.c_str());
    return strcmp("5ebbcf832fb69feb3703021e2989839c7b3fffafa7f7e55c6f0204d50e7fb7988a9d2efcc1064122bcb722c16c9987a8e3a09a1048a6303a0db1a76568511675af3d5bc146ea17dfeaa9c545369ad757",sig.c_str())==0;
}
1
2
3
4
5
6
7
8
9
10
11
string getsignature(char *addr){
    addr+=12;   //偏移到signature
    char buffer[50]= {0};
    int index = 0;
    for(int i=0;i<20;i++){
        sprintf(buffer+index,"%02x",(unsigned char)*((unsigned char *)(addr+i)));
        index+=2;
    }
 
    return string(buffer);
}

将代码复制到自己的项目运行一遍 获取日志中的signature 添加到strcmp函数中。每次修改过java代码都要修改!

提高强度

1.将open改成svc实现的代码,不懂可以买珍惜的课 里面有svc的内容
2.自己实现字符串匹配函数
3.结合其他签名检测函数 事半功倍!
4.ollvm

对抗原理

1.hook maps 再申请的假dex内存 达到欺骗的效果。
2.不修改原本dex,用自己的dex文件hook程序,再把自己的dex隐藏。

缺点

只修改签名 代码不会检测出异常,但一改代码才会检测出来

实践测试

对市面上的大部分去签名软件测试 都能达到通杀!
附件没有混淆,欢迎大家学习!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2024-6-28 15:30 被逆天而行编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (14)
雪    币: 498
活跃值: (4291)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个好玩
2024-6-28 18:03
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
貌似np管理器的fancybypass就可以过,原dex也可以放到文件夹里动态加载
2024-6-29 00:39
0
雪    币: 149
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
我以为是教程
2024-6-29 08:44
0
雪    币: 1994
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
我只能说你找错地方了,除了读取apk,还有某个地方存储着dex数量和crc32
2024-6-29 10:16
0
雪    币: 2193
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Eirv 我只能说你找错地方了,除了读取apk,还有某个地方存储着dex数量和crc32
能说说还有什么地方啊?
2024-6-29 10:29
0
雪    币: 2193
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
mb_mmiqbqma 貌似np管理器的fancybypass就可以过,原dex也可以放到文件夹里动态加载
的确可以,他的行为符合对抗原理
2024-6-29 10:31
0
雪    币: 138
活跃值: (542)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Eirv 我只能说你找错地方了,除了读取apk,还有某个地方存储着dex数量和crc32
是说的DexCache不?我通过DexCache的实例确实可以拿到。不过我也遇到一个问题,就是DexCache的dexfile的指针和内存的似乎不一样
2024-7-1 09:43
0
雪    币: 2428
活跃值: (10698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
开了个demo,跑了一下上面给出的代码,if (strstr(buffer, "classes") && strstr(buffer, "base.apk")),请问这个判断有什么用途?base.apk是查找maps中自己apk的路径?我看到了/data/app/xxxxxx/base.apk的信息,但是这个判断一直不成立, classes的判断是为什么?在maps中没有找到classes和base.apk同时在一个行中。我用的是pixel3,Android12.
2024-7-1 10:47
0
雪    币: 1994
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
你瞒我瞒 开了个demo,跑了一下上面给出的代码,if (strstr(buffer, "classes") && strstr(buffer, "base.apk ...
这个是仅debug包才有,release包没有这个,debug包是直接加载的dex,所以所有方法都是解释运行
2024-7-1 12:29
0
雪    币: 2428
活跃值: (10698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Eirv 这个是仅debug包才有,release包没有这个,debug包是直接加载的dex,所以所有方法都是解释运行
我编写的demo也是debug的,还没有打release。
2024-7-1 15:34
0
雪    币: 2193
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你瞒我瞒 开了个demo,跑了一下上面给出的代码,if (strstr(buffer, "classes") && strstr(buffer, "base.apk ...
我也是安卓12  piexl 5,这个段代码的目的就是 找到dex的地址,我看我的手机maps里面存在/data/app/xxxxxx/base.apk/classes n .dex  的字符串,这个就是apk加载的dex吧
2024-7-1 16:36
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
有没有办法通过这种方法来找到apk的地址,然后读取apk包呢
2024-7-1 17:03
0
雪    币: 2193
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mb_mmiqbqma 有没有办法通过这种方法来找到apk的地址,然后读取apk包呢
没有吧
2024-7-1 17:30
0
雪    币: 343
活跃值: (866)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
签名校验最强的,应该是360了
2024-7-3 10:21
0
游客
登录 | 注册 方可回帖
返回
//