看雪CFT2016CrackMe

第一题


载入OD运行,程序直接退出了,暂停后查看了堆栈调用,找到一个ExitProcess的函数,去到函数的地址处查看下哪个函数调用了它

1
2
重新载入OD,查看调用来自哪里
1

2

同样的方法继续回溯
1

2

3

4
把调用00F2100处的函数nop掉在OD中就可以运行了
1

在OD中可以运行了,随便输了几个字符进去后,发现多了好多线程,只好重新载入继续跟踪代码,我直接搜索字符串去到关键代码处,找到一个获取文本内容的函数下断点,单步调试看到了一个创建线程的函数
1
程序创建了一个新的线程来验证注册码是否正确
1

线程的调用来自00DA20E0

1

单步到这里程序就运行了,不知道为什么,下断点跟进去看看,原来这函数是验证注册码的
1


验证输入的内容是否有P
1
继续向下单步走,会发现以前上面有个跳转不能跳现在可以跳了,直接跳到下面
1

继续向下有个跳转调到程序结束处,NOP掉这个跳转里面有判断注册码长度的函数
1

1
判断字符串的长度
1
输入字符串的长度为7,跳转实现,然后进入001D1A60这个函数来到这个位置
1
继续单步进入call 001D1870
1

2

比较前两位是否为12
1
比较最后一位是否为8
1
最后的password是:1215pb8
1