Linux 上的顶级安卓模拟器 | Linux 中国 安全闲碎

Linux 上的顶级安卓模拟器 | Linux 中国

 导读:我总结了一份最好的模拟器清单,你可以用它来测试或在 Linux 上运行安卓应用/游戏。         本文字数:1945,阅读时长大约:3分钟https://linux.cn/article-13629-1.html作者:Ankush Das译者:geekpi安卓系统是建立在高度定制的 Linux 内核之上的。因此,使用安卓模拟器在 Linux 上运行移动应用是有意义的。虽然这不是在 Linux 机器上你可以做的新鲜事,但在 Windows 于 2021 年推出运行安卓应用的能力后,它是一个更需要的功能。不仅仅限于使用应用,一些安卓模拟器也可以在开发和测试中派上用场。因此,我总结了一份最好的模拟器清单,你可以用它来测试或在 Linux 上运行安卓应用/游戏。1、Anbox Anbox 是一个相当流行的模拟器,可以让 Linux 用户运行 Android 应用。可能深度 Linux 正是利用它使得开箱即可运行安卓应用。它使用一个容器将安卓操作系统与主机隔离,这也让它们可以使用最新的安卓版本。运行的安卓应用不能直接访问你的硬件,这是一个很好的安全决定。与这里的其他一些选择不同,Anbox 在技术上不需要仿真层来使安卓系统工作。换句话说,它在你的 Linux 系统上最接近于原生的安卓体验。由于这个原因,它可能不是最简单的选择。你不能只使用谷歌应用商店来安装应用,你需要使用安卓调试桥(ADB)。你只需要一个应用的 APK 文件就可以安装和使用它。◈ Anbox2、GenymotionGenymotion 是一个为测试和开发量身定做的令人印象深刻的解决方案。它不是一个自由开源的选择。它们通过云端或独立于 Android Studio 的桌面客户端,提供虚拟的安卓体验作为服务。你可以模拟各种硬件配置和安卓版本,创建一个虚拟设备进行测试。它还让你有能力扩大规模,并有多个安卓虚拟设备运行,进行广泛的测试。它可以帮助你测试文件上传在你的应用中如何工作,电池影响、性能、内存等等。虽然它是一个主要针对专业人士的高级解决方案,但它确实支持最新的 Linux 发行版,包括 Ubuntu 20.04 LTS。◈ Genymotion3、Android-x86Android x86 是一个开源项目,使得安卓可以在 PC 上运行,并支持 32 位。你可以选择在你的 Linux 系统上使用虚拟机管理器来安装它,或者直接在你的 PC 上试用它。如果你需要安装,可以查看官方的 安装说明。与其他一些选择不同,它是一个简单的试图在 PC 上工作的模拟器,没有花哨的功能。◈ Android x864、Android Studio (虚拟设备)Android Studio 是一个用于开发和测试的完整工具。幸运的是,由于对 Linux 的支持,如果你需要的话,你可以用它来模拟安卓的体验进行实验。你只需要创建一个安卓虚拟设备(AVD),你可以对其进行配置,然后作为模拟器进行模拟。也有很大的机会能找到对一些最新的智能手机、电视和智能手表的支持。它需要一定的学习曲线才能上手,但它是免费的,而且是完全开源的。◈ Android Studio5、ARChon一个有趣的解决方案,这是一个你可以在 Linux 和任何其他平台上使用的安卓模拟器。它有助于在 Chrome OS 上运行安卓应用,或者在任何操作系统上使用 Chrome 浏览器。与其他一些不同的是,你可能不会得到完整的安卓体验,而只是能够运行安卓应用。你只需解压运行时,并将其加载到 Chrome 扩展中。接下来,下载 APK 文件到上面来添加你想使用的应用。◈ ARChon6、Bliss OSBliss OS 是另一个开源项目,与 Android x86 类似,旨在使安卓在 PC 上运行。与 Android x86 不同的是,它通过支持 32 位和 64 位架构提供了更多的兼容性选择。此外,你可以根据你的处理器下载兼容文件。它有积极的维护,支持市场上最新的安卓版本。◈ Bliss OS总结虽然你会能找到几个可用于 Linux 的安卓模拟器,但它们可能无法取代全面的智能手机体验。每个模拟器都有一系列的功能和特定目的。请选择你需要的那个!你试过安卓模拟器么?你在 Linux 中使用的最喜欢的模拟器是什么?欢迎在下面的评论中让我知道。via: https://itsfoss.com/android-emulators-linux/作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy本文由 LCTT 原创编译,Linux中国 荣誉推出欢迎遵照 CC-BY-NC-SA 协议规定转载,如需转载,请在文章下留言 “转载:公众号名称”,我们将为您添加白名单,授权“转载文章时可以修改”。 本文始发于微信公众号(Linux中国):Linux 上的顶级安卓模拟器 |...
阅读全文
【周四答疑】安卓逆向找工作相关问题 安全闲碎

【周四答疑】安卓逆向找工作相关问题

        因为相信, 所以看见         答疑,就是在每周四,把问的比较多的,统一回答下。写文章也会比私信回复更详细些。01APK EasyTool汉化版的 主sdk 版本是啥?下图是汉化版,原版的界面都是英文。话说,这个工具我都没用过,不过看起来还不错。有大佬问我,这个主sdk版本是什么?我看到这个主sdk版本,有点懵就跑去看了一下 xda论坛的英文原版:可以看到,主sdk版本,汉化前对应的英文原版这里是  Min sdk version这里翻译过来就是,最低兼容的安卓版本。是表示,apk最低能在哪个安卓版本上运行。在 AndroidManifest.xml里,是这个属性看起来,应该是汉化大佬搞错了。可能把 Min, 看成 Main了吧。害,人之常情,我之前的视频文章,也有描述不清楚的点和错误。有几个大佬问了找工作的相关问题。这里我整理了下,统一回答下。做个申明,我没有对行业做过严格统计,以下都是我接触的人或者事,只是我的个人意见。不能代表整体,甚至可能会有所偏颇。只能说给大佬们一个角度和参考。02安卓逆向找工作卡学历吗?卡不卡,还是看你能力,我是专科,我可认识太多专科的干这行了。甚至身边就有专科大佬进阿里,进了腾讯的。更让我吃惊的是,一个高中学历的大佬也进了阿里。所以,卡不卡还是看你能力,看你从事的细分领域,安卓逆向虽然是个小分类,这个小分类里面也有很多细分领域。所以还是看没有高学历的大佬跟你竞争。企业肯定是喜欢那些有学历,还有能力的。但是很多细分领域,再挑就tm招不到人了。这里,也有一些公司卡的比较严,我之前给2个公司投简历,都没面试我, 直接就把我刷了,直接回复说不要专科。03安卓逆向的工作,内卷严重吗?现在我没怎么感觉到内卷,但是,已经有很多大学的网安专业已经涉及到了这块,国家开始重视,社会开始重视。很多搞web渗透的小老弟,也想学学安卓逆向,甚至想转到这个行业,我就认识好几个。我几个搞web渗透的同事,有两个都跟我表达过类似的想法,问我干安卓逆向应该怎么学习。综上,我的看法是,会逐渐变得内卷。我现在工作,有一部分是做安卓app的协议分析,一部分是IOT安全。之所以选择现在这个公司,也是我考虑到,未来可能会变得内卷,所以有了慢慢学习换赛道的想法,想到新赛道混资历。04想学习有什么机构推荐吗?这里只说我知道的机构。线上的有 看雪的官方培训  2w班 和 3w班。线下的有  易锦 科锐。这里不做评价,据我所知,都有盗版视频流出,大佬们可以看看,自己挑挑吧。05安卓逆向工资一般是多少?看水平,一般起薪都10k+ / 月。一线城市的话,干两年,年薪20w~30w挺正常。很多去大厂,比如阿里当P6, 年薪大概40w~50w的样子。也有当P7,年薪接近百万的。我之前的工友月薪 40k,跳槽后52k。我真的好羡慕他啊。。。当然他能力也很强,属于那种,开发很厉害,逆向很厉害,iot方面水平也很高,是那种行业里,都比较少见的人才。所以能拿多少工资,还是在于,你水平和价值。06搞逆向安全吗,有没有啥风险?有没有风险在于你选了啥工作,有正规工作的呢。看这篇老文章。【周四答疑】安卓逆向除了hui产,有正规工作吗?07结束语最后,分享一句话。是我在交友软件上,刷美女动态的时候,看到的一句话。人生苦短,甜长。关于作者:一个乙方安全公司搬砖的菜鸡,移动安全从业者。最近忙着找女票,忙着在b站当扑街up主。b站/公众号 :  移动安全王铁头  希望和大佬们一起学习,一起成长 本文始发于微信公众号(移动安全王铁头):【周四答疑】安卓逆向找工作相关问题
阅读全文
安卓比苹果危险?98% 恶意软件针对安卓!苹果反对开放 APP 第三方下载 安全闲碎

安卓比苹果危险?98% 恶意软件针对安卓!苹果反对开放 APP 第三方下载

这是「进击的Coder」的第 172 篇热点新闻编辑:瘦瘦、桃子来源:知乎 | 新智元“ 阅读本文大概需要 7 分钟。 ”【新智元导读】近日,苹果发布了一份 31 页研究报告称,安卓感染恶意软件率是 iPhone 的 15-47 倍,并以安全为由反对开放 iOS 系统。苹果表示绕开苹果商店下载 App 将增加用户风险。安卓感染恶意软件率是 iPhone 的 15-47 倍!  近日,苹果发布了一份 31 页研究报告,以安全为由反对开放 iOS 系统,称绕开苹果商店下载 App 将增加用户风险。 这份报告名为「Building a Trusted Ecosystem for Millions of Apps——A threat analysis of sideloading」  在答复欧盟委员会数字市场行动的函件中,苹果援引诺基亚 2019 年、2020 年的威胁情况报告称,安卓平台恶意软件感染率是 iPhone 的 15-47 倍。  更有研究发现,98% 的恶意手机软件针对的是安卓设备。苹果放手?不可能苹果坚称,与安卓相比,iOS 更安全。  此前,欧盟委员会提议《数字市场法案》,希望开放用户自由安装软件的权利,包括绕过应用商店,却引起苹果强烈反对。 苹果强调,应用商店的审查机制现在变得越来越重要。 一方面,用户越来越重视隐私和安全;另一方面,非法应用程序需要调用的数据资源非常复杂。  报告开篇引用了乔布斯在 2007 年的一句话:我们试图把两件截然相反的事情放在一起做:面对开发者提供一个先进和开放的平台,同时也保护 iPhone 用户免受病毒、恶意软件、隐私等攻击,这个并不个容易的事情。 在这份报告中提到了几个要点: 欧洲监管机构每天报告 23 万部手机新感染恶意软件一个大的安全机构覆盖的终端中,每个月有监测到 600 万次攻击犯罪分子可能会模仿 App Store 的外观、分发破解软件安卓设备近日感染恶意软件的次数比 iPhone 多 15 到 47 倍 苹果公司对外表示,允许用户免费安装应用程序将极大地暴露信息,并将用户数据置于危险之中。 对于 iPhone 用户来说,苹果应用商店的程序是唯一被认可的来源。  因此许多用户会选择侧载(sideloading)软件。侧载是指在 App Store 之外安装应用程序,如从网站或第三方应用程序商店 。 如果说侧载软件存在风险,那也是用户自主选择安装,大家应该也都愿意自己承担风险。 即便是欧盟采取制裁手段,苹果宁愿支付巨额罚款,也不会选择放开应用商店的软件安装权限。 因为只有闭环,才能够保证抽到所有付费软件 30% 的抽成。这同时导致所有创新源于苹果内部,外人难以干涉。  一位高赞回答的网友坦诚道, 「欧盟想要争取的是用户自由选择安装应用的权利,自由选择安装软件平台的权利。而苹果想要的是闭环的生态系统,所以要拒绝其他应用商城进来瓜分一杯羹。 至于其说的会降低 ios 系统的安全性,这只是其拿出来的一个理由。」  不过,对于苹果的强烈反对,用户应该都是支持的,毕竟没有规矩不成方圆。恶意软件如何攻击用户设备?据统计,自 2020 年 11 月以来,大规模的恶意软件操作已经感染了 70 多个国家的 1000 多万部安卓智能手机,并为操作者带来了每个月数百万美元的收入。  例如,一种新的 GriftHorse 恶意软件,该软件通过上传到 Google Play 官方应用商店和第三方 Android 应用商店的应用进行传播。  如果用户安装了这些恶意应用中的任何一个,那么 GriftHorse 软件就会开始向用户发送大量的弹窗和通知,号称将向其提供各种奖品和特别优惠。 当用户点击这些通知时,就会跳转到一个在线页面,要求用户确认自己的电话号码才能获取优惠。 实际上,这番操作会让用户订阅包月费超过 30 欧元(约合 35 美元)的收费短信服务,而这些订阅费会被转入 GriftHorse 操作者的账户。  开发 GriftHorse 的程序员还在这种恶意软件的代码质量上下了很大功夫,利用一系列广泛的网站、恶意应用和开发人员伪装来感染用户的手机,尽可能避免被检测到。 网友:这是生命线 「这是生命线,开放第三方下载,苹果就失去了封闭系统的最大优势稳定安全,那就会失去了他的一切。」  许多人选择苹果手机不仅仅因为它引领科技潮流,还有重要原因是:苹果手机不会卡。 正如一位网友指出,「相比安卓,苹果不会卡,不会中毒。因为硬件和软件影响上限」。  同样的一台手机,iPhone 系统的权限管理,可以尽量减少用户的乱操作带来的风险。 同样一个人,如果手机的使用习惯不好,这边垃圾软件下几个,那边下几个,就是未来骁龙 999 也顶不住。 硬件基础影响着最佳上限,但是操作的习惯不良会不断创造下限。 「数十倍?保守了。如果说恶意软件包括那种偷偷下载、连锁启动、后台唤醒之类的话,数万倍都有了。」  还有网友高呼,「鸿蒙宇宙最强。吊锤苹果,吊打安卓,别细问,问就是我们赢了。」 苹果系统恶意软件感染率是老人机的...
阅读全文
安卓出现Laopi恶性病毒:绑架用户手机挖矿 安全新闻

安卓出现Laopi恶性病毒:绑架用户手机挖矿

点击上方“安全优佳” 可以订阅哦!安卓手机由于其开源性造成了其很容易出现一些安全隐患。近日,卡巴斯基实验室发现了一种全新的恶意软件Trojan.AndroidOS.Loapi。这款恶意软件可以绑架用户的手机来帮助他们进行挖矿。安卓出现Laopi恶性病毒:绑架用户手机挖矿(图片来自于推特)卡巴斯基实验室表示,这种病毒一般是通过仿冒的杀毒软件和色情软件进行传播。当Laopi获得手机的权限之后,会继续保留在杀毒软件之中,同时它还会用各种方法来攻击被感染者的手机,最严重的就是他会内建挖矿模组,这些感染手机就会变成门罗币(Monero)的挖矿机。今年11月的时候,诺基亚推出了NetGuard安全管理中心软件,用以检测恶意程序,并发布了《2017年度威胁情报报告》。报告中显示,智能手机占掉了所有移动网络病毒感染的72%,而其中Android设备的感染率达到了69%,远远过半。而原先病毒的主要攻击目标Windows设备,如今只剩下28%的感染率,因为互联网的主要入口已经是移动智能设备的天下。而苹果的iOS相对要安全得多,与其他设备一共只有3.54%的感染率。安全优佳http://news.secwk.com长按识别左侧二维码,关注我们 本文始发于微信公众号(安全优佳):安卓出现Laopi恶性病毒:绑架用户手机挖矿
阅读全文
安卓逆向 -- 算法基础(数字签名) 移动安全

安卓逆向 -- 算法基础(数字签名)

一、数字签名数字签名的基础是公钥和私钥的非对称加密,发送者使用私钥加密消息摘要(签名),接收者使用公钥解密消息摘要以验证签名是否是某个人的。常见的有MD5withRSA,SHA256withRSA二、Java版public static String pubkey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkluCxbqyIIVEG6wq3xwOncwtO" +"Ew45xvjOdEuxBG5MCGIGfik7s2XB3Znz2ih7RWkQdOTWTLRfNKqGLCDXZrVfM6i6" +"jJlxrPlHt8JlDPKmu5QGLsap5DGwdShnL29bLEpmql4UbxPo0NsCq91rt90m60H6" +"4br6yURdv/Pr6jyOEQIDAQAB";public static String prikey="MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOSW4LFurIghUQbr" +"CrfHA6dzC04TDjnG+M50S7EEbkwIYgZ+KTuzZcHdmfPaKHtFaRB05NZMtF80qoYs" +"INdmtV8zqLqMmXGs+Ue3wmUM8qa7lAYuxqnkMbB1KGcvb1ssSmaqXhRvE+jQ2wKr" +"3Wu33SbrQfrhuvrJRF2/8+vqPI4RAgMBAAECgYEAoSn3FWIQZpIGzLfegJ/h5ado" +"6wzoVLgCJ5062H1lPloSsr00WREsxzh0GMdRD0hqwN2JkcXWzeEV8S8foH6blEQ3" +"Utycz1LzN8cOJRWlXz/+aPCjGMQKbAARXQOpY6LYj2Y9cB5OayoIh2/afsZbS6gv" +"yJYZQNVDBGwmfJibEAECQQD7yE7gxwCHtjd8l/yhm87TROVaLUlq1jZXWsYNx8ts" +"qq/gXUueIssn4b3VTof4Htog1ZE1kGcSNg4ccKIiH6KRAkEA6Gsc9uskNnqB/DdL" +"SfvD5iZ03I4REAnpMueV9NHAA+cbOJtqSYUxEjW6jvzRo2MdqrlxOvRdUQZNKUZ+" +"pzzzgQJBAM2B7X/ibjhXLmrv0zBFcEdZEKrOFAKz3Z7nZIiS7yM/HlbPT40/cPqY" +"cs3MT4biB8CNEPzbZIWkwVfNR0j68UECQE3QfvQUqh0rSxXclXKBvobx3TJyxjeu" +"ecs3SjebekRUPgLn1eAjndhQ8NMqxi2D48zjJYvtgMi96VumZIUtnQECQQCh46wV" +"zSQ+iQcqBRipaNNa6ipAg1h60wh3omoBZQubQQYtDsmIbhT2AUZy6usBi65nd1I3" +"UefrOu9gIHGeU3br";public static PublicKey getPublickKey(String key)throws Exception{byte keyBytes= new BASE64Decoder().decodeBuffer(key); X509EncodedKeySpec keys = new X509EncodedKeySpec(keyBytes);//实例化key KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(keys);return publicKey;}public static PrivateKey getPrivatekey(String key)throws Exception{byte bytes = new BASE64Decoder().decodeBuffer(key); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(keySpec);return privateKey;}public static byte encrypt(byte enstr)throws Exception{ PublicKey publickKey = getPublickKey(pubkey); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE,publickKey);byte bytes = cipher.doFinal(enstr);return bytes;}public static byte decrypt(byte destr)throws Exception{ PrivateKey privatekey = getPrivatekey(prikey); Cipher cipht = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipht.init(Cipher.DECRYPT_MODE,privatekey);byte...
阅读全文
移动端安全 |  Android应用测试基础知识和代理抓包 移动安全

移动端安全 | Android应用测试基础知识和代理抓包

点击上方蓝字关注我们0x00 前言由于工作需要,手里的项目有个APP应用需要测试。但在此之前,我又没有系统深入的去学习过移动应用安全。本着哪里不会学哪里的精神,我准备大致的学习一下。以下内容可以理解为是我个人的学习笔记,发布出来是希望能够对感兴趣的师傅有所帮助。还望各位师傅对文中不严谨的地方批评指正,共同进步。0x01 什么是APK文件?APK是(AndroidPackage)的缩写,也就是我们安卓软件应用文件标准扩展名,我们只需要在安卓手机或者安卓模拟器中安装运行即可。APK实际上也是一个ZIP的文件,最简单的方式可以将文件重命名为.zip,然后用解压工具解压查看。1.1 APK文件的基本内容这里我们去随便下载一个安卓应用程序打开看看。如图,这就是一个用解压工具打开的APK文件,它其中包含了以下内容;(1)AndroidManifest.xmlAndroidManifest的官方解释是应用清单,文件中包括软件的各种配置信息,在每个应用的根目录下必须包含它,并且名字得一模一样。其中还有很多的应用组件描述、声明、需要用到的库等等信息。如果觉得很难理解的话,可以暂时将它理解为类似网页源代码中包含的JS代码(当然并不准确)。官方示例文件代码如下:(2)assets文件夹assets文件夹下包括应用程序可能需要的任何其他文件。这些文件最后会被原封不动的打包在APK文件中,应用程序想要去使用它就必须要指定文件路径和文件名。其中的文件并不会被编译,而是会直接部署,并且只能通过流的形式读取;(3)com文件夹com文件夹也是一个包文件,其实质上是一个文件夹,在它之下的文件夹也是包文件,存放对应功能的类代码;(4)lib文件夹lib文件夹下主要存放的是一些系统的库文件,如.so结尾的文件。(5)META-INF文件夹META-INF文件夹下存放着程序入口的相关信息,每个jar程序都会存在这个文件夹。其中的MANIFEST.mf文件,是jar打包时自动生成的。(6)res文件夹res文件夹下存放着项目中所有的资源文件,安卓应用需要的资源文件都会从这个文件夹下的各个子文件夹中去调用。具体的一些细节暂时不用太过关注。(7)src文件夹src文件夹下存放着所有的java源程序。(有java基础的师傅可以研究下)小结:这只是其中一部分文件或文件夹的粗略解释,还有很多内容要系统的学起来比较耗时耗力,建议遇到的时候,现学,哈哈。0x02 像网页一样使用burpsuite抓包首先需要用到的是一个安卓模拟器,只要能够成功运行安卓应用即可,我这里图方便直接用的夜神模拟器。模拟器的安装过程可以自行百度,安装完成后。本来是应该安装一个APK文件来进行测试的,为避免相关问题。这里直接抓取浏览器的网页内容。当然,APP同理,之后会专门准备一个测试用的APP来专门写一篇详细的文章。安装好模拟器后,需要对几个地方进行设置。首先是burpsuite,需要按照下图设置,IP选择自己本机IP,端口自定义,我这里选择的是8080。(等会模拟器中也要相同端口)然后是模拟器,打开设置-无线和网络-长按修改网络-设置代理(设置为本机IP和上面的端口)-保存。事实上这个时候已经可以抓到包了,但是遇到HTTPS协议的网站会弹出安全警告。这种情况需要安装证书,先关闭burp的拦截,在浏览器输入http://burp。按照下图操作。接下来就可以像WEB一样去抓包测试APP了。☆ END ☆ 本文始发于微信公众号(灼剑安全团队):移动端安全 | Android应用测试基础知识和代理抓包
阅读全文
android逆向的自学路线 移动安全

