吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2211|回复: 9
收起左侧

[CrackMe] C写的第六个cm(xp可运行)

[复制链接]
审判者压缩 发表于 2021-11-23 22:40
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

新手一个,
用c写了一个cm,
希望破掉的各位,可以告诉下爆破位置思路
先谢为敬。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 3吾爱币 +1 热心值 +3 收起 理由
Badao163 + 1 热心回复!
xiaoliu1234 + 1 用心讨论,共获提升!
MrZT + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

搜索曾经的回忆 发表于 2021-11-23 23:19
本帖最后由 搜索曾经的回忆 于 2021-11-23 23:28 编辑

s-h-e-n-p
反调试大概是线程检测调试和时间差检测,若被调试进入错误的分支,会分析到假密码:p-o-j-i-e
爆破就不爆破了,楼主能否给份源码学习下呢
阳光肥肥 发表于 2021-11-24 01:36
往IDA一丢,基本逻辑就看的差不多了
[C] 纯文本查看 复制代码
DWORD __stdcall ThreadFunc2(LPVOID a1)
{
  char *v1; // eax
  int v2; // ebx
  int i; // eax
  int v4; // eax
  int v5; // ebp
  bool v6; // zf
  int v7; // ebx
  int v8; // ebx
  int b; // [esp+28h] [ebp-264h]
  HANDLE hThread4; // [esp+2Ch] [ebp-260h]
  int qq[15]; // [esp+38h] [ebp-254h]
  char *q[100]; // [esp+74h] [ebp-218h] BYREF
  char s[100]; // [esp+204h] [ebp-88h] BYREF
  int zxzx; // [esp+268h] [ebp-24h] BYREF
  DWORD threadId4[8]; // [esp+26Ch] [ebp-20h] BYREF

  hThread4 = CreateThread(0, 0, ThreadFunc4, 0, 0, threadId4);
  starta1 = clock();
  memset(q, 0, sizeof(q));
  scanf("%s", s);
  v1 = strtok(s, "-");
  v2 = 0;
  while ( v1 )
  {
    q[v2] = v1;
    qq[v2++] = 0;
    v1 = strtok(0, "-");
  }
  for ( i = v2; i >= 0; --i )
    ;
  if ( v2 == 5 )
  {
    v4 = 100;
    b = 20;
    v5 = 20;
    while ( 1 )
    {
      if ( !v5 )
      {
        if ( strcmp(q[1], "h") )
          break;
        if ( !qq[1] )
          qq[1] = 1;
      }
      v8 = 50;
      while ( v8 > 39 )
      {
        if ( v4 > 1 )
        {
          v4 -= 3;
        }
        else
        {
          if ( --v8 % 10 == 1 )
          {
            if ( strcmp(q[4], "p") )
              goto loop5;
            if ( !qq[4] )
              qq[4] = 1;
          }
          if ( strcmp(q[3], "n") )
            goto loop5;
          if ( !qq[3] )
            qq[3] = 1;
          v4 = v8;
        }
      }
      v6 = strcmp(q[2], "e") == 0;
      v7 = !v6;
      if ( !v6 )
        break;
      if ( !qq[2] )
        qq[2] = 1;
      while ( 1 )
      {
        while ( v5 > 19 )
          v5 -= 30;
        if ( v5 >= 0 )
          break;
        v5 += 5;
      }
      if ( b <= 5 )
      {
        while ( v7 <= 4 )
        {
          Sleep(0xAu);
          ++v7;
        }
        if ( !strcmp(q[0], "s") )
        {
          stopa1 = clock();
          Sleep(0x1F4u);
          WaitForSingleObject(hThread4, 0xFFFFFFFF);
          GetExitCodeThread(hThread4, (LPDWORD)&zxzx);
          if ( zxzx )
          {
            printf("%s%s%s%s%s password\n", "r", "i", "g", "h", "t");
            return 0;
          }
        }
        break;
      }
      --b;
      v4 = 50;
    }
  }
loop5:
  puts("wrong password");
  return 0;
}
mmruanjian 发表于 2021-11-24 08:41
头像被屏蔽
yxpke 发表于 2021-11-24 09:13
提示: 该帖被管理员或版主屏蔽
什么都只会一点 发表于 2021-11-24 10:00
如三楼所述,本人对于IDA只会简单操作也能看到些信息
[C] 纯文本查看 复制代码
DWORD __stdcall ThreadFunc3(LPVOID p3)
{
  signed int v1; // edx
  int i; // eax
  int v3; // ebx
  HANDLE v5; // eax
  unsigned int v6; // eax
  HANDLE hHeap; // eax
  PROCESS_HEAP_ENTRY HeapEntry; // [esp+10h] [ebp-2Ch]
  BOOL bDebuggerPresent; // [esp+2Ch] [ebp-10h]

  v1 = 0;
  for ( i = 0; ; i = v1++ + 1 )
  {
    while ( i <= 99 )
      ++i;
    if ( v1 > 49 )
      break;
  }
  foosleep();
  if ( IsDebuggerPresent() )
    return 0;
  v5 = GetCurrentProcess();
  if ( CheckRemoteDebuggerPresent(v5, &bDebuggerPresent) == 1 && bDebuggerPresent == 1 )
    return 0;
  if ( NtCurrentPeb()->BeingDebugged )
    return 0;
  v3 = (_DWORD)NtCurrentPeb()->Reserved9[12] & 0x70;
  if ( v3 )
    return 0;
  v6 = 0;
  do
  {
    *(PVOID *)((char *)&HeapEntry.lpData + v6) = 0;
    v6 += 4;
  }
  while ( v6 < 0x1C );
  while ( 1 )
  {
    hHeap = GetProcessHeap();
    if ( !HeapWalk(hHeap, &HeapEntry) )
      break;
    if ( HeapEntry.wFlags == 4 )
    {
      if ( !getProcess("OllyDBG.exe")
        && !getProcess("OLLYDBG.exe")
        && !getProcess("ollydbg.exe")
        && !getProcess("破解工具包.exe")
        && !getProcess("Snd.exe")
        && !getProcess("TheoDBG.exe")
        && !getProcess("IDebugger.exe")
        && !getProcess("DosaDbg.exe") )
      {
        v3 = 1;
      }
      return v3;
    }
  }
  return v3;
}


这段代码是打算验证常用破解工具打算强行结束进程么?貌似是遗漏了IDA
killerzeno 发表于 2021-11-24 10:41
本帖最后由 killerzeno 于 2021-11-24 10:46 编辑

好久没来玩Crackme了,今天刚好不忙来玩一会儿,哈哈。
祝吾爱越来越好
调试文件:cm-6-2021-11-23
调试系统:单位的破win10
调试工具:随便用,用啥都可以。
CrackMe分析:正确Password:s-h-e-n-p,用了反调试检测等手段,有假密。可爆破,见截图。上班呢,不方便打太多字。就这样Pass了~Over!
Cracker By:Killerzeno

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
头像被屏蔽
Llady 发表于 2021-11-24 12:05
提示: 该帖被管理员或版主屏蔽
T.哥 发表于 2021-11-25 08:40
有点意思,,,,
pipiji233 发表于 2021-11-27 22:00


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表