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可能,明天就会有一个
跟你类似的产品就出现了,这也是对自己劳动成果的一种保护吧.
到这里就没有啥,自己读的书少这是硬伤,接着要把基础打好了,继续看深入操作系统哈哈.写这个就是为了自己以后看吧.
#相关文章推荐
- Android开发之WebView和JS交互详解
- android getwidth 为0解决方案
- 浅谈Activity之启动方式(5种启动方式和隐式启动)
- Android--短信拦截及IP拨号
- Android Studio优化之启用Shift+Ctrl+O导入所有的包
- android mediarecorder自制录相机花屏问题
- Android动画 Animation
- Android利用系统Action裁剪图片大小
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- android 图片轮播控件 Android-ConvenientBanner简单使用
- Android自定义类似ProgressDialog效果的Dialog
- 修改android默认锁屏方式
- Android中shape标签里的size子标签的android:width和android:height的使用
- git简单教程及删除空文件夹
- Android 获取 AudioRecord 麦克风音量大小并做选择性发送
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- Android 应用程序结构
- android dialog 去标题,圆角矩形,去背景
- Android studio中自定义属性访问不了的解决办法
- android studio学习(1)