android逆向的自学路线

     安卓安全方面的人才需求日益增加,对安卓APP的逆向分析也会成为安全从业人员的必备技能之一,但是很多刚入门的新手小伙伴对于怎么去学习却还很是迷糊。     为了实现对安卓APP的逆向分析,需要在得到对应的apk文件以后,使用静态分析工具对apk进行反编译和代码分析,那么我们都需要学习哪些知识呢。最后一行水印遮挡处为 “原生程序逆向”目前学习安卓逆向的人群大约分为两种:第一种是完全没有任何基础的计算机纯小白;第二种是本来就做开发懂编程的IT行业人员。我们就针对这两个不同的人群做一下安卓逆向的学习路线分析。一无基础小白想入门作为没有任何基础想要入门的计算机纯小白,学习上推荐参照以下步骤:(一)基本功:读代码、写代码1.语言既然要做IT行业,首先最为基础的就是看懂专用语言。入门计算机行业的基本语言是汇编语言、C语言、C++等,至少得学一个低级语言和高级语言。汇编语言:1)了解处理器的基本架构以及执行环境2)理解处理器取指令、解释指令、执行指令的流程及其其他相关流程3)熟悉常见汇编指令及其与高级语言的关系C语言:1)掌握基本语法2)熟悉编译、链接、程序转载运行的过程3)了解基本数据类型、结构体、公用在内存中的表现形式4)熟悉使用IDE环境开发、调试程序5)理解数据组寻址方式6)熟悉使用C语言C++语言:1)了解C++对C扩充的原因2)熟悉面向对象编程3)了解基类对象、继承对象在内存中的表现形式4)了解C++中多态编程的技术原理2.数据结构看得懂代码,后面一步就是学习写代码,写代码要掌握的基本技能就是熟悉数据结构。数据结构这个领域,着重于两点。第一点是了解复杂度的概念、面对日常任务,能够选出最合适;第二点是利用泛型编程,手工实现常用数据结构库,例如链表、栈、堆、数组等。(二)开发技能首先,要学习逆向的前提是要懂开发。至少学习安卓逆向,要对安卓开发的各方面原理、运行机制、保护机制等有所了解。其次,需要了解JAVA框架(至少一种框架)。Java框架需要学习的包括:1)Java的类和对象2)Java的封装3)Java中的继承4)Java多态(三)其他技能:1)编程语言开发2)数学基础、英语基础3)数学结构与算法4)操作系统5)编译原理6)软件分析7)常用逆向技巧工具(四)安卓逆向基础知识这个部分包括安卓相关和逆向相关。到了这个步骤,基本功也应该是打好了,接下去就是入门安卓逆向了。包括环境搭建、了解apk、APP开发和运行机制、APP防护机制等。(五)实践(六)学习途径1. 自学:对于刚刚入门计算机行业的同学,很多培训班是不想收的,因为要花大量时间去给你补习基础,会影响教学效率。如果真的很感兴趣也愿意去学的话,前期多关注各种论坛和社区、贴吧,各种入门的教程和经验分享还是很齐全的。2. 培训班学习:虽然大部分培训班是不收纯小白的,但是好的培训班也是会专门开设基础班的,如果自学能力不强、坚持不下来的话,建议综合各方面因素去寻找一个真正好的、适合自己的培训班去学习。有些培训班采取师徒制,其实也很适合新手,毕竟新手不懂的话,还是很需要人解答帮助的。(七)小白学习安卓逆向容易遇到的误区以及建议误区:1.缺乏详细系统的学习规划,越学越迷茫,不知道应该往哪学,容易想放弃。2.搞不清学习方向,学习的技术并不是当前企业所需,跟不上时代,不具备职业竞争力。3.学习效率非常低,遇到一个小问题解决起来很费时间,甚至有的时候会卡几个小时,导致信心受挫,对自己适不适合产生怀疑。4.没有掌握学习安卓逆向的方法和技巧,导致走的弯路特别多,钻进程序坑死胡同出不来。建议:1. 初学者不可能自己解决所有问题,死啃只会浪费大量时间,消耗耐心,前期最好有一个懂这行的人指路,可以随时答疑随时交流,会有很好的学习效果,效率也高。2. 技术更新的快,所以不要全部指望去啃论坛上的老教程,既然选择学习安卓逆向就要以当前企业所需的技术层面为学习依据。3. 根据自己了解的,找个师父找个靠谱的老师教都是很好的,当然前提是靠谱。二有基础人员想转行对于原本就长期从事编程或者开发的人员,想要转行而去学习安卓逆向的,相对什么基础都没有的小白来说,就容易很多了。既然都隶属于IT范畴,那么无论如何,都是有各种内部外部联系的,学习起来的话很多知识是相通相融的,会省去很多坑。对于这类有基础的人员来说,学习安卓逆向可以参考这些步骤:(一)安卓逆向基础1.环境搭建:进行环境安装,把所有需要的东西都准备好,正式进入安卓逆向学习。2.分析apk文件:了解apk的开发机制、生成打包机制、运行机制等等。3.掌握apk反编译及回编译(二)进阶逆向学习1.Java层逆向1)掌握Java语法基础,认识并能使用2)了解smali语法,能看懂smali代码3)掌握逆向分析apk中常用的方法和技巧2.native层逆向1)了解安卓操作系统和四大组件2)了解NDK开发流程3)ARM汇编指令学习4)ARM处理器八大寻址方式5)了解ida工具,熟练使用3.apk保护机制1)了解Java代码混淆以及资源混淆等混淆方式2)掌握签名验证、文件校验、模拟器检测3)本地验证和网络云验证等验证方式4.掌握安卓调试与反调试5.hook框架学习1)hook插件开发2)了解常用框架,Fridad等6. 常见加密算法1)编码算法2)对称与非对称算法3)Java加密与解密4)数字签名算法7. 协议加密与解密分析1)了解客户端与服务器的交互机制2)了解常用的抓包方式及环境配置,HTTP协议等8. 文件结构1)了解常用文件结构如:DEX、ELF、XML、ARSC等9. 系统源码1)常用虚拟机、So加载流程2)安卓系统启动流程10. 安卓系统常用加固与脱壳1)DEX代码抽取2)So文件整体加密3)常用加壳方式4)常用混淆方式5)常用加壳方式6)DEX文件整体加解密(三)实践学习途径参考上文,不再赘述。总结:不管是新手还是欲转行有基础有经验的,要学习好安卓逆向,最重要的就是打好基础,基础打好了,剩下的去深入研究,不管是自学还是跟班培训,才能真正学好,不会浪费时间金钱。参考文献:https://www.jianshu.com/p/8699ab99e0b1https://mp.weixin.qq.com/s/6JyLiUj1HlIcGtgoOCP8Jw工具获取后台回复"安卓逆向”长按-识别-关注Hacking黑白红一个专注信息安全技术的学习平台点分享点收藏点点赞点在看 本文始发于微信公众号(Hacking黑白红):android逆向的自学路线
