黄皮23-25章简记

逆向加固应用

  1. 四大组件如果想要使用,必须在androidmanifest.xml中声明。因此不论如何加固,四大组件名字都会摆出来(如何加固?要知道为何四大组件名字必须写在xml中),但application可以改,并动态加载application。
  2. libdvm加载dex用的dvmDexFileOpenPartial,360加固自己实现了这个函数,art如何加载的?art也能调用360实现的这个函数?art与dvm开放的接口相同。相同又是如何做到完整替换的?-针对的是java字节码。需要阅读双方源码。
  3. ida导入头是用读取文件,执行脚本用shift+F2
  4. 最好的过一般反调试的方法是改系统源码。
  5. webview的js可访问自定义的java对象,用来提供前端操控本机app的内部行为,相当于自定义了一个浏览器接口。同时带来了很多安全问题,注册js对象名时一般要加密-获取该名称即可调用内部接口,加密后是知道开放的对象是什么但不知道用什么名字调用。获取该字串:java层调试需要从头附加不容易过壳。(java如何附加到运行一半的app中调试?)修改smali前面的壳容易检测出来,前端js遍历全部对象挨个调用可以不获取字串调用,仿造java层加载so调用加密方法可以获取字串。反正要求是给定字串加密后为所需,固定的数据,不用分析加密过程取得结果就行。
  6. adb可以帮助输入内容等与屏幕交互,点击输入框后用adb shell input text “”即可。
  7. 书中例题就是考一个提供给js接口的安全性。
  8. 最好的dump dex也是修改android源码。
  9. 现在的app都是做成了浏览器开放接口给js调用,所以需要研究webview或是自定义view的详细用法与原理!!!

爱加密

  1. 反调试一般为了阻止你一步dump关键函数,可以通过在常见反调试点下断的方式绕过,比如fopen,gets等。当然最好的dump和过反调试方式还是改android内核源码。(做一个必须-简直无敌)
  2. ida可以用G直接搜索全局符号表找到指定函数
  3. ida的hex-view可以改内存空间,edit改完记得点apply change。
  4. ida也可以修改寄存器等
  5. 还原apk:把manifest中的application name还原,assets不需要的删除,apktool回编译,把dex换成dump出来的,签名。
  6. dvm加载so用的dvmloadnativecode函数

android漏洞

  1. 文件解压漏洞,解压的文件名可以含任意字符,所以可以用../进入data/data(此目录下各应用用户为各应用本身,所以有7权,此外data/app下各文件属于system用户,但其他用户有执行和阅读权,所以可打开并执行)覆盖/自定义文件
  2. 屏幕录取权限不易发现漏洞,可加windowmanager.layoutparams.FLAG_SECURE使自己应用安全防录制与截屏

Wannacry加密病毒

  1. 通过获取windowmanager获取权限建立浮窗为顶层造成勒索,同时用DeviceAdminReceiver修改锁屏密码使其重启也不知密码
  2. 可怕的是sd卡权限,sd卡权限默认直接就对应用开放了,因此该应用把sd卡内的数据全部加密。经测试我的模拟器在完全没有提醒的情况下虚拟sd卡被破坏。

对于所有平台,一般公共数据都是开放的,sd卡、硬盘等,所有软件都可以使用api访问这部分内容,因此任意软件都可以修改加密其内容形成勒索,执行软件时一定要注意。