首页
社区
课程
招聘
[原创] 第四题:达芬奇密码 WP
发表于: 2019-6-13 19:54 4542

[原创] 第四题:达芬奇密码 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编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 5568
活跃值: (3208)
能力值: ( LV12,RANK:407 )
在线值:
发帖
回帖
粉丝
2
厉害,直接在OD里跟踪到方程式
2019-6-24 22:54
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
3
这个解法很机智啊,直接观察出递推关系了: x[n+2] = x[n+1]*16 - x[n]
2019-6-24 23:06
0
游客
登录 | 注册 方可回帖
返回
//