首页
社区
课程
招聘
[原创] 看雪CTF2017第三题爱情海CrackMe的writeup(虽然没解出来,但也写写过程)
发表于: 2017-6-6 23:07 4766

[原创] 看雪CTF2017第三题爱情海CrackMe的writeup(虽然没解出来,但也写写过程)

2017-6-6 23:07
4766


将cm拖进OD就直接弹出异常,第一反应是加壳,反调试了!

用PEid一看是vc的程序,但是ida看导入表一对vb的函数,什么鬼!

还有就算加壳,一般也是运行中才会反跳试,这是加载程序就出问题了!

在ida中看到eop居然是400000,这.不是PE头吗,直接运行又是可以的,这究竟是怎么回事!

换一个调试器windbg,可以加载运行成功,然后去确认是不是直接eop的400000

执行eop的代码位置如下(xpsp3,每次重启地址不一样):

下断方式:

运行

还真的是入口在这,可是这个段不是只读的吗?

可以确认是只读的,但是确实已经执行了(OD无法加载,可能跟加载机制有关,没有细究,大神请指点,爱情海挖的坑!)

这里确认是从400000执行的,这地址究竟是怎么回事呢?

PE头MZ被解析成了dec ebp, pop edx,这里为了平衡堆栈,加入了push edx, inc ebp,然后就是挑战到401090,真正的入口

这里用PE工具将入口偏移修改为1090,就可以用OD调试了。

可是这里看到sub_408e00内部一大堆东西,不知道做了什么,我是直接忽略的,因为我记得vb入口会调用ThunRTMain,所以我对401088下断,断下后

调用401090时,可以看到返回地址是40109A,其实就是在call sub_408e00内部转了一圈然后调用了ThunRTMain

这里可以直接修改为call 401088,这样就是一个标准的vb程序开始了。



由于很少分析vb,各种工具翻来覆去用vb parser,wktvbdebug, vb decompiler。

wktvbdebug调试字体太小了(难受),vb decomplier真不错,反编译器基本还原了算法(在Check_Click_40864c中), Form_Load_408040初始化了几个全局变量(算法中会使用)

算法部分

其中global_52, global_60, global_68这几个不知道值,就通过调试去确认了一下,方法如下:

将vb decompiler切换到反汇编窗口,找到访问global_52的代码,然后用OD对4083F1下内存断点,go

断下后,执行如下代码(vb虚拟机中了,补了cyclotron大大的vb系列),此时esi地址是4083F1

继续跟入jmp地址,执行到72A4193E,就是加载global_52的值了,ds:[0025C0AC]=0.0,是0.0

同样的其他2两个变量也同样方式,确认是0.0

那么算法的表达式就可以搞了,看到那么多括号,^,肯定被吓着了,整理一下,其实是这样的:

//上面显示错误的是(k*a*b/((k+a+b)*(kb)*(ka)*(ak))^0.5 = R1)

通过化解得到


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

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 1355
活跃值: (339)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
2
查看作者文档,脱离地球坑
2017-6-8 07:25
0
雪    币: 598
活跃值: (282)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
3
掉坑里了
2017-6-8 08:53
0
游客
登录 | 注册 方可回帖
返回
//