日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

看雪CTF 2016_第八题分析

發(fā)布時(shí)間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 看雪CTF 2016_第八题分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用exeinfo查看發(fā)現(xiàn)是x64程序,所以用平常的OD調(diào)試器是調(diào)試不到的,需要用x64的調(diào)試器

我這里是用x64dbug 這個(gè)調(diào)試器來進(jìn)行調(diào)試分析

經(jīng)過一步一步調(diào)試,發(fā)現(xiàn)程序調(diào)用RtlMoveMemory 這個(gè)api來進(jìn)行獲取我們輸入的注冊(cè)碼

Rax的內(nèi)存地址即為我們輸入的假碼

我們先不要一步一步分析下去,直接來到提示注冊(cè)碼不正確那里。

?

?

我們來到上圖的地方,走到000000013F5018E1 | E8 4E 8D 00 00 | call crackme.13F50A634 | 這里提示注冊(cè)碼不正確

然后上面有個(gè)跳轉(zhuǎn),為了驗(yàn)證是否為關(guān)鍵跳轉(zhuǎn),我們修改zf標(biāo)志位使跳轉(zhuǎn)成立,看看是不是提示成功,經(jīng)過證實(shí)是提示成功,所以這個(gè)就是關(guān)鍵跳轉(zhuǎn)。

?

然后我們看看它是使什么條件成立才跳轉(zhuǎn)的呢。

?

000000013F5018A7 | 48 63 C6 | movsxd rax,esi |

000000013F5018AA | 49 63 D6 | movsxd rdx,r14d |

000000013F5018AD | 48 8D 0C 90 | lea rcx,qword ptr ds:[rax+rdx*4] |

000000013F5018B1 | 48 03 D1 | add rdx,rcx |

000000013F5018B4 | 48 8D 05 05 44 02 00 | lea rax,qword ptr ds:[13F525CC0] |

000000013F5018BB | 8B 0D 63 44 02 00 | mov ecx,dword ptr ds:[13F525D24] |

000000013F5018C1 | 0F AF CF | imul ecx,edi |

000000013F5018C4 | 03 0C 90 | add ecx,dword ptr ds:[rax+rdx*4] |

000000013F5018C7 | 8D 04 7F | lea eax,dword ptr ds:[rdi+rdi*2] |

000000013F5018CA | 3B C8 | cmp ecx,eax |

000000013F5018CC | 48 8D 0D A5 06 02 00 | lea rcx,qword ptr ds:[13F521F78] |

000000013F5018D3 | 74 07 | je crackme.13F5018DC |

?

這段匯編是對(duì)比ecx是否等于eax,如果等于就是為正確的注冊(cè)碼。

?

那么ecx的值和eax的值是怎么來的。

?

我們來分析一下:

?

movsxd rax,esi // esi=2

movsxd rdx,r14d //r14d=2

lea rcx,qword ptr ds:[rax+rdx*4] // [rax+rdx*4] 2+2*4=A

add rdx,rcx // rdx=A+2=C

lea rax,qword ptr ds:[13F525CC0] // [13F5B5CC0] =134

mov ecx,dword ptr ds:[13F525D24] // [13F5B5D24] =2=ecx

imul ecx,edi //這里的edi是個(gè)變量 我輸入的假碼是123456 所以這里edi=A678 ecx=2*A678=14cf0

add ecx,dword ptr ds:[rax+rdx*4] // dword [rax+rdx*4]=00000134 ecx=14cf0+134=14E24

lea eax,dword ptr ds:[rdi+rdi*2] // eax= [rdi+rdi*2]=A678+A678*2=1F368

所以很明顯ecx = eax

上面的值除了變量之外,其余的都是固定的,你可以其他假碼進(jìn)行測(cè)試,我這里就不再舉例了。

所以由上面得出:

設(shè)edi X

2X+134=3X

X=134

?

所以只要變量等于134,就是正確的注冊(cè)碼,然而134是怎么計(jì)算出來的,即上面的edi=A678是怎么來的。

?

經(jīng)過向上分析,我們得出edi的結(jié)果是下面這個(gè)call計(jì)算出來的

?

000000013F2D197B | E8 80 F9 FF FF | call crackme.13F2D1300 |

000000013F2D1980 | 85 C0 | test eax,eax |

000000013F2D1982 | 75 2B | jne crackme.13F2D19AF |

000000013F2D1984 | 48 8D 0D 8D 06 02 00 | lea rcx,qword ptr ds:[13F2F2018] |

