android逆向破解1

1. Android APK文件结构
问题:Android APK的入口函数是什么?
Android 系统历史
2. SDK工具-adb,monitor
adb命令
monitor操作
3. Android逆向工具
①命令行工具
1.AndroidManifest.xml清单文件解密工具
2.Dex文件反汇编、汇编工具
3.apk签名工具
4.apk反编译工具-apktool
5.Dex2jar工具(转换文件格式)
6.Java反编译工具(将java文件反编译为源码)
②可视化工具
1.AndroidKiller工具(集成了反编译、回编译、安装apk、查看源码)
2.JEB反编译工具
3.Jadx-GUI
4.GDA 反编译工具
4. Android逆向分析方法
5. 字符串分析法-实例-破解一个apk的流程
破解步骤
使用AndroidKiller用字符串分析法
6. Smali代码-HelloWorld
7. 日志过滤法-实例
使用Monitor过滤日志
使用AndroidKiller过滤日志
8. 配置环境问题
夜神模拟器adb连接

Android APK文件结构
SDK工具-adb,monitor
逆向工具介绍
Android逆向分析方法
字符串分析法-实例-破解一个apk的流程
日志过滤分析法
配置环境问题

  1. Android APK文件结构
    android studio生成的apk在以下目录
image.png

基本的APK是一个压缩包,压缩包中有

image.png

META-INF目录 签名信息,包括公司信息、文件的HASH值
Res目录 资源信息,包括图片、xml(布局文件、字符串、风格样式等)
AndroidMainfest.xml 清单文件,包括APK包名、四大组件的一些申明定义、权限、程序的入口
Classes.dex 可执行文件,包括java的类信息、方法信息、字段信息、虚拟机指令。dex文件的生成流程是从java源码->class文件->dex文件
Resources.arsc 资源序号文件,包括资源里的所有ID、名称。资源ID对应文件是R.class

image.png

Lib目录 动态库,扩展名是.so ,包括C++代码,有各种平台,比如x86,arm

image.png

Assets目录 自定义资源,比如.txt,mp4,等等

image.png

问题:Android APK的入口函数是什么?

自己定义的MainActivity中onCreate
清单文件中application节点可以添加android:name属性,指定继承自application的类,用于初始化整个app的全局信息。继承自application的类有两个重写函数会执行,是程序最早执行的函数。
① attachBaseContext
② onCreate

image.png

所以一个app最早执行的函数是 application的类中的attachBaseContext函数
一般apk加固之后,都会自定义application类,并重写其中的attachBaseContext函数或onCreate函数,并且声明为native类型的函数。
app运行的流程

image.png

Android 系统历史

分为三个阶段
① android2.3~4.0 卡顿
② android4.1~4.4 成长,飞跃
android虚拟机dalvik->art
③ android5.0~现在 整体不错
逆向分析的环境
系统:android 4.4 (同时有dalvik和art)
手机: google nexus 4/5(500左右)
google nexus 6p(800左右)

  1. SDK工具-adb,monitor
    adb命令

① 列举设备
adb devices
② 将apk上传到设备
adb push


image.png

③ 安装apk
adb install -r apk文件名 (可以覆盖安装)
④ 启动apk
adb shell am start -n <包名/activity名称>

adb -s emulator-5556 shell am start -n com.bluelesson.helloworldndk21/.MainActivity

adb shell am start -D -n <包名/activity名称> (以调试方式启动)
⑤ shell命令
ls,cd,su,ps,ps | grep com,kill,chmod

monitor操作

① 概况

androidstudio中打开

image.png

文件目录中打开

image.png

主要窗口


image.png

② 设备列表


image.png

③ 文件夹操作


image.png

④ 日志


image.png

过滤日志

image.png
  1. Android逆向工具
    ①命令行工具

1.AndroidManifest.xml清单文件解密工具

AXMLPrinter2.jar
java -jar AXMLPrinter2.jar <清单文件>
java -jar AXMLPrinter2.jar AndroidManifest.xml > out.xml

2.Dex文件反汇编、汇编工具

Dex文件是android java代码编译生成的二进制文件,包含了虚拟机指令(dalvik虚拟机)

Baksmali.jar(反汇编工具,将虚拟机指令反汇编成smali代码)
java -jar baksmali.jar -o <输出目录>
java -jar baksmali.jar classes.dex -o out_dir
反汇编生成的目录中,包括所有dex文件中的类代码,每一个类就是一个smali文件。
Java中有三种类,外部类、内部类、匿名类
外部类:MainActivity.java -> MainActivity.smali
内部类:MainActivity类中MyOnClickListener类 MainActivityMyOnClickListener.smali 匿名内部类:MainActivity类中new OnClickListener对象 -> MainActivity1.smali
smali.jar(汇编工具,将smali代码汇编生成dex文件)
java -jar smali.jar <目录> -o 文件名
java -jar smali.jar out_dir -o out.dex
修改smali代码,#号是注释代码
// # if-eqz v2, :cond_24
3.apk签名工具

签名工具,使用android系统源码编译时用到的一个工具
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk

4.apk反编译工具-apktool

反编译apk
java -jar apktool.jar d
java -jar apktool.jar d HelloWorld.apk
①将清单文件以及其他xml文件解密
②将资源序号文件(resources.arsc)与资源名称做了一个对应关系表
生成在了/res/values/public.xml
③将dex文件反编译成了smali代码

回编译 apk目录
java -jar apktool.jar b <反编译的apk文件目录>
java -jar apktool.jar b HelloWorld
生成的APK在 <反编译的apk文件目录>/dist目录中

5.Dex2jar工具(转换文件格式)

dex2jar>d2j-dex2jar.bat
dex2jar>d2j-dex2jar.bat classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar

6.Java反编译工具(将java文件反编译为源码)

image.png

②可视化工具

1.AndroidKiller工具(集成了反编译、回编译、安装apk、查看源码)

apktool
所在目录:AndroidKiller_v1.3.1\bin\apktool\apktool

image.png

在Androidkiller中设置新的apktool

image.png
image.png
image.png

adb工具
常用命令
打开shell:adb shell , adb -s 设备名称 shell
安装apk: adb install 1.apk , adb install -r 1.apk
列举设备: adb devices
dex2jar工具集
将dex文件转成jar文件,方便jd-gui反编译
jd-gui工具
可以查看smali代码对应的java源码

image.png

编码转换


image.png
image.png

2.JEB反编译工具


image.png

3.Jadx-GUI


image.png

4.GDA 反编译工具

image.png
  1. Android逆向分析方法
    ① 字符串分析法
    ② 日志分析法
    ③ 动态调试smali, 动态调试so文件(c++生成的文件)
    ④ API下断(调试so,对linux API下断),栈回溯分析

  2. 字符串分析法-实例-破解一个apk的流程
    破解步骤

拿到apk
使用反编译工具进行反编译
根据apk运行提示,查找字符串
查找字符串进行分析,找关键代码修改
使用重打包工具进行重打包
使用签名工具进行签名
使用AndroidKiller用字符串分析法

但是需要注意的是,中文字符串在Android是以Unicode编码方式显示的,格式类似\u4e0d\u597d\u610f\u601d。我们需要进行转换,AndroidkKiller提供了这个功能

image.png

通过查找到对应代码,然后在代码附近可以发现显示成功的字符串。在成功字符串上面有关键跳转,我们只需要将关键跳转nop掉即可。其实在smali使用#号注释掉即可。

image.png

在代码的上方,应该就是正确密码比对的地方,查看上下文发现v2寄存器,使用资源ID中获取的一个字符串。


image.png

在这个时候,一般在工程中搜索资源ID,从资源ID找到对应的资源名称以及类型,然后再根据类型和名称找到对应资源的定义。

image.png

然后再去搜索对应资源名称,找到字符串定义,因为已经知道类型是sting,直接可以查看文件res/values/strings.xml。


image.png

之后,重新编译,安装测试。

  1. Smali代码-HelloWorld

.class public LHelloWorld;

Ye olde hello world application

To assemble and run this on a phone or emulator:

java -jar smali.jar -o classes.dex HelloWorld.smali

zip HelloWorld.zip classes.dex

adb push HelloWorld.zip /data/local

adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld

if you get out of memory type errors when running smali.jar, try

java -Xmx512m -jar smali.jar HelloWorld.smali

instead

.super Ljava/lang/Object;

.method public static main([Ljava/lang/String;)V
.registers 2

sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;

const-string    v1, "Hello World!"

invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

return-void

.end method

image.png
  1. 日志过滤法-实例
    使用Monitor过滤日志

①添加过滤项

image.png

②搜索过滤

image.png

使用AndroidKiller过滤日志


image.png
image.png
  1. 配置环境问题
    夜神模拟器adb连接
image.png

复制androidkiller中的adb以及dll,到SDK目录、夜神安装目录

image.png
image.png

注意:复制到夜神目录下要注意改名字

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,476评论 2 59
  • layout: wikititle: Android逆向分析笔记categories: Reverse_Engin...
    超哥__阅读 10,545评论 1 17
  • 产品的目标是为用户解决问题,好的产品需要深入理解用户需求,并以现阶段可行的方案解决问题。 如果要打造用户喜爱的产品...
    小披阅读 300评论 0 0
  • 我们邀请《华夏地理》的美女编辑 @iris 来继续扑克牌的话题。 毕竟快到春节了,想必不少小伙都要在这个百无聊赖的...
    RedDogLoop阅读 4,870评论 2 20