Apk 分析与Hook技术

个人博客 http://blog.csdn.net/qq_22329521/article/details/52335180
Android技术防范与揭秘总结

APK静态分析##

静态分析指,在不允许代码的情况下,通过词法分析,语法分析,控制流,数据流

分析等技术对程序代码进行扫描,验证代码是否满足规范性,安全性可靠性,可维

护行等指标的一种代码分析技术。

常用的分析利器##

查看源码工具dex2jar jd-gui
dex2jar 将apk中的class.dex 转化为jar文件,而jd-gui是一个反编译工具,可以

直接查看jar包中的源代码
使用命令 d2j-dex2jar classes.dex

dex2jar 官网地址 http://code.google.com/p/dex2.jar
jd-gui 官网地址http://jd.benow.ca

APK逆向工具 APKTool
使用apltool d xxx.apk -o c://xxxx
apktool 官网地址 https://code.google.com/p/android-apktpool/

android 逆向助手 是国人常使用的的工具分装的工具箱 包括了apktool,jd-gui

dex2jar 等,主要有反编译apk 打包apk 对apk签名等

反汇编IDA pro

APP种类##

目前的应用分为3类 WebApp,Hybrid App Native App 分析各自的优劣

原生app
优点:用户体验好,性能稳定,操作速度快,上手流 畅,访问本地资源(通讯录,相册),设计动效和 转场
通知和体系,用户留存率高
缺点:分发成本高(不同平台不同的开发语言和界面适配);维护成本高(最新版为V5 但是还有v2 v3的用户) 更新缓慢,根据不同平台的审核提交的流程复杂

网页app
优点 :开发成本低,更新快 更新无需通知用户,不需要手动升级,能够跨平台和终端
缺点:临时的入口,无法获取系统级别的通知,提醒 动效等用户留存率低,设计受限制诸多,体验较差

反编译后的结构##

  1. assets 声音,字体 网页等资源
  2. org 第三方库 如org.appache.http
  3. com 第三方库
  4. lib 应用中使用到的库
  5. -armebi .so 文件 c/c++代码库文件
  6. -META-INF APK签名文件
  7. -classes.dex java源代码编译后的代码文件
  8. -resources.arsc 编译后的资源文件

在反编译后得到的smaill的代码,如果要插入自己的smaill代码 大多均是将自己写好的java代码反编译后为smali代码将其拷贝到其中

常用的smail代码##

//增加log信息
const-string v3,"SN"
invoke-static {v3,v0}, Landroid/util/Log;->v

(Ljava/lang/String;Ljava/lang/String;)I


//2.弹出消息框
new AlertDialog.Builder(self)
.setTitle("普通对话框")
.setMessage("你好,Android!")
.show();


new-instance v1,Landroid/app/AlertDialog$Builder;

invoke-direct {v1,p0}, Landroid/app/AlertDialog$Builder;-><init>

(Landroid/content/Context;)V

.line 29
.local v1,builder:Landroid/app/AlertDialog$Builder;
const-string v2,"\u666e\u901a\u5bf9\u8bdd\u6846"

invoke-virtual {v1,v2}, Landroid/app/AlertDialog$Builder;->setTitle

(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;

.line 31
const-string v2,"\u4f60\u597d\uff0cAndroid!"

invoke-virtual {v1,v2},Landroid/app/AlertDialog$Builder;->setMessage

(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;

.line 52
invoke-virtual {v1},Landroid/app/AlertDialog$Builder;->create

()Landroid/app/AlertDialog;

move-result-object v2

invoke-virtual {v2},Landroid/app/AlertDialog;->show()V

分析SO文件##

在Android 上使用NDK 进行Java+C编程
jni-》c/c++代码 -》编译-》ndk-》so文件

NDK开发##

在AS环境下 http://blog.csdn.net/why7788521521/article/details/51537207
http://blog.csdn.net/yanbober/article/details/45309049

反汇编##

在Android设备上反汇编指的是针对NDK开发出来的SO文件进行逆向。
反汇编是指将目标代码转化为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码,低级转高级, 因为c/c++ pascal等高级语言编译会生成计算机语言,不像java的虚拟机指令集,所以我们能够对计算机语言进行逆向,即反汇编。

ida pro 下载地址

http://download.csdn.net/detail/equationdz/9340659#comment
打开.so 文件 在左侧可以查看到

这里写图片描述

在JNI函数中 都是以java+包名开头, 所以为什么试试java开头是我们相关的函数

按住f5 上面提供了
伪代码插件,可以很我们的源代码相比较,除了变量名名称变化了以外,其他均相

int __fastcall 

Java_com_example_ndkproject_NdkJniUtils_getCLanguageString(int a1)
{
  return (*(int (**)(void))(*(_DWORD *)a1 + 668))();
}

APK动态分析##

在真实或模拟的环境下执行程序进行分析的方法。多用于性能测试,功能测试,内

存泄漏测试等
调试工具为DDMS,emulator ,AndBug,IDA PRI等测试工具

分析##

  1. 代码安全分析
  2. 组件安全分析:针对Android 的四大组件,组件间的通信,以及他们权限的使用不当如恶意调用,恶意接受数据,恶意发送广播,拦截有序广播等
  3. 存储安全分析常见问题:对数据库文件,私有文件证书等,进行安全验证分析,特别是对明文存储敏感数据(将隐私数据明文存储在外部存储,将系统数据明文保持在外部存储,将软件运行时依赖的数据保持在外部缓存,将软件安装包或者二级制代码保持在外部存储,全局可读写的内部文件存储)
  4. 通行安全分析:对敏感数据进行传输采用基于SSL/TLS的HTTPS传输。
  5. Log进行逻辑跟踪,如果程序原本没有log 可以根据跟踪,注入log分析,为了避免被注入,在xml中的Application加入android:debuggable="false" 系统会终止调试属性,Log也就出不来
  6. TraceView进行方法跟踪,在DDMS下


    这里写图片描述

    得出数据图


    这里写图片描述

    可以对每一个方法与每一个进程占用的时间面板,显示该方法所占用的现场CPU使用率,cpu执行时间,等参数
  7. 网络抓包 采用Fiddler这个工具,能够记录你电脑上与互联网之间的http通行,设置断点,和所有数据
    抓包的原理:Fiddler以代理Web服务器的形式工作,设备上的所有网络请求,响应优先给代理服务器,然后由代理服务器转发,Fiddler的功能能够修改断点,在设置好断点中修改response,和Request 包括host cookie 返回的json等数据
  8. AndBug http://bbs.pediy.com/showthread.php?t=183412
    AndBug 最重要的功能就是断点分析 使用步骤 确定需要调试的类和方法,查找定位该方法,设置断点,断点分析查看该变量。在实际情况下,应用的逻辑往往很复杂,我们需要多次反复执行以上步骤,才能够分析应用中的逻辑。
  9. Chrmoe插件调试, facebook推出的 Stetho和一个叫Firebug 可以结合Chrome 对App进行调试
  10. WebView的漏洞问题:WebView 在使用jaddJavascripInterface 天加一个js调用本地方法的命令,造成WebView显示网页的时候,在javascript会存在一个本地引用,远程的网页可以从此类使用反射来执行的command
  11. 网络钓鱼:模仿二维码生产一个test2.com 与test.com 在扫描恶意的二维码,在浏览器上弱化了网址显示
  12. SQLite注入攻击(应该都会注意)构造一个正确的sqlite拼接

Hook##

在Android操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步的向下执行。而“钩子”的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子勾上事件一样。并且能够在勾上事件时,处理一些自己特定的事件如图

这里写图片描述

它的作用,它能够将自身的代码融入到被勾住的程序的进程中,成为目标进程的一部分。Android的系统使用了沙盒机制,普通用户进程空间都是独立的,程序的运行彼此不受干扰。所以我们希望能通过一程序改变其程序的某些行为。

Hook原理##

hook其本质就是挟持函数的调用,由于每个进程都是独立的,所以必先注入到所需要hook的进程空间,修改其内存中的进程代码,替换其过程表的符号地址。在Android中一般都是通过ptrace函数附加进程,然后想远程进程注入so库,从而达到监控以及远程进程关键函数挂钩。

Hook的工作流程##

注入代码所需要解决的问题
需要注入的代码我们存放到哪里?
如何注入代码
我们不能只在自己的进程中载入动态链接库,如何使进程附上目标进程
如何让目标进程调用我们的动态链接库

在Android的内核中有一个函数叫ptrace,它能够动态的attach(跟踪一个进程),detach (结束一个进程),peektext(获取内存字节),poketext(向内存写入地址),它能够满足我们的需求。而Android另一个内核函数dlopen ,能够指定模式打开指定的动态链接库文件,对于程序的指向流程,我们可以调用ptrace让pc指向LR堆栈 ,最后调用。对目标进程调用dlopen则能够将我们希望注入的动态库注入至目标进程。

步骤

  1. 用ptrace函数attach上目标进程
  2. 发现装载共享库so函数
  3. 装载指定的.so
  4. 让目标进程执行的流程跳转到注入的目标代码中执行
  5. 使用ptrace函数detach释放目标进程

常用的Hook工具

  1. Xposed框架
  2. Cydistrate框架
  3. ADBI/DDI框架

Hook能做什么

  1. 修改系统API
  2. 给指定应用注广告
  3. App登录挟持
  4. 对Native层hook,替换方法
  5. 对广告进行拦截
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,098评论 25 707
  • 所有的的改变都源于痛点,我开始有整理的需要是公公婆婆与我同住的那段日子。我的妈妈是有点小洁癖的那种干净,之前一直是...
    晓行之阅读 447评论 0 50
  • 杰克·韦尔奇,1981年成为通用公司第八任董事长和 CEO。在他的任期内,通用电气的 市值增加了4000亿美元,一...
    顾鸣芬阅读 1,643评论 0 0
  • ▲▲▲ 其实,每个人都会经历一个阶段, 看见一个东西,就想知道这个东西是什么。 其实当你真正了解以后; 会发现其实...
    唐寂川阅读 299评论 0 1
  • 太白醉酒诗百篇,人生得意须尽欢。五车书,千乘卷,我辈尽是失意餐。露宿街头,醉卧裙边,春心荡漾拈花指。食五餐...
    城北一颗白松树阅读 320评论 0 0