吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3638|回复: 30
收起左侧

[原创] 练习笔记之160Crackme-034

[复制链接]
xiaoyu2032 发表于 2022-9-8 11:30
本帖最后由 xiaoyu2032 于 2022-9-8 11:30 编辑

160CM-034

1. 爆破

  程序打开以后,没有注册按钮和窗口,只有一个uncracked的提示。直接拖进OD中,从头往下看,可以很容易的看出程序流程:

① 判断CRACKME3.key文件是否存在;

② 读取文件内容并判断读取内容的字节数;

③ 将读取到的内容按两个校验算法进行计算,比较结果是否相同。

01.png

  因此,要爆破就需要将上述三处判断的跳转都改到正确的流程上去,需要:

(1)401035处,将jnz short 00401043改为jmp short 00401043;

(2)40106D处,将jnz short 00401037改为nop

(3)40109F处,将je short 00401037改为nop

  上述修改完成后,程序启动后的菜单栏提示已经变成了Cracked的字样,但是没有破解成功的提示框弹窗,还需要在40118A处,将jnz short 004011A3改为nop,这样就全部爆破就完成了。

2. 算法分析

  先分析校验算法1,用IDA打开程序,找到算法子程序401311,按F5得到伪代码,如下图:

03.png

  从伪代码中可以看出,算法依次将每个字节与变量v4(从65到79每次加1)进行异或计算,然后将结果累加,共执行14次。

  然后累加结果再与0x12345678进行异或计算。

  校验算法2很简单,将从文件中读取到的内容,取第15~18字节的内容,当成整型变量值。

  然后比较算法1的异或结果和算法2得到的整型变量是否相等,相等则成功。

  另外,由于注册成功后提示的字符串是异或后的结果,如果要显示希望的字符,则需要先进行异或处理后,将异或处理后的内容当做1~14字节的内容。

  编写注册机算法程序如下:

// 160CrackMe-034.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <math.h>

int _tmain(int argc, _TCHAR* argv[])
{
        char input[50],String1[18];
        int i, j,length;
        int k,temp;
        int code1;
        printf("请输入用户名:");
        scanf_s("%s", input, 50);
        length = strlen(input);
        k = 65;
        //现将用户名异或处理得到长度为14字节的字符串
        for (i = 0; i < 14; i++)
        {
                if (i<length) 
                {
                        String1[i] = input[i] ^ k;
                }
                else
                {
                        String1[i] = 0 ^ k;
                }
                k++;
        }
        j = 0;
        k = 65;
        code1 = 0;
        do
        {
                temp = k ^ String1[j];
                k++;
                code1 = code1+temp;
                if (!temp)
                        break;
                j++;
        } while (k != 79);
        code1 = code1 ^ 0x12345678;
        String1[14] = code1 & 0xFF;
        String1[15] = (code1 & 0xFF00)>>8;
        String1[16] = (code1 & 0xFF0000) >> 16;
        String1[17] = (code1 & 0xFF000000) >> 24;
        char * path = "z:\\CRACKME3.KEY";
        FILE * pfile;
        fopen_s(&pfile, path, "w");
        fwrite(String1, sizeof(byte), 18, pfile);
        fclose(pfile);
        system("pause");
        return 0;
}

  输入用户名helloworld,生成key文件后,将文件复制到程序目录下,运行程序,验证成功。

02.png

3. 总结

  这道题由于异或计算会得到非可见的ASCII码字符,因此注册机输出文本信息会有不可见的字符,需要直接二进制写入key文件。

免费评分

参与人数 14吾爱币 +17 热心值 +12 收起 理由
wangxingzhe + 1 我很赞同!
AZUZXC123 + 1 热心回复!
668l + 1 + 1 谢谢@Thanks!
Cheer_Sky + 1 + 1 我很赞同!
wasdzjh + 1 + 1 用心讨论,共获提升!
传说中的风男子 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
这是追求不是梦 + 1 + 1 热心回复!
zyuncle + 1 我很赞同!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
1MajorTom1 + 1 热心回复!
浮尘晓梦 + 1 谢谢@Thanks!
唐小样儿 + 1 + 1 我很赞同!
ShaaaronW + 1 + 1 谢谢@Thanks!
Xiangzhisuoxin + 1 + 1 我很赞同!

查看全部评分

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

q197843 发表于 2022-9-8 12:10
谢谢大佬
头像被屏蔽
shayu2021 发表于 2022-9-8 18:06
XgbbtmjLnn 发表于 2022-9-8 18:40
戰龍在野 发表于 2022-9-8 21:59
谢你的坚持分享学习了
Sealsclerk 发表于 2022-9-8 22:14
感谢分享,讲得很清楚
LHCAILGT 发表于 2022-9-9 12:15
感谢破解 ,
bjznhxy 发表于 2022-9-9 17:25
谢谢楼主分享
zym01zym 发表于 2022-9-9 20:20
厉害了奥
zcdwazhl 发表于 2022-9-9 23:02
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 16:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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