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)

 

 

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM