吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8901|回复: 49
收起左侧

[CrackMe] 新手初学c语言,做的一个小游戏!

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

本帖最后由 玖公子 于 2019-8-28 19:14 编辑




到现在也学了半个月的C语言,这是我自己做的一个小游戏,用的VC++6.0编译器编写!
这是游戏失败截图!
实在不会字符串加密,程序只能裸奔,纯编译器编写,未添加任何东西!


在此,希望各位前辈能给出分析思路,不要就只有一个截图,楼主破解连门
都没入,就一张图我看不懂!(让我们一起遵守新的版规吧!)
CM区新加版规如下

1.作为一个Cracker在破解别人的CM后,请贴上你的破解和分析思路(只是贴上一个成品图或者成品意义不大)

2.在发布CM被人破解或无人破解一段时间后应该要公开自己CM的代码,或自己贴出破解方式以及过程

3.发布CM须标明是否加壳,编写语言,有无混淆,花指令等等,如有特殊不便告知,须说明。


PS:项目源码和程序一起上传,破解成功后,在命令行会输出压缩包解压密码!







本帖子中包含更多资源

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

x

免费评分

参与人数 15吾爱币 +18 热心值 +13 收起 理由
藏玉琪 + 1 + 1 热心回复!
杀猪用牛刀 + 1 + 1 哈哈哈哈,挺有意思的
陈小度 + 1 + 1 热心回复!
小枫丶 + 1 + 1 用心讨论,共获提升!
dreamlivemeng + 1 + 1 666
wuai-sfg + 1 用心讨论,共获提升!
小菜鸟一枚 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
huyuff + 1 + 1 热心回复!
A咔叽不勒 + 1 + 1 用心讨论,共获提升!
hayb + 1 热心回复!
CrazyNut + 6 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
云幻灭 + 1 + 1 用心讨论,共获提升!
xchenhao + 1 我很赞同!
无名i + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sutaiqiang + 1 + 1 热心回复!

查看全部评分

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

梦游枪手 发表于 2019-8-28 19:49
用IDA分析的结果差不多如下
[C] 纯文本查看 复制代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v1; // eax
  int v4; // eax
  char v6; // [esp-28h] [ebp-80h]
  int v7; // [esp-24h] [ebp-7Ch]
  int v8; // [esp-20h] [ebp-78h]
  int v9; // [esp-1Ch] [ebp-74h]
  int v10; // [esp-18h] [ebp-70h]
  char v11; // [esp-14h] [ebp-6Ch]
  int v12; // [esp-10h] [ebp-68h]
  int *v13; // [esp-Ch] [ebp-64h]
  int v14; // [esp-8h] [ebp-60h]
  int *v15; // [esp-4h] [ebp-5Ch]
  int v16; // [esp+Ch] [ebp-4Ch]
  __int16 v17; // [esp+14h] [ebp-44h]
  int v18; // [esp+18h] [ebp-40h]
  char v19; // [esp+21h] [ebp-37h]
  int v20; // [esp+24h] [ebp-34h]
  human boss; // [esp+30h] [ebp-28h]
  human me; // [esp+44h] [ebp-14h]

  strcpy((char *)&v18, "真密码:");
  strcpy((char *)&v16, "52pojie");
  boss.name[0] = 's';
  boss.name[3] = 's';
  v1 = 0xA;
  v19 = 0;
  v17 = 0;
  strcpy(&v20, "123456789");
  boss.name[0] = 'b';
  boss.name[1] = 'o';
  boss.name[4] = 0;
  boss.attack = 3;
  boss.hp = 0xA;
  me.name[0] = 'm';
  me.name[1] = 'e';
  me.name[2] = 0;
  me.attack = 1;
  me.hp = 0xA;
  do
  {
    if ( me.hp <= 0 )
      break;
    qmemcpy(&v11, &me, 0x14u);
    qmemcpy(&v6, &boss, 0x14u);
    v4 = printresult(v6, v7, v8, v9, v10, v11, v12, (int)v13, v14, (int)v15);
    if ( attack(&boss, &me, v4) <= 0 )
      printf(invaild);
    v1 = boss.hp;
  }
  while ( boss.hp > 0 );
  if ( v1 < 0 || v1 > 0 )
    MessageBoxA(0u, failed, failed, 0x30u);
  if ( me.attack != 1 || boss.attack != 3 )
    MessageBoxA(0u, failed, failed, 0x30u);
  if ( me.hp <= 0 )
  {
    MessageBoxA(0u, failed, failed, 0x30u);
  }
  else
  {
    v15 = &v18;
    printf(aS_0, &v18);
    LOWORD(v16) = v20;
    v13 = &v16;
    BYTE2(v16) = BYTE2(v20);
    printf(aS, &v16);
    system(aPause);
  }
  return 0;
}

