BScript
803個exe,都有upx殼,每個程序都差不多,先脫upx
from os import * f=r"C:\Users\My\Desktop\upx-3.96-win64\upx.exe -d C:\Users\My\Desktop\BScript"
for i in range(5,804): system(f+"\\"+str(i)+".exe")
然后進里面分析,隨便找了個2拖進ida
要將ans倒序,看ans
在data:403024處,看里面內容
我對PE文件還比較熟悉,明顯可以看出2是PE頭的部分,再去看0,1,是MS-DOS的部分,由此可判斷只要將這些部分拼成一個PE就可以了,但在踩了坑后發現,不只有一種格式,在分析了近二十個文件后,確認共有三種格式:
1,存在403040處,長度為64 db,倒序
2,存在403020處,長度為32 db,正序
3,存在bss段,長度為32,值全為“\x00”
需要想辦法分辨出這三種不同的格式
在4015DA處是判斷長度的位置,在2和3情況下為“\x1f”,可由此分辨1和2,3
在401640處用到了可根據存放位置的偏移不同區分2,3
FILE=r"C:\Users\My\Desktop\B.exe" with open(FILE,"ab") as F: for i in range(0,804): file=r"C:\Users\My\Desktop\BScript"+"\\"+str(i)+".exe" with open(file,"rb") as f: f=f.read() if(f[0xa12:0xa13]==b"\x1f"): if(f[0xa42:0xa43]==b"\x30"): F.write(f[0x1c20:0x1c40]) else: for i in range(32): F.write(b"\x00") else: F.write(f[0x1c40:0x1c80][::-1])
得到PE文件,拖入ida
byte_40D040就是flag的值,可通過查看引用找到,得到的是QkpEe1doT3RfNF9iYWV1dDFmdTFfc2NybHB0fQAA
一看就是base64,解得flag
blink
這題一堆花里胡哨的輸出,但難度比上一題少很多,邏輯就是循環輸出一堆坐標,同時用rand()隨機控制是否輸出,我一頓patch,
patch掉while,rand,usleep和那些花里胡哨的輸出
上圖為patch后的main,再運行
得到二維碼,但是掃不了,我許久未做的misc基礎幫了我一下
#!/usr/bin/env python from PIL import Image with open("blink.txt","r") as f: f=f.read() str=""
for i in range(0,len(f),2): if f[i]=="x": str+="1"
else: str+="0" #print(str) pic = Image.new("RGB",(25, 25)) i=0
for y in range (0,25): for x in range (0,25): if(str[i] == '1'): pic.putpixel([x,y],(0, 0, 0)) else: pic.putpixel([x,y],(255,255,255)) i = i+1 pic.show() pic.save("flag.png")
得到flag