zoukankan      html  css  js  c++  java
  • apk逆向实例 TopCtf

    TopCtf

    题目链接: https://pan.baidu.com/s/1jINx7Fo   (在里面找相应的名字就行)

    背景故事:

    我是小白一枚,自学一些基础知识。。。

    从朋友那得到的题,朋友说巨简单,然后各种不会。。。

    不容易呀,千辛万苦终于做出来一道了。。。眼泪已经控制不住了。。。

    解题思路:

    用killer打开,反编译,很顺利反编译成功了,找到入口类,点击进入

     

    查看java源码,找到了关键代码段,flag就是在此生成的

     

    这段代码将paramString1的值MD5加密,每隔2个字符取一个字符,最后拼起来就是flag。

    代码明白了以后,我们会发现还有两个未知的东西。

    1、 toHexString()函数的作用。

    2、 变量paramString的值。

    接下来,继续往后看。

    找到了toHexString()代码块,小白的我死活想不明白这句(String str = Integer.toHexString(paramArrayOfByte[i] & 0xFF);)是什么意思。。

     

    直到看到了这篇文章 http://blog.csdn.net/huihui870311/article/details/49477739

    了解到这是一段将字符串转换成16进制的代码,紧接着在下面又找到了edit_userName的值。可以知道edit_userName的值将会传给paramString

     

    所有疑问迎刃而解,接下来开始写解密程序。

    import hashlib
    
    par1 = b"Tenshine"
    
    def checkSN(par1):
        if par1:
            # if par2 and len(par2) == 22:  
            m2 = hashlib.md5()   
            m2.update(par1)   
            par1_md5 = m2.hexdigest()
            print(par1_md5)
            par1 = toHexString(par1_md5)
            print(par1)
            what = ""
            i = 0
            while i < len(par1_md5):
                what += par1_md5[i]
                i += 2
            print("flag{"+ what +"}")
    
    
    def toHexString(s):
        lst = ""
        for ch in s:
            hv = hex(ord(ch)).replace('0x', '')
            if len(hv) == 1:
                hv = '0'+hv
            lst += hv
        return lst
    
    checkSN(par1)

    运行结果:

  • 相关阅读:
    移动Web开发调研
    如何将一个Excel文件中的sheet移动到另外一个Excel?
    Web自动化测试工具调研
    DOM中文本节点索引方法
    词法、语法与语义相关知识
    http 登录Digest认证相关知识
    javascript sandbox
    MVVM与Backbone demo
    Sass与Web组件化相关的功能
    Lua参数绑定函数实现方法
  • 原文地址:https://www.cnblogs.com/zhaijiahui/p/7020595.html
Copyright © 2011-2022 走看看