美文网首页
初探android逆向

初探android逆向

作者: 杨阿杨阿阳 | 来源:发表于2018-12-17 17:45 被阅读0次

    好久没有更新博客了。一直在想要更新点什么样子的干货。

    最近看了一点有关于逆向的文章,感觉还不错。

    对于“安卓开发没人要了”这种话,我也很无奈,最近的RN,包括kotlin的出现,还有Flutter框架的出现。 这些东西的出现感觉都像是意味着,往后的移动端开发不需要双倍的人员了。

    最近突然对逆向萌生了一点点兴趣,关于逆向的东西依旧有很多,很多apk对进行加固,加壳等等,这里的入门仅仅是对于没有加密等操作的apk进行逆向,对初学者可以更快的知道流程,更快的入门。

    image.png

    第一步:准备工具

    1、下载android开发工具 android studio,百度即可。 建议去中文网或者官网下载

    2、dex2jar: 把dex文件转成jar文件 下载地址:https://sourceforge.net/projects/dex2jar/files/

    3、JD-GUI: 这个工具用于将jar文件转换成java代码 下载地址:http://jd.benow.ca/

    4、APKTool: 本文重要工具,APK逆向工具,用于修改apk中的源代码 下载地址: http://ibotpeaches.github.io/Apktool/install/

    第二步:准备apk

    1、这里我们自己写一个测试的app,用于验证我们是否能看到其原来的代码。

    上一下最简单的代码吧


    image.png

    然后是java代码

    public class MainActivity extends AppCompatActivity {
    
        TextView textView;
        Button button;
        int var0 = 1;
    
        @Override
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = findViewById(R.id.main_tv);
            button = findViewById(R.id.main_btn);
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
     public void onClick(View v) {
                    if (var0 == 1) {
                        textView.setText("我是被修改过的文字");
                    } else {
                        textView.setText("这个时候var0不等于1");
                    }
                }
            });
        }
    }
    

    看一下效果

    点击前:


    image.png

    点击后:


    image.png

    然后,我们假设,这个app已经打包成了apk。(接下来,我们打包成apk)

    第三步:反编译apk

    我们知道,其实说白了,一个apk就是一个压缩包,只是他将很多东西进行了加密,转成了另一种格式。dex文件,交给底层去识别。

    我们这一部分的工作就是要解密,然后要看到代码逻辑。

    1、首先,我们将打包好的.apk文件改成.zip

    2、然后进行解压

    3、将我们解压后的文件里的 classes.dex文件放到 dex2jar中

    image.png

    4、然后执行命令

    sh d2j-dex2jar.sh classes.dex

    (这里有可能会出现权限问题)

    d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied

    解决方案如下:

    sudo chmod +x d2j_invoke.sh
    密码要求是开机密码即可(mac)
    5、在同一个目录下生成了一个jar文件


    image.png

    然后用JD-GUI将它打开。

    6、查看源代码,了解逻辑


    image.png

    我们看到,源代码几乎是一丝不挂的展现到了我们眼前。

    第四步:用apktoos修改源代码

    1、我们将apk放到下载好的apktool的文件目录中,如图


    image.png

    我们下载好之后会有两个文件,apktool.sh 和 apktool.jar,然后加上我们的apk现在一共有三个

    2、执行命令

    sh apktool.sh apktool d APK名字.apk
    3、然后我们发现多了一个文件夹:


    image.png

    我们点进去,找到smali目录

    4、然后根据应用的包名找到相关目录


    ![image.png](https://img.haomeiwen.com/i5981775/2e4fba94ae587f09.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    5、找到相关的Activity的java文件,我们的app只有一个页面,我们知道是MainActivity,所以我们要打开 MainActivity$1.smali

    6、并且根据我们的if判断语句全局搜索

    我们找到了这一行


    image.png

    这里稍微普及一下有关samli的语句:

    条件关键字 意思
    if-eq 如果等于
    if-ne 如果不等于
    if-lt 如果小于
    if-le 如果小于等于
    if-gt 如果大于
    if-ge 如果大于等于
    if-eqz 如果等于零
    if-nez 如果不等于0
    if-ltz 如果小于零
    if-lez 如果小于等于零
    if-gtz 如果大于零
    if-gez 如果大于等于零

    这里原本是ne,我修改成了eq。这句话的大概意思就是 如果这个变量不等于我的变量p1,就返回一个东西。

    我们根据java语句的字面意思,将其修改为等于。

    7、修改完成后记得要保存哦

    8、重新打包,命令:

    sh apktool.sh b 刚才生成文件夹的名字 -o 新的apk的名字.apk
    我们生成如下:


    image.png

    9、我们有了新的apk,但是去安装发现会出错。原因是我们需要重新签名。

    对于签名文件,我们用AS生成一个即可。然后放到同一目录,执行以下命令:

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

    10、最后得到apk,然后我们去运行

    第五步:运行盗版apk

    我们换用一个模拟器,来对比其前后的执行流程。

    点击前:


    image.png

    点击后:


    image.png

    那么基本上就大功告成了。这个过程还是很繁琐的。

    注:
    1、这个仅仅是一个入门的简单教程,可能百度上已经烂大街了,但是入门确实很好。
    2、很多市面上的apk都会进行加固|加壳。这一部分水很深,需要很多实战经验才能得出,这里我也在学习。
    3、切勿用于非法用途。

    相关文章

      网友评论

          本文标题:初探android逆向

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