• 第一个Android crackme(2016-05)


    第一个Android crackme

     

    0x00 背景

    最近在学习Android的逆向,把基本的环境搭好后,看了看《第一行代码--Android》,然后就按照非虫大牛的《Android软件安全与逆向分析》开始了第一个apkcrack

    这篇文章权当是记录,没有什么技术含量。

    0x01初探

    首先来看看要crackapk长啥样儿,启动一个安卓虚拟机,然后使用adbapk安装到虚拟机中,命令如下:

    可以看到虚拟机中已经安装了该apk

    启动这个apk,输入任意的用户名和注册码,点击注册按钮,可以看到有一个Toast消息:

    Toast的文本内容为"无效用户名或注册码",记录下这个反馈信息。

    0x02反编译

    利用apktoolapk反编译,生成Smali格式的反汇编代码,这一步可以使用很多带有GUI的工具比如apk改之理、AndroidKiller等,目前鉴于初学,为了更好的搞清楚整个过程,所以还是使用apktool的命令行来操作。

    在反编译输出的文件夹outdir中找到strings.xml,使用任意文本编辑器打开:

    这里可以看到刚才Toast的文本内容,对应的名字为"unsuccessed"String.xml文件中的所有字符串资源都在然后在"gen</packagename>/R.java"文件的String类中被标识,每个字符串都有唯一的int类型索引值,使用apktool反编译apk文件后,所有的索引值都保存在string.,xml文件同目录下的public.xml文件中。查看public.xml文件:

    unsuccessed对应的id 0x7f05000b,搜索反编译出来的所有文件内容,发现只有MainActivity$1.smali文件对0x7f05000b有一处引用:

    即使对smali语法不熟悉,看到调用的函数也能猜测出,这是在调用Toast函数对unsuccessed的文本内容进行显示。在引用0x7f05000b之前一点,可以看到有一个判断跳转的指令:"if-nez v0,cond_0",如果不跳转则Toast unsuccessed,否则跳转到cond_0处执行,查看cond_0处的代码:

    代码的结构和引用0x7f05000b处的类似,利用相同的方法可以找到0x7f05000c对应的是字符串"恭喜您!注册成功"。所以如果能让这个跳转成功的话,也就意味着注册成功了。所以代码"if-nez v0,:cond_0"是程序破解的关键,将"if-nez"改为相反的指令"if-eqz"保存退出。

     

    0x03重新编译

    接下来使用apktool将修改后的文件重新进行编译打包成apk文件,命令如下:

     

    生成的apk文件是在dist文件夹下,和原apk同名。

    编译生成的crackme02.apk没有签名还不能进行安装,使用signapk.jar对这个apk进行签名。

     

    接下来测试一下修改后的apk是否起效了,先在虚拟机里面卸载刚刚安装的crackme应用:

    然后使用adb install将修改后的apk安装到虚拟机中:

    可以看到,输入任意的用户名和注册码,Toast消息显示注册成功了。

    by:会飞的猫
    转载请注明:http://www.cnblogs.com/flycat-2016

  • 相关阅读:
    <海量数据库解决方案>2011041201
    <海量数据库解决方案>2011040801
    <汇编语言(第2版)>2011041701
    makefile实践三为多目录源文件建立makefile
    <海量数据库解决方案>2011042501
    <海量数据库解决方案>2011041101
    <海量数据库解决方案>2011042901
    <海量数据库解决方案>2011042601
    <海量数据库解决方案>2011050301
    <iPhone开发秘籍>温度转换器实践
  • 原文地址:https://www.cnblogs.com/flycat-2016/p/5521979.html
Copyright © 2020-2023  润新知