文档章节

<<android软件安全权威指南>> -- 笔记0

o
 osc_4h4pnshu
发布于 2019/12/24 17:10
字数 1400
阅读 30
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

##引言 因为导师的方向有android安全的内容,给我看的论文大多也涉及android安全的内容,而我此前一点基础也没有,看的一脸懵

故随便找书先上手再说

书籍详细内容:<a href="http://www.broadview.com.cn/book/5097" target="_blank">android软件安全权威指南</a> <br>

##搭建环境 需求:分析APP 主要围绕:android软件开发,android软件逆向,android源码编译

  1. 安装JDK
  2. 安装Android SDK(使用Android Studio已经包含,无需额外下载)
  3. 安装Android NDK(同上)
  4. Android Studio集成开发环境,可以选择下载CMake,LLDB
  5. Android模拟器

Cygwin或Bash on Ubantu on Windows(win10下linux子系统)

###常用逆向分析工具

  • ApkTool:APK的反编译与回编译功能
  • smali/baksmali:DEX文件的反编译与回编译工具
  • dex2jar:DEX文件转换jar包
  • 010Editor:跨平台二进制编辑器,提供二进制模版

###搭建源码分析环境 推荐Win10,使用Docker编译系统源码 <br>

##如何分析Android程序 从开发学起,学习路线是线性的,循环渐进的,分析程序是开发的逆过程

从开发到最终分析并破解的完整路线: ###编写一个Android程序 ####创建

  • hintEditText上的默认提示
  • ems是将对应控件的宽度设为几个字符的宽度,设置以后,一行最大只能显示x个字符
  • MessageDigest
  • StringBuilder

####编译 1.命令行方式编译 进入工程目录,目录下内容如下

  • Crackme0201.iml: Android Studio生成的项目配置文件
  • local.properties: 本地配置文件,记录了当前系统中安装的Android SDK和Android NDK的路径
  • app: 项目目录,程序代码和资源
  • setting.gradle: 指定包含的项目模块的路径
  • build: 命令执行后输出文件的存放目录,第一次未编译是还没有的
  • build.gradle: 项目的构建脚本
  • gradlew: macOS和Linux系统使用的脚本编译命令
  • gradlew.bat: 与gradlew功能相同,用于Windows

gradlew是基于task来编译项目的,执行gradlew task命令,列出所有支持的task

生成Debug调试版本的APK,在终端执行./gradlew assembleDebug命令,编译后在app/build/outputs/apk 安装Debug调试版本的APK,执行./gradlew installDebug命令,会自动安装到连接的设备或模拟器上

2.Android Studio编译 直接点运行,Android Studio会自动编译APK,并安装到设备上,如果只想编译不想运行,点击Build -> Make Project来编译当前工程。

###破解一个Android程序 ####破解入手 通常方法:使用ApkTool反编译APK文件,生成smali格式的反编译代码。通过阅读smali文件的代码来理解程序的运行机制,找到突破口,并对代码进行修改。使用ApkTool重新编译生成APK文件并对其进行签名,运行测试。 如此循环,直到全部破解。

在实际分析中,还可以使用IDA Pro直接分析APK文件,使用dex2jar与jd-gui配合进行Java源码级的分析等。

####反编译 安装Apktool工具,对APK文件进行反编译

apktool d ./app-debug.apk -o outdir

对当前目录下的debug.apk进行反编译,文件生成在outdir目录下

反编译包含一系列目录和文件,smali目录下存放了程序的所有反编译代码,res中是所有资源文件,这些目录的子目录和文件的组织结构与开发一致。

####分析 突破口:错误提示信息 错误提示代码附近通常是程序的核心验证代码。 错误提示属于Android资源中的字符串资源,可能会被硬编码到源码中,也可能在res/value/string.xml

对smali文件进行分析 checkSN()被调用,进行注册码合法性检查

move-result v0
if-nez v0, :cond_0

第一行将返回结果保存在v0寄存器,第二行对v0寄存器进行判断,如果其值不为0,即条件为真,跳转到cond_0标号处,反之程序继续执行

如果代码不跳转,则继续执行

.line 34
iget-object v0, p0,  Lorg/nuaa/crackme0201/MainActivity$1;->this$0:Lorg/nuaa/crackme0201/MainActivity;

const v1, 0x7f06002c

invoke-static {v0, v1, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;II)Landroid/widget/Toast;

move-result-object v0

.line 35
invoke-virtual {v1}, Landroid/widget/Toast;->show()V

goto :goto_0

使用iget-object指令获取MainActivity实例的引用,其中,->this$0是内部类MainActivity$1中的一个synthetic字段,存储对父类MainActivity的引用。 const v1, 0x7f06002c指令将v1寄存器传入unsuccess字符串的id,调用Toast;->makeText()创建字符串,在line35show出来

####修改smali 关键在if-nez v0, :cond_0 类似的跳转指令有if-nez, if-eqz, if-gez, if-lez等 与if-nez相反的是if-eqz,等于0时跳转

####重新编译 修改代码后,重新编译,打包成APK文件

apktool b outdir_rel

此时编译生成的APK文件是没有签名的,不能进行安装和测试,需要对APK进行签名 我没照书上的做,用的是360签名工具,<a href="http://www.pc6.com/softview/SoftView_230893.html">链接在这里</a> 签名的key用的是之前新建的

####安装测试 启动Android模拟器,或者使用设备,在终端直接执行命令先卸载原来版本,再安装破解后的版本

$adb uninstall com.droider.crackme0201
Success

$adb install signed.apk
Success

再启动测试,发现已经破解了

##小结 破解的流程: 反编译 -> 分析 -> 修改 -> 回编译 -> 签名 如果觉得繁琐可以采用集成工具 macOS: Android-Crack-Tool, Windows: Android Killer

o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.3K
6
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
5.8K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
580
1
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0

没有更多内容

加载失败,请刷新页面

加载更多

低代码平台,让企业开发不再是难事

近几年,企业面临数字化转型带来的压力,为了快速适应行业变化和赶超竞争对手,在高级技术人才缺乏的情况下,低代码开发获得了企业的青睐。 何为低代码开发,低代码开发平台(LCDP)是无需编...

osc_veyfyz58
30分钟前
12
0
【科创人独家】华旦天使张洁:风口是创业者的造物,投资本质是件农活

在投资界活跃着一批乘风破浪的姐姐们,江湖人敬称一声“花姐”的华旦天使投资创始人张洁是个中代表:言谈飒爽,举止利落,洞察力十足。 技术背景创业者 宜:创新、洞察 忌:轴、轻视销售 科创...

osc_lc4icfkt
31分钟前
7
0
霍尼韦尔(中国)推出数字化劳动力管理解决方案套件,以支持健康合规性和远程操作

休斯敦霍尼韦尔(中国)近期宣布了一个完整的模块化软件解决方案,以帮助工业公司在员工返回工作场所时强制遵守关键的健康和安全要求,包括体温检查和自动进入管理流程,更多信息尽在振工链。...

osc_ju8o7gji
32分钟前
13
0
萤石云摄像头调整码流,画面模糊的处理

近期在将萤石云合并到监控主机时发现画面只有750左右,原以为是海康威视主机的问题,必竟两个产品系列,后我又购买了萤石云主机进行测试还是一样。经过与售后沟通他们给出了调整画面的方案,...

osc_5h5udyht
34分钟前
22
0
Oracle 锁排查SQL

查询锁SQL或ASH报告 select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object)); 查询TX锁 set line......

osc_qgfjs4a5
34分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部