开发一个基于Dalvik字节码的相似性检测引擎,比较同一款Android应用程序的不同版本之

访客5年前关于黑客接单653
上文咱们说过,《针对Dalvik字节码的类似性检测引擎,比较同一款Android运用程序的不同版别之间的代码差异》这篇文章计区分两个部分来解说,上文只介绍了怎么运用Quarkslab公司开发的diff引擎。本文咱们将介绍一个用例:URl诈骗缝隙(CVE-2019-10875) ,别的还会介绍怎么将Redex与diff东西相结合,检测被混杂处理的运用程序中究竟发生了哪些修正? CVE-2019-10875缝隙及缓解办法的剖析 CVE-2019-10875缝隙介绍 mint browser(薄荷阅读器)是小米专门为安卓手机用户规划的一款轻量级阅读器运用,这款软件内存很小,规划的非常简练,可是该有的功用一应俱全,支撑语音搜索,能够带给用户更好的阅读体会。不过就在2019年4月,研究人员曝出小米薄荷阅读器存在URL诈骗缝隙,进犯者可把歹意链接伪装成威望网站的URL,对受害者进行垂钓进犯。之后尽管小米公司敏捷发布了安全补丁,但有人发现安全补丁存在严峻的问题,只需要简略添加几个字母,就可绕过。该缝隙是CVE-2019-10875。粗略地说,小米薄荷阅读器为了提高用户体会,在当你翻开某个 *** 链接时,若链接类似于https://www.google.com/?q=www.domain.com时,则网址栏就只会显现www.domain.com,也便是只显现?q=后边的字段。因而,一旦进犯者结构https://www.evil.com/?q=www.google.com这类的链接进行垂钓进犯,受害者则只会在网址栏看到www.google.com,信任任何人都不会置疑谷歌是垂钓网站。当进犯者输入https://www.andmp.com/?q=www.google.com时,跳转成功后,可看到地址栏显现www.google.com,但页面其实是www.andmp.com的内容,这种URl诈骗缝隙进犯者运用起来毫无难度,只是只需要假造一个简略的歹意链接。 这就会形成,进犯者能够运用此安全缝隙作为 *** 垂钓活动的一部分。该缝隙会影响1.6.1或更低版别,所认为了安全,请赶快升级到1.6.3版。 现在,让咱们假定有人想快速了解这个缝隙是怎么作业的。要做到这一点,最快的办法是在发现到这个缝隙之后查看开发人员运用的安全补丁。它应该会引导咱们拜访易受进犯的代码并阻挠咱们查看整个运用程序代码。 在本文中,咱们会介绍怎么运用diff剖析来找出代码的哪些实践部分被修正,以维护用户免受缝隙影响。请注意,由于JNI特性,依据不同的状况,还能够在嵌入式本机库中进行一些修正。假如是这样,则有必要在本机代码等级履行互补的diff进程。 挑选要比较的类 首要,咱们有必要削减要进行比较的类的调集,以便只保存由小米开发团队实践开发的类。这一步非常重要,由于它使得比较进程更快,成果更精确。坐落APK根目录的AndroidManifest.xml能够为咱们供给有关其开发包的一些有用信息,这些开发包一般包括它们的大部分活动、服务、播送接收器等。 这样,咱们很快就会发现manifest文件中介绍的一个名为com.miui.org.chromium.chrome.browser的资源包,该包括有root权限,被很多类同享。因而,咱们会首要比较其间包括的类。以下Python代码展现了具体作业进程: lhs_app = load("com.mi.globalbrowser.mini-1.6.1.apk.apk") # Loading left handside application rhs_app = load("com.mi.globalbrowser.mini-1.6.3.apk.apk") # Loading right handside application condition = {"package_filtering": "com.miui.org.chromium.chrome.browser"} lhs_classes = filter(lhs_app.classes, condition) rhs_classes = filter(rhs_app.classes, condition) 查找修正过的类 一旦得到类,咱们就需要知道哪些类现已被修正。为此,咱们有必要事前优化选项。 optimizations = { "inner_skipping": False, "external_skipping": False, "synthetic_skipping": True, "find_obfuscated_packages": False, "min_inst_size_threshold": 5, "top_match_threshold": 3 } diff_results = diff(lhs_classes, rhs_classes, 0.8, optimizations) 这些优化选项别离装备了diff引擎: 1.不要越过内部和外部类:内部类和外部类很可能包括修正过的代码。 2.越过组成类:组成类是由编译器主动生成的,因而不太可能嵌入修正过的代码。 3.不要企图找到现已被混杂的包名:如前所述,包称号好像没有混杂。设置此选项后,diff引擎将不会考虑由混杂引起的潜在问题。 4.不要考虑嵌入少于5条指令的类:运用程序一般包括一切看起来类似的小类(例如,一些只回来特点值的办法)。但是,在大多数状况下,它们在比较版别的diff方面毫无价值。大多数状况下,他们只会进行一些误报,不过,这些成果能够经过设置适宜的值来消除。 5.在三个高档类中进行完全的比较:假如咱们处理的类在结构等级上大致相同,则有必要添加此选项。不过这超出了本文所讲的规模。 此外,咱们将匹配阈值设置为0.8,由于在寻觅修正的缝隙时,咱们只希望寻觅那些进行较小修正的缝隙。这意味着,匹配间隔低于此值的类,将在成果中直接被删去。 此刻,咱们得到了diff()函数的成果,能够用下面的Python代码对它们进行迭代: for match in diff_results: if match.distance {match.distance:1.4f}") 履行完整个脚本后,会输出很多成果。 [+] com/miui/org/chromium/chrome/browser/widget/progress: ToolbarProgressBar - ToolbarProgressBar.java | com/miui/org/chromium/chrome/browser/widget/progress: ToolbarProgressBar - ToolbarProgressBar.java -> 0.9994 [+] com/miui/org/chromium/chrome/browser/update: HomePageDataUpdator - HomePageDataUpdator.java | com/miui/org/chromium/chrome/browser/update: HomePageDataUpdator - HomePageDataUpdator.java -> 0.9794 [+] com/miui/org/chromium/chrome/browser/init: ChromeBrowserInitializer$2 - ChromeBrowserInitializer.java | com/miui/org/chromium/chrome/browser/init: ChromeBrowserInitializer$2 - ChromeBrowserInitializer.java -> 0.9771[1][2][3][4][5]黑客接单网

