Windows 10 64位驱动程序 由于我用的是驱动测试签名,因此请打开测试驱动签名,请做如下操作: 管理员运行cmd,然后输入: bcdedit /set testsigning on 回车,重启即可。
可以看到关键判断:
scanf(&input_format, &v8); // %d if ( (signed __int64)v8 <= 96000 && (signed __int64)v8 >= 90000 ) { v15 = 66i64; v16 = 169i64; v12 = 231i64;
其他地方没有关于输入的程序流
所以猜测答案在90000-96000之间,由此确定了应该使用爆破,接下来patch掉输入在90000-96000时的弹窗即可
经过几次patch可以发现在:
__int64 sub_140002050() { __int64 v0; // rax MessageBoxW(0i64, L"wrong!", L"err", 0); v0 = sub_1400014D0(aKerneloadriven); return sub_140001E70(v0); }
将这里的MessageBoxW patch掉,而后爆破直到程序本身弹出"ok"即可:
import time from subprocess import Popen, PIPE for i in range(90000, 96000): p = Popen("./ConsoleApplication1.exe", stdin=PIPE, stdout=PIPE, stderr=PIPE) # time.sleep(0.01) p.stdin.write(str(i)+"\n") res = p.communicate() # if len(res[0])!=len("Enter pass word: "): # print str(i),res # if i %100==0: print i #输出ok时为:91024