新CrackMe160之144 - km2
OD载入程序,搜索界面查看成功关键词定位到00401645, 往上看只有一行0040163D关键对比,并没有算法, 对比的内容是一个内存地址,右键查找所有常量,输入这个地址可查到两个结果,都在上面的同一个方法里,这个方法就是对应的算法
查看IDA源码:
int gci(void)
{
size_t v0; // eax@1
int result; // eax@1
GetUserNameA(un, &dwUserName);
GetComputerNameA(cn, &dwCompName);
us = strlen(un);
v0 = strlen(cn);
cs = v0;
e = 12 * v0 * us;
t = e * 12 * v0 * us;
i = 0;
j = us * e * 12 * v0 * us;
k = 0;
l = 0;
m = 0;
n = 0;
o = 0;
p = 0;
q = 0;
r = us;
s = v0 * us;
u = v0 * us + e * 12 * v0 * us;
v = u * (v0 * us + e * 12 * v0 * us);
a = us + 100;
b = v0 + 200;
c = (us + 100) * (v0 + 200);
d = 2 * (v0 + 200) * (us + 100);
e = 2 * (v0 + 200) * (us + 100) - (us + 100);
f = us + 100 + e + 2 * (v0 + 200) * (us + 100) - c - (v0 + 200);
g = (signed int)(us + 100 + e + 2 * (v0 + 200) * (us + 100) - c - (v0 + 200)) / 2;
h = (signed int)((us + 100)
* (v0 + 200)
* c
* d
* e
* f
* g
* (us + 100 + e + 2 * (v0 + 200) * (us + 100) - c - (v0 + 200)))
/ 2;
result = 443 * f * d * g * h;
srl = 443 * f * d * g * h;
return result;
}
直接翻译成注册机:
#include <stdio.h>
#include <string.h>
int gci(void);
int main() {
unsigned int code = gci();
printf("系列号: %lu\n", code);
getchar(); return 0;
}
int gci(void)
{
char un[256]={0}, cn[256]={0};
int dwUserName=255, dwCompName=255;
int us, v0, c, e, f;
unsigned result;
GetUserNameA(un, &dwUserName);
GetComputerNameA(cn, &dwCompName);
us = strlen(un);
v0 = strlen(cn);
c = (us + 100) * (v0 + 200);
e = 2 * c - (us + 100);
f = 3 * c - (v0 + 200);
result = 443 * c * c * c * c * e * f * f * f * f * f / 2;
return result;
}
运行示例: 无
运行结果与电脑的名称与账号有关,所以每个人运行后的结果都不一样
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号