日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

南邮ctf答案php是世界,南邮ctf训练平台逆向试题wp

發布時間:2024/3/24 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 南邮ctf答案php是世界,南邮ctf训练平台逆向试题wp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一題:

hint已經給的很明白了: IDA 進去 ,對那堆數字按R 就好

第二題:low_addr???rsp

0x1

0x4???相對地址

0x18

0x1c

high_addr??rbp

00000000004004e6?:

4004e6:?55????????????????????push???rbp

4004e7:?48?89?e5??????????????mov????rbp,rsp

4004ea:?48?89?7d?e8???????????mov????QWORD?PTR?[rbp-0x18],rdi?????4個字=8個byte=64bit?rdi存參數?rdi是64位寄存器?存第一個參數

4004ee:?89?75?e4??????????????mov????DWORD?PTR?[rbp-0x1c],esi?????esi是32位寄存器??存第二個參數??esi能存兩個字

4004f1:?c7?45?fc?01?00?00?00??mov????DWORD?PTR?[rbp-0x4],0x1??????向內存?[rbp-0x4]?寫入1

4004f8:?eb?28?????????????????jmp????400522?

4004fa:?8b?45?fc??????????????mov????eax,DWORD?PTR?[rbp-0x4]??????DWORD?PTR?[rbp-0x4]這個指針代表數值為1的地方。eax=1

4004fd:?48?63?d0??????????????movsxd?rdx,eax????????????????????????movsxd帶符號擴展并傳送?????rdx=1

400500:?48?8b?45?e8???????????mov????rax,QWORD?PTR?[rbp-0x18]?????rax=input首址

400504:?48?01?d0??????????????add????rax,rdx??????????????????????rax=input首址+1?input[1]

400507:?8b?55?fc??????????????mov????edx,DWORD?PTR?[rbp-0x4]??????edx=1

40050a:?48?63?ca??????????????movsxd?rcx,edx????????????????????????rcx=1

40050d:?48?8b?55?e8???????????mov????rdx,QWORD?PTR?[rbp-0x18]?????rdx=input首址

400511:?48?01?ca??????????????add????rdx,rcx????????????????????????rdx=input首址+1?input[1]

400514:?0f?b6?0a??????????????movzx??ecx,BYTE?PTR?[rdx]????????????????????ecx=?0x67

400517:?8b?55?fc??????????????mov????edx,DWORD?PTR?[rbp-0x4]???????????????edx=1

40051a:?31?ca?????????????????xor????edx,ecx?????????????????????edx=0x67?^?0x1?=?0x66??=?'f'

40051c:?88?10?????????????????mov????BYTE?PTR?[rax],dl

40051e:?83?45?fc?01???????????add????DWORD?PTR?[rbp-0x4],0x1?????????????[rbp-0x4]?處的值?+?1

400522:?8b?45?fc??????????????mov????eax,DWORD?PTR?[rbp-0x4]????[rbp-0x4]??處的值讀入eax

400525:?3b?45?e4??????????????cmp????eax,DWORD?PTR?[rbp-0x1c]???eax和28相比

400528:?7e?d0?????????????????jle????4004fa?????????小于28的話就跳到4004fa處

40052a:?90????????????????????nop

40052b:?5d????????????????????pop????rbp

40052c:?c3????????????????????retint?main(int?argc,?char?const?*argv[])

{

char?input[]?=?{0x0,??0x67,?0x6e,?0x62,?0x63,?0x7e,?0x74,?0x62,?0x69,?0x6d,

0x55,?0x6a,?0x7f,?0x60,?0x51,?0x66,?0x63,?0x4e,?0x66,?0x7b,

0x71,?0x4a,?0x74,?0x76,?0x6b,?0x70,?0x79,?0x66?,?0x1c};

func(input,?28);

printf("%s\n",input+1);

return?0;

}

1. ? mov ax,bx ;? 是把BX寄存器“里”的值賦予AX,由于二者都是寄存器,長度已定(word型),所以沒有必要加“WORD”? ????? mov ax,word ptr [bx];?? 是把內存地址等于“BX寄存器的值”的地方所存放的數據,賦予ax。由于只是給出一個內存地址,不知道希望賦予ax的,是byte還是word,所以可以用word明確指出;如果不用,既(mov ax, [bx];?? )則在8086中是默認傳遞一個字,既兩個字節給ax。

2.

r代表64位 e代表32位,一個char占用一個字節

3.

一個函數被調用,首先默認要完成以下動作:??? 將調用函數的棧幀棧底地址入棧,即將bp寄存器的值壓入調用棧中??? 建立新的棧幀,將被調函數的棧幀棧底地址放入bp寄存器中以下兩條指令即完成上面動作:push %rbpmov? %rsp, %rbp???? ptr -- pointer (既指針)得縮寫。???? 匯編里面 ptr 是規定 的 字 (既保留字),是用來臨時指定類型的。? (可以理解為,ptr是臨時的類型轉換,相當于C語言中的強制類型轉換)

PS:

第一次讀匯編代碼......感覺還挺有意思的,都是邊查資料邊看,,最坑的是最初認為函數參數里邊,棧存的直接是字符串,,后來分析一半感覺不對勁....原來存的是字符串的地址 ...我擦...

最后附上python小程序:a?=?[0x67,0x6e,0x62,0x63,0x7e,0x74,?0x62,?0x69,?0x6d,?0x55,?0x6a,?0x7f,?0x60,?0x51,?0x66,?0x63,?0x4e,?0x66,?0x7b,0x71,?0x4a,?0x74,?0x76,?0x6b,?0x70,?0x79,?0x66?,?0x1c]

b?=?""

for?x?in?range(1,29):

b=b+chr(a[x-1]?^?x)

print?b

flag{read_asm_is_the_basic}

總結

以上是生活随笔為你收集整理的南邮ctf答案php是世界,南邮ctf训练平台逆向试题wp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。