西部乐园
2019-12-11 02:12:09 Author: bbs.pediy.com(查看原文) 阅读量:212 收藏

[原创]西部乐园

3天前 43
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

[进行中]2019 KCTF总决赛 | 巅峰对决,谁与争锋!(感谢第五空间和安恒信息对活动的支持!)


文章来源: https://bbs.pediy.com/thread-256290.htm
如有侵权请联系:admin#unsafe.sh