去膜拜看雪师傅啦,看雪论坛是个软件安全技术交流场所,为安全技术爱好者提供一个技术交流平台和资源。从单一版块『软件调试论坛』,发展到以软件安全技术为主题多个版块的综合论坛。其实这是一个超级大神级别的存在,来膜拜一波
Re1
签到题直接过
Re2
1、题目
链接:http://pan.baidu.com/s/1qXVQmok 密码:h5sw
去年你已经知道看雪啦,只是不敢去做题,自己太菜了,今年去试一试,第一道题签到题,很开心。然而,第二题,我已经跪啦,不过,在公布wp后,还是学到了许多,这里记录一下学习到的知识。
2、分析
一、侦查:无壳 Microsoft Visual C/C++(6.0)[libc],有明确提示成功和失败信息。
二、入坑:OD加载,查找字符,定位到:“You get it!”
简单跟踪几步发现 401090、4010E0 为显性算法比较,分析 401090、4010E0:
把输入每4个字符ASCII作为十六进制赋值计算,假设为a,b则:
⑴:0x5 ( a - b ) + a == 0x8F503A42
⑵:0xD ( a - b ) + b == 0xEF503A42
⑶:0x11 ( a - b ) + a == 0xF3A94883
⑷:0x7 ( a - b ) + b == 0x33A94883
然而我分析到这里,感觉只能穷举。。。。结果当然失败了
后来看了大佬们的wp,果然学到了许多
大佬1:考虑该显性算法未随机打乱数值,低位特征依然继承到计算结果,因此先尝试求解低位,再逐个往高位求解,避免穷举范围过大:
迅速识别该方程组无合法答案,无疑是作者埋的坑,立即寻找其他途径。
大佬2:z3识别改方程组无解(这里我还是没有懂,z3太强大啦)
大佬3:
推出:12 * ( a - b ) == 0x64590d41
右边为偶数,左边为奇数,无解
这道题由于没有判断输入长度,便存在溢出(这里我完全没有想打RE,还有溢出,涨知识了),那溢出到哪里呢?,大佬们发现0x00413131存在shellcode编码(膜拜),溢出到这里
那溢出长度是多少呢?输入aaaabbbbccccddddeeee,发现返回地址是dddd,
再次输入aaaabbbbccc11A
黑色,这里右键-分析-从模块删除分析
这里出现花指令(代码混淆,花指令不影响程序运行。就是看耐心。就拿这个题目来说。花指令就是跳来跳去。可以脱去,其实不脱话也一样的)
一步一步分析
在0x413131位置设置新断点,回车断下,忽略花指令,仅摘录算法相关代码:
3、求解
以参考了许多大神的代码
学到了一种解决方程的方法,贼好用
3、Re3
1、题目
链接:http://pan.baidu.com/s/1kUYItoz 密码:xem0
第三题,我感觉世界观坍塌啦。依然不会,还是学习为主。看大神们的记录,学习一遍
3、分析
一、侦查:无壳 Microsoft Visual C/C++(6.0)[libc],诸多反调试
二、入坑:
OD加载(好像我的od直接过了反调试),f9,运行,什么鬼,直接跳到了dll,继续f9….终于出现对话框,输入
12345678,结果程序崩溃。
IDA打开,定位到CrackMe字符串,找到关键函数
哇,还是经验太少,这里许多函数看不懂。
再用OD打开,发现程序有随机化,好烦,f9…出现对话框,按道理这时候可以在读取字符的API下断点,这里是GetDlgItemTextA。然而,我在当前模块中没有找到,后来发现个插件-设置API断点,总算断下来啦。接下来分析算法啦(这是我的能力还是太弱了)。
借助大神们的wp
IDA反汇编关键函数
这个直接明文:
我自己尝试,然而,我来到这个函数,程序执行后就崩溃了
继续分析。
猜测作者意图
1、获取输入 ipt
2、两次 base64 解码得到 buf
3、自定义解码得到 cmd
4、判断 sm3(buf[:3) == ipt[-64:]
5、cmd 能在迷宫走到终点
4、Re4
1、题目
链接:http://pan.baidu.com/s/1kUYItoz 密码:xem0
学习为主。看大神们的记录,学习一遍
3、分析
一、侦查:无壳 Microsoft Visual C/C++(6.0)[libc],诸多反调试
二、OD附加,过反调试
先运行exe程序,再打开od附加exe进程,再调用GetWindowTextW的API时候下断点,点击运行,exe程序输入sn,此时会断在od中的GetWindowTextW的断点(还在api系统区)
往下走来到程序区
往下走,主要细节
以上代码得出注册码必须为7位并且包含字符’b’,’p’
再看最后的判断call
以上代码比如初始化0-9,a-z,注册码转换成大写,提取出注册码里所有的字母,纯属多余
接下去直接看里面最后的call
以上分析完成得到一组注册码1215pb8
1)包含字符’b’’’p’
2) 7位长度
3) 第1、2位为’1’’2’
4) 第0位字符’1’(0x30)+第n位字符(计数所在位)’2’(0x32) = 0x63
5) 第3、4、5、6位为’15pb’
6) 最后1位为‘7’+计数