首页
社区
课程
招聘
[原创]KCTF2020秋季赛 第二题 异常信号 WP
发表于: 2020-11-20 11:33 7867

[原创]KCTF2020秋季赛 第二题 异常信号 WP

2020-11-20 11:33
7867

控制台程序是通过NtReadFile获取输入的, 不出意外的化, 会有一个线程处于NtReadFile的同步等待状态, 依次查看线程当前EIP, 看是否有这样的线程存在.

查看线程列表如下:

可以看到4号线程, 就是我们要找的输入线程, 在777E1E6C下断. 输入测试注册码12345678, 回车, 不出意外, 成功断下, 观察栈:

地址0xCC3C30存放的就是读取到的我们输入的测试注册码. 对其下硬件读断点, 跟踪注册码处理.


保持对测试注册码的读取跟踪, 直到下图所示位置:

通过上下问分析, sub_561270会从注册码中依次取一个字符放到'参数2'所指地址, 暂且将其命名为get_char, 继续跟踪:

ebp-1dc内存数据如下:


可以看到, 561410行-561454行代码, 读取验证码每一个字符直到'\a'(不包括), 做对应的ASCII-数值转换(从中也可以看出, 是不支持小写字符的), 存放到缓冲区 ebp-36c, 执行完毕后, ebp-36c内存数据如下:

紧随其后, 再次转换:

上图代码将ebp-36c中数据重组, 放到ebp-dc缓冲区, 处理后结果如下图:


第一个算法5614C0-5615BC, 注意规避561523-561553之间的反调试代码:

根据索引算出hash值, hash算法如下:

等价逻辑:

根据分析内容, 做个礼貌的回应, 构造一个最短长度的测试注册码:675EE1125B47D47B4E30C8644219BC4D3602B036296BA31F, 再次执行, '开场白'已过, 是时候进入真正的验证了.


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-11-24 10:28 被Anakin Stone编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 13082
活跃值: (5738)
能力值: ( LV5,RANK:77 )
在线值:
发帖
回帖
粉丝
qux
2
可以问一下是怎么附加进程的吗?或者说怎么绕过反调试开始调试的?
我把程序运行起来,然后x64dbg附加,因为有别的线程在反调试,就直接退出了。
2020-11-23 23:59
0
雪    币: 4230
活跃值: (3836)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
3
qux 可以问一下是怎么附加进程的吗?或者说怎么绕过反调试开始调试的? 我把程序运行起来,然后x64dbg附加,因为有别的线程在反调试,就直接退出了。
https://bbs.pediy.com/thread-263720.htm
已补充, 请查阅.
2020-11-24 10:28
0
雪    币: 13082
活跃值: (5738)
能力值: ( LV5,RANK:77 )
在线值:
发帖
回帖
粉丝
qux
4
Anakin Stone https://bbs.pediy.com/thread-263720.htm 已补充, 请查阅.
感谢!
2020-11-24 13:36
0
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
比较好奇这个数列,大佬是怎么百度出来的,我搜了下没找到
2020-12-13 02:01
0
雪    币: 4230
活跃值: (3836)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
6
wrong-123 比较好奇这个数列,大佬是怎么百度出来的,我搜了下没找到[em_10]
具体记不得了, 可以按性质搜索试下, 例如:一个自然数数列,其中任意两个数的差都不相等。
当时也是算了大半天,才意识到这可能是个已知数学问题,进而去做的搜索。
搜索过程也不是一番风顺的,逐步过滤信息,更新认知,进而获取到最终答案-哥隆尺。
2020-12-16 10:03
0
游客
登录 | 注册 方可回帖
返回
//