吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2195|回复: 19
收起左侧

[CrackMe] 算法非常简单的CM

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

本帖最后由 iTruth 于 2020-7-25 14:03 编辑

C++编写 无壳 有简单的反附加 有一片花园
源码解码密码就是你输入的注册码

成功:


这次不知道有没有人能解出来

静态编译的 CrackMe:


源码:

本帖子中包含更多资源

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

x

免费评分

参与人数 13吾爱币 +17 热心值 +11 收起 理由
陈世界 + 1 + 1 热心回复!
Liu159 + 1 热心回复!
keyro + 1 + 1 谢谢@Thanks!
Aa135053 + 1 + 1 热心回复!
Jeraxx + 1 + 1 谢谢@Thanks!
yinuxy + 1 + 1 热心回复!
changliwei + 1 + 1 热心回复!
gaoyonggang66 + 1 + 1 热心回复!
CrazyNut + 6 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Air霸气 + 1 + 1 谢谢@Thanks!
andywujb + 1 + 1 我很赞同!
无名呀 + 1 我很赞同!
deyouxin + 1 我很赞同!

查看全部评分

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

qzhsjz 发表于 2020-7-25 13:56
gcc写的程序需要带个运行时才能运行
solly 发表于 2020-7-25 21:47
本帖最后由 solly 于 2020-7-25 21:51 编辑
iTruth 发表于 2020-7-25 21:25
能说说你的分析过程吗?

跟踪用内存硬件中断,中断在第一个输入字符,然后反过来把每个字符3个计算过程的本地变量的值的来源搞清楚,最后会跟至循环变量i或查表取值计算,并且输入不同密码,多次跟踪,来源值不会有变化,中间计算数据只与i有关,所以解码时,就去除了所有的中间计算(如查表计算,+mod2, -mod5),只剩两个:加减合成一个,异或一个。
至于为啥是解码“success”,因为我前面中断了 "enter:",后面中断解码后数据时,也会到中断在相同的C系统库函数代码中,所以猜想这个输出字符串就是解码结果,并且,密码输错时会输出乱码,也是一个提示。
solly 发表于 2020-7-25 22:32
本帖最后由 solly 于 2020-7-25 22:33 编辑

解码程序也可以这样写,更能体现中间变量计算的结果是与i相关的常量了:
[C++] 纯文本查看 复制代码
#include <iostream>
#include <stdio.h>

int main(int argc, char** argv) {
        char suc[] = "success";
        char mod[] = {1, 3, 0, 2, -1, 1, 3};  //// 两次 mod 计算最后中间变量结果 
        char tbl[] = {0x21, 0x25, 0x36, 0x0D, 0x04, 0x09, 0x10}; //// 查表计算最后中间变量结果 
        
        char pwd[8];
        int i=0;
        do {
                pwd[i] = (suc[i] + mod[i]) xor tbl[i]; //// 解码 
        } while ((++i)<6);
        pwd[i] = '\0';
        
        printf("password: %s\n", pwd);
        
        return 0;
}
solly 发表于 2020-7-25 21:21
密码解码后就是显示用的 success.



算法虽说简单,但计算过程膨胀得利害,混淆得也利害。。。。
[C++] 纯文本查看 复制代码
#include <iostream>
#include <stdio.h>

int main(int argc, char** argv) {
	char suc[] = "success";
	
	char pwd[8];
	pwd[0] = (suc[0] + 1) xor 0x21;
	pwd[1] = (suc[1] + 3) xor 0x25;
	pwd[2] = (suc[2] + 0) xor 0x36;
	pwd[3] = (suc[3] + 2) xor 0x0D;
	pwd[4] = (suc[4] - 1) xor 0x04;
	pwd[5] = (suc[5] + 1) xor 0x09;
	pwd[6] = (suc[6] + 3) xor 0x10;
	pwd[7] = '\0';
	
	printf("password: %s\n", pwd);
	
	return 0;
}

本帖子中包含更多资源

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

x

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
iTruth + 2 + 1 太优秀了,果然大佬就是大佬!

查看全部评分

 楼主| iTruth 发表于 2020-7-25 13:57
qzhsjz 发表于 2020-7-25 13:56
gcc写的程序需要带个运行时才能运行

是吗,那我等下静态编译一个
 楼主| iTruth 发表于 2020-7-25 14:04
qzhsjz 发表于 2020-7-25 13:56
gcc写的程序需要带个运行时才能运行

好了,要不要试试看?
WoShiXXX 发表于 2020-7-25 14:25
GCC编译器……这个论坛以前好像没人写过GCC的CM,不太知道怎么解,OD拖进去看看
WoShiXXX 发表于 2020-7-25 14:26
WoShiXXX 发表于 2020-7-25 14:25
GCC编译器……这个论坛以前好像没人写过GCC的CM,不太知道怎么解,OD拖进去看看

GCC编译器……以前好像没人写过GCC的CM,不太知道怎么解,OD拖进去看看
archer93 发表于 2020-7-25 17:13
破解新人不懂。。。是看着源码破解,还是直接破exe啊
 楼主| iTruth 发表于 2020-7-25 17:22
archer93 发表于 2020-7-25 17:13
破解新人不懂。。。是看着源码破解,还是直接破exe啊

源码是加密过的,密码就是这个CM的答案
liulin188 发表于 2020-7-25 18:02
是时候去再学一遍C了
gaoyonggang66 发表于 2020-7-25 19:29
学习了,膜拜
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-1 03:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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