ais3_crackme 踩坑解析

    終於走上正軌,也只能回來作題了,繼續個人Whal CTF之旅。python

    這個題目很簡單,只是有幾個坑點而已。指針

  •  [rbp+var_10]放置argv指針,[rbp+var_18]+8=argv[1],即獲取到傳入程序的參數指針 

 

 

  •   這幾個指令操做數,全涉及到寄存器的最低八位,因此計算的結果須要進行處理,即python代碼中將計算結果進行 result & 255操做,同時也要注意sar是算術右移,shl是邏輯左移,此處並無針對邏輯位移和算術位移操做符的坑,因此能夠忽略他們的差異。
  •     最終Python解碼,我仍是愚笨的採用了窮舉,若有他法,敬請賜教。
    def verify(src_byte, index, dst_byte):
        mov_l_bits = ((index ^ 9) & 3) & 255
        mov_r_bits = (8 - ((index ^ 9) & 3)) & 255
        tmp_byte = (src_byte ^ index) & 255
        
        result1 = tmp_byte << mov_l_bits
        result2 = tmp_byte >> mov_r_bits
        result3 = ((result1 | result2) & 255) + 8
        result3 = result3 & 255
        
        if dst_byte == result3:
            return 1
        else:
            return 0
    
    def decode(dst_str):
        for i in range(len(dst_str)):
            for j in range(0, 255, 1):
                if 1 == verify(j, i, ord(dst_str[i])):
                    print(chr(j), end='')
                    break
        print('\n')
    
    encrypted_str = '\xca\x70\x93\xc8\x06\x54\xd2\xd5\xda\x6a\xd1\x59\xde\x45\xf9\xb5\xa6\x87\x19\xa5\x56\x6e\x63'
    decode(encrypted_str)
相關文章
相關標籤/搜索