吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 43328|回复: 185
收起左侧

[原创] 【深入理解AES】山西省首届大学生信息安全技能大赛--价值200分的逆向

    [复制链接]
skywilling 发表于 2017-6-22 23:32
本帖最后由 skywilling 于 2017-6-23 17:16 编辑

0x00前言
一直以来都在研究Android的逆向,最近才开始研究PE逆向。这是第一次发关于PE逆向的帖子,所以有什么不妥或错误之处,还请坛友纠正。5月份,山西省举办了首届大学生信息安全技能大赛--个人赛(借助i春秋平台),本人有幸得到了本次大赛中唯一的一道逆向题目(价值200分,属于中级题目)。本文以该题目作为研究对象(题目会在文章末尾的附件给出),下面正式开始题目的初探。。。
0x01初探
当得到这个题目之后,我们需要先了解该题目类型,下面是我得到的题目属性截图:
1.png
显然这是一个windows平台上面的题目,接下来我们看一下这个CrackMe的运行效果
2.png
这里是在cmd中运行的,这里要说一下的是,如果直接双击运行的话,在输入答案之后,程序就会直接退出,看不见“回答错误!!!”这个信息,所以我们需要在cmd中运行,才能看到输入答案后的结果。
明白了运行的效果,我们接下来看一下,这个CrackMe有没有加壳,以及使用了哪些加密算法(看了官方的writeup之后,才知道PEID可以查出来)
3.png 4.png
通过PEID查壳,我们可以看出,该CM没有加壳。而且借助PEID的插件,我们也可以看出来该CM使用了MD5和Rijndael(AES)加密算法。
0x02分析加密流程
分析完了CM加壳和加密情况之后,我们正式开始CM的调试之旅。
5.png
通过动态静态分析,我们在这里看到了MD5加密的特征数。
6.png
F5我们进一步分析,发现该CM对前8字节进行MD5加密(不太熟悉MD5的话可以去补习一下)。
7.png
继续分析,这里是对MD5加密后的密文进行比较,大概的流程如下:
8.png
这可以看作是一个解方程组的过程,最后解出的结果是:
a=0x4d2ea664

b=0xd50fa3b6

c=0x3f67863b

d=0x9560e59b

那么MD5密文就是64a62e4db6a30fd53b86673f9be56095

因为MD5加密是不可逆的,也就是说MD5加密是没有解密算法的,这里就需要我们借助在线的MD5解密平台了。

9.png
通过在线解密,我们看到明文是ichunqiu,接下来,我们继续分析。

10.png
继续分析,我们发现这里对剩下的字符串长度进行了比较,可以看出来,如果剩下字符串长度不等于0x10就退出,所以这里的字符串长度一定是0x10。

11.png
在这里对剩下字符串判断,是否是大写字母,到这里我们可以得到“字符串是16字节的大写字母字符串”这个结论。

12.png
往下分析,我们看到,在这里以FROMYWWAY作为密钥,对16字节的字符串进行了维吉尼亚加密。

13.png
最后到了这里就是AES加密了,这里就不再具体看汇编代码了,值得一提的是,这里用的AES加密模式CBC模式。

因为使用的是AES-CBC加密,所以需要一个IV,在这里,我们看到IV就是ichunqiu的MD5密文。

15.png
在这里是比较AES加密后的结果,比较数据是:

16.png
17.png
到这里加密流程就分行完了,接下来详细对加密进行分析。
0x03加密详解
通过对加密流程的分析,我们可以得到加密流程如下:
加密流程图.png
在这里我们主要要找的明文是全是大写字母的16字节字符串,所以我们需要详细分析一下AES加密流程。
18.png
[C] 纯文本查看 复制代码
void func6(unsigned char*mi,unsigned char*key,unsigned char*md5) {
        int i;
        //轮密钥加
        for (i = 0; i < 0x10; i++) {
                mi ^= key;
        }
        for (i = 1; i < 10;i++) {
                func4(mi,key,i);
                func5(mi); //列混淆
        }
        func4(mi,key,10);
        for (i = 0; i < 0x10; i++) {
                mi ^= md5;
        }
}

[C] 纯文本查看 复制代码
void func4(unsigned char*mi,unsigned char*key,int k) {
        int i, j;
        unsigned char a, b;
        unsigned char *c,*d;
        //向下列移位
        /*
        state’[j] = state[(4+i-j)%4][j]
        */
        a = mi[9];
        b = mi[0xD];
        mi[0xD] = a;
        a = mi[5];
        mi[9] = a;
        a = mi[1];
        mi[5] = a;
        a = mi[0xA];
        mi[1] = b;
        b = mi[2];
        mi[2] = a;
        a = mi[0xE];
        mi[0xA] = b;
        b = mi[6];
        mi[6] = a;
        a = mi[7];
        mi[0xE] = b;
        b = mi[3];
        mi[3] = a;
        a = mi[0xB];
        mi[7] = a;
        a = mi[0xF];
        mi[0xB] = a;
        mi[0xF] = b;
        //字节替换
        d = mi;
        for (i = 0; i < 4;i++) {
                c = d;
                for (j = 0; j < 4;j++) {
                        a = *c;
                        c += 4;
                        a=table3[a];
                        *(c - 4) = a;
                }
                d++;
        }
        //轮密钥加
        for (i = 0; i < 0x10; i++) {
                mi ^= *(key-0x10*k+i);
        }
}

