大小端儲存詳解
d:*******\考核\ctf\reverseme
執行程式:
不同長度的答案對應不同的結果,可知,答案長度有限制:拖進ida裡看具體**:
可知答案長度在19到30之間,還經過了乙個函式的判斷才能輸出congratulations,這個函式有兩個引數,第乙個是v5,記憶體裡有,第二個是我們輸入的字元,所以點進去看看這個函式:
由a3=25,知道key長度25,然後經過了迴圈左移2位(第二個引數是迴圈左移的位數),又和sub_401460(a2, v7)函式返回值異或,然後當v36(異或後的資料)和v8(v10)相等,則返回1,則輸出congratulations
逆向思維,我們現在知道了v8,也就知道了v36,經過sub_401460(a2, v7)函式異或再迴圈右移2位就可以得到我們想要的key了:
v10我們知道(有的是負數,帶符號的char型,換成16進製制就行),關鍵sub_401460(a2, v7)函式到底經過了什麼運算?點進去看一下
有點複雜,不過我們可以用od直接跟到這個函式返回值:
先按要求輸入25位key:然後修改幾次跳轉來到異或的地方:
最後跟出來的是:
0x1a,0xa2,0x2f,0xf9,0x94,0x43,0x3c,0xc4,0x4d,0xd8,0x8c,0xc5,0x5b,0xb6,0x6e,0xea,0xa3,0x3c,0xc9,0x9b,0xbc,0xca,0xad,0xd7,0x7e
最後,還有迴圈右移的操作,我們可以寫指令碼,寫完存起來,以後很可能還用,當做小工具指令碼
所以我們現在可以寫指令碼了:
指令碼1:
a=[15,135,98,20,1,198,240,33,48,17,80,208,130,35,174,35,238,169,180,82,120,87,12,134,139]
b=[0x1a,0xa2,0x2f,0xf9,0x94,0x43,0x3c,0xc4,0x4d,0xd8,0x8c,0xc5,0x5b,0xb6,0x6e,0xea,0xa3,0x3c,0xc9,0x9b,0xbc,0xca,0xad,0xd7,0x7e]
c=d=
for i in range(len(a)):
for i in c:
print(d)
輸出:['10101', '100101', '1001101', '11101101', '10010101', '10000101', '11001100', '11100101', '1111101', '11001001', '11011100', '10101', '11011001', '10010101', '11000000', '11001001', '1001101', '10010101', '1111101', '11001001', '11000100', '10011101', '10100001', '1010001', '11110101']
每個二進位制都是8位:不滿的手動以0補全,自動的指令碼還沒寫出來,先一步一步寫出來吧!
指令碼2:
def xol(s): #迴圈左移2位
s1=s << 2
s2=(s1&768)>>8
s3=(s1|s2)&255
return s3
def xor(s): #迴圈右移2位
s1=s&3
s2=s>>2
s3=s1<<6
s4=s3|s2
return s4
a=['00010101', '00100101', '01001101', '11101101', '10010101', '10000101','11001100', '11100101', '01111101', '11001001', '11011100', '00010101','11011001', '10010101', '11000000', '11001001', '01001101', '10010101','01111101', '11001001', '11000100', '10011101', '10100001', '01010001','11110101']
for i in a:
print(chr(xor(int(i,2))),end='')
#輸出:eis
賞 你的支援是我最大的動力! 09 numpy陣列計算和大端小端
import numpy as np arr1 np.arange 16,dtype float reshape 4,4 arr2 np.array 10,20,30,40 arr3 np.array 10,20,30,40 10,20,30,40 10,20,30,40 10,20,30,40 a...
認識(大端 小端)端模式
端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian。小人國的內戰就源於吃雞蛋時是究竟從大頭 big endi...
認識(大端 小端)端模式
端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian。小人國的內戰就源於吃雞蛋時是究竟從大頭 big endi...