当前位置:首页 > 教育

软件多开 一行代码帮你检测Android多开软件

近日,国家食品药品监督管理局表示,在长春长生生物科技有限公司查获一批生产记录虚假的狂犬病疫苗,并对其相关违法行为进行立案调查。据媒体报道,包括长生生物、武汉生物、深圳泰康等在内的很多疫苗公司都是由同一三人控股,涉嫌欺诈的也不少。公司创始人刘说:我们90%的孩子都接种了这些公司的疫苗,这样的人至少应该被判无期徒刑,不得假释!

作者简介

很高兴在新的一周开始时再次见到你!

本文由普通程序员提交,分享检测开放软件的方法,希望对大家有所帮助!

普通程序员的博客地址:

https://www.jianshu.com/u/38b409cda5af

简介

最近有业务需求,要求app进行软件多开、hook框架、模拟器等本地安全测试。防止作弊。

反作弊一直是个老掉牙的问题,软件多开检测往往是反作弊的重要环节。在搜索数据的过程中,发现多开软件公司对反多开措施进行了针对性的升级,甚至连非常新的数据都杀不死。

所以站在前辈的肩膀上继续学习吧。

参考方案

参考方案来自以下两个帖子

安卓多开/拆分检测

https://blog . darkness 463 . top/2018/05/04/Android-Virtual-Check/

安卓虚拟机多开检测

https://www.jianshu.com/p/216d65d9971e

本文的方案简单总结为四点:

1.私有文件路径检测;

2.应用列表检测;

3.地图检测;

4.ps检测;

这里不贴代码,这四个方案的测试结果如下:

/proc/net/tcp6文件

最后,扫描tcp文件并格式化端口的关键代码

string TCP 6 = CommAnDutil . GetSingleInstance()。exec(" cat/proc/net/TCP 6 ");

if(TextUtils.isEmpty(tcp6))返回;

string[]line = TCP 6 . split(" n ");

ArrayList<。整数>portList = newArrayList & lt>。();

for( inti = 0,len = lines.lengthi <。leni++) {

int localhost = line[I]。indexOf(" 0100007F:");

//127 . 0 . 0 . 1的位置:

if(Localhost & lt;0)继续;

string SinglePort = line[I]。子串(localHost + 9,localHost+13);

//拦截端口

整数端口= Integer.parseInt(singlePort,16);

//十六进制到十进制

portList.add(端口);

}

步骤2:发起连接请求

接下来,启动一个线程连接到每个端口,并发送一个自定义消息。这个消息只需要使用app的包名(多开软件很大程度上会挂接getPackageName方法,所以简单按照多开软件)

尝试{

//发起连接并发送消息

socket socket = NewSocket(" 127 . 0 . 0 . 1 ",端口);

socket . setsotimeout(2000);

output stream output stream = socket . getoutput stream();

outputStream.write((secret + "n ")。getBytes(" utf-8 ");

output stream . flush();

socket . shut down output();

//获取输入流,这里不做处理,只打印。

InputStream InputStream = socket . getinputstream();

BufferedReader BufferedReader = new BufferedReader(new inputStream reader(inputStream));

字符串信息= null

while((info = bufferedreader . readline())!= null) {

Log.i(TAG," client thread:"+info);

}

bufferedreader . close();

inputstream . close();

socket . close();

} catch(ConnectException e) {

Log.i(TAG,port+" port denied ");

}

主动连接的过程完成,自己启动的app(可能是本体,也可能是克隆)接收到消息并进行处理。

第三步:成为一个接收者,等待连接

下一步是成为接收者,监听一个端口,等待可能的app连接(可能是本体或者克隆体)。

privatevoidstartServer(字符串机密){

random random = new random();

服务器套接字服务器套接字=空;

尝试{

server socket = newServerSocket();

server socket . bind(Newinetsocketaddress(" 127 . 0 . 0 . 1 ",

random . Nextint(55534)+10000));

//打开10000到65535之间的端口

while( true) {

socket socket = Serversocket . accept();

ReadThread ReadThread = new ReadThread(secret,socket);

//如果这个方案中使用了很多应用,或者每个连接都是线程化的。

readthread . start();

//ServerSocket . close();

}

} catch(BindException e) {

startServer(机密);//可能会永远循环

} catch(IOException e) {

e . printstacktrace();

}

}

为了避免在打开端口时打开已经打开的端口,BindExecption被主动捕获并迭代调用,这可能导致无限循环。如果害怕无限循环,可以添加一个类似于ConcurrentHashMap最差尝试的计数值。不过实际考的也没那么差。随机端口范围10000~65535。最多试两次。

每个处理线程做的就是匹配密文,对应一个克隆体或者本体发送的密文。这里,接收者主动运行一个空指针来杀死自己。待遇有点像三体黑暗森林法则,先暴露谁先死。

privateclasreadthreadextendsthread {

privateReadThread(字符串机密,套接字套接字){

InputStream inputStream = null

尝试{

inputStream = socket . getinputstream();

byte buffer[]= new byte[1024 * 4];

int temp = 0;

while((temp = InputStream . read(buffer))!= - 1) {

String result = newString(缓冲区,0,temp);

if(result.contains(secret)) {

//System . exit(0);

//process . killprocess(process . mypid());

NullPointTV . SetText(" ");

}

}

inputstream . close();

socket . close();

} catch(IOException e) {

e . printstacktrace();

}

}

}

*由于端口通信需要互联网许可,此库不会通过网络上传任何隐私。

测试结果

以前面提到的那些模型和多开放软件作为测试样本,测试结果基本上是kill。由于安卓机型繁多,真实的机器覆盖测试不完整,有空人去git问个问题;;

它可以在应用程序的主进程中调用一次。模拟器在演示中进行模拟器判断,因为会抢localhost。

本文中的方案已集成到

EasyProtectorLib

https://jcenter . bintray . com/com/lahm/library/easy-protector-release/

Github地址:

https://github.com/lamster2018/EasyProtector

参见中文文档:

https://www.jianshu.com/p/c37b1bdb4757

请使用方法virtualapkcheckutil . get single instance()。checkbyport listening(string secret);

待办事项

1.如果检测到有过度打开,应该提供回调让开发者自己处理;

2.同样,应该可以使用ContentProvider

1.《软件多开 一行代码帮你检测Android多开软件》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《软件多开 一行代码帮你检测Android多开软件》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1016051.html

上一篇

男子捡到猫头鹰肩扛送派出所 这意味着什么?

下一篇

广东珠海一酒店发生煤气爆炸 到底是什么状况?

汇通太古城 西安23个小区房产证“难产” 官方提出解决方案

今年以来,该网站经常收到Xi业主关于办理房产证困难的投诉。据不完全统计,前期收到的房产证“难产”问题共涉及23个社区。 7月17日,Xi平安房地产登记服务中心对这23个社区的“认定”进行了权威回复。请仔细阅读,以了解您的房地产许可证在哪个阶段被卡住,以及谁推迟了申请进度。 ①华富雨城社区 一...

马拉多纳生前语音 接收者是前妻的现任男友

马拉多纳生前语音 接收者是前妻的现任男友

在阿根廷的一个电视节目中,迭戈·马拉多纳生前的声音被公之于众。迭戈·马拉多纳的前妻维罗妮卡·奥赫达(Veronica ojeda)和律师马里奥·鲍德里亚(Mario Baudrillard)走到了一起,迭戈·马拉多纳发出的...

黄曲霉素b1 ELISA分析法黄曲霉素B1检测的解决方案

  • 黄曲霉素b1 ELISA分析法黄曲霉素B1检测的解决方案
  • 黄曲霉素b1 ELISA分析法黄曲霉素B1检测的解决方案
  • 黄曲霉素b1 ELISA分析法黄曲霉素B1检测的解决方案

人品测试 人品问题测试,你中了几条?

  • 人品测试 人品问题测试,你中了几条?
  • 人品测试 人品问题测试,你中了几条?
  • 人品测试 人品问题测试,你中了几条?

国泰君安君弘 身份证过期了?!不用来营业部,君弘App端口自助更新!

  • 国泰君安君弘 身份证过期了?!不用来营业部,君弘App端口自助更新!
  • 国泰君安君弘 身份证过期了?!不用来营业部,君弘App端口自助更新!
  • 国泰君安君弘 身份证过期了?!不用来营业部,君弘App端口自助更新!
及时通讯 即时通讯APP开发解决方案

及时通讯 即时通讯APP开发解决方案

即时通讯是目前移动终端上最流行的通讯方式,各种即时通讯软件层出不穷。服务提供商还提供越来越多的通信服务功能,创建实时通信系统,允许两个或更多的人使用网络实时传输文本消息、文件、语音和视频通信。今天,南京应用开发公司云多普边肖将大家带入即时通讯应用的世界。  即时通讯APP概述 目前,即时通讯...

兰州布病事件赔偿方案公布 究竟是怎么一回事?

兰州布鲁氏菌病爆发近一年后,10月3日,中牧兰州生物制药厂附近布鲁氏菌病阳性的居民收到了补偿方案和协议。兰州布鲁氏菌病补偿方案公布:最低3000多,最高5万多。根据补偿方案,补偿分为四类,补偿金额从3000元到50000元...

延迟退休方案已趋于成熟 延迟退休时间表2022年成定局

  • 延迟退休方案已趋于成熟 延迟退休时间表2022年成定局
  • 延迟退休方案已趋于成熟 延迟退休时间表2022年成定局
  • 延迟退休方案已趋于成熟 延迟退休时间表2022年成定局