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~

  • 相关阅读:
    anaconda安装TensorFlow
    复习NLP-实战(三)
    复习NLP-实战(二)
    复习NLP-实战(一)
    python爬虫实战
    WebSocket实战(一)
    不上传图片直接本地预览
    oracle导出
    使用正则表达式验证学习成绩分数
    限制文本框,文本域输入的字符数量
  • 原文地址:https://www.cnblogs.com/2rsh0u/p/11003017.html
Copyright © 2011-2022 走看看