首页
社区
课程
招聘
[原创]CTF2017第三题分析
发表于: 2017-6-11 21:44 4352

[原创]CTF2017第三题分析

Fpc 活跃值
4
2017-6-11 21:44
4352

这个题目设计的不错,感谢题主

坑是smc,一开始不知道!不知道!不知道!坑是三个加号改减号,变量v94 v8c存放位置颠倒。因为存在约束,题目给出的原算法不可行,没有实数解,明知道有坑,不知坑在哪。

题目是VB Pcode,好多年没接触了,因为做题又拣回来,pcode主要是读指令,在虚拟机中打转,变量围绕stack操作,浮点数的存取计算则用到st寄存器。

工具用到看雪主页提供的VB Decompiler Pro用于看算法,ljtt VBParser用于看指令的具体地址,OD用于跟踪。

smc是后来关注到的,一开始改了EIP为1090,后来因为算不出来怀疑自己是不是中招了,恢复原状,结果跟踪时发现代码中有的加法怎么变减法,于是对内存下写断点,才发现有SMC,其中有rdtsc运行时间检查,细节没太关注,通过内存写断点可知,就是异或了上面提到了五处,如果你去跟,会一直在里面打转。OD加载后直接运行就行,在点验证之前设内存断点就可以跟踪了。

Regcode应为16个字母,16进制形式,分为两个dword,设前半部分为L,后半部分为R:

初始化代码为:

约束条件是:

L, R<0x80000000; L>R; X+R>L; L+R>X

用到的公式是

 

其中((2 * X^2 * L^2 - R^4 - X^4 + 2 * X^2 * R^2 + 2 * L^2 * R^2 - L ^ 4 ) ^ 0.5)=((X + L + R) * (X  + L - R ) * (X + R - L ) * ( L + R - X)) ^ 0.5 )   我是查百度来的,公式知识已经忘光了

设上式为DLT,则:

0.5*DLT/(X+L+R)=A ...(1)

X*L*R/DLT=B       ...(2)

约去DLT,将R用L表示


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 1355
活跃值: (339)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
2
文章极好,写出了内心历程,感人呐!
2017-6-14 16:05
0
游客
登录 | 注册 方可回帖
返回
//