ezprocess
将提供的压缩包解压出来,得到两个exe文件
进程执行.exe 和 another.exe
常规拖入ida中看看情况
这是进程执行那个文件的反编译情况,有几个看点,qmemcpy函数 和Createprocessw函数,一个明显跟key有关,你一个创建了一个新的进程,
qmemcpy将那一长串字符串存入source中,然后通过一个for循环操作,python中得到的脚本
1 |
|
得到\..\Debug\another.exe DASCTF{Y0u’v3_be3n_tr1ck3d!},剩下的代码不用看了,调用了another.exe 并且传入了DASCTF{Y0u’v3_be3n_tr1ck3d!}(不是flag)作为参数,接下来看看another
得到反编译结果后,很快发现有right和wrong,说明判断函数就在这里,仔细看看会发现有个crflag[ii]==enflag[ii]的if语句,再从前面发现了crflag[m]=flag[xb[m]],和key[j]=argv[1][j],
有几个关键字符串key,enflag->crflag,xb[]->flag
key前面已经得到了key=”DASCTF{Y0u’v3_be3n_tr1ck3d!}”
enflag=”77h, 0, 72h, 17h, 0Bh, 34h, 13h, 69h, 6Fh, 21h, 54h, 45h, 6Ch, 3Eh, 3Dh, 16h, 5Ah, 3Dh, 30h, 0Dh, 11h, 61h, 30h, 4Ah, 70h, 1Fh, 52h, 39h, 2, 4, 2Eh, 10h”
由此我们可以得到crflag
1 |
|
结果是3A!T_rh0_Ts3_a_siSoycPS!C{sDFE}S
最后只剩下XB[]观察一下XB先是由xb[i]=i,然后通过随机数打乱了顺序,这也是我卡住的地方,我以为是通过动态调用直接得到xb打乱后的结果,结果我动不了一点,然后我想到了伪随机,python的随机数和c的不太一样so就没搞出来
下来我自己痛定思痛,决定用c再搞搞,于是再一个阳光明媚的中午,翘了一节课的代价,搞了出来,并写下了这篇wp
1 |
|
首先计算机中不存在绝对的随机,再c语言中随机数由随机种子srand决定,当srand被固定时,之后的随机数也就固定了,也就说xb[]可以得到了,再通过相关逻辑的逆推理
最后flag=DASCTF{Th3_Proc3ss_iS_S0_Eas!!}