您的位置:首页 > 移动开发 > Android开发

android逆向总结---强哥的书

2016-03-31 14:08 405 查看

断断叙叙的把强哥的,Android 软件安全与逆向分析这本书看完了,看完之后呢,就想自己总结一下,三个星期的战果

1. 总的来说,一个apk的生成经历了三个部分分别是: class –> dex –> apk

而我们对程序的破解和保护也是针对这三个阶段,破解分:静态 动态俩部分

保护就比较广泛了,而且手段众多.下面会一一解释.

1.1 下面是一些工具的安装和配置,我写到另外的地方了,有需要的可以看看

/article/10809733.html

1.2 整体的处理流程就是这样的



2.反编译

2.1 apktool的使用

####apktool -h 学会使用这个命令,来查看怎么使用apktool命令
####usage: apktool d[ecode] [options] <file_apk> //这个用来反编译apk 具体参数看下面的
####-f,--force              Force delete destination directory.
####-o,--output <dir>       The name of folder that gets written. Default is apk.out
####-p,--frame-path <dir>   Uses framework files located in <dir>.
####-r,--no-res             Do not decode resources.
####-s,--no-src             Do not decode sources.
####-t,--frame-tag <tag>    Uses framework files tagged by <tag>.
####usage: apktool b[uild] [options] <app_path>//这个命名用来进行重新打包smali文件生成apk
####-f,--force-all          Skip changes detection and build all files.
####-o,--output <dir>       The name of apk that gets written. Default is dist/name.apk
####-p,--frame-path <dir>   Uses framework files located in <dir>.
####


2.2 dex2jar ,jd-gui

安装配置文件里面有使用方法,非常简单.

2.3 signapk

这个 工具主要是用来对解压的apk 修改完dex文件之后并且重新计算修改checsum值之后,进行签名打包处理生成apk文件

java -jar signapk.jar testkey.x509.pem testkey.pk8 inpath outpath/apkname

2.4 ida-pro

这个工具用的非常多的,有很多强大的功能,可以自己慢慢探索,我知道的就有静态看代码,和动态调试代码

具体的用法可以百度,或者去看雪论坛,无爱破解等有很多的

2.5 ddms

主要用来,监视apk运行过程的信息,主要就是看logcat method profiling(可以输出程序运行过程调用的方法)

2.6 adb

adb 有很多的功能,在android sdk的platform-tools 里面

常用的有:

adb shell 后面什么都不加,则会进入adb链接的手机的内核里面,在里面linux命令大部分都可以用

adb push

adb install

具体的可以使用

adb -h 命令来查看,英语不好就得多看

final 当然了反汇编的工具有很多,我只列出了我经常用的,具体的用法我也没有写,不过我觉得既然已经知道了工具之后\

那么读者肯定可以找到怎么使用方法的,i belive you as myself .

#

3. apk保护手段

3.1 对抗反编译

1. 阅读反编译的工具源码,毕竟大部分都是开源的,找到反编译的缺陷,然后在自己的程序里面,添加相应的代码来防止反编译

2. 通过同时找n多apk放在同意目录下面,然后使用批处理,反编译,找反编译过程中不能识别的代码,然后利用

3.2 对抗静态分析

1. 使用native (就是原生程序即用c/c++写的程序)来写关键代码,从而保护程序

2. 如果你不会c/c++,那就使用google在sdk中提供的ProGurad 代码混淆工具

3. 对核心代码进行加密,使用时解密,或者直接使用ndk进行开发

4. 加壳,不过java不支持

3.3 对抗动态调试

1. 在代码中加入对调试器的判断,如果有调试器就直接终止程序

2. 检测模拟器,跟1一样,在代码中加入判断

3.4 防止重新编编译

1. 使用把签名保存下来,或者保存签名的hash值,然后程序每次启动的时候,对比hash值,不一样则终止程序

2. 也可以把编译过的class.dex 文件的hash值保存,下来,这样一修改就可以检测到

3.5 apk在编写的时候

1. 组件安全

2. 数据安全,被别的程序读写数据

#

3.6 用户使用不当造成安全隐患

1. root手机之后不慎安装流氓或者病毒软件,就会产生各种不安全的行为

2. 用户自己刷机使用第三方rom,而第三方rom 可能是不安全或者存在安全隐患或者本身就含有病读

#

4. 读后感:

在读强哥,这本书的过程中,有的时候真的是很痛苦,特别是dalvik汇编代码和smali的代码,以及ida反编译

class.dex 和 ndk编写的native 代码,这些章节在看的时候真的觉得很痛苦,虽然现在看完了,并且看的过程中

不断的实践,但是有的还是看不懂,不过我想这肯定是一个过程,看的多了分析的多了自然就会融会贯通.

以前写代码就是为了实现功能,现在不自觉的就会考虑到安全的问题,并且看smali和代码和dalvik代码对于java

语言的有些东西有了一些更深的理解,最起码会知道全局变量 静态变量 局部变量 在程序运行过程中是如何处理的

当然了也知道了,自己以前写的东西基本上就没有安全性可言,一反编译源代码都写,太low.

我觉得这本书就是让你初步接触安全问题,以此为突破口,我想作为一个程序员,不仅要会写代码,写好代码,更要写出

安全的让用户放心的代码,而不是一个毫无安全性可言的代码,并且如果没有保护,你今天上传的apk可能,明天就会有一个

跟你类似的产品就出现了,这也是对自己劳动成果的一种保护吧.

到这里就没有啥,自己读的书少这是硬伤,接着要把基础打好了,继续看深入操作系统哈哈.写这个就是为了自己以后看吧.

#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: