手把手教你搞懂Android反编译

图片 1

手把手教你搞懂Android反编译

转载时请务必注解出处:http://www.iosxxoo.com/2016/06/29/2016-06-29/

巴菲特曾经说过,每个投资者都应该如果自己手上有一张可以打20个洞的投资决策卡,每做两次投资就打一个洞,用完停止。

前言

反编译旁人的次序不是怎么样值得炫耀的事,希望大家最为只是兴趣探索,而不是利益驱动。本文紧要目的是绕开一个简约的激活程序。

这句话表达了 三件事:

怎么样是反编译

俺们精通,Android的顺序打包后会生成一个APK文件,这一个文件可以直接设置到任何Android手机上,由此,反编译就是对那些APK举行反编译。Android的反编译分成六个部分:

  1. 一个是对代码反编译,也就是java文件的反编译。
  2. 一个是对资源反编译,也就是res文件的反编译。

一.各种人一生中或多或少会拥有一遍机遇,让您之后不雷同

所需的工具

图片 2

反编译代码的工具:

反编译资源的工具:

二.这种机会是个其余,假设没有选取好,这辈子就如此了

热身准备

率先我们需要一个APK,这里我要好写了一个,源码下载地址:http://download.csdn.net/detail/u012891055/9671973,打包成APK后下载到手机上。

它的紧要效用是模拟邮箱激活,倘诺我们输入了错误的多少则无从透过激活。所以我们的目标很粗略,就是让那个论断逻辑失效。

图片 3

三.越到后来,犯错的机会成本越高

主要源码表达:

第51行储存的不易的五个激活号码,通过:将账号密码隔开,如下

private static final String[] DUMMY_CREDENTIALS = new String[]{
            "foo@163.com:20135115",
            "bar@163.com:20135115"
};

当今只有激活码正确才能通过激活。

第331行是Execute函数,逻辑判断的一对。

    @Override
    protected void onPostExecute(final Boolean success) {
        mAuthTask = null;
        showProgress(false);

        if (success) {
            new AlertDialog.Builder(LoginActivity.this)
                    .setTitle("恭喜您")
                    .setMessage("成功激活!")
                    .show();
//                finish();
        } else {
            mPasswordView.setError(getString(R.string.error_incorrect_password));
            mPasswordView.requestFocus();
        }
    }

一、每个人都有温馨的舒适区

反编译代码

dex2jar解压下来文件过多,在mac上我们需要用到dex2jar的是这多少个东西(windows上对选拔bat文件):

  • d2j_invoke.sh
  • d2j-dex2jar.sh
  • lib

图片 4

AndroidStudio打包好的APK文件的后缀,需改为.zip,然后解压。从解压的文书中找到classes.dex文件,并将其放入dex2jar相同目录下,如下:

图片 5

并在cmd中也进入到平等的目录,然后实施:

sh d2j-dex2jar.sh classes.dex

举办如下:

图片 6

接下来大家会得到一个classes-dex2jar.jar文件,我们借助JD-GUI工具打开即可,打开如下:

图片 7

可以看看代码相当清楚,这样我们就可以见见任何APP的代码逻辑了。

毕业后就在世界一百强的外企区域总部工作,在父母眼中,这是一份光荣且稳定性的行事。

反编译资源

apktool下载完成后有一个.sh文件和.jar文件,我们把APK放进来,如下:

图片 8

在cmd中进入apktool目录,执行命令:

sh apktool.sh apktool d FooApp.apk

d是decode的意思,表示大家要对FooApp解码,结果如下:

图片 9

然后您会惊喜的觉察多了一个FooApp文件夹。

图片 10

首要目录说明:

  • AndroidManifest.xml:描述文件
  • res:资源文件
  • smail:反编译出来的有所代码,语法与java不同,类似汇编,是Android虚拟机所选择的寄存器语言

故而在本人被选定到办事之后,他们都直接很知足,在情侣亲戚面前提起我的店铺时都不自觉的自我陶醉在中间。

修改App icon

开拓我们的讲述文件,高清无码:

图片 11

可以见到我们的App
icon名称为ic_launcher,我们找到所有mipmap起始的文本夹,替换成下图即可:

图片 12

ic_launche

图片 13