阅读全文
Android恶意软件检测 移动安全

Android恶意软件检测

原创稿件征集邮箱:[email protected]:3200599554黑客与极客相关,互联网安全领域里的热点话题漏洞、技术相关的调查或分析稿件通过并发布还能收获200-800元不等的稿酬前言本文将介绍如何利用机器学习技术检测安卓恶意软件,在前文会介绍相关基础知识,在后文则以实战为导向,介绍如何使用支持向量机检测安卓恶意软件,以及通过可解释性技术解释模型的决策结果,最后介绍如果对该模型发动对抗样本攻击。支持向量机在机器学习中,支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。相关实验,复制链接PC端体验更佳<支持向量机检测dga< span="">>:https://www.hetianlab.com/expc.do?ec=ECIDd5fb-5379-4f4b-862e-db7ab18b3a19&pk_campaign=weixin-wemedia#stu了解支持向量机的原理,学习SVM是怎么应用于检测DGA的。可解释性技术接着介绍本文用到的可解释性技术,来自于两篇论文。我们使用的数据集是Drebin,该数据集包含来自 179 个不同恶意软件家族的 5,560 个应用程序,样本是在2010年8月至 2012年10月期间收集的,由MobileSandbox 项目提供。其主页为:https://www.sec.cs.tu-bs.de/~danarp/drebin/数据集的每个特征都是一个布尔变量,0表示不存在该特征,1表示存在该特征。如下所示:安卓样本(apk文件)在特征空间中表示为向量,然后用一组带有标签的数据集进行训练,来区分良性样本和恶意样本。在测试时,则用训练得到的分类器判别样本文件。如果其输出f(x)>0,则将其归类为恶意样本,否则归类为良性样本。我们希望利用可解释性技术解释模型做出对应决策的理由。以前的可解释性技术关注梯度,更一般的说法就是围绕输入点x的线性近似值给解释技术提供了有用的信息。设f是与预测类别相关的置信度,其认为与局部梯度 ∇f(x) 的最大绝对值相关的那些特征识别是最能影响决策结果的特征。然而,对于稀疏数据(比如安卓恶意软件)来说,那些方法给出的最有影响力的特征往往不在给定的样本中,从而难以解释相应的预测结果。因此,我们采用不同的方法。我们将梯度 ∇f (x) 投影到 x 上以获得特征相关(feature-relevance)向量 ν = ∇f(x) · x ∈ Rd,其中 · 表示元素乘积。然后我们将 ν 归一化为一元 l1 范数,即 r =v/||v|,以确保只有 x 中的非空特征被识别为与决策结果相关。最后,可以将 r 的绝对值按降序排列以识别对决策结果最具影响的特征。应用提出的解释性技术,下表中给出了SVM(顶行)和 RF(底行) (i) 良性样本(第一列),(ii)SM SWA TCHER 家族的恶意软件样本(第二列),以及 (iii) PL ANKTON家族的恶意软件样本(第三列)的最能影响判决结果的前10个特征,并给出了每个特征在 BENING (pB ) 和恶意软件 (pM ) 中存在的可能性。对抗样本技术然后介绍本文用到的对抗样本技术,来自于两篇论文。我们可以将生成的对抗样本形式化为:其中,x’是与生成的对抗样本z’相关的特征空间,wˆ 是攻击者估计的权重向量。这个式子本质上告诉攻击者应该修改哪些特征以最大程度地降低分类函数的值,即最大化逃避检测的概率。注意,根据操作约束 Ω(z)(例如如果特征值是有界的),要操作的特征集对于每个恶意样本通常是不同的。攻击者的目标是最小化上面的式子,但是对于每个特征独立地估计 wˆ 的每个分量为:这相当于鼓励攻击者添加(删除)在良性样本中更频繁出现(不存在)的重要特征,使恶意样本的概率分布更接近良性数据的概率分布。在本部分最后,再捎带介绍后文会提到的两个概念。F1分数:F1分数(F1 Score)是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的精确率和召回率。F1分数可以看作是模型精确率和召回率的一种调和平均,它的最大值是1,最小值是0。ROC曲线:ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表。该曲线绘制了以下两个参数:真正例率TPR(在我们下面的实战中,就是恶意样本的检出率),假正例率FPR。实战我们下载该数据集并解压:简单查看一下数据:可以看到共下载了12550个样本,其中良性样本数量为12000,恶意样本数量为550。我们使用支持向量机对其进行检测,首先用一半的数据集作为训练集,在其上进行训练:其中,CClassifierSVM类的定义如下:训练完成后打印其F1分数:绘出ROC曲线:接着我们来尝试使用XAI技术(可解释性AI)来解释训练得到的模型是以什么为依据将样本判定为良性或恶意。我们使用基于梯度的解释方法:CExplainerGradientInput类定义如下,我们在下面会用到其explain方法:我们尝试对于一个良性样本和一个恶意样本,给出解释并分别列出对决策结果最大的前10个特征。先来看对良性样本的解释:这里的true class:0,是说该样本为良性样本。对应地,下图中true class:1则说明其为恶意样本。我们来看看返回的结果,负号说明这些特征是与决策结果负相关,或者换句话说,如果出现这些特征,那么样本是良性的可能性大。从上图可以看到与之前相反的结果,大多数特征具有正相关的值,这意味着,出现了这些正相关的特征,则样本极有可能是恶意的。前面我们在检查数据的时候已经知道,这批样本共有1227080个特征。而从此处的结果可以看到,打印出的前10个特征已经占据了50%左右的相关性了,说明该机器学习模型倾向于将大部分权重分配给一组小的特征。如果攻击者发现了这一点,这时候只需稍微改动恶意样本中正相关性较大的特征,就能欺骗模型将其分类为良性样本。当然实际中不需要手动去修改,我们还有对抗样本的技术,可以自动修改特征来欺骗分类器。我们这里使用带线性搜索的投影梯度下降技术来创建可以对抗检测安卓恶意软件的SVM分类器的对抗样本。这里需要注意,和图片不同,在生成图片的对抗样本时,基本是不受约束的,图片不论怎么修改,还是一张图片。但是对于程序来说,添加或者删除某些特征,可能程序就不可用了。比如我们在一个恶意程序上做对抗样本,如果改动幅度过大,可能生成的对抗 样本确实被分类器认为是良性的,但是该对抗样本可能已经失效的,即无法执行恶意行为,那么就失去了对抗样本的意义。我们的经验就是一般不要轻易删除某些特征,尤其是不要删除manifest组件,因为容易破坏程序的功能。相对地,添加特征更安全一些,比如添加权限就不会影响任何现有功能。我们来设置攻击参数:这里主要关注distance和y_target。distance我们设为l1,因为每个特征是一个布尔变量(0或1),我们希望在一次迭代时只改变一个特征(从0到1,或者从1到0)。y_target设为0,是希望生成的对抗样本被归类为良性。(这里我们指定了攻击目标,在对抗样本中称为定向攻击)接着发动攻击:该类定义如下:画出攻击后的情况:从图中可以看到,在改变了不到10个特征之后,恶意样本的检出率就低于50%了,证实了对抗样本攻击的有效性。相关课程,复制链接PC端即可体验《基于机器学习的网络安全应用实践》:https://www.hetianlab.com/cour.do?w=1&c=CCIDaa5a-85bb-4c6d-90fa-d61c89e7a81c&pk_campaign=weixin-wemedia#stu学习如何将机器学习与网络安全结合起来,使用机器学习来辅助网络安全问题的解决。参考链接1.https://zh.wikipedia.org/wiki/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA2.Not just a blackbox: Learning important features through propagating activation differences3.Explaining Black-box Android Malware Detection4.Is Deep Learning Safe for Robot Vision?Adversarial Examples against the iCub Humanoid5.Yes, Machine Learning Can Be More Secure!A Case Study on Android Malware Detection6.《机器学习》、《深度学习》戳“阅读原文”体验免费靶场! 本文始发于微信公众号(合天网安实验室):Android恶意软件检测
阅读全文
微信之又弹了xss...思路666 安全文章