相关文章

Web安全之点击绑架(ClickJacking)

 点击绑架(ClickJacking)是一种视觉上的诈骗手法。大概有两种方法,一是攻击者运用一个通明的iframe,掩盖在一个网页上,然后诱运用户在该页面上进行操作,此刻用户将在不知情的情况下点击通明...

运用Python检测并绕过Web应用程序防火墙

Web运用防火墙一般会被布置在Web客户端与Web服务器之间,以过滤来自服务器的歹意流量。而作为一名浸透测验人员,想要更好的打破方针体系,就有必要要了解方针体系的WAF规矩。现在,许多WAF都是根据签...

电商安全无小事,怎么有效地抵挡 CSRF 进犯?

 现在,咱们绝大多数人都会在网上购物买东西。可是许多人都不清楚的是,许多电商网站会存在安全缝隙。比方乌云就通报过,国内许多家公司的网站都存在 CSRF 缝隙。假如某个网站存在这种安全缝隙的话,那么咱们...

浅谈web安全之手艺检测sql注入以及取得信息

所谓SQL注入,便是经过把SQL指令刺进到Web表单递送或输入域名或页面恳求的查询字符串,终究到达诈骗服务器履行歹意的SQL指令。 查验是否可以注入 and 1=1 正常 and 1=2 犯错 h...

保证你网页的安全

 从技能到安全, 这是一个趋势. 曾经寻求的是比较炫酷的技能, 等完成往后发现, 自己还能做什么. 炫技完了之后,差不多就该到悟道的时分了. 用户安全, 便是一个很大的禅. 苹果回绝 FBI, goo...

用于浸透测验WordPress的Ruby结构:WordPress Exploit Framework

这个Ruby结构包括一些能够浸透测验WordPress网站和体系的模块,用户也能够自己开发模块扩展其功用。 运转它需求什么条件? 保证体系上装置了Ruby 2.2.x,翻开一个指令行窗口,切换当时目录...