1- #### so 实现AES算法:
2-
3- ```
4- 一个AES算法我们要关注哪些内容?
5- 是AES-128 还是 AES-192 还是 AES-256
6- 明文是什么
7- 密钥是什么
8- 什么模式 ECB还是CBC还是其他
9- 如果是非ECB模式,那么IV是什么
10- 明文填充模式呢,是PCKS#7吗?
11- ```
12-
13- 1 . 调用open_ssl封装的EVP。传入结构体,百度搜索,查看参数信息。
14-
15- ![ 1] ( ./pic/1.png )
16-
17- 2 . 直接使用底层的代码,通过hook各个函数,得到信息。
18-
19- ![ 2] ( ./pic/2.png )
20-
211#### 简介
222
233```
@@ -80,6 +60,8 @@ aes把明文放在一个4*4的矩阵当中,表中每个元素是一个字节
8060```
8161AES-128 ----10轮运算
8262
63+ if not ECB: 明文 xor iv
64+
8365首先是一个初始变换 --addRoundKey
8466- 明文 xor 密钥k (这个key就是我们输入的种子密钥)
8567然后是9轮相同的运算
@@ -243,7 +225,8 @@ w0 w1 w2 w3 w4 w5 w6 .....w43
243225因为是aes-128, 所以每一轮密钥是16个字节,4个w是一轮的密钥。
244226
245227初始化的addRoundKey用到的key:
246- key0 = w0w1w2w3 = d42711aee0... 我们的种子密钥,用来做初始变换。根据我们传入的种子密钥获得10个新的密钥, hook初始变化 addroundKey的异或后面的key,就是我们输入的种子key。
228+ key0 = w0w1w2w3 = d42711aee0bf98f1b8b45de51e415230我们的种子密钥,用来做初始变换,根据我们传入的种子密钥获得10个新的子密钥。
229+ hook初始变化addroundKey的异或后面的key,就是我们输入的种子key。
247230
2482319轮运算用到的key分别是:
249232 k1: w4w5w6w7
@@ -292,7 +275,27 @@ ida中特征:
292275> <<31 分单双数
293276> <<30 看是否为4的倍数
294277
295- #### 拓展
278+ #### so 实现AES算法:
279+
280+ ```
281+ 一个AES算法我们要关注哪些内容?
282+ 是AES-128 还是 AES-192 还是 AES-256
283+ 明文是什么
284+ 密钥是什么
285+ 什么模式 ECB还是CBC还是其他
286+ 如果是非ECB模式,那么IV是什么
287+ 明文填充模式呢,是PCKS#7吗?
288+ ```
289+
290+ 1. 调用open_ssl封装的EVP。传入结构体,百度搜索,查看参数信息。
291+
292+ 
293+
294+ 2. 直接使用底层的代码,通过hook各个函数,得到信息。
295+
296+ 
297+
298+ #### 拓展
296299
297300```
298301哈希算法:签名校验
@@ -323,6 +326,29 @@ findcrypt 可以找到特征
323326```
324327
325328```
329+ CBC模式分析:
330+ key: 0123456789abcdef str
331+ IV : 1111111111111111 str
332+ input: 0123456789abcdef 0123456789abcdef 两个分组长度
333+ result:
334+ e5b72c539aae45dea57686570b0b5156
335+ 67529ac954d9dee130a26b116dc601c4
336+
337+ 第一步:
338+ 首先 iv xor 第一个分组的明文块0123456789abcdef 得到 hex:
339+ 01 00 03 02 05 04 07 06 09 08 50 53 52 55 54 57
340+ 结果进行ECB模式加密得到: e5b72c539aae45dea57686570b0b5156
341+ 第二步:
342+ 第二个分组的明文块和第一个秘文块做异或然后进行AES ECB模式加密
343+ e5b72c539aae45dea57686570b0b5156(hex) xor 0123456789abcdef 得到 hex:
344+ d5 86 1e 60 ae 9b 73 e9 9d 4f e7 35 68 6f 34 30
345+ 结果进行ECB模式加密得到: 67529ac954d9dee130a26b116dc601c4
346+ ```
347+
348+ ```
349+ 填充pkcs#7
350+ padding是必须存在的,如果明文已经是16个字节了, 那么也要填充10101010101010101010101010101010
351+
326352输入:pcks#7 000102030405060708090a0b0c0d0e0f
327353输出:a07999f0e2bfbe16f99593e984a449b7 377222e061a924c591cd9c27ea163ed4
328354
@@ -331,13 +357,64 @@ aes一个分组会填充10101010101010101010101010101010
331357
332358验证:
333359hex
334- 01 15个0f的字节
360+ 01 15个0f的字节 (差15个字节,此时明文是hex,补充hex,hex(15) = 0xf,就是15个0f)
33536101 02 14个0e
336- 13 个 d
337- 12 个 c
338- 11 个 b
339- 10个a
362+ 01 02 03 13个0d
363+ 01 02 03 04 12个0c
364+ 01 02 03 04 05 11个0b
365+ 01 02 03 04 05 06 10个0a
366+ 注意:类似0f这种padding点 pkcs #7 ,在hook的时候可以看出他是明文。
367+ ```
368+
369+ ```
370+ 在初始化的addRoundKey时是可以通过异或获得密钥的,但是因为工作模式的不同,是获取不到明文的,例如CBC模式,开始会和iv做异或。
371+ ```
372+
373+ 
374+
375+ 
376+
377+ 
378+
379+ 手动验证发现:两个值异或就等于input1,说明r8和r6寄存器的值就是iv和明文。(m 0x3742)
380+
381+ 
382+
383+ 发现明文和input2做异或,那么他就是第一轮的addRoundKey的 明文 oxr 密钥。
384+
385+ **SBOX不同表现形式**
386+
387+ 
388+
389+ 初始置换addRoundKey之后就应该是 S盒替换 为什么这个循环里面都不是S盒,反而是循环外面出现了S盒呢?被魔改了吗?
390+
391+ 在github或者谷歌搜索: 代码`RijnDael_AES_3629C`里第一个元素`0xC66363A5`,看看有没有线索,发现是有的。[链接](https://github.com/Spittie/advancedtomato-ac/blob/f8d44eac51c1c7c45daf3e5ec324a59549aca6fc/release/src/router/libsodium/src/libsodium/crypto_stream/aes256estream/hongjun/aes-table-be.h)。
392+
393+ 根据网址里面的命名进行改名,T0就是代码里RignDeal_AES_3629Czaai第一个元素`0xC66363A5`根据网址里查到的,然后进行命名修改。
394+
395+ 
396+
397+ 
398+
399+ 变成了 T0、T1、T2、T3进行操作。从4个表中取值进行操作。其实是实现方式不同而已。
400+
401+ 正常用SBOX实现的叫 按照算法描述去实现,样本中这种叫查表法。
402+
403+ 查表法的好处:以空间换时间加快AES运算,把subBytes、shiftRows、mixcolumn前三个步骤混在一起去了,得到了4个T表。
340404
341- 101010
342405```
406+ 加解密过程中,加密用Tbox1-4,解密用Tbox5-8,前9轮用T,为什么最后一轮用Sbox不用查表法呢?
407+ 1-9轮 把subBytes、shiftRows、mixcolumn前三个步骤混在一起去了所以用T。
408+ 最面一轮没有mixcolumn,不能用上面混合后的表了,这时候两种方式:可以新增一个新的混合表或者分开来算 s-box、循环左移、state xor 密钥。
409+ 为什么查表法不把addroudkey 和前三步放在一起呢?
410+ 因为addroudkey 密钥是我们生成的,可能会变化, 混合表已经是固定的,所以放不进去。
411+ 怎么把key也放进去? 就是aes白盒--加重混淆,即使有源码都无法简简单单还原出key。
412+ https://bbs.pediy.com/thread-267330.htm
413+ ```
414+
415+ 
416+
417+ 上面是查表法下面是分开计算的。
418+
419+ 但是样本中和S盒还是不一样,有可能是S盒和循环左移搞在一起了。
343420
0 commit comments