-
-
[原创] 第四题:达芬奇密码 WP
-
发表于:
2019-6-13 19:54
4542
-
ida32载入,找到入口函数
程序逻辑十分简单,首先判断输入字符串长度是否为十六,之后将宽字符转换为字符然后调 VirtualProtect这个API,之后qmemcpy(sub_4010E0, &byte_5647B8, 0x330u);
将一段字符复制到sub_4010E0上然后继续用调 VirtualProtect这个API,进入if语句,调用sub_4010E0函数,返回值v10 = 1时正确
看似十分复杂,确实非常复杂,静态分析是不可能的,这辈子都不可能了,果断OD动态开调,发现真正对字符串加密就只有if语句中的sub_4010E0函数,即od中的TheDaVin.002A10E0
菜鸡只能逐行看汇编代码,再转换为人类能看懂的语言
仔细一看wtf,就是解一条方程
x^2 = 7 * y^2 + 8
嗯,双曲线方程,求64位整数解
将解和table异或一下就可以得到flag了(flag = x<<64 + y,小端序)
作为一个数学蒻鶸,这怎么解得出来呢!闲着没事干搜了一下椭圆曲线,发现可以根据小整数解组推出大整数解组?果断爆破
爆破得到这么几组整数解
蒻鶸怎么可能看得懂数学原理呢,自己动手找规律完事,依据两组小整数解组就可以理论上求出无穷大的整数解组
求解代码
可以得到63位和64位的解,和table异或一下
得到
排除第二组解,求出flag
L3mZ2k9aS0a36DMM
ps:逆向方面不难,耐心点追踪汇编代码仿佛看源码,主要是最后的解方程
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-6-17 10:15
被丿feng编辑
,原因: