侧边栏壁纸
博主头像
Fup1p1 's Blog 博主等级

梦想是财富自由~

  • 累计撰写 38 篇文章
  • 累计创建 24 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【Reverse】NKCTF2022 Re VT 拷打VT出题人!!!

Fup1p1
2023-03-27 / 1 评论 / 1 点赞 / 1501 阅读 / 0 字 / 正在检测是否收录...

同情一下

首先,很感谢那位师傅花时间出题,虽然出题的时候有点失误,感觉找个测题的都不会出现这种问题。。。

前言

我上篇博客刚初识了一下VT,然后就刚好实战了。
这题的VT很好分析,西湖论剑的lite版,很不错,又是在周壑的VT项目上改复制粘贴,5分钟能摸清逻辑。
但那算法部分,是真给我整无语了!!!

看到算法,懒得分析,尝试直接跑出答案!很好,确定最后guest_ecx、guest_edx的值。把算法抠出来跑!吆西!睡前11点按下运行键,单纯的我以为美美地睡个觉就能的拿到心心念念的福拉格。
zZZZZZ~~~
真是完美的一觉,可是下床之后看向屏幕!
尼玛!怎么还没跑出来!!!

质疑,还是质疑!

CSGO玩家经常说:质疑,请保持质疑!!!
一直在质疑我是不是ecx和edx值搞错了,可是这题不就在处理cpuid异常分支中对ecx,edx进行了赋值吗?真的不懂。。。还以为有什么新招。

驱动跑一跑,还是跑不了!

不会是跑不出来吧,如果我直接跑驱动,在驱动卸载的时候或者vmcall指令的异常分发结束后,能通过dbgprint输出字符串,那就说明ecx和edx的值错了,导致跑不出来。打开VMware,保存快照,打开instDrv,加载驱动,很好,句柄错误…尼玛。

溢出,永远讨厌溢出

然后就开始正常的分析算法…发现逻辑很简单,就是数能被18,0x2835,0x271b其中任意一个整除,且商只能是这三个数中的一个。v5等于100的时候就返回result,其实就是eax。
简单,写个pow不就好了,管他重复不重复,塞到集合里面,最后拉出来排个队伍。找到第100个小朋友不就结束了。
至于这个范围,这个eax就很烦。结果赛后,告诉我,64位的程序编译成32位?尼玛。那返回的不就是eax了,那就是rax了。我真的是服了。

当时写的错误范围

a1=18
a2=0x2835
a3=0x271b
s1=set()
s1={1}
for i in range(100):
    for j in range(100):
        for k in range(100):
            if(pow(a1,i)*pow(a2,j)*pow(a3,k)<=0xffffffff):
                s1.add(pow(a1,i)*pow(a2,j)*pow(a3,k))
print(s1)

正确的范围

# a1=18
# a2=0x2835
# a3=0x271b
# s1=set()
# s1={1}
# for i in range(100):
#     for j in range(100):
#         for k in range(100):
#             if(pow(a1,i)*pow(a2,j)*pow(a3,k)<=0xffffffffffffffff):
#                 s1.add(pow(a1,i)*pow(a2,j)*pow(a3,k))
# print(s1)
y=[198359290368, 1, 1985774855874048, 2041712175757824, 3570467226624, 3636745426187179524, 35743947405732864, 36750819163640832, 64268410079232, 643391053303191552, 11581038959457447936, 11907265409019629568, 6746640616477458432, 104976, 18, 189372733597728, 200191886003232, 6359799637750824, 3243564, 105322802002603056, 11224522920330801, 111340053932130864, 10293, 3537108565195749948, 34012224, 3408709204759104, 3603453948058176, 6185558551785048, 18916465248, 353322202097268, 612220032, 61356765685663872, 6301580789376, 64862171065047168, 1156831381426176, 617876191368, 103043223, 1854778014, 1949213546921414304, 2060575082631266976, 32471319204, 18568182698154, 19091230098102, 3345949385841954492, 340496374464, 5832, 343642141765836, 108289641495634128, 114476393479514832, 100220121, 10917001744431327, 1031565705453, 180793307758583538, 105945849, 11019960576, 110320825326336, 1104421782341949696, 113428454208768, 1135532255083976448, 3254279539654503684, 1167519079170849024, 20822964865671168, 10617905806227729, 3334932, 374813367582081024, 58384152, 10011, 33386004252, 1889568, 34326455076, 6016091194201896, 191122304512099122, 350087821632, 661514744945534976, 1803962178, 1060623894339, 324, 325070376551244, 1080517968, 5851266777922392, 1895810436046855008, 2004120970778355552, 60028776, 10817065377648, 202041412565954418, 6128934740352, 63085125282443136, 1907025282, 3440201481217784196, 584483745672, 1090500623757, 10520707422096, 11121771444624, 19449323424, 196506031399763886, 1050914736, 185274, 3504729182357952, 194707176797664, 1003303631331, 180198, 19629011227626, 185886076991219694, 10044072653254641, 334227288566772, 18059465363958, 600948076536, 10327004277289983]
y.sort()
print(y)

抽象,真抽象

就是把0xfffffffff改成0xffffffffffffffff。
哎,不想再看这一题了,最后具体是哪个值都不想想了,管他什么result=v4++,顶多第100个加不加1的问题了。最后没有AK,真佛了…
image-1679917285287

后续

image-1681376339887

image-1681376242372

A{`X3RL~94SHH64K2EAGTXY

太棒了✿✿ヽ(°▽°)ノ✿

到货了捏!

3620C4FF34C210E7AEE016D9B007CF8B

1

评论区