能力值:
( LV3,RANK:20 )
|
-
-
2 楼
确实有不少方法可以检测多开, 从业务安全逻辑上允许用户多开才是最好的防范
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
rrrfff
确实有不少方法可以检测多开, 从业务安全逻辑上允许用户多开才是最好的防范
公孙策 好难见一次。
|
能力值:
( LV3,RANK:30 )
|
-
-
4 楼
学习到了,感谢楼主
|
能力值:
( LV4,RANK:45 )
|
-
-
5 楼
看到 “奔放稳定框架” 我会心一笑
|
能力值:
( LV2,RANK:10 )
在线值:

|
-
-
6 楼
后记才是本文最大亮点
另外readSymbolicLink可以改linux的readlink读,估计这就是笔者说的ASM大概思路把
|
能力值:
( LV9,RANK:180 )
|
-
-
7 楼
rrrfff
确实有不少方法可以检测多开, 从业务安全逻辑上允许用户多开才是最好的防范
在理,微信中貌似就有适配多开和xposed框架的代码
|
|
-
-
8 楼
krash
在理,微信中貌似就有适配多开和xposed框架的代码
记得微信不允许多开吧,还是已经改了?
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
9 楼
多开方案都是对抗性质,真实的场景要复杂的多,这个就是玩具啊
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
10 楼
暗街之王
后记才是本文最大亮点
另外readSymbolicLink可以改linux的readlink读,估计这就是笔者说的ASM大概思路把
试过linux的readlink不行啊
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
koftnt
试过linux的readlink不行啊
姿势不对,不要使用 C 函数库的 readlink
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
楼主的ASM代码是指C++中的ASM还是Java中的呢?
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
13 楼
那用什么,命令行?
|
能力值:
( LV3,RANK:30 )
|
-
-
14 楼
其中有一个“A[dataDir的fd] --> B[fd反查真实路径]”这个是什么意思,尤其是怎么得出B的路径的呀,我这边本打算使用C语言来模拟Java来写,但是int fd = open(testPath.c_str(), O_WRONLY | O_CREAT | false ? O_APPEND : O_TRUNC); 返回后的fd为-1;但是Java那边确实是fd不等于-1的,所以特别想问下这个问题,其中的技术原理我应该怎么弄清楚呢,对这块不是很懂。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
感谢分享
|
能力值:
( LV3,RANK:30 )
|
-
-
16 楼
我自己用asm实现了一套简单的io函数,但是还是不对,int fd = __openat(AT_FDCWD, testPath.c_str(), O_WRONLY | O_CREAT | false ? O_APPEND : O_TRUNC, 0);返回后的fd还是为-1,真不知道哪里出了问题,有点怀疑是open函数中的flag的值写的有点问题吧,真不知道哪里有问题了,其次最主要的是那个问题我也没有找到答案。
|
能力值:
( LV3,RANK:30 )
|
-
-
17 楼
好吧,我弄出来了,还是很感谢大佬提供的思路的。上面的问题是我的问题,因为Java中的FileOutputStream在new的时候会对不存在的文件进行新建,所以我那个openat的flag是没啥问题,不过我后来改成了O_RDWR | O_CREAT | O_TRUNC。这样就可以写入了,我之所以写成O_WRONLY | O_CREAT | false ? O_APPEND : O_TRUNC完全是看了FileOutputStream的源码,其中它这个flag就是这么写的,所以我直接照抄。然后起最后的mode,FIleOutputStream中mode为0,我也写成0,但是一直是fd为-1,所以我将mode改成0640,这样fd就不为-1了,后面的流程就正常运行了。
|
能力值:
( LV5,RANK:60 )
|
-
-
18 楼
// --- Java --- import java.io.File; boolean isDualApp(String dataDir){ return new File(dataDir + File.separator + "..").canRead(); } 看了源码,最终也是调用acess()函数,为什么检测结果会不一样呢
|
能力值:
( LV3,RANK:30 )
|
-
-
19 楼
学编程
// --- Java ---
import java.io.File;
boolean isDualApp(String dataDir){
return new File(dataD ...
证明这个多开容器的 I/O Hook 不够全
|
能力值:
( LV5,RANK:60 )
|
-
-
20 楼
Amun
证明这个多开容器的 I/O Hook 不够全
我的意思是说,通过查看Android源码,canRead的流程最终是要走到access函数,那方式二的效果应该是等同于方式一的。 不应该会出现文中的结果。 测试代码一 // --- C++ --- #include <unistd.h> #include <sys/stat.h> #include <string> bool isDualApp(std::string dataDir) { return 0 == access((dataDir + "/../").c_str(), R_OK); } 测试代码二 // --- Java --- import java.io.File; boolean isDualApp(String dataDir){ return new File(dataDir + File.separator + "..").canRead(); }
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
mark
|
|
|