首页
社区
课程
招聘
[原创]看雪CTF2016--20题和21的破文, 一并发
发表于: 2016-12-14 16:10 2678

[原创]看雪CTF2016--20题和21的破文, 一并发

2016-12-14 16:10
2678
以下数字都是十六进制
先说21题吧,记忆还比较清晰,没有什么反调试手段
加了壳,但比较简单的壳,找popad即可,找不到的话用esp断点法(pushad后在esp下个硬件访问断点,一般简单的壳都可以找到,这里用OD),popad后紧紧接着有2个jmp(好眼熟),在这两个jmp等着即可
后面都用IDA来调试了,因为IDA有个很好的功能即可实时反汇编字节码

PS:找不到scanf的同学,可以用OD在ReadFile断点等着,然后看读出数据就可以定位到了

用IDA在上文中的两个jmp下好断点,开始调试恢复好的程序,程序加了花,有个代理call来调用API,但是没关系,可以根据返回值和传入参数来判定是什么API,再按运行地址来注释,偏移403943就是个strlen函数,403af5是个strcmp但是只比较一个字节, 403963是个关键点比较输入字符串长度是否等于E

其实知道了长度后,只需要在上文中的两个jmp中的一个465844下好断点,F9运行后,输入E长度的测试数据
再在403AF5下断点,记住不能提前在403AF5,因为字节码要解密
断点来了以后,栈顶是你输入的测试数据,下面的就是明码对比字符串,他是一个一个字节对比的
按着顺序数出来即可即"codebywidesoft"

再说20题,反调试2种一种是时间检查,一种是CheckRemoteDebuggerPresent
时间检查那里可以抹掉,但是CheckRemoteDebuggerPresent的第二个参数判断会对后面的逻辑有影响,所以把涉及到第二个参数的判断跳转都取反即可
PS:其实就只有一处有逻辑影响主要是为了产生异常触发验证函数,但是图省事可以全部都取反,反正也不多
那这个样本的反调试就没有了,可以愉快的玩耍了
这个样本的验证算法有两个一个验证成功后会调用一个下标为4的函数指针数组当中的元素,另一个下标好像是5,下标为4的是输出验证成功提示,下标为5是为了影响一个全局标志让程序pause然后程序退出

其中涉及到的算法主要是一个大矩阵的对角线是用户输入数据,然后加总一行对比
其实这个样本后续还有很多验证,但是他影响下标是用或影响的,而且4这个数字二进制为"0100"
这就可以作弊了,无视后面的算法,只需要第一个判断点通过即可

这个样本抹掉反调试后,只需要下一个断点40167B就可以找出注册码,4011E0这个函数是为了判断下标5所以无视
你输入数据就是下标去查询410EE0这个整型数组,然后行加总对比输入数据的第4个数据行加总构成的量,而第4个数据加总的量要等于29F,其实后面不用多说了,有这个断点1个小时内就可以找到规律推出答案

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

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//