这就是我分析出来的AES加密流程代码,大致分为以下几个流程:
1.密钥扩展
2.10轮加密变换
3.矩阵行列互换
AES加解密流程.png
通过对标准AES的加密流程的分析,我们来分析一下,CM用的AES加密流程是什么样的?
根据我编写的加密代码,AES的加密流程是:
1.轮密钥加
2.(向下列移位,字节替代,列混淆)9轮加密
3.向下列移位,字节替代
4.异或MD5
通过比较,我们发现这里的AES加密过程事实上是一个标准的AES解密过程

但是如果我们足够细心,还可以发现一处不同之处,明明在标准的AES加密解密过程中,进行的是行移位,但是在CM中却是列移位。按我的理解是,因为在最后进行了矩阵的行列互换导致的吧,这一点我依然持保留意见。
详细分析了加密流程,写出解密代码就简单多了。加解密代码我都会在附件中给出。
0x04结语
19.png
最后以成功的效果图作为结尾。
附件: http://pan.baidu.com/s/1mi3beeG 密码: 6
xjf
版权声明:允许转载,但是一定要注明出处。

免费评分

参与人数 79吾爱币 +84 热心值 +71 收起 理由
好先生cx + 1 + 1 谢谢@Thanks!
97本科僧 + 1 + 1 热心回复!
hhjjqq110 + 1 + 1 用心讨论,共获提升!
whdfog + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
方天化。 + 1 + 1 谢谢@Thanks!
luren_甲 + 1 + 1 用心讨论,共获提升!
Sakura_52pojie + 1 + 1 用心讨论,共获提升!
狂战之巅 + 1 用心讨论,共获提升!
helloword121 + 1 + 1 谢谢@Thanks!
SomnusXZY + 1 + 1 热心回复!
yangkaixin + 1 + 1 请受小弟一拜虽然我看不懂···..
xing554123464 + 1 + 1 热心回复!
as36601987 + 1 + 1 小弟膜拜
ZjyCjy + 1 + 1 我很赞同!
liukaile123 + 1 + 1 谢谢@Thanks!
kevin_zcwen + 1 + 1 用心讨论,共获提升!
haibodongwu + 1 + 1 见到不一样的世界,年轻人更优秀啊
iNIC + 1 谢谢@Thanks!
至尊舞帝 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
俊之霜 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
shadowxjp + 1 + 1 谢谢@Thanks!
SU1984 + 1 + 1 谢谢@Thanks!
西部飞侠 + 1 + 1 用心讨论,共获提升!
screaming0523 + 1 + 1 用心讨论,共获提升!
人间渡 + 1 + 1 我很赞同!
d_apple + 1 + 1 真厉害
djzhao + 1 + 1 用心讨论,共获提升!
GG0 + 1 + 1 我很赞同!
52小乔 + 1 + 1 用心讨论,共获提升!
gongjiankk + 1 鼓励转贴优秀软件安全工具和文档!
use1230 + 1 + 1 热心回复!
jujugou2009 + 1 + 1 我很赞同!
helen6478 + 1 + 1 谢谢@Thanks!
laomacao + 1 + 1 我很赞同!
新闻连泼 + 1 + 1 我很赞同!
Shrungior + 1 + 1 用心讨论,共获提升!
drw168 + 1 + 1 用心讨论,共获提升!
暮色晨曦 + 1 + 1 用心讨论,共获提升!
流川枫 + 1 用心讨论,共获提升!
vale + 1 + 1 我很赞同!
有所信仰 + 1 + 1 我很赞同!
poboren + 1 + 1 已答复!
burl + 1 + 1 已答复!
静叶流云 + 1 + 1 热心回复!
ljypaul2011 + 1 + 1 谢谢@Thanks!
AngelWings + 1 + 1 热心回复!
ClearLover + 1 + 1 评分是因为以前有个众联技术论坛的大牛名字和你一样,不知道是否本人
429338728 + 1 + 1 谢谢@Thanks!
123-木头人 + 1 + 1 用心讨论,共获提升!
leew1229 + 1 谢谢@Thanks!
2864095098 + 1 + 1 热心回复!
MagicnoBob + 1 + 1 谢谢@Thanks!
smile1110 + 3 + 1 了不起
厚道 + 1 + 1 希望老师多出一些教程
jaffa + 1 谢谢@Thanks!
myqqq + 2 + 1 热心回复!
intcry + 1 + 1 我很赞同!
wangxiaohan + 1 用心讨论,共获提升!
taczer + 1 + 1 我很赞同!
闷骚小贱男 + 1 在线MD5解密并不是所有的都能解密的吧。。
等待记忆中 + 1 + 1 谢谢@Thanks!
夏雨微凉 + 1 + 1 确实厉害!
头狼 + 1 + 1 前途无量
擒勒个兽 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
战地记者丶 + 3 + 1 我很赞同!
zfzzqlx + 1 + 1 热心回复!
wjh + 1 + 1 谢谢@Thanks!
oxxo119 + 1 + 1 我很赞同!
z79097397 + 1 + 1 用心讨论,共获提升!
风雨雷电 + 1 + 1 已答复!
sky_waver + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mjchjs6 + 1 + 1 支持一下
xiaofengzi + 1 + 1 热心回复!
610100 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
swx5201314 + 1 + 1 谢谢@Thanks!
w4526423 + 1 + 1 已答复!
WYWZ + 1 + 1 谢谢@Thanks!
cyril2017 + 1 谢谢@Thanks!
citizen + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

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