微信之又弹了xss...思路666

        首先需要测试请自备2台手机,如果没有跟我一样还原数据,好多群里保存的图片都没了,尴尬。        慎用!!!!前方高能!!!        一、点击设置 -> 账号与安全 -> 登录设备管理(安卓机子就是账号保护) -> 具体图如下:        二、如果直接编辑,设备信息是过滤了的,如下图:而且长度只能在5-10个字符        三、重要点来了,就是IOS和安卓都有个功能,如下图:保存手机名称        这里设置好后,退出微信登陆,重新登陆一次微信,再到设置里面XSS代码就成功的保存了。如果没有2台手机,那就还原把。        四、然后用其他手机登陆就会提示:        五、然后验证到登录设备时候自然触发XSS 本文始发于微信公众号(T00ls):微信之又弹了xss...思路666
阅读全文
安卓逆向从 0 到 1 学习总结 移动安全

安卓逆向从 0 到 1 学习总结

初识安卓逆向是在 2019 年的暑假,到现在也快一年了,这一年来有刚从 web 渗透转来的迷茫,有成功破解了第一个 app 的喜悦,也有通宵熬夜逆向的心酸,到现在感觉自己成功踏进逆向大门的满足感。原本打算在入门之后弄个安卓逆向教程作为总结,但是吧,写文章教程,各大论坛都有,而且还写得挺好,例如 52 论坛的 《教我兄弟学逆向》教程,自己再去写就没多大意思了;做视频教程吧,因为个人原因,没有那么多时间去录制视频和剪辑视频。谨以此文总结我的逆向路程以及送给想要学习安卓逆向的新人!!!前置技能逆向这玩意不是很玄学,不像 web 渗透那样很玄学(强烈吐槽一波以前我还在做 web 渗透的时候,挖不出大洞也就算了,全都是一堆反射型的 xss,xss 到底跟我有多过不去啊),只要你基础够,在舍得掉头发,就能够有产出,下面简单罗列一下我个人认为的安卓逆向所需要的前置技能:1、一定程度的安卓正向开发经验2、会写简单的脚本,例如 python、c正向开发越熟练,在逆向的过程越容易找到关键点,同时在正向开发的过程中总要了解一下安卓系统的机制吧,这都是后面的无论是脱壳还是写自己的加固代码必要的知识;至于后面的会写简单的脚本,既是为了逆向也是为了能够正向开发,例如脱壳现在的主流方案要么 ida 动态调试到脱壳点 dump 下来,要么使用 frida 编写脚本 hook 脱壳,再要么编写 xposed 插件脱壳(ps:脚本小子除外),这些都需要我们自己写脚本的;至于正向开发那就更没得说了,无论是你想实现自己的加固方案还是要做涉及到底层的开发都需要写到 so 层里面去,而这前提是你的会 c 或者 c++。至于怎么学,我个人建议去网上找文章教程跟着敲代码就可以了,例如菜鸟教程或 w3c!!! 基础技能说是基础,其实真的是基础,别看看起来真的很难的样子,在安卓逆向的世界里这都是要非常熟练的基础能力,我个人总结如下:1、熟练使用 AndroidKiller、Jeb 等工具2、了解 smali 语言,能够将简单的 sali 语句翻译成 java3、能够使用 AndroidStudio 进行 java 层面的动态调试4、了解 arm 汇编语言5、从 0 到 1 编写一个 so 文件6、能够配合 ida 对 so 进行动态调试并简单了解 ida 的使用7、配合 so 层的编写经验实现自己的反调试代码,并一一动手调试过掉这些反调试我最开始学习这些的时候是大部分跟着 52 论坛的教我兄弟学逆向教程学的,时间大概两个月左右吧,但有些没有的,例如 smali 语法,我就去百度搜索和下载官方对应的指令表来学习,学完之后看懂一些简单的语法是没有问题了,还有 arm 汇编,这个建议去图书馆找本专业书来看,写得比较详细系统,至于其他的,要多动手实践。当然,看雪论坛等这些技术论坛有很多资料,没事就翻一翻,是能够发现惊喜的,有些东西不同时候看是完全不同的,当你在看到能够一下想到原理并知道他下一步要干什么的时候,基本这个知识点你差不多很熟练了,在这个知识点上你也能够被叫声大佬了!!!进阶技能在上面基础学完了之后,其实就可以做一些实践了,比如刷一下 bugku、攻防世界的题啊,去百度一下破解教程,跟着大佬的博客学习破解,多练手,练着练着就知道一般哪里是逆向的关键点了!!! 然后说起进阶技能吧,就是在基础技能之上开始进入逆向精彩的地方--加固和脱壳之间的对抗,个人总结要学习、研究的知识点如下: 1、了解安卓 apk 包的架构,能解析 apk 的各种文件,例如 dex、xml 文件2、了解动态加载的技术3、学习安卓第一代壳(落地加载壳)的加固方案然后自己动手实现4、学习 frida 的使用方法,会使用 frida 编写简单的脱壳机5、有碎片时间可以阅读一下安卓源码6、学习安卓第二代壳(不落地加载壳)的加固方案有条件就自己实现一下7、针对第一代壳和第二代壳的加载点无论是使用动态调试还是 hook 的方法脱壳修复8、了解第三代壳(函数抽取式壳)和第四代壳 (vmp) 的原理9、学会使用或者自己编写针对第三代壳的脱壳机,例如: fart、frida-unpack 等等10、能自己解析 so 文件,也就是 elf 文件,这是后面 so 层加密加固的前提11、有时间可以学习一下 unicorn 框架,u1s1,这框架是真的舒服,我记得 github 上已经有基于 unicorn 的 so 调用器,名字叫啥忘了12、学习 so 层的一些加密加固方案13、然后还要 ollvm 框架,不得不说, ollvm...
阅读全文
安卓 APP 三代加壳方案的研究报告 移动安全

