工具:OllyICE 吾爱扣扣专版(什么strongOd开上了)打开od加载了crackme 然后看了一下这样的crackme,mfc写的,然后果断下各种取文本框的内容的断点, 然后运行,结果是断下来了,但是不是重点啊,都是取中间那个计次数的。 接下来看了一下,窗口,看看,窗口消息处理函数里会不会有收获。 随便看了一下。 messagebox这些都在这里,瞅了一下,并没有其他相关的收获。看了一下那个edit的id,去取文本框内容的那些api下了个条件断点,而且发现还是没有断下来。看了线程,发现多了几个线程,于是在createthread 下了个断点,再运行。果然断下来了,去看一下,线程调的那个方法然后在 下了个断点,然后不断的跟。就看见了取哪个文本框的内容了。然后就是继续分析了,得到了大概流程,中间有大量的垃圾代码,和各种乱七八糟没啥卵用的东西,应该就是虚拟化了得吧 大概流程, 取注册码 然后判断注册码里面有,b字母没有 继续取,判断有p字母没有 有个检测线程是否被调试的方法(个人猜想,如果是就直接结束进程) 然后看看长度是否为7 然后就是 把注册码前两位 xor 0xf, 中间两位 xor 0x50 剩下的全部 xor 0x42 紧接着先生成一个小写字母a-z,然后转换为大写。 然后把上面各种xor的结果又还原回去,然后把注册码里面的字母转换为大写, 然后根据生成的大写字母表,查出注册码中有几个字母。 如果不等于2就跳到失败。 然后接着比较,大写注册码第3位到第6位4个字符是不是15PB,如果不是,就GG。 接着就是合并个字符串了,把123456789和注册码的第i位开始之后的字符合并在一起。i是那个你测试的次数 然后比较前两位是不是字符1和字符2 然后就是比较 之前拼接在123456789后的那个字符和字符1相加是否等于0x63 (这里就是坑爹的地方,也就是说,你只能一次成功,不然之后不管你输入什么都是成功不了的。无解,bug。。。) 如果不等于就GG。 然后就是比较注册码的最后一位 与 (字符7 + 次数i) 是否相等 不相等就GG. 以上就是整个流程(语文不太好。)。 最后得出的注册码是:1215pb8 //有广告嫌疑? 总结:有大量的vm过后的代码,很多无用的代码,这个crackme bug(算是吧,按要求来说的话)。 附上udd。 Crack_Me.zip
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
BlackTrace 你下断点,在审计结束进程的api上下断,然后再栈回溯一下,到之前的地方,你就可以看到哪里的检测之类的了