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

     首先当然是安装上,界面如下:

    gda打开,定位到关键位置MainActivity下的checkPassword,如下:

    java代码还是比较清晰的,但是本着学习smail的原则我们还是来看smail代码吧,首先开头不用多说:

    .class:Lre/sdnisc2018/sdnisc_apk1/MainActivity;
    .method@3c5e public checkPassword(Ljava/lang/String;)V
    
    .prologue
    .insnsSize 45 (16-bit)
    .registers 5 [ v0  v1  v2  v3  v4  ]

    通过getflag()函数,结果保存在v0:

    invoke-direct {v3}, method@3c61 // Lre/sdnisc2018/sdnisc_apk1/MainActivity;->getFlag()Ljava/lang/String;
    move-result-object v0
    

     通过StringBuffer类的reverse()方法对上面的结果进行处理,即对结果进行反转取代:

    new-instance v1, class@0726 // Ljava/lang/StringBuffer;
    invoke-direct {v1, v0}, method@3b3a // Ljava/lang/StringBuffer;-><init>(Ljava/lang/String;)V
    invoke-virtual {v1}, method@3b3b // Ljava/lang/StringBuffer;->reverse()Ljava/lang/StringBuffer;
    move-result-object v0

     然后再对结果进行base64解码:

    new-instance v1, class@0725 // Ljava/lang/String;
    invoke-virtual {v0}, method@3b3c // Ljava/lang/StringBuffer;->toString()Ljava/lang/String;
    move-result-object v0
    const/4 v2, #int 0 // #0
    invoke-static {v0, v2}, method@3458 // Landroid/util/Base64;->decode(Ljava/lang/String;I)[B
    move-result-object v0

    然后和输入进行比较,结果放在v4:

     invoke-direct {v1, v0}, method@3b1b // Ljava/lang/String;-><init>([B)V
     invoke-virtual {v4, v1}, method@3b22 // Ljava/lang/String;->equals(Ljava/lang/Object;)Z
     move-result v4

      如果相等,congratulation,不等则跳转,显示try again:

    所以,我们要关注的是getflag()后的结果,定位到代码:

    getflag()比较简单,就是获取0x7f0b0020位置的字符串:

     得到字符串以后先反转,再base64解密,即可得到flag:

    over~

  • 相关阅读:
    java文件分片上传,断点续传
    java-webuploader+Java如何实现分片+断点续传
    JAVA支持HTTP断点续传
    用Java 实现断点续传 (HTTP)
    java实现视频断点上传文件
    关于java实现断点续传的上传下载功能问题
    java文件断点续传的简单实现
    java实现文件的断点续传
    java HTTP文件断点上传
    怎样用Google APIs和Google的应用系统进行集成(5)----怎样把Google Tasks的JSON Schema转换成XML的Schema(XSD)?
  • 原文地址:https://www.cnblogs.com/2rsh0u/p/10876243.html
Copyright © 2011-2022 走看看