上海大学生网络安全 Reverse What

2018-11-05  本文已影响0人  喝豆腐脑加糖

这题做的时候思路出现问题,看着wp抠了很长的时间才弄出来。

smc md5爆破 srand值的预测

程序的逻辑没什么问题。 图片.png 图片.png

来算下6位的字符串0的个数*10+0等于403的情况。


图片.png

前面不存在是因为10个0,sum不可能是303的,后面不存在0超过14位的。

from itertools import permutations
from hashlib import md5

table=string.ascii_lowercase

match=''

j=0
for res in permutations(table,6):
    j+=1
    if j % 100000==0: print float(j)*100/308915776
    proof=''.join(res)
    tmp=md5(proof).hexdigest()
    a1=0
    a2=0
    for i in range(len(tmp)):
        if tmp[i]=='0':
            a1+=1
            a2+=i
    if 10*a1+a2==403:
        match+=proof+'\n'
        print proof
print match

爆破找到符合的字符串:ozulmt
md5加密之后为:0ec448d42dbf0000c020c0000048010e

关键分析decode函数


图片.png

(其实里面是324字节,只解密运算305个)

使用ida找到check函数


图片.png

截取出来


图片.png

逐字节读出,进行解密


图片.png 图片.png

再将check 覆盖保存,重新载入查看check部分。


图片.png 图片.png
#include<stdio.h>
#include<stdlib.h>
int main(){
    srand(300);
    int i;
    printf("flag{");
    for (i=0;i<32;i++){
        int a=rand()%16;
        if (i==8) printf("-");
        if (i==12) printf("-");
        if (i==16) printf("-");
        if (i==20) printf("-");
        if (a<=9)
            printf("%c",48+a);
        else
            printf("%c",97+(a-10));
        
    }
    printf("}");
    
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读