【安全与逆向】- 基础篇

作者: 拔萝卜占坑 | 来源:发表于2020-01-18 13:48 被阅读0次

    前言

    这是“逆向工程”系列文章的开篇,后面会逐渐往深的方面讲解,很多东西当时会了,过一段时间就忘了,又去网上找,很麻烦,而且当时遇到的问题,不一定能找到,所以打算把它写下来。

    简介

    逆向工程做得好,就是Android里得黑科技,反编译别人发布的应用,找到里面的蛛丝马迹,然后修改成自己想要的样子,简直叼咋天。不过随着开发者不断对应用安全性的提高,现在想要做逆向工程也越来月难了。

    学习逆向工程除了可以破解别人的应用,也可以提高自己在安全方面的意识。比如,现在很多开发者都会把敏感的信息或者逻辑做在so层,因为反编译so难度更高,技术难度更大。虽然如此,我们还是可以反编译so,查看里面的代码,通过so动态调试了解so层的执行逻辑等等。如果我们学会了这些,那么便可以找到防止so代码被很直观的查看和阻止开发者的动态调试等等。

    说明

    这篇文章主要讲解“逆向工程”基本的东西,百度一下就很多,所以会简要讲解。

    工具

    百度网盘: 逆向工具

    • ApkTool助手
      集成了应用反编译,签名,字节对齐等功能。本质也是将命令行操作的步骤集成到可视化工具里,降低逆向难度。
      apkstudio
      Android-Crack-Tool

    • jd-gui
      查看jar包可视化工具,后面讲解有那些功能。百度自行下载.

    • java2smali
      将java文件编译成smali文件,要分析smali文件需要了解smali语法,smali更加接近底层操作的指令。有些bug如果java层看不出,就可以借助smali文件分析。

    • AXMLPrinter2
      静态分析工具,后面讲解用法。

    • Apktool
      Apk逆向,重新打包等工具包。官网

    逆向

    工具准备好了,就可以开始逆向了,我拿自己公司的App进行逆向学习。如果应用加固过,用这种方式是不行的,必须先脱壳。

    • 直接用Apktool反编译Apk
      apktool d testapp.apk
      或者
      apktool -f [待反编译的apk] -o [反编译之后存放文件夹] 
      apktool  d -f  test.apk -o test 
      
      通过该命令,可以将Apk中的java文件反编译成smali文件,如果不懂smali语法的人,是很难看懂的,所以我们需要把Apk反编译成java文件的形式。
    • 解压Apk
      Apk其实就是一个Zip压缩包,将.apk改成.zip,然后解压。mac下直接点击.zip文件进行解压会报操作不被允许,你需要在命令行执行解压命令:
      执行前检查是否安装了zip解压软件。
      unzip medlinker.zip
      或者执行
      unzip testapp.apk
      
      为了解决65k的限制,解压后会有多个.dex文件,这里我就那其中一个进行逆向。
    • 生成jar
      执行命令
      ./apktool/dex2jar-0.0.9.15/d2j-dex2jar.sh classes3.dex ./dex
      
      如果这个过程报错,很可能是下载的工具有问题,之前也遇到过这样的情况。如果执行成功,将生成一个jar文件
    • jd-gui
      查看jar文件


      屏幕快照 2020-01-18 上午11.34.48.png

      这样你就可以查看java文件的内容了,但是现在很多App都是混淆过的,也不好分析里面的逻辑。

    • 查看AndroidManifest.xml
      通过直接解压Apk得到的AndroidManifest.xml文件,是不能直观看到里面的内容的,这时候就需要用到AXMLPrinter2
      java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
      
      然后可以直接查看 AndroidManifest.txt
    • 解码jar
      ./apktool/apktool d classes3-dex2jar.jar
      
    • 控制文件的命名方式和存储方式
      apktool if framework-res.apk
      

    具体用法参考Apktool

    重新打包

    通过反编译dex方式是不能够重新打包的,所以需要用 apktool d testapp.apk来得到能够重新打包的反编译文件。然而通过这种方式得到的是smali文件,采用的是unicode编码,所以我们先在class文件找到需要修改的地方,得到相应的unicode,找到同名文件,然后搜索,当然,如果你能看懂逻辑,也可以直接修改。

    • 步骤1
      //apktool -f [待反编译的apk] -o [反编译之后存放文件夹]
      apktool d -f test.apk -o test
    • 步骤2:
      修改源文件
    • 步骤3:
      重新打包,dist文件内就是我们需要的apk。
      apktool b dist
      
    • 步骤4:
      重新签名
      jarsigner  -verbose -keystore coolapk.keystore -signedjar base-signed.apk base.apk coolapk
       或者
      ./apksigner sign --ks medlinker.keystore --ks-key-alias medlinker --ks-pass pass:medlinker --key-pass pass:medlinker --out signed.apk un.apk
      
    • 步骤5
      字节对齐
       zipalign -v 4 source.apk destination.apk
      
      检查是否对齐
       zipalign -c -v 4 application.apk
      
    • 其它命令参数
      参考Apktool

    相关文章

      网友评论

        本文标题:【安全与逆向】- 基础篇

        本文链接:https://www.haomeiwen.com/subject/fwkkzctx.html