一次逆向分析之旅

前言

最近一直在学习Android逆向方面的知识,了解了APK的逆向流程,决定那小米的米家对讲APP开刀作为练手。这次仅仅是对米家对讲机APP进行反编译和回编译操作,不涉及到代码的注入。

开刀工具

1.常用逆向工具
   apktool:反编译的利器
   dex2jar:将dex转化成jar
   jd-gui:很好的查看jar文件的工具
   IDA:收费的最全破解利器(分析dex和so都可以)
  2.逆向破解流程
   (1).拿到一个APK,先使用apktool进行反编译,输入指令 
    apktool.bat b test.apk得到smali文件和其他的一些资源文件。
   (2).将apk文件后缀名(.apk)改写成.zip文件,然后解压得到 
    classes.dex文件。
   (3).将classes.dex文件拷贝到dex2jar路径下,运行指令(dex2jar
    classes.dex)得到jar文件。
   (4).使用jd-gui文件打开jar文件即可以看到java源代码。
   (5).如果要对源代码进行修改,则需要在smali文件基础上改动,修
    改的前提是需要懂smali语法。
   (6).回编译。对文件再次打包签名生产新的apk,使用指令
   (apktool.bat b test -o new_test.apk)进行回编译,其中test为反
    编译后得到的含有smali的文件。
   (7).签名。目前android签名有两个工具,分别为jarsign工具签名和
    signapk工具签名。这两种签名方式大致区别如下:
     a.jarsign是Java本生自带的一个工具,他可以对jar进行签名的。而
     signapk是后面专门为了Android应用程序apk进行签名
     的工具。
     b.jarsign工具签名时使用的是keystore文件,signapk工具签名时
     使用的是pk8,x509.pem文件。
  在这里我使用的是signapk进行签名的,签名是必须将pk8,x509.pem两个文件放在同一个目录下,使用指令(java -jar signapk.jar testkey.x509.pem testkey.pk8 debug.apk debug.sig.apk)进行签名。这两个文件会在文章的尾部给出的共享资源下载地址提供下载,至于第一种签名方式详细解看一下博客链接地址。
  关于签名的详细讲解可以查看尼古拉斯赵四大神的博客,博客地址为
http://www.wjdiankong.cn/android%E7%AD%BE%E5%90%8D%E6%9C%BA%E5%88%B6%E4%B9%8B-%E7%AD%BE%E5%90%8D%E8%BF%87%E7%A8%8B%E8%AF%A6%E8%A7%A3/
http://www.wjdiankong.cn/android%E7%AD%BE%E5%90%8D%E6%9C%BA%E5%88%B6%E4%B9%8B-%E7%AD%BE%E5%90%8D%E9%AA%8C%E8%AF%81%E8%BF%87%E7%A8%8B%E8%AF%A6%E8%A7%A3/

Smali文件分析

当我们使用apktool工具反编译后会得到smali文件,smali文件中包含了自己写的代码以及使用的第三方库,如下图,其中com开头一般是自己编写的代码对应的smali文件,下面的图中还包括了butterknife和okhttp3一些第三方框架。

文件结构.png

  现在开始了分析自己编写的代码以及使用的一些资源文件,分析之前先瞅一下smali的真面容,如下图


Paste_Image.png

初次看肯定有种懵逼的感觉,不过学习下smali基础语法就会觉得小菜一碟。在samli文件中可以看出当我们每编写的一个类都会对应一个smali文件,同时也包括资源文件,在资源文件下如drawable和layout中的xml文件也会生产唯一对应的smali文件,这种文件一般以R$文件包名命名,如layout文件为R$layout.smali,同时也包括所有的id也会生成R$id.smali文件。如下图

Paste_Image.png

在我们反编译的过后的资源文件中,有两个文件很重要,分别是public.xml和ids.xml,它保存了一个资源id的值及名称,如上图中的高亮部分的代码(const v0,0x7f10011)在smali文件中调用资源文件时时通过值去调用的,我们都知道在java文件中设置布局文件只需要通过R.layout+文件名去调用资源文件,而在smali文件通过十六机制值调用,而在public.xml中将文件名与值进行关联,而同时在ids.xml中声明。这两个文件当我们在进行hook代码时中涉及到添加资源文件时很关键,当我们添加了新的资源文件,都必须在这两个文件中进行声明,分配想要的十六进制值,然后在调用的地方进行调用,这两个文件一般都是values文件夹下。

牛刀初试

接下来我们就拿米家对讲机APP开刀。
  (1)首先将下载好的apk 和apktool放在同一个目录文件下,输入指令(apktool.bat d test.apk)的到smali文件。

Paste_Image.png

上图为反编译后的文件目录,从文件中可以看有两个smali文件目录,可以猜测到该app的方法数超过了65536的限制,在编译时编译出两个dex文件,在第二步得到dex文件来验证下我们的猜测。
  (2)将Apk文件后缀改为.zip文件。然后解压得出dex文件。

Paste_Image.png

  通过解压后可以看出果然存在两个dex文件,验证了我们第一步的猜想。
  (3)将dex文件和dex2jar放在同一个目录下得到,输入指令(dex2jar classes.dex)jar文件,然后使用jd-gui打开该文件。

Paste_Image.png

  (4)现在如果们想进行代码hook,那就可以在smali代码的基础上进行修改,不过一般不建议直接修改smali代码,一般都是写好Java代码然后转换成smali代码进行注入。java转smali咋Android studuio中有插件(jJava2Smali),装插件后就可以轻松实现啦。我么这里不进行代码的注入,仅仅对该文件进行回编译得到新的apk。选择文件输入指令(apktool.bat b test -0 my_unsigned_test.apk)生产apk。在回编译时我们遇到一个错误 :
No resource found that matches the given name '@android style/Animation.LockScreen和No resource found that matches the given name '@android style/Animation.OptionsPanel
导致回编译不能成功,刚开始以为该APK做了防止二次打包进行的校验,后来查阅资料知道是由于该APK引用第三库导致的。正确的解决方法在将
Animation.LockScreen和Animation.OptionsPanel声明的地方删掉,回编译通过。这个调用的一般格式如下

<style name="Base.TextAppearance.AppCompat.Widget.Button.Borderless.Colored" parent="@android:style/Animation.OptionsPanel" />
    <style name="Base.TextAppearance.AppCompat.Widget.Button.Colored" parent="@android:style/Animation.LockScreen" />

(5)将未签名的Apk进行签名。
经过以上的简单五步就实现了对米家对讲机APP的简单逆向分析。
最后放大招,现在网上有很多奖反编译继承在一起的逆向工具,将所有文件继承与右键,分析很方便,如下图

Paste_Image.png

逆向分析工具下载地址:链接: http://pan.baidu.com/s/1kUErd8F 密码: xr6a

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

推荐阅读更多精彩内容