AngelWings 发表于 2017-6-26 10:07
本帖最后由 AngelWings 于 2017-6-26 12:53 编辑

ImageBase+0x34C4   MD5生成对比密文

0026FDAC  4D2EA664
0026FDB0  D50FA3B6
0026FDB4  3F67863B
0026FDB8  9560E59B

输入 ichunqiu =MD5= 64a62e4db6a30fd53b86673f9be56095 与百度 一致

01173642   .  B9 04000000   mov ecx,0x4                                         ;  ecx=4
01173647   .  C1E1 00       shl ecx,0x0                                         ;  ecx=4
0117364A   >  8B55 F0       mov edx,dword ptr ss:[ebp-0x10]                     ;  变量指针
0117364D   .  8B440A 4C     mov eax,dword ptr ds:[edx+ecx+0x4C]                 ;  D50FA3B6
01173651   .  33C9          xor ecx,ecx                                         ;  0
01173653   .  BA 04000000   mov edx,0x4                                         ;  edx=4
01173658   .  D1E2          shl edx,1                                           ;  edx=8
0117365A   .  8B75 F0       mov esi,dword ptr ss:[ebp-0x10]                     ;  变量指针
0117365D   .  33FF          xor edi,edi                                         ;  edi=0
0117365F   .  034416 4C     add eax,dword ptr ds:[esi+edx+0x4C]                 ;  D50FA3B6+3F67863B=147729F1
01173663   .  13CF          adc ecx,edi                                         ;  ecx+edi+cf=ecx=1
01173665   .  BA 04000000   mov edx,0x4                                         ;  edx=4
0117366A   .  6BD2 03       imul edx,edx,0x3                                    ;  edx=b
0117366D   .  8B75 F0       mov esi,dword ptr ss:[ebp-0x10]                     ;  变量指针
01173670   .  33FF          xor edi,edi                                         ;  edx=0
01173672   .  034416 4C     add eax,dword ptr ds:[esi+edx+0x4C]                 ;  D50FA3B6+3F67863B+9560E59B=A9D80F8C
01173676   .  13CF          adc ecx,edi                                         ;  ecx+edi+cf=ecx=1
01173678   .  8945 E0       mov dword ptr ss:[ebp-0x20],eax                     ;  250F4BE8
0117367B   .  894D E4       mov dword ptr ss:[ebp-0x1C],ecx
0117367E   .  817D E0 8C0FD>cmp dword ptr ss:[ebp-0x20],0xA9D80F8C

比较 4块MD5 计算 进行比较 == 4个密文!

总结 在不知道 明文MD5的情况下 无解吧!这是我认为的!

MD5 解不开 后面的 算法 一个也解不开!

不知道楼主是 怎么解开 MD5的 !我是知道 明文的情况下才知道!否则后面的算法一个也解不开!

完全依赖于 MD5!

1

1

2

2

3

3

4

4

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
Maxle + 1 + 1 谢谢@Thanks!
helloword121 + 1 + 1 用心讨论,共获提升!

查看全部评分

heoo 发表于 2017-6-23 10:19
LjeA 发表于 2017-6-23 10:25
987857149 发表于 2017-6-23 10:57
一脸懵逼新手路过
pwp 发表于 2017-6-23 11:07
留个脚印, 等看懂的时候看
168pojie 发表于 2017-6-23 12:01
学习了。
 楼主| skywilling 发表于 2017-6-23 12:03
heoo 发表于 2017-6-23 10:19
楼主也是山西的吗

只能算半个山西人吧
cyril2017 发表于 2017-6-23 12:23
楼主很历害!学习了!
1254981099 发表于 2017-6-23 14:01
楼主很厉害  !!!
forrest888 发表于 2017-6-23 14:36
楼主很厉害  !!!收藏了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 14:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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