手把手教你搞懂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。

企望更多的奋斗者可以找到自己想要的并为之矢志不渝。