吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6721|回复: 35
收起左侧

[原创] 汇编0基础小白的超简单CM破解记录

[复制链接]
cui_boran 发表于 2020-8-26 09:34
本帖最后由 cui_boran 于 2020-8-28 13:17 编辑

前言
@Hmily 大大的要求,把这篇帖子发到了脱壳破解区。原文:https://www.52pojie.cn/thread-1253670-1-1.html
大佬们就别看了,写超级简单。
正文
需要准备的软件,说在前面
吾爱破解专用版OllyDbg,链接:https://www.52pojie.cn/thread-350397-1-1.html
CM下载帖子链接:新人第一个CM  https://www.52pojie.cn/thread-1145568-1-1.html
最好有C/C++基础!如果没有汇编基础和破解基础更好(因为在我看来,理解汇编的最好方式不是背指令,而是能够在实践中自己悟出来)!
开始破解!
先解压下载好的ollydbg,然后点击一下修复路径的exe。打开软件,把creakme.exe拖到ollydbg里。
首先我们可以先尝试着打开一下程序(不是在ollydbg里跑),随便输入一个数字,看看他会显示出什么。

发现原来是出现了“破解失败,请继续加油!”这一句话。那么接下来我们要做的就是找到这句话。但是一个一个翻太麻烦了,这里我们点击插件——中文搜索引擎——智能搜索。

看到了文本字符串里有“破解失败,请继续加油!”,双击它,发现跳转到了00AD14B9(在最左边的那一列,这叫做汇编地址)
这时我们应该想一想,怎么样能够使我无论输入什么都能显示成功呢?
我用的办法是这样子的,把原来应该输出“破解失败,请继续加油!”的地方通过改变这一句的汇编指令使它跳转到输出“破解成功!”的地方。
那么用C++翻译出来就是这样子的:
[C++] 纯文本查看 复制代码
#include<iostream>
using namespace std;
int main(){
    int a;
    cin>>a;
    if(a==3){
         cout<<"你成功了!";
    }
    else{
         cout<<"你失败了!";
    }
    system ("pause");
}

改成:
[C++] 纯文本查看 复制代码
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
if(a==3){
aaa:cout<<"你成功了!";
}
else{
goto aaa;
}
system ("pause");
}

这样的话无论你怎么输入都是成功的。
那C++里有goto,可是汇编里没有goto怎么办.....
我的想法是这样的:当我们点到某些行的时候,会出现红箭头(起始位置)或者白箭头(结束位置)。那箭头的起始位置那一行都会出现一个指令,不知道你注意到了吗。
[Asm] 纯文本查看 复制代码
jmp XXXXXXXX

这里的XXXXXXXX是跳转后的汇编地址。
所以我们就可以知道,如果要跳转的话,指令是这样的:jmp [汇编地址](需要双击某一个地址的指令才能改)
也就是把00AD14B9的内容从
[Asm] 纯文本查看 复制代码
mov edx,0xAD322C

改成
[Asm] 纯文本查看 复制代码
jmp 00AD1429


注意:不能直接跳转到写着成功提示的那一个位置,要再往前,看到
[Asm] 纯文本查看 复制代码
msvcp140.std::cout

【c语言std标准格式输出指令】才行

为什么呢?你可以这样理解(这是C++一个输出的部分):
[C++] 纯文本查看 复制代码
cout<</*这相当于00AD1429的部分*/"破解成功!";/*这相当于00AD1430的部分*/
):
这样就相当于无论成不成功都可以跳转到成功指令。
然后运行程序。

这就成功啦!
写在后面
其实这也是我的第一个破解程序,之前没学过破解、ollydbg使用、汇编语言,共耗时1个小时左右。
总结了几条很重要的地方:
1.不要总是看着别人破解,自己试一试才是最重要的。看别人的永远不会!因为每一个CM都是不一样的,不要当“云破解带师”。
2.想到怎么样creak之后就不要因为“自己不会汇编指令”、“自己不会ollydbg使用”做借口。只要你能想到怎样破解,你就一定能想到怎样实现。这就是一个破解论坛,你不会还吾爱破解里搜索或者询问。实在不会的还可以at大神啊,比如Hmily、小生我怕怕这些大佬们,随便提点你一句都够你学习一个月的了。不要害怕问别人。
3.没有必要学习汇编之后采开始破解,像我就没学过汇编,只是根据C++编程的经验加上百度就能明白某些指令的意思。不要总是为不会creak找借口。
4.看到简单的CM一定要去尝试,而不是写“哇塞,看起来好厉害哦,围观大佬!”,这样的话你围观一万年也学不会,一定要参与进去,无论有没有破解成功。(即使没有成功可能还有大佬来提点你呢)

免费评分

参与人数 25吾爱币 +28 热心值 +23 收起 理由
锐不可挡 + 1 我很赞同!
wuliwuli + 1 热心回复!
aatrox、 + 1 + 1 用心讨论,共获提升!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
viva2020 + 1 + 1 用心讨论,共获提升!
MancoCL + 1 谢谢@Thanks!
iteamo + 2 + 1 热心回复!
wCoding + 1 + 1 用心讨论,共获提升!
小夫哥 + 1 + 1 热心回复!
乐子蜀稷233 + 1 + 1 我很赞同!
macolma + 1 谢谢@Thanks!
枫叶江南 + 1 + 1 谢谢@Thanks!
zxc123Qwe789 + 1 + 1 热心回复!
北风那个吹 + 1 + 1 我很赞同!
小哥9527 + 1 + 1 热心回复!
血纹21 + 1 + 1 我很赞同!
Zkai-zhang + 1 + 1 谢谢@Thanks!
moshouhun + 1 + 1 用心讨论,共获提升!
san4san + 1 + 1 我很赞同!
zxtwyd + 1 + 1 我很赞同!
小小的石头13 + 1 + 1 我很赞同!
le此不疲 + 1 谢谢@Thanks!
huihua + 1 用心讨论,共获提升!
legendary666 + 1 + 1 希望你将来能在吾爱破解论坛学到很多知识和技术。
Brand1209 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

 楼主| cui_boran 发表于 2020-8-26 09:36
顺便加一下这个CM的算法分析
[C++] 纯文本查看 复制代码
//写在前面:算法分析
//其实也没有用到算法吧
//就是把秘钥Tb8C4k2pMV改成assic码来防止破解了(但是我没管他因为我是爆破的hhhh)
//用了指针函数(多此亿举,可能是作者想装13) 
//然后用了if判断
//然后....就没然后了,就这些 
 
#include<iostream>
#include<conio.h>
#include<string>
 
using namespace std;
 
void success(string);
void fail(string);
 
int main()
{
    char* a = new char[11]{ 84,98,56,67,52,107,50,112,77,86,0 };//指针a=列表是Tb8C4k2pMV的ASCII码十进制下对应的数字和字母
    string password;
    void(*b)(string) = NULL;//指针B是空 
    cout << "璇疯緭鍏ュ瘑鐮侊細" << endl;//cui_boran加,作者用的vs,我用的dev-c++,会出现乱码。原文->请输入密码: 
    cin >> password;
    for (unsigned int i = 0; i < password.size(); ++i)
    {
        if (0 <= password[i] <= 112)//写的神马玩意,语法是错的.....就是这个导致了CM中出现了bug 
        {
            b = fail;
        }
    }
    if (password==a)
    {
        if (b != fail)
        {
            b = success;
        }
    }
    b(password);
    _getch();
    return 0;
}
 
void success(string password)
{
    char* a = new char[11]{ 84,98,56,67,52,107,50,112,77,86,0 };//Tb8C4k2pMV
    if (password != a)
    {
        fail(password);
        return;
    }
    cout << "鐮磋В鎴愬姛锛屾劅璋㈡偍鐨勫弬涓庯紒" << endl;//cui_boran加,作者用的vs,我用的dev-c++,会出现乱码 原文->破解失败! 
    return;
}
 
void fail(string password)
{
    cout << "鐮磋В澶辫触锛岃缁х画鍔犳补锛? << endl;//cui_boran加,作者用的vs,我用的dev-c++,会出现乱码 原文->破解成功,感谢您的参与! 
    return;
}
solly 发表于 2020-8-26 12:29
cui_boran 发表于 2020-8-26 09:36
顺便加一下这个CM的算法分析
[mw_shl_code=cpp,true]//写在前面:算法分析
//其实也没有用到算法吧

在 Dev-C++ 中复制代码前,先启动中文输入法,就不会乱码了。
头像被屏蔽
细水流长 发表于 2020-8-26 11:23
nu0l 发表于 2020-8-26 11:23
tql,学习逆向第一天
aristan 发表于 2020-8-26 11:28
学习学习,虽然可能看不懂唉
byh3025 发表于 2020-8-26 11:30
goto aaa的地址在哪里
赤耳听风 发表于 2020-8-26 11:43
学习,学习,学习
18834161486 发表于 2020-8-26 12:47
return-void
 楼主| cui_boran 发表于 2020-8-26 13:11
solly 发表于 2020-8-26 12:29
在 Dev-C++ 中复制代码前,先启动中文输入法,就不会乱码了。

啊,谢谢提醒
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-27 00:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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