吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6751|回复: 21
收起左侧

[CrackMe] 一道北邮面向全国高中生自主招生ctf的re题

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

本帖最后由 zeromovie 于 2018-4-7 13:03 编辑

实在是不会解一堆v变量,应该如何一步步转换伪c代码?

统一回复:这是题目已经过去好久了才发的题目。主要是分享题目和思路,而不是求代答。分析第二页就有,应该是没违规吧?全部看完再喷也不迟

现在的问题是我IDA的f5代码和所谓的rc4真的对应不上,尤其是字符数组的指针那里,感觉不懂这个加密算法的几乎无法解题。

本帖子中包含更多资源

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

x

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
千百度° + 1 + 1 未能按照本版块发帖要求发帖,请仔细阅读本版块版规再发帖,谢谢理解!
980359697 + 1 我们帮你做了我门也帮你去上学?搞笑?
玩机小白丶王 + 1 + 1 论坛禁止求脱求破,求助软件分析思路,务必在主题帖中描述清楚你的分析思路.

查看全部评分

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

1364847132 发表于 2018-4-6 04:40
本帖最后由 1364847132 于 2018-4-6 05:54 编辑

[Asm] 纯文本查看 复制代码
#include<iostream>
#include<string>
using namespace std;
char a[256];
string equ="7C553E5F0EB4CCB977BF6BD960E0B968FB11CED2154B0EB5F73E51EE514D5A9C01A0C53AD038";
void init(char *s)
{
    char s2[256];
    for(int i=0;i<256;i++)
    {
        a[i]=i;
        s2[i]=s[i%18];
    }

    int add=0;
    for(int i=0;i<256;i++)
    {
        int tmp=a[i];
        add=(a[i]+s2[i]+add)%256;
        a[i]=a[add];
        a[add]=tmp;
    }
}
string start(string a2)
{
    char s[]="SimpleCryptography";
    init(s);
    int add=0;
    char ques[256];
    char *pri=ques;
    for(int i=0,j=1;i<a2.size();i++,j=(j+1)%256)
    {
        unsigned int temp=a[j];
        add=(a[j]+add)%256;
        add=add & 0xff;
        a[j]=a[add];
        a[add]=temp;

        unsigned int temp2=(a[((a[add]+a[j])%256) & 0xff]^a2[i]) &0xff;

        a2[i]=temp2;
        sprintf(pri,"%02X",temp2);
        pri+=2;
    }
    return string(ques);
}
int main()
{
    string ans="";
    for(int j=0;j<38;j++)
    {
        for(int i=1;i<256;i++)
        {
            string temp=ans+(char)i;
            if(string(equ,0,2*(j+1))==start(temp))
            {
                ans=temp;
                break;
            }
        }
    }
    cout<<ans;
    return 0;
}


跑出来的flag是

BUPT{rc4_Cryptography_1sSOEa5y!-_-!!!}



免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
zeromovie + 1 + 1 谢谢@Thanks!某雪也有发了,不过更看好你的
zyl162180 + 1 + 1 热心回复!

查看全部评分

 楼主| zeromovie 发表于 2018-4-6 11:43
转载自看雪 ID:pandaos(无名侠)的解题文档Re2
这道题目也比较简单,比第一题还简单一点,题目用的是 RC4 加密。
RC4 算法如下:
void rc4_init(unsigned char*s, unsigned char*key, unsigned long Len)
{
int i = 0, j = 0;
char k[256] = { 0 };
unsigned char tmp = 0;
for (i = 0; i < 256; i++) {
s[i] = i;
k[i] = key[i%Len];
}
for (i = 0; i < 256; i++) {
j = (j + s[i] + k[i]) % 256;
tmp = s[i];
s[i] = s[j];//交换 s[i]和 s[j]
s[j] = tmp;
}
}
void rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len)
{
int i = 0, j = 0, t = 0;
unsigned long k = 0;
unsigned char tmp;
for (k = 0; k < Len; k++)
{
i = (i + 1) % 256;
j = (j + s[i]) % 256;
tmp = s[i];
s[i] = s[j];//交换 s[x]和 s[y]
s[j] = tmp;
t = (s[i] + s[j]) % 256;
Data[k] ^= s[t];
}
}
代码刚好可以和 401100、4011B0 处的代码吻合,先用肉眼检测是否被魔改,再带观察数据,
最终可下结论,题目采用的是标准 RC4 算法。
很容易找到密文数据:
7C553E5F0EB4CCB977BF6BD960E0B968FB11CED2154B0EB5F73E51EE514D5A9C01A0C53AD038
可以在 401100 处下断得到密钥:
SimpleCryptography
最后编写程序得到 flag:
void main () {
unsigned char s[256] = { 0 };
unsigned char dst[] =
{ 0x7C,0x55,0x3E,0x5F,0x0E,0xB4,0xCC,0xB9,0x77,0xBF,0x6B,0xD9,0x60,0xE0,0xB9,0x68,0xFB,
0x11,0xCE,0xD2,0x15,0x4B,0x0E,0xB5,0xF7,0x3E,0x51,0xEE,0x51,0x4D,0x5A,0x9C,0x01,0xA0,0x
C5,0x3A,0xD0,0x38 };
char * key = "SimpleCryptography";
rc4_init(s, (unsigned char *)key, strlen (key));
rc4_crypt(s, dst, sizeof(dst));
printf(dst);
}
感想 :rc4 算法的解密代码和加密过程也一样,找出密文和密钥是解题的最快方法。这道
题有三点启示。
第一,二进制安全需要熟练掌握各种基本算法的流程以及原理,对算法的关键常量要敏感。
第二,对于一个未知加密算法,可通过代入密文数据测试是否可逆。
第三,对于一个未知加密算法,如果没有提供加密或解密代码,则需要根据逆向并编程实现
另外一半函数,最简单的方法是 angr 符号执行或利用 z3 进行约束求解。
kilkilo502 发表于 2018-4-5 22:35
冰露㊣神 发表于 2018-4-5 22:45

reverse me,还原题目,求算法
都同学 发表于 2018-4-5 22:46
IDA F5呀

免费评分

参与人数 1热心值 +1 收起 理由
zeromovie + 1 就是说F5之后的代码还是感觉难以分析转化

查看全部评分

玩机小白丶王 发表于 2018-4-5 22:46
北邮怎么又把变异GKOD壳发出来了?某安论坛不是早发出教程来了?

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zeromovie + 1 + 1 我特意看了这个板块的发帖要求,这个比赛过去了已经,我应该没有违规吧

查看全部评分

btctw 发表于 2018-4-5 23:41
不明觉厉
头像被屏蔽
萌神淼菥 发表于 2018-4-6 00:13
提示: 作者被禁止或删除 内容自动屏蔽
隨風而飄 发表于 2018-4-6 00:13
台灣高中生路過支持,雖然不明覺厲,但是依然熱愛學習,熱愛編程
菊花朝墙 发表于 2018-4-6 00:35
隨風而飄 发表于 2018-4-6 00:13
台灣高中生路過支持,雖然不明覺厲,但是依然熱愛學習,熱愛編程

有兴趣是好事,保持!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-20 12:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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