安卓 APP 三代加壳方案的研究报告

安卓的加固方案是从 19 年底开始写的,到现在为止差不多快一年了,写这个目的还是学习怎么脱壳,前几个月再看雪看到有人直接分析壳来学习,不过我感觉从加壳写起也是一种浪漫。因为个人原因,在类指令抽取壳那里为半完成状态,在今年大概率没有时间接着修改了,在 java 层的加固就止于此吧!!!(PS: 以后有时间会接着修改) 环境配置:Android studio v3.5.3 华为G621-TL00 android v4.4.4 第一代壳:落地加载1、原理a、原理很简单,就是首先将我们的 dex 文件或者 apk 文件解密,然后利用DexClassLoader加载器将其加载进内存中,然后利用反射加载待加固的 apk 的 appkication,然后运行待加固程序即可,我画了个流程图详细说明如下: b、上面说了大概原理,现在来说明一下具体细节,我们知道,在一个 app 开始运行的时候,第一个加载的类是ActivityThread,该类有个关键属性currentActivityThread,通过该属性能够获取到一系列其他关键的属性,例如mPackages,通过该属性,我们可以获取到mClassLoader属性,通过替换该属性我们可以替换系统加载器,如下所示: 接着来说怎么获取待加固 apk 的 application,这个通过在脱壳 apk 的 AndroidManifest.xml 中使用meta-data来获取,如下所示: 在然后就是怎么替换 application,我们可以知道在 android.app.LoadedApk 类中有一个方法makeApplication可以生成一个 application,通过该方法生成一个 application,然后通过替换android.content.ContentProvider类中的mContext属性完成 application 的替换,如下图所示: 2、实际操作ps:因为第一代壳网上一大堆,所以讲得很粗略,同时这也不是本文的重点!!! 通过上面的代码我们可以得到脱壳 apk,然鹅待加固的 apk 放在哪里,网上大多放在脱壳 dex 的尾部,我又画了一张图,应该可以看图就懂了: 这个我采用通过 python 读取二进制然后重新计算 chunksum 和签名字段实现,代码如下: import binasciiimport hashlibimport zlibdef fixCheckSum(shell): shell.seek(0x0c) data = shell.read() checksum = zlib.adler32(data) strchecksum = str(hex(checksum)) strchecksum = strchecksum.replace('0x','') b = bytes(strchecksum.encode('utf-8')) a = bytearray(b) c = binascii.hexlify(binascii.unhexlify(bytes(a))) dataCheckSum = bytearray(c) shell.seek(0x08) shell.write(dataCheckSum)def fixSHA1(shell): shell.seek(0x20) signBytes = shell.read() sha1 = hashlib.sha1() sha1.update(signBytes) sign = sha1.hexdigest() tmp = bytes(sign.encode('utf-8')) b = bytearray(tmp) shell.seek(0x0c) shell.write(b)def fixFileSize(shell,num): b = bytearray() for i in...
阅读全文