首页
社区
课程
招聘
[原创]看雪CTF2017 第八题分析
发表于: 2017-6-17 11:39 4606

[原创]看雪CTF2017 第八题分析

2017-6-17 11:39
4606

od加载crackme,通过main函数跟踪发现如下:

这里是个switch循环,循环到A3结束,case地址如下:

操作码如下:

通过上述特征,可以确定这是一个小型虚拟机,继续跟踪分析操作码,其主要对应的功能为:

下面主要分析load sn,A9这条指令,其对应的函数为 00402700

继续分析00402450,

首先,对sn进行base64解码

解码后长度必须为5A,sn分为3部分中间以‘--’分隔

这里通知另一线程处理,通知的全局变量为99B6EC,通过这个变量发现3处线程函数:

其作用是分别对运行中的代码进行修改,修改地址可以在线程函数中找到。

下面分析 sn1的处理过程,即00401EC0

对sn1进行异或解码,其中key如下:

sn2的解码也使用了上述key,

大数乘法运算,即sn1*98765432109876543210123==13095069099216326605010245808779535277211541324456558063162414338128147458401

下面分析 sn1的处理过程,即00402090

同样大数运算,sn2*sn2 == 13095069099216326605010245808779535277211541324456558063162414338128147458401

下面分析 sn3的处理过程,即004021D0

首先对sn3进行了编解码,之后进行进制转换,再之后进行大数幂模运算即RSA运算,获取的数据如下:

已知N,E,M,通过rsa工具分解出D,使用D和N解密M可以求的明文C

编码的时候C必须足够大,才能符合sn长度为5A的要求,这也是该题多解原因。


[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 4441
活跃值: (805)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
大牛!
2017-6-19 08:47
0
雪    币: 1432
活跃值: (2982)
能力值: ( LV9,RANK:156 )
在线值:
发帖
回帖
粉丝
3

c  =  int("56172b366a392d0751d99d1b824d1f7a3377be6254e46ed98db5c9",  16)  #为了满足长度和编码要求这里预先加了部分N"

这段数据  是  c  =  c  +  N累加得到的吗?

2017-6-19 10:40
0
雪    币: 3053
活跃值: (891)
能力值: ( LV13,RANK:1300 )
在线值:
发帖
回帖
粉丝
4
whydbg c  =  int("56172b366a392d0751d99d ...
是的
2017-6-19 16:20
0
雪    币: 1432
活跃值: (2982)
能力值: ( LV9,RANK:156 )
在线值:
发帖
回帖
粉丝
5
谢谢    。
2017-6-19 16:23
0
游客
登录 | 注册 方可回帖
返回
//