首页
社区
课程
招聘
[原创]看雪2018国庆题--叹息之墙 writeup
发表于: 2018-9-30 08:44 3371

[原创]看雪2018国庆题--叹息之墙 writeup

2018-9-30 08:44
3371

上IDA分析,发现有大量混淆,稍微翻一下就会发现流程控制关键在[esi+301Ch],如下代码:

每个小流程结束后都会设置[esi+301Ch]jmp loc_45C132jmp loc_40A09B。于是OD跑一次并记录[esi+301Ch]的值变化。

通过IDA与流程记录文件,分析代码。里面大部分代码直接跳过,只看特别之处。如:

以上代码作用只是调用了maybe_sscanf函数。

以上是检查[esi+3052h]值,条件跳转的代码。

这仅仅是无条件跳转。

这段代码实际上是条件跳转,以text:0044F170 mov dl, 1为条件,其它类似的只需关心dl的值。

小流程中的代码大多与以上类似。看一眼就能明白在干什么。

理完,程序过程大概是:

用大步小步算法,算出一个sum的值0x55121c15,跑了下,结果没结果。
(0x65757832** r)%0xFFA1CF8F == 1得到检验式的值周期为0xFFA1CF8E

发现sum的个位始终是7(0x55121c15+0xFFA1CF8En = 1427250197 + 4288794510n)。

又发现表中数据基本都是个位为0;数据成对相加结果为0xFFA1CF8E;里面有多个等比数列,最后整理出9组数,每组的数都是此组最小元素的倍数。正合“正确的序列号由不超过9整数构成”的提示,从9组数中各选出一个数,这样就没有多解的情况(当然也有整数个数小于9的情况,只要每组选出不多于一个数,就没有多解的可能,可暂先不考虑)。

最终得出答案:17x27x60x97x133x161x243x292x309X

用过的脚本,使用过程中一直在改变,前面用到的都在注释中:

 
 
 

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

最后于 2018-10-3 13:02 被poyoten编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//