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)
相关文章
相关标签/搜索