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


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


同样的方法继续回溯



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

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

验证输入的内容是否有P
继续向下单步走,会发现以前上面有个跳转不能跳现在可以跳了,直接跳到下面
继续向下有个跳转调到程序结束处,NOP掉这个跳转里面有判断注册码长度的函数

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

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