什么是android逆向,Android逆向-Android基础逆向(1)

[toc]

0x00 前言

这里强调一句,在学习的时候,一定要进行笔记的书写,这样才可以

学习的目的:

1.对安卓开发的进行简单的复习(由于本人是Android开发的,所以layout就不重复了)。

2.对最简单的安卓App进行开发。

3.对smali代码进行进一步的学习。

4.对dex文件的分析

5.简单的动态调试

6.静态分析

7.Davlik虚拟机

8.简单的APK文件分析。

以上待补充

工具使用:

1.Android studio 基本操作

2.apktool

3.APKIDE

4.AndroidKiller

5.jd-gui

学习相关基础

1.android简单开发能力

2.smali代码简单了解

3.java了解

4.一些简答工具的使用

学习内容

本次学习内容:

Android开发简单的HelloWorld

对开发的HelloWorld进行反编译

0x01 Android helloworld

开发了一些简单的App所以对于这个Android项目建立就不赘述,想学的可以去单独看看Android开发。

第一步

新建一个project,更改名称

o_1c4gnuof4dth1kk1omk62k1f62a.png-j.jpg

第二步

选择API

o_1c4goc375oks192fj4n9pmvhna.png-j.jpg

第三步

默认选择,然后下一步。

o_1c4go994v13ka1civvpu1ef4108oa.png-j.jpg

第四步

选择activity的名称,也就是我们主Activity的名称,什么是主Activity,就是类似于c语言的main函数,当然只是类似。

o_1c4goi4vo1hhduou1m6714vv1a1a.png-j.jpg

第五步

因为Android studio新建的程序有基本xml,还有helloworld,所以这里不讲解。也不用谷歌自带的模拟器了,直接生成apk。

Build —— Build APK

然后等待,就会Build APK。

o_1c4gpjsum18gs17591tth1khlhu3a.png-j.jpg

第六步

在first_demo\app\build\outputs\apk下就可以看到我们生成的APK。

o_1c4gpvgpdelf1vcfh3q1ue2mcua.png-j.jpg

这个APK就可以在手机或者其他的虚拟机上进行测试了。

第七步

我这里使用的是夜神模拟器,自己百度下载就好。这里不提供下载链接。

o_1c4gqacca3esrg97el11ae1gvaa.png-j.jpg

把自己的APK拖进去就可以了。

o_1c4gqehkjuhg1c0r4g7vlu1ohba.png-j.jpg

0x02 Android APK分析

1.神器android Analyzer

这个是Android studio自带的神器,以前没有用过,这次写的时候才发现,用的方法很简单。

Build ——Analyze APK就可以了。

o_1c4gr7mb8c3c3frddb11sjdnaa.png-j.jpg

这个东西以后如果用的到的话就进行详细了解。

2.APK实质

APK的实质就是一个特殊的zip文件包。

把APK拖到Submit中进行一个查看,当然也可以用其他工具。

这次我们只是做一个查看,不进行分析。

这是我重新写的,之前写的那份不知道为什么没有保存,这两天回家,网卡到爆炸。好气emmmm。

o_1c4hh4fmmgdueq4q2j15t24r7f.png-j.jpg

3.APK内容分析。

把APK后缀改成.zip然后解压,就会得到一些文件。

这里就是所有的文件了。我们来依次做一个简单的认识。

o_1c4hhh0q4thd58v4ad7ej8apa.png-j.jpg

3.1签名文件

o_1c4hhkhel1k2pdtc5jpf1s1p57a.png-j.jpg

这里就是签名文件了。这次只是简单的认识。

3.2资源文件

o_1c4jjbuhf14541e2bf9n1mnn15tha.png-j.jpg

这里面放的是一些图片资源文件,比如说是一些图标。

3.3资源索引文件

o_1c4jk644d5t9s81el0mh387sa.png-j.jpg

简单的说就是R.等资源存放的地方,这个可能开发的人更能理解吧。

3.4classes.dex

o_1c4jk3a5t1ld11k0lfdadss1brha.png-j.jpg

dex文件就是java代码编译之后的内容,也是我们手机可以直接运行的文件。

3.5AndroidManifest.xml

o_1c4jjtu1j252kptf3e8hr1067a.png-j.jpg

这个文件里是是一些权限的描述,还有主文件的问题。

3.6结束语

这些文件以后都会进行详细的分析。

0x03 反编译

1.apktool

使用java -jar apktool.jar d demo.apk指令进行反编译,但是可能会出现一个问题,就是apktool可能因为版本过低的,编译的时候会出问题。

我们在cmd中输入命令。

o_1c4jmp3pj15m22lvin01lidm0a.png-j.jpg

然后就反编译成功了。

