flat

upload successful

是控制流平坦化的题目

ida

upload successful

可以分析出函数的5个主要函数

upload successful

fun_check1(char *a1) 主要作用是检查输入字符串长度

upload successful

fun_check1(char *a1) 主要作用是检查输入前五个字节是否为flag{

upload successful

fun_check3(char *a1) 主要作用是检查输入的最后一个字节是否为}

upload successful

fun_check4(char *a1) 主要作用是检查输入的几个特殊部位的值是否为—

upload successful

upload successful

upload successful

输入的字符串进行加密后与字符串进行比较

upload successful

这就是比较的那个字符串 J2261C63-3I2I-EGE4-IBCC-IE41A5I5F4HB

循环判断输入的每一位是否小于’0’或者大于’9’,如果满足条件,就判断是否等于’-‘,如果等于这个位置的字符就不变,如果大于’a’并且小于’z’,这个位置的字符串就减去48,其余的所有情况都进行将本位置的字符加上17

脚本

flag = "J2261C63-3I2I-EGE4-IBCC-IE41A5I5F4HB"
print len(flag)
strs = ""
for i in range(0,len(flag)):
    for j in range(0,255):
        temp = ""
        if j < ord("0") or j > ord("9"):
            if j == ord("-"):
                temp = chr(j)
            elif j >= ord('a') and j <= ord("z"):
                temp = chr(j-48)
        else:
            temp = chr(j+17)
        if temp == flag[i]:
            strs += chr(j)
            break
print strs


reverse      reverse flat ollvm

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!