在最后再一次打包后我们的App
icon就会被改动了,然而在再度打包在此之前,咱们还有最关键的一件事绝非做,这就是修改激活码判断逻辑。

这般一份体制内的工作,在自己眼中是从未有过怎么特别看法的,刚发轫找工作的时候,我也只是带着“广撒网”的心情投了简历,内心里一直把它放在自己的offer“保底区”。

修改逻辑

咱俩因而源码或者JD-GUI查看反编译的代码可以阅览激活码判断逻辑如下:

    @Override
    protected void onPostExecute(final Boolean success) {
        mAuthTask = null;
        showProgress(false);

        if (success) { 
        // 激活码正确
            new AlertDialog.Builder(LoginActivity.this)
                    .setTitle("恭喜您")
                    .setMessage("成功激活!")
                    .show();
//                finish();
        } else {
            mPasswordView.setError(getString(R.string.error_incorrect_password));
            mPasswordView.requestFocus();
        }
    }

故此大家只需要找到反编译后的if(success)的话语,并将其修改成if(!success)即可,如下:

if (success)//修改成if(!success)
{
...
} else {
...
}

如此这般我们就成功的颠倒了原先的逻辑,我们输入一个荒谬的激活码,就会被判定成正确的。挺简单的,是吗。

当今我们来动手修改:

  1. 打开smail里的LoginActivity$UserLoginTask.smali文件.

  2. 全局搜索if-eqz,通过AlertDialog重要字襄助定位,发现在第228行

    图片 14

  3. ok,就是此处了,然后将if-eqz修改成if-nez,他们对应Java的语法如下:

Smail 语法 Java 语法
if-eqz v0, if(v0 == 0)
if-nez v0, if(v0 != 0)

ok,大功告成,现在就足以另行打包了。关于smail语法,有趣味的从来Google就行了。

兴许是家里在准四线城市的由来,在长辈眼中它的意义已然不同于其他的劳作了,他俩给这么的offer贴上“铁饭碗”、“端庄”、“不用奔波辛劳”、“社会地位高”的标签。

双重打包

大家大约修改后五个地点,其实重新包装也要命简单,在cmd中推行以下命令即可:

sh apktool.sh b FooAPP -o NewFooApp.apk

里面b是build的情趣,表示我们要将FooAPP文件夹打包成APK文件,-o用于指定新转变的APK文件名,这里新的文本叫作NewFooApp.apk。执行结果如下图所示:

图片 15

接下来您会发现同级目录下生成了新的apk文件:

图片 16

只是要注意,那些apk现在依旧不可能安装的,因为大家并未对它举办签约,重新签名后它就是个名副其实的盗版软件了,大家自然要旗帜显明声讨这种行为。

究竟是先行者,他们的见地一定程度上是一贯不错的,只要没有犯错误,这么些工作不会随便地失去,而且进集团今后会提供科学的福利待遇给自身。

再度签名

重复签名也是很简短的,我直接用的一个已有签名文件,使用Android
Studio或者Eclipse都足以极度简单地生成一个签名文件。

在cmd中推行格式如下:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

然后大家就足以用这一个apk举办安装了,为了追求更快的周转速度,我们得以对其举行三次字节对齐,那里就不说了。

父母辈在经验了社会的酸甜苦辣沧桑后,不停地给本人洗脑“你看这些xxx家里是做事情的,也是叫他孙子考个公务员,这年头生意不佳做,出去打工压力大要做得到底….”

采用盗版APK

我们用NewFooApp.apk设置好盗版app后,发现图标变成了篮球,并且随便输入数据都能因而激活了:

图片 17

1

怎么?总的来说仍旧挺有意思的吧,然而别用歪了。

参考链接:

Android安全攻防战,反编译与混淆技术完全解析(上)-
郭霖

Android安全技术解密与防范 –
周圣韬

就是这般,我答应父母先去上班看看,等到不合适了再出去做此外的,刚起首尽管工资比不上BAT等互联网公司,但还算是不错的,每个月支付之余也够自己去喝点小酒和出去玩。

Done

作者:
@biggergao
村办博客: Mr.码了大漠

2016年06月29日

商店宿舍是租在一个镇上,同事们几近都住在此地,平时共同坐大巴上下班,业余大部分岁月也都是跟同事一起吃吃喝喝,时不时还会社团篮球和足球竞赛,小日子过得相比滋润。