1.1反编译文件

o_1c4jmvgdn11a01bq51q3m1ah4121aa.png-j.jpg

1.2original文件夹

o_1c4jn3qpe1jdb8qt1nf81fue1ctga.png-j.jpg

这个文件夹里里面就是签名文件和AndroidManifest.xml

1.3.res文件夹

反编译后还是资源文件。

1.4.smali文件

这个就是我们的主要文件,dex文件被编译出来的就是samli文件,这个也是我们要主要研究的东西。

o_1c4jnec431dma1o9leb8jltaopa.png-j.jpg

1.4.1 android文件

o_1c4jnidjsdd8jkd11p3nd1123ka.png-j.jpg

这个文件就是资源文件。并不是我们主要看的文件。

1.4.2然后再来看一下com文件夹。

o_1c4jnlnars4jfadneac5luh0a.png-j.jpg

1.5MainActivity.smali

首先来看看代码

.class public Lcom/example/hanlei/first_demo/MainActivity;

.super Landroid/support/v7/app/AppCompatActivity;

.source "MainActivity.java"

# direct methods

.method public constructor ()V

.locals 0

.prologue

.line 6

invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;->()V

return-void

.end method

# virtual methods

.method protected onCreate(Landroid/os/Bundle;)V

.locals 1

.param p1, "savedInstanceState"    # Landroid/os/Bundle;

.prologue

.line 10

invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

.line 11

const v0, 0x7f04001b

invoke-virtual {p0, v0}, Lcom/example/hanlei/first_demo/MainActivity;->setContentView(I)V

.line 12

return-void

.end method

1.5.1 第一个模块

有没有觉得这个模块很熟悉,就是之前我们学习的开头文件。描述了一个路径,以及名称。

o_1c4joegvs1v7e1l7emq71pt62q8a.png-j.jpg

1.5.2第二个模块

o_1c4joh7nf1cuj1d4b1ic0nuv1bnma.png-j.jpg

这个模块就是,之前的通用模块,只是多了一句继承语句。support。

1.5.3第三个模块

o_1c4joqsaj95ja581ueuu6h1aga.png-j.jpg

第三个模块就是onCreate模块,学习过Android编程的肯定知道这个就是启动模块,相当于main函数。

我们来看看具体都有哪些内容吧。

.param p1, "savedInstanceState"    # Landroid/os/Bundle;

这一句话之前没有见到过,意思就是说传入的参数名为savedInstanceState。

invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

这句话很简单,就是调用Landroid/support/v7/app/AppCompatActivity这一串的onCreate方法。然后返回值就是空。

const v0, 0x7f04001b

定义一个v0寄存器,赋值为0x7f04001b

invoke-virtual {p0, v0}, Lcom/example/hanlei/first_demo/MainActivity;->setContentView(I)V

然后调用setContentView方法把v0的值传进去。

1.5.3结束语

有没有感觉到之前在反编译java得到的smali对现在很有帮助呢。

2.APKIDE

使用方法很简单拖进去,简单粗暴易懂。

o_1c4jr10bdac71umq1apb8i6a2ga.png-j.jpg

这个是编译之后的内容,和我们用apktool编译出来的一样但是这个提供了很多插件功能,这个之后再进行细说。

3.AndroidKiller

这个是我自己喜欢用的,之前喜欢用APKIDE之后喜欢用AndroidKiller了。

方法也是很简单。直接拖进去就好了。

o_1c4jrg4tb75u1b28jco1db51f3a.png-j.jpg

具体怎么使用之后详细说明。

4.JD-GUI

如果说smali代码看不懂的话,那么java代码是不是相对要容易一点呢了。

JD-GUI这个工具的作用就是用来查看JAR文件的。我们把dex文件转成jar,然后就可以使用JD-GUI来查看了。

o_1c4js0r6ta0pva6nrb2ss1p48a.png-j.jpg

这个是查看apktool.jar文件做的演示。

0x04 回编译

APKTOOL

使用命令:

java -jar apktool.jar b demo

生成的APK会存放在这个文件里,见图。

o_1c4jt6bgddme1rflne1e5gt7ba.png-j.jpg

至于回编译的具体流程之后会慢慢讲到。

这里只说APKTOOl的,其他的之后慢慢来,超级简单,自己研究吧。

0x05 结束语

我在想要不要再加点c语言,python什么的,是不是有点乱了。我觉得要复习的还有很多东西哦。

所学所得

最后加上一个简单的总结吧。

1.APK内容文件的分析(网络问题,我写了四遍)

2.apktool的使用(我第一次用你敢信?)

3.工具(我本来就会用基本的,也不算是所得吧)

4.思路

5.其它

最后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值