首页
社区
课程
招聘
[原创]ctf2017第二题分析
发表于: 2017-6-4 16:43 3966

[原创]ctf2017第二题分析

Fpc 活跃值
4
2017-6-4 16:43
3966

感谢出题者lelfei,与第一题的简明相比,第二题明显有难度,已经让人怀疑人生:(

看这个势头,做出一题算一题……

好吧,下面开始正题

-----------

用到的工具:OD,ida,十六制的编辑器

总体上,如果没有相关的奥数知识作为背景,就需要穷举,方式一是自己编程实现;方式二工作量小一些,直接在OD里面改,缺点就是比较慢,每秒大概100~200个数,如果crackme运算效率再低点,不会编程就可以直接歇了


cm用到一种大数库,每个大数用到相关联的2张表,每表元素数0x400个,表头一个dword是个标志,下一dword是大数的长度,初始为0,后面是指针或数据了,指针寻址用,用表1的指针找到表2指针,再用表2指针确定表1数据的具体位置,大数的每一位0~9占据1个dword

程序用到的几个函数:

1.初始化

用缓冲区的立即数初始化

另一初始化函数


调整函数:处理进位的情况,确保每一位置上数字均小于10

取数据长度

取指定位置的一位数

复制函数

复制或相加

用立即数乘,注意乘法的顺序是反的,即如果你输入的是123,去乘以4,实际上是321*4=1284,结果再扭一下变成4821

作了一些封装的乘法

两个大数相乘,结果在Ecx指向的大数中

比较大数,根据参数可以选择比较的方向


程序的主体逻辑

先取得输入,长度应为8-20长的数字,不含0

输入应为数字,不含0

以下为计算过程,设输入的数字为n,用它来初始化两个大数L1,L2

L1=L1*9

L1=L1*L2


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/06/06
最新回复 (0)
游客
登录 | 注册 方可回帖
返回