zoukankan      html  css  js  c++  java
  • 安卓逆向从入门到入土之另一道CTF题目

    小伙伴发了一道安卓的CTF题目,有空就看了下:

     首先,这次就先不装了,开个模拟器卡的一P,androidkiller、gda等无法打开,jeb正常打开(当然dex2jar打开dex文件,再用jd-gui打开jar文件也是可以滴~),定位到mainactivity如下:

    来到onCrate下的onclick,当函数checkSN()不成立,界面会显示0x7F06001E位置的字符,我们可以先不用管具体的值是多少,因为app装上以后点击按钮会有消息,不过我们可以大概知道是失败的意思:

    反之则成功:

    checkSN()函数在onCrate中被调用,所以接下来需要研究一下checkSN()函数:

     可以清楚的看见,其实flag{}中的值就是v5,那么我们就分析一下v5的值如何得来,首先checkSN()函数有两个参数,第一个参数arg11满足不为空且长度不等于0,第二个参数arg12满足不为空且长度等于22(后面可以看到其实就是用户的输入),v1的值为第一个参数MD5后的值,v3其实就是v1通过函数toHexString()后的值(16位):

    v4是一个循环变量,值为0,2,4...这样一直循环到小于v3的长度为止,v5的值,也就是flag{}中的内容就比较清晰了,就是取出v3的值的第0,2,4...位字符。

    思路明确,就是需要v3的值,v3又v1通过函数toHexString()处理后的值,所以定位到toHexString()函数,自定义的toHexString()函数其实就是使用系统的Integer.toHexString进行&0xFF,Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展。

     跟踪一波参数,v1的是将checkSN()的第一个参数,也就是this.edit_userName.trim(),即值为"Tenshine"。

    将字符串"Tenshine"进行MD5加密,取偶数位:

    所以flag为:flag{bc72f242a6af3857}

    over~

  • 相关阅读:
    spring boot 配置rabbitmq启动遇到的问题
    linux 启动rabbitmq 报错:
    spring boot 读取自定义properties文件
    jvm笔记-02-垃圾收集器与内存分配策略
    Jvm笔记-01-Java运行时数据区域与对象
    C++ 14 重载操作符与转换
    C++ 13 复制控制
    C++ 12 类
    C++ 11 泛型算法、迭代器
    android studio 问题及处理记录
  • 原文地址:https://www.cnblogs.com/2rsh0u/p/11003017.html
Copyright © 2011-2022 走看看