[CrackMe]160个CrackMe之09
1. 常规通过栈回溯法
2. 很容易追溯到爆破点,上面一个字符串比较函数
用户名为 123456,则key为 0012F4B4 0026F214 UNICODE "381-8147-010"
3. 分析key生成算法
找算法的一个比较明显的特点就是找循环,因为key的生成一般来说会存在大量循环,我们就借助这个来分析它。
循环获取和之后就乘以1234567890,之后再修改为'-',其最终获取的就是Key值了。
4. 注意事项
VB中的变量+0x8才是真正的值,因此分析内存时要注意。
相乘后的结果是以浮点形式保存而不是整数,这可能给你带来分析困难,但是有Move等函数也可以分析出有关行为。
VB中各个变量似乎不需要转换,通用,没写过VB,但这个应该留意一下。
5.注册机编写
#include <stdio.h> #include <iostream> #include <sstream> #include <windows.h> using namespace std; int main() { string userName; cin >> userName; ULONG64 sum=0; for (int i = 0; i < userName.length(); i++) { sum += userName[i]; } sum *= 1234567890; stringstream ss; string key; ss << sum; key = ss.str(); for (int i = 0; i < key.length(); i++) { if (i == 3 || i == 8) { cout << "-"; continue; } else { cout << key[i]; } } }