二、在你舒舒服服的时候,外人却在取得将来

在商店里待了一段时间后,也开头插手重点的“业务”了,早已在面试时就听说大家机关重大的“业务”是饮酒

自己认为是开玩笑的,没悟出来得竟如此热烈,我的舍友跟自身开玩笑说“大家单位有一个定位的话题,就是这次喝酒聊上五遍喝酒,下次喝酒聊这两遍喝酒。”

自家开端体验到这项“业务能力”的最紧要之处并一一创下了多少个“第一次”的记录:“人生第一次喝葡萄酒”、“人生第一次断片”、“人生第一次探望果酒一斤的爱人”….

接下去的时光,我不时跟着同事加入各类酒局,久而久之也从推杯换盏之中喝出点“味道”来。不得不感叹中国博大精深的酒文化,在公司里到底了解到了点皮毛。

突发性跟好多少个也是联合毕业的朋友交换,寒暄几句后谈及工作,发现朋友们都必然程度的在为团结的事业大力拼搏,加班加点都是不乏先例。

偶然问到收入和有利,总有让人羡慕的声响传到,我则窘迫的笑一笑,像极了钱钟书先生的语录“围墙外的人想进去,围墙里的人想出去。

您看本身不用折腾挺舒服的,我却苦于一腔热血努力无门。

或多或少次宿醉之后,我都在很努力的思辨五个问题:

本身在这多少个公司前景怎么样

本人到底想要的是哪些的生存

到底要怎么样过上自己想要的生活

商店就算在积极谋求转型,但是行业却是在强弩之末,特别是本人所在的单位

市场化程度不高,在目前互联网+盛行的急性年代,着实让自身迫不及待在此地待下去会不会被社会所淘汰了。

三、拒绝无谓的艰巨奋斗,选取比努力首要

这会儿本身高一提升二时因为成绩糟糕被分到了文科班的三号种子里,

这时候心理细腻的自己专门跑去问上几届的师兄,发现上几届一致的班级里,三号种子最多能考多少个2B的该校。

在自家辗转反侧多少个中午后,果断跟自家爸说要留级,这时只听说有人高三复读,没听说有人高一能动要求留级的,大家年级的集团主也是窘迫。

唯独试想当年未曾积极要求留级,即便自己再怎么努力去学习也不能突破“三号班级”的公共瓶颈吧。

别人提供的意见永远只好作参照,就像当年年级的决策者是不匡助自己留级的,可能由于很多原因,诸如于她们友善或许是“业绩要求”,于自身而言也许是“真认为没有必要”。

但是唯有和谐才领会自己的目的是何许,假如有拨云见日的笔触和对象,不妨大胆的去谋划和促成。

四、我深信唯有沉浸其中,才可为其中之人服务

同等的道理来看回自己明天的劳作,我其实特别喜爱跟营销和谋划有关系的东西,平日会研讨各样跟商业有关的事物和表现。

每个人都有和好的追求,在自己尚未追求的年龄里,我特别喜爱靠自己努力和才智赚到钱的感觉,这一点让我想起高校时代自己做过的部分事情,比如当年本人在大学新生开学往日筹划的“卖锁头”。

当下我瞄准新生入学这么些时机想赚笔外快,做小商品用品需要比较多的老本还要要有场道售卖,思来想去决定只售卖每个宿舍床位都亟待的锁头,抓住学生家长和学员的“危机心绪”,而且以此专业的切入点只有我这一家,协会的销售团队在那两天取得不错的实绩,为此我和本身的协同人五个花了800块去吃了日料。

虽说只是很小的作业,但我确信自己是爱好做营销和谋划工作的,我很感恩我在这个企业学习到的人事物,有本次工作机遇让自家读书到铺子的管理形式和见闻了职场人众生相。

关键的是启示了自己想做的一个大方向,这就是关心职场人的健康,工作之后看到成千上万同事因为工作原因此引发的常规问题,那里不光是人身上的,也有诸多职场人现实面对的心思、心理、人生规划问题,故而直接在构思是否为大家这么些上班族或者说都市的奋斗者解决那上头的题目。

由于自己的经历和情感我把这几个群众号和想做的品牌命名为【创橘】,寓意change。

瞩望更多的奋斗者可以找到自己想要的并为之不竭。