?

我們進(jìn)入這個(gè)call分析

?

000000013F921300 | 45 33 C9 | xor r9d,r9d |

000000013F921303 | 44 8B D9 | mov r11d,ecx |

000000013F921306 | 41 B8 01 00 00 00 | mov r8d,1 |

000000013F92130C | 45 8B D1 | mov r10d,r9d |

000000013F92130F | 81 F9 6A 03 00 00 | cmp ecx,36A | 和注冊(cè)碼對(duì)比 ecx為注冊(cè)碼

000000013F921315 | 75 04 | jne crackme.13F92131B |

000000013F921317 | 83 C8 FF | or eax,FFFFFFFF |

000000013F92131A | C3 | ret |

當(dāng)前ecx=1E240 十進(jìn)制是123456 是我剛才出入的假碼 它和36A對(duì)比 36A十進(jìn)制是874

這里不是很清楚為什么注冊(cè)碼不能為874,因?yàn)槲疫@樣分析在前面丟失了很多細(xì)節(jié),不過沒所謂,我們繼續(xù)分析下去。

?

000000013F92131B | 81 F9 B1 68 DE 3A | cmp ecx,3ADE68B1 | 注冊(cè)碼和3ADE68B1 對(duì)比 十進(jìn)制為987654321 即注冊(cè)碼不能是987654321

000000013F921321 | 74 F4 | je crackme.13F921317 |

000000013F921323 | 85 C9 | test ecx,ecx |

000000013F921325 | 75 09 | jne crackme.13F921330 |

000000013F921327 | 45 8B D0 | mov r10d,r8d |

000000013F92132A | EB 21 | jmp crackme.13F92134D |

?

下面這段是檢測(cè)注冊(cè)碼長(zhǎng)度是否少于1

000000013F921330 | B8 67 66 66 66 | mov eax,66666667 |

000000013F921335 | 41 FF C2 | inc r10d |

000000013F921338 | F7 E9 | imul ecx |

000000013F92133A | 8B CA | mov ecx,edx |

000000013F92133C | C1 F9 02 | sar ecx,2 |

000000013F92133F | 8B C1 | mov eax,ecx |

000000013F921341 | C1 E8 1F | shr eax,1F |

000000013F921344 | 03 C8 | add ecx,eax |

000000013F921346 | 75 E8 | jne crackme.13F921330 |

000000013F921348 | 45 3B D0 | cmp r10d,r8d | 檢測(cè)注冊(cè)碼長(zhǎng)度要大于1

000000013F92134B | 7C 13 | jl crackme.13F921360 |

?

循環(huán)計(jì)算出r8的值 后面用來進(jìn)行運(yùn)算 這里r8=F4240 十進(jìn)制是 1000000

000000013F92134D | 41 8B C2 | mov eax,r10d | 輸入的長(zhǎng)度

000000013F921350 | 47 8D 04 80 | lea r8d,dword ptr ds:[r8+r8*4] |

000000013F921354 | 45 03 C0 | add r8d,r8d |

000000013F921357 | 48 83 E8 01 | sub rax,1 |

000000013F92135B | 75 F3 | jne crackme.13F921350 |

?

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

000000013F921360 | 41 FF C1 | inc r9d |

000000013F921363 | 41 8B C1 | mov eax,r9d |

000000013F921366 | 41 0F AF C1 | imul eax,r9d |

000000013F92136A | 99 | cdq |

000000013F92136B | 41 F7 F8 | idiv r8d |

000000013F92136E | 41 3B D3 | cmp edx,r11d | r11d等于輸入的假碼

000000013F921371 | 75 ED | jne crackme.13F921360 |

000000013F921373 | 41 8B C1 | mov eax,r9d |

000000013F921376 | C3 | ret |

?

這里就是計(jì)算出上面edi=A678 值的地方

用易語言是這么實(shí)現(xiàn)的

所以我們上面說到X=134就能得出正確的注冊(cè)碼,注意這里的134是十六進(jìn)制,轉(zhuǎn)換10進(jìn)制是等于308

所以r9d=308時(shí),eax=eax*eax 就是正確的注冊(cè)碼,計(jì)算得出注冊(cè)碼為:94864

文檔和CM下載地址:http://www.vdisk.cn/down/index/19775196

轉(zhuǎn)載于:https://www.cnblogs.com/Sendige/p/9601045.html

總結(jié)

以上是生活随笔為你收集整理的看雪CTF 2016_第八题分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。