前言篇:

我们知道对于一篇论文来说,评估是很重要的,即使保护再好的方法,如果评估不到位总会显得那么苍白无力,这几天偶然看到一篇论文,关于一篇Android传统代码保护的,关于论文具体内容不多说了,价值含量一般般吧,但是对于文章最后的评估还是很赞的,在次小记,一来帮助需要之人,二来有利于自己理解。

内容篇:

两部分的评估:

第一部分:成本评估(开销评估);

第二部分:安全评估(坑攻击能力评估);

似乎大部分的评估都是这个套路,但是具体的方法会有所不同。


成本评估

一:设置条件

首先说明测试APP的来源,再者关于有哪些不能用的原因简单说明一下原因(因为后面未来工作会具体的说明);

再者你运行的环境:真机环境还是模拟器环境,简单说明一下配置,能够体现严谨的科学态度;

最后说明一下你前后的APP的变化,原始APP-->一层保护-->二次保护。

二:APP大小变化

这个肯定不论是在经过专门的移动厂商保护后的APP还是在论文中这一步是必不可少的,也是比较好容易理解的,不过在这要注意一点:因为测试的APP种类不同,最大、最小、还是平均都要说明,俩个字:严谨。

三:运行表现

这一块是很重要的,也是对我产生眼前一亮的感觉:

首先要知道benchmark这一概念:

Benchmark测试在计算机领域最广泛和最成功的应用是性能测试,主要是测试响应时间、传输速率和吞吐率,Benchmark测试在硬件方面广泛评价CPU,I/O接口,内存;在软件方面评价操作系统、数据库和中间件以及应用软件的数据处理能力。

首先Mandelbrot Map:

这是个APP,我已经在官网上下下来了,后面附件会给出,首先理解一下Mandelbrot是个数学家发明了分形图,简单点就是提出了个概念以数学方法模拟自然界存在以及科学研究中看似无规律的现象。

在这这个APP提供了一个fly mode模式,即:对一个预先定义的集结点的运动的不规则的过程给出个时间测量。具体的我也没太明白,后面明白了再继续更新吧在手机上的表现为:


接着说0xbenchmark

0xBenchmark是google官方的测试程序,0xlab给0xBenchmark集成了17个benchmark,包括2个计算性能,1个JavaScript基准测试,7个2D图形渲染,4个3D图形渲染,1个垃圾回收性能测试,2个本地benchmark用来测试系统性能。测试结果 供详细精确的数据,可以为性能优化供指导和比对。它包含的测试项目如下。
计算性能:
Linpack 测试Java的浮点性能
Scimark2 测试常用数学运算性能如快速Fourier变换、矩阵运算等性能

JavaScript:
SunSpider JavaScript基准测试

2D图形渲染
Canvas Redraw 测试Canvas绘图性能:
Draw Circle 一个简单的2D动画程序,测试刷新率
DrawRect 在画布上随机添加矩形
DrawCircle2 在画布上随机渲染圆圈
DrawArc 简单的2D动画
DrawText 计算文本渲染速度
DrawImage 计算图片渲染速度

3D图形渲染:
GL Cube 用OpenGL ES去渲染一个旋转的魔方
GL Teapot 用OpenGL ES去渲染一个旋转的茶壶模型
NeHe Lesson08 测试贴图着色混合性能
NeHe Lesson16 测试雾化效果性能

垃圾回收性能:
Garbage Collection 测试垃圾回收性能
本地测试程序

LibMicro 测试系统调用和库调用的性能
BYTE UnixBench 为Unix类的系统提供了一些基本的性能指标

在这里只需要使用计算性能,java浮点性能和常用的数学运算性能

在这里我在手机上也跑了一下结果为:


总结:
在这一快的评估我们完全可以在做传统的代码保护方面可以借鉴,在一个原始的APP保护过后对于性能的开销、自身大小的变化等等,从不同的角度来说明,从而增加论文的严谨性。


安全评估

安全评估这一块主要是从保护分类和保护强度测试两方面来说的

一:保护分类

首先从攻击者的能力分类上来说,在这块作者列出来了四类如下:


再者从保护轮廓上来说:

这块从四个方面来说:

1.隐藏方式来说:是一片还是一个块,片指的是程序指令的混淆,块指的是一个整体的混淆。

2.编码方式:这里说白了就是关于加密方法的复杂度。

3.可见度:从完全可见、部分可见、一点也不可见来进行分类。

4.暴露程度:完全暴露、部分暴露来进行分类。


保护强度测试:

首先定义四个概念:

1.方法暴露在程序执行期间,

2.方法相对暴露数在程序执行期间,相对就是相对全部的暴露。

3.字节码的暴露在程序执行期间,

4.字节码的相对暴露在程序执行期间。

步骤:

首先在每一个加密或者解密的方法中插入log输出那些在内存中解密的方法或者指令的形式。

然后使用adb 中的Monkey指令来模拟一个APP的用户使用行为,测试她的坑压能力。

这样来测试方法或者指令的暴露率。

总结:

这一块我们完全可以借鉴用来对于一个混淆,无论是加密或者加壳之后的APP,在整个运行期间方法或者指令的暴露程度,从而也可以对下一步中的动态调试的难度做个评估。


附件:点击打开链接



更多相关文章

  1. 基于 PhoneGap 与 Java 开发的 Android(安卓)应用的性能对比
  2. Android(安卓)5.0 CTS测试 ManagedProfileTest测试总结
  3. 【Android游戏开发十五】关于Android(安卓)游戏开发中 OnTouchEv
  4. Android(安卓)IOS UI自动化测试:Appium
  5. 谷歌CTS测试之GTS测试简介
  6. Android(安卓)- JUnit Test(单元测试)
  7. 踩坑实录 Android(安卓)Studio真机测试时 Error while Installin
  8. android 测试 monkeyrunner
  9. Android(安卓)MediaCodec硬编兼容性测试方案

随机推荐

  1. Flutter学习笔记(30)--Android原生与Flutte
  2. android adb命令
  3. Android之——史上最简单自定义开关按钮
  4. Android中数据存储——SharedPreferences
  5. 安卓知道多少
  6. Android(安卓)编译C模块
  7. Android(安卓)Wear手表蓝牙连接Android(
  8. android常用命令
  9. Android(安卓)JNI
  10. android动画效果