新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个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-12-30 14:35  hankerstudio  阅读(9)  评论(0)    收藏  举报