虽然有部分错误,但是能看懂就行。
我猜测的human struct定义如下

虽然有判断了me和boss的攻击力,但是没有判断初始化的血量,所以把boss血量改1就能秒了。


一刀劈死无鸭梨。

本帖子中包含更多资源

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

x

免费评分

参与人数 5吾爱币 +5 热心值 +4 收起 理由
Deuez + 1 + 1 大佬请问IDA是咋学的啊,我因为工作需要需要学习使用IDA,请问大佬有什么好.
CrazyNut + 2 + 1 用心讨论,共获提升!
liphily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
帝王Burlk + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
玖公子 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

飞翔病毒 发表于 2019-8-28 21:23
我最多"HELLO WORLD"
下边就进行不下去了
感觉可能是数学和英文差的离谱的原因
 楼主| 玖公子 发表于 2019-8-29 10:22
云梦墨溪 发表于 2019-8-28 22:44
楼主好厉害啊,半个月就有这么好的思路,我以为是打印菜单,然后输入判断技能然后看不 ...

就是你想的这样啊,然后嘿嘿,后面代码都是假的,啥也没干,所以想打赢boss就必须修改游戏数据了!
jidesheng6 发表于 2019-8-28 20:19
本帖最后由 jidesheng6 于 2019-8-28 20:22 编辑


这个是成功的图片

一开始下了一个MessageBoxA断点,断下来了,然后去查看调用的call,在查看跳转的时候网上看会看到什么真密码,下面有个52pojie
这个初步怀疑的用来迷惑的


暂时从MessageBox跳转下手,失败会弹出两次信息框,应该是进行两次对比验证吧,防止别人跳过你的信息框,于是就单步跟,发现you failed这个信息框确实是调用两次,两个跳转改一下
不跳的跳过去,跳的NOP掉

之后单步

堆栈窗口就会出现如下信息,然后运行到输出密码的那个call返回控制台就可以看到了

本帖子中包含更多资源

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

x

免费评分

参与人数 2吾爱币 +3 热心值 +1 收起 理由
CrazyNut + 2 + 1 用心讨论,共获提升!
玖公子 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

 楼主| 玖公子 发表于 2019-8-28 21:44
梦游枪手 发表于 2019-8-28 19:49
用IDA分析的结果差不多如下
[mw_shl_code=c,true]int __cdecl main(int argc, const char **argv, const c ...

腻害了,谢谢你的指导交流!
 楼主| 玖公子 发表于 2019-8-28 22:01
jidesheng6 发表于 2019-8-28 20:19
这个是成功的图片

一开始下了一个MessageBoxA断点,断下来了,然后去查看调用的call,在查看跳转的时 ...

因为我想到之前发的字符串都是一下子被右键中文搜索看出来,直接nop破解了。
所以我就开始初始化了一个假字符串,然后在通过c语言自带的拷贝字符串函数,覆盖掉前面几个字符。
云梦墨溪 发表于 2019-8-28 22:44
楼主好厉害啊,半个月就有这么好的思路,我以为是打印菜单,然后输入判断技能然后看不懂程序了,哈哈哈
冥界3大法王 发表于 2019-8-29 08:37
这个会了也不错,可以用c写注册机了,内嵌汇编代码确实是方便啊。
妙哉春风 发表于 2019-8-29 09:20
我当时做的第一个小游戏是扫雷
流浪星空 发表于 2019-8-29 09:23
飞龙在天,震雷削
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 14:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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