@@ -46,7 +46,7 @@ PADDING:填充
4646一切基于字节做操作。
4747
4848举例:
49- 明文:0123456789 to hexdump 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66(16个字节)
49+ 明文:0123456789abcef to hexdump 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66(16个字节)
5050aes把明文放在一个4*4的矩阵当中,表中每个元素是一个字节大小
515130 34 38 63
525231 35 39 64
@@ -97,7 +97,7 @@ ida view-> open subviews-> segments data数据断以及rodata只读数据断。
9797
9898![ 5] ( ./pic/5.png )
9999
100- ![ 6] ( ./pic/6.png )
100+ ![ 6] ( ./pic/6.png )
101101
102102通过对AES算法原理了解,学会通过查找` S盒 ` ,来确定SO中是否有AES算法。
103103
@@ -222,27 +222,27 @@ w0 w1 w2 w3 w4 w5 w6 .....w43
222222
223223
224224为什么到w43?
225- 因为是aes-128, 所以每一轮密钥是16个字节,4个w是一轮的密钥。
225+ 因为是aes-128, 所以每一轮密钥是16个字节,4个w是一轮的密钥。
226226
227227初始化的addRoundKey用到的key:
228- key0 = w0w1w2w3 = d42711aee0bf98f1b8b45de51e415230我们的种子密钥,用来做初始变换,根据我们传入的种子密钥获得10个新的子密钥。
229- hook初始变化addroundKey的异或后面的key,就是我们输入的种子key。
228+ key0 = w0w1w2w3 = d42711aee0bf98f1b8b45de51e415230我们的种子密钥,用来做初始变换,根据我们传入的种子密钥获得10个新的子密钥。
229+ hook初始变化addroundKey的异或后面的key,就是我们输入的种子key。
230230
2312319轮运算用到的key分别是:
232- k1: w4w5w6w7
233- k2: w8w9w10w11
234- ......
235- k9: w36w37w38w39
232+ k1: w4w5w6w7
233+ k2: w8w9w10w11
234+ ......
235+ k9: w36w37w38w39
236236
237237最后一轮:
238- k10: w40w41w42w43
238+ k10: w40w41w42w43
239239
240240密钥编排:
241- 就是根据我们w0-w3传入的密钥,通过密钥编排,生成w4-w43,也叫密钥扩展算法
242- 密钥扩展:w0-w43,44个w,或者44 * 4 = 176个字节
241+ 就是根据我们w0-w3传入的密钥,通过密钥编排,生成w4-w43,也叫密钥扩展算法
242+ 密钥扩展:w0-w43,44个w,或者44 * 4 = 176个字节
243243
244244文章:
245- https://blog.csdn.net/qq_28205153/article/details/55798628
245+ https://blog.csdn.net/qq_28205153/article/details/55798628
246246```
247247
248248**2.1 w4-w17的生成**
@@ -257,20 +257,19 @@ T函数步骤:
2572573 . rcon表异或
258258
259259假如:
260- w4的计算:
261- w0 = 2b7e1516,w3 = 0x09cf4f3c,T(w3) = sbox(shiftrow(w3)) ^ rcon[ i]
262- 循环左移1位 -> cf4f3c09
263- S表替换 -> 8a84eb01
264- rcon表异或 -> 8b84eb01(rcon表固定的,rcon表=01000000、02000000)
265- 最后 w4 = 8b84eb01 ^ w0 = a0fafe17
266- w5的计算:
267- w5 = w4 ^ w1 = a0fafe17 ^ w1
260+ w4的计算:
261+ w0 = 2b7e1516,w3 = 0x09cf4f3c,T(w3) = sbox(shiftrow(w3)) ^ rcon[ i]
262+ 循环左移1位 -> cf4f3c09
263+ S表替换 -> 8a84eb01
264+ con表异或 -> 8b84eb01(rcon表固定的,rcon表=01000000、02000000)
265+ 最后 w4 = 8b84eb01 ^ w0 = a0fafe17
266+ w5的计算:
267+ w5 = w4 ^ w1 = a0fafe17 ^ w1
268268```
269269
270270\
271271
272272ida中特征:
273-
274273> w43也是密钥扩展的特征,比如 <=43
275274> <<31 分单双数
276275> <<30 看是否为4的倍数
@@ -279,20 +278,18 @@ ida中特征:
279278
280279```
281280一个AES算法我们要关注哪些内容?
282- 是AES-128 还是 AES-192 还是 AES-256
283- 明文是什么
284- 密钥是什么
285- 什么模式 ECB还是CBC还是其他
286- 如果是非ECB模式,那么IV是什么
287- 明文填充模式呢,是PCKS#7吗?
281+ 是AES-128 还是 AES-192 还是 AES-256
282+ 明文是什么
283+ 密钥是什么
284+ 什么模式 ECB还是CBC还是其他
285+ 如果是非ECB模式,那么IV是什么
286+ 明文填充模式呢,是PCKS#7吗?
288287```
289288
2902891. 调用open_ssl封装的EVP。传入结构体,百度搜索,查看参数信息。
291-
292290 
293291
2942922. 直接使用底层的代码,通过hook各个函数,得到信息。
295-
296293 
297294
298295#### 拓展
@@ -311,12 +308,12 @@ RSA + AES:混合加密
311308findcrypt 可以找到特征
312309
313310逆S盒:https://bbs.pediy.com/thread-266410.htm
314- S盒 用来加密
315- 00 0x90
316- 逆S盒 用来解密
317- 第9行 第0列 为 00
318- new_contrary_sbox = [ 0] * 256
319-
311+ S盒 用来加密
312+ 00 0x90
313+ 逆S盒 用来解密
314+ 第9行 第0列 为 00
315+ new_contrary_sbox = [ 0] * 256
316+
320317 for i in range(256):
321318 line = (new_s_box[ i] &0xf0)>>4
322319 rol = new_s_box[ i] &0xf
407404 1-9轮 把subBytes、shiftRows、mixcolumn前三个步骤混在一起去了所以用T。
408405 最面一轮没有mixcolumn,不能用上面混合后的表了,这时候两种方式:可以新增一个新的混合表或者分开来算 s-box、循环左移、state xor 密钥。
409406为什么查表法不把addroudkey 和前三步放在一起呢?
410- 因为addroudkey 密钥是我们生成的,可能会变化, 混合表已经是固定的,所以放不进去。
411- 怎么把key也放进去? 就是aes白盒--加重混淆,即使有源码都无法简简单单还原出key。
407+ 因为addroudkey 密钥是我们生成的,可能会变化, 混合表已经是固定的,所以放不进去。
408+ 怎么把key也放进去? 就是aes白盒--加重混淆,即使有源码都无法简简单单还原出key。
412409https://bbs.pediy.com/thread-267330.htm
413410```
414411
0 commit comments