吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 59868|回复: 115
收起左侧

[Android 原创] 从零开始Android逆向教程(一)——初探Android逆向

    [复制链接]
HiBlues 发表于 2018-11-15 09:14
本帖最后由 HiBlues 于 2018-12-29 12:01 编辑

   这段时间因为某些业务驱动,开始研究一些逆向相关的东西,浏览了下其所包含的大致内容,发现真是一个新大陆,跟之前耳听目染过的一些门面介绍完全不是一个层级的,真正的印证了下手难这一说法。
   谨此以本文开始记录我的Android逆向之旅吧。

总述
   习惯于应用层开发的我们都知道,在应用上架的时候都需要程序经过编译、签名 、生成一个后缀为apk的文件才能发布到应用市场,而我认识的逆向就从这个apk开始(逆向分为多种逆向,为了避免混淆概念这里的逆向暂且就特指apk的逆向)。

工具准备  
工欲善其身,必先利其器。这句话放到逆向对工具的描述上来说再适合不过。
逆向图.jpg

反编译代码的工具下载:
  • dex2jar: 把dex文件转成jar文件下载地址:https://sourceforge.net/projects/dex2jar/files/
  • jd-gui: 这个工具用于将jar文件转换成java代码下载地址:http://jd.benow.ca/
反编译资源的工具:
  • APKTool: 本文重要工具,APK逆向工具,使用简单下载地址: http://ibotpeaches.github.io/Apktool/install/这里简单介绍下大概流程,首先把后缀为.apk的文件改为.zip的一个压缩文件,方便解压。dex2jar和jd-gui配套使用,用于逆向代码部分,APKTool用于逆向res文件夹下的图片布局等部分。.apk 修改成.zip文件解压后的目录树长这样:
  • .apk解压后的目录树.png
  • 这里也贴上源码,很简单就一个输入框和一个按钮,输入框内输入“2018”点击按钮即可跳转到另外一个界面,否则提示一个Toast “验证码错误!”,而我们要做的就是突破这个“2018”,绕过验证。

maincode.jpg

反编译代码部分
需要用到的是dex2jar包里面的三个文件(当前是在windows环境下,Mac环境用对应的.sh文件):
  • d2j_invoke.bat
  • d2j-dex2jar.bat
  • lib将这三个文件复制到一个空的文件夹内,将刚才.apk解压后的classes.dex文件也一起复制到这里。如图:
  • dex2jar文件.jpg
  • Windows  cmd到这个文件夹下 输入:d2j-dex2jar.bat classes.dex
  • Mac   到这个文件夹下 输入:sh d2j-dex2jar.sh classes.dex如此之后在这个目录里会生成一个classes-dex2jar.jar文件。如图:
dex2jar得到Java代码.png

这个时候就轮到JD-GUI工具出手了,运行jd-gui.exe  File--OpenFile--classes-dex2jar.jar 打开刚才生成的jar文件。就能很清晰的看到我们想要的代码了,如图。
Java代码部分.jpg

对照上面发过的主要代码,已经差不离十了,对于想要代码思路的我们来说,到这里已经基本可以摸透他的逻辑了。

反编译res资源部分
apktool下载后会有两个文件,一个.jar(例如apktool_2.3.3.jar 需要把名字改成apktool.jar) 一个apktool.bat 。(这两个文件在这里下载,如图:)
apktool部分.jpg

同刚才一样在cmd命令下进入刚才文件夹(同样可以新建一个),连同我们刚才那个后缀为apk的安装包一起放入,输入如下命令:
apktool d app-release.apk   此处app-release为apk名称得到一个新的app-release(对应apk名称)文件夹。流程如图:
res资源部分1.jpg res资源部分2.jpg

这个app-release文件夹下会得到若干文件,主要内容介绍如下:
  • AndroidManifest.xml:描述文件
  • res:资源文件
  • smail:反编译出来的所有代码,语法与java不同,类似汇编,是Android虚拟机所使用的寄存器语言
到此我们想要的都有了。下一步就是实现我们想法的时候了。

修改原代码逻辑
在刚才的JD-GUI中可以看到跳转的逻辑判断如下: public void onClick(View paramAnonymousView)
      {
        if (MainActivity.this.code.getText().toString().trim().equals("2018"))
        {
          paramAnonymousView = new Intent(MainActivity.this, SuccessActivity.class);
          MainActivity.this.startActivity(paramAnonymousView);
          return;
        }
        Toast.makeText(MainActivity.this, "验证码错误!", 0).show();
      }我们只需要修改if后面的判断条件,设置为否即可if (!MainActivity.this.code.…),这样就成功绕过了条件约束。
Δ 接下来还有一部很重要那就是修改smali文件,找到MainActivity$1.smali这个文件用代码查看工具打开,如图:
smali部分.jpg

找到这个if-eqz 修改成if-nez (nez对应为非,符号“!”),到这里要修改的部分都成功了,最后一步要做的就是重新打包了。

重新打包
在apktool文件夹路径的cmd下输入:apktool b [文件夹] -o test2.apk   (test2为新apk名称,[文件夹]为对应的有修改需要打包的文件夹)
例如:我当前就可以这样写  apktool b [F:\tools\apktool\app-release] -o test2.apk
生成新的apk.png

至此,我们的目标apk文件已经生成,当然如果你想装到你自己手机上还需要重新签名一下。

重新签名
首先我们需要一个用于签名的.keystore文件,生成命令如下(这里我们假设生成的是demo.keystore)。keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
(cmd到apktool文件夹下跟待签名的apk放同个文件夹内便于操作)这里我们利用Java JDK提供的一个jarsigner进行签名,在刚才的cmd下继续操作,输入:jarsigner -verbose -keystore demo.keystore test2.apk demo.keystore
二次签名成功.png

以上。我们目的apk已经可以投入使用,如果需要更快更好的体验还需要进行一次字节对其的操作(后续分析)。

下一篇:从零开始Android逆向教程(二)——什么是Xposed

免费评分

参与人数 36威望 +1 吾爱币 +47 热心值 +31 收起 理由
1ch0 + 1 + 1 谢谢@Thanks!
c2404 + 1 + 1 谢谢@Thanks!
kelisi + 1 我很赞同!
电商传销 + 1 + 1 谢谢@Thanks!
tianbian2 + 1 + 1 我很赞同!
RRRRRRRRRRRRRRR + 1 热心回复!
wwwio + 1 + 1 谢谢@Thanks!
我书上有只猫 + 1 + 1 谢谢@Thanks!
po1718 + 2 + 1 谢谢@Thanks!
iteamo + 1 + 1 手打回复,追追追!加一下下一篇的链接吧,不太好找
这是一团毛球 + 1 + 1 用心讨论,共获提升!
siuhoapdou + 1 + 1 谢谢@Thanks!
海哥, + 1 谢谢@Thanks!
lylzy + 1 我很赞同!
海水很咸 + 1 + 1 我很赞同!
bulingbuling + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 谢谢@Thanks!
哦然后呢 + 1 + 1 我很赞同!
qaz003 + 2 + 1 通俗简单,一目了然,期待分享到混淆部份
我是天使 + 1 + 1 热心回复!
zhuzhuxia + 1 我很赞同!
wkxq + 3 + 1 谢谢@Thanks!
Woodmon + 1 + 1 我很赞同!
li6893 + 1 + 1 用心讨论,共获提升!
策马入林 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
小勇子 + 1 + 1 谢谢@Thanks!
云梦墨溪 + 1 + 1 热心回复!
qtfreet00 + 1 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
姚小宝 + 1 + 1 我很赞同!
oracle112 + 1 谢谢@Thanks!
俗子 + 1 + 1 用心讨论,共获提升!
winny1001 + 1 + 1 谢谢@Thanks!
byh3025 + 1 + 1 谢谢@Thanks!
gunxsword + 1 + 1 谢谢@Thanks!
gghh1101 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| HiBlues 发表于 2018-11-15 09:46
前几天发的帖子,可能是因为没太注意阅读版规,被清理了2次。
还有就是不知是我的问题还是吾爱对MD等的排版图片兼容支持度问题,本地图片一直未找到入口,要上传一篇多图的文章还是比较麻烦的,还要自己多次校队格式,总体来说对于写作者是不太友好的。
本来嫌麻烦自己平时的事情也多,想就这么算了,但是看到那么多的朋友需要,并且那么多人支持才有了我重新发布,并且继续深入研究成文的动力。
这是我第一次以记录者的身份进入吾爱,谢谢大家。
a520lxm 发表于 2018-11-15 09:29
貌似你想传图片但是没传起   一脸懵逼(′⊙ω⊙`)
俺是大绅士 发表于 2018-11-15 09:37
adamviki 发表于 2018-11-15 09:40
这个对于已经签名的apk 也能有作用? 没试验 不好意思
tzxxcjq0580 发表于 2018-11-15 09:42
感谢楼主分享啊
轩辕可鉴 发表于 2018-11-15 09:42
感谢楼主分享,对新手非常友好,
gunxsword 发表于 2018-11-15 09:44
感谢分享,期待更多的ANDROID文章
 楼主| HiBlues 发表于 2018-11-15 09:47
a520lxm 发表于 2018-11-15 09:29
貌似你想传图片但是没传起   一脸懵逼(′⊙ω⊙`)

在重新调校了下格式,现在看看。
 楼主| HiBlues 发表于 2018-11-15 09:49
adamviki 发表于 2018-11-15 09:40
这个对于已经签名的apk 也能有作用? 没试验 不好意思

打包后的apk安装到其他手机都是经过签名的,否则会装不上。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 06:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表