一.《軒轅傳奇》周圍遍歷之二叉樹
周圍遍歷之二叉樹
總結(jié):
1.我們通過(guò)名字找周圍遍歷的話,需要找到通過(guò)改變目標(biāo)能更新到怪物上的那個(gè)地址,這里千萬(wàn)不要搞錯(cuò)了,因?yàn)楹苡锌赡苷业降氖荱I方面的.
2.當(dāng)我們下斷文字的時(shí)候,既然是因?yàn)楦淖兡繕?biāo)找到的地址,那么我們還是通過(guò)選擇目標(biāo)來(lái)斷下,才很可能是我們想要的遍歷.
3.這里通過(guò)選擇目標(biāo)斷下來(lái),也會(huì)有多處斷,這里就要一個(gè)個(gè)分析找了.
4.對(duì)于上面的,我們就找到2次坑,最后才遇到了真正的遍歷二叉樹.
5.突破口很重要.
改變怪物頭像上的名字(Unicode)找
1.發(fā)現(xiàn)是不對(duì)的 找到了個(gè)奇怪的偏移 雖然能找到 但是這個(gè)很詭異
2.很可能是UI上的

0095B327?>?64:A3?00000000?>?mov?dword?ptr?fs:[0],eax?>
0095B32D?>?8BF1?>?mov?esi,ecx?>?edi?觀察堆棧?來(lái)至于第一個(gè)參數(shù)
0095B32F?>?8BBC24?A4000000?>?mov?edi,dword?ptr?ss:[esp+A4]?>?[edi+4C+4]
0095B336?>?8B4F?14?>?mov?ecx,dword?ptr?ds:[edi+14]?>
思考
1 坑點(diǎn) 搜索的字符串 不要選中這個(gè)字符串的目標(biāo)對(duì)象 容易掉進(jìn)坑里
2 同時(shí)第一次搜索的是Ascii版本 控件改了 這里就懷疑不對(duì)了
3 進(jìn)入XDBG 找 發(fā)現(xiàn)確實(shí) 找到的是一個(gè)選中目標(biāo)的對(duì)象
4 換ASCII編碼
換新思路
1.我們CE搜索名字字符串ASCII,后改變選擇對(duì)象的名字,從這里入手,找到真正更新到UI界面的那個(gè)名字來(lái)源

2 斷下第一處,發(fā)現(xiàn)還是之前的斷下的流程里面
0095B52D?>?8B11?>?mov?edx,dword?ptr?ds:[ecx]?>
0095B52F?>?8B42?28?>?mov?eax,dword?ptr?ds:[edx+28]?>
0095B532?>?8D5F?4C?>?lea?ebx,dword?ptr?ds:[edi+4C]?>?edi+4C+4?這一層是之前?貌似不對(duì)
0095B535?>?53?>?push?ebx?>?ebx+4
0095B536?>?FFD0?>?call?eax?>
0095B538?>?8B8E?FC000000?>?mov?ecx,dword?ptr?ds:[esi+FC]?>
3?繼續(xù)F9,在不放開斷點(diǎn)的情況下,又有一處訪問( 操作一定要對(duì)!)
3.1 發(fā)現(xiàn)貌似是之前背包物品名字的地方 這里可能是的
3.2 還有很多處訪問 需要判斷分析
0040D1DC?>?5E?>?pop?esi?>
0040D1DD?>?5D?>?pop?ebp?>
0040D1DE?>?5B?>?pop?ebx?>?ebx:&"_p_AxIdType"
4.我們對(duì)層返回找到一個(gè)怪物對(duì)象
00E6D9B8?>?50?>?push?eax?>
00E6D9B9?>?51?>?push?ecx?>
00E6D9BA?>?E8?618287FF?>?call?xyclient.6E5C20?>?來(lái)源22
00E6D9BF?>?83C4?08?>?add?esp,8?>?得到怪物對(duì)象
00E6D9C2?>?85C0?>?test?eax,eax?>
00E6D9C4?>?74?09?>?je?xyclient.E6D9CF?>
00E6D9C6?>?8D48?4C?>?lea?ecx,dword?ptr?ds:[eax+4C]?>?eax+4c+4
00E6D9C9?>?FF25?38041901?>?jmp?dword?ptr?ds:[
00E6D9CF?>?B8?68913001?>?mov?eax,xyclient.1309168?>
繼續(xù)根據(jù)對(duì)象
1 找到一個(gè)二叉樹的對(duì)象來(lái)源
0066D51E?>?CC?>?int3?>
0066D51F?>?CC?>?int3?>
0066D520?>?8B41?04?>?mov?eax,dword?ptr?ds:[ecx+4]?>?[[ecx+4]+4]
0066D523?>?8B48?04?>?mov?ecx,dword?ptr?ds:[eax+4]?>?[eax+4]
0066D526?>?8079?21?00?>?cmp?byte?ptr?ds:[ecx+21],0?>
0066D52A?>?75?2C?>?jne?xyclient.66D558?>
0066D52C?>?8B5424?04?>?mov?edx,dword?ptr?ss:[esp+4]?>
0066D530?>?56?>?push?esi?>
0066D531?>?8B32?>?mov?esi,dword?ptr?ds:[edx]?>?16?ID1
0066D533?>?8B52?04?>?mov?edx,dword?ptr?ds:[edx+4]?>?0?ID2?edx取上一層第二個(gè)參數(shù)?類型也是一個(gè)ID
0066D536?>?57?>?push?edi?>
0066D537?>?8B79?14?>?mov?edi,dword?ptr?ds:[ecx+14]?>?+14比較是否為空
0066D53A?>?3BFA?>?cmp?edi,edx?>
0066D53C?>?77?0E?>?ja?xyclient.66D54C?>?大于?二個(gè)參數(shù)?就跳
0066D53E?>?72?07?>?jb?xyclient.66D547?>?小于就跳?+8
0066D540?>?8B79?10?>?mov?edi,dword?ptr?ds:[ecx+10]?>?比較ID
0066D543?>?3BFE?>?cmp?edi,esi?>
0066D545?>?73?05?>?jae?xyclient.66D54C?>?大于等于?就跳
0066D547?>?8B49?08?>?mov?ecx,dword?ptr?ds:[ecx+8]?>?右子樹
0066D54A?>?EB?04?>?jmp?xyclient.66D550?>
0066D54C?>?8BC1?>?mov?eax,ecx?>
0066D54E?>?8B09?>?mov?ecx,dword?ptr?ds:[ecx]?>?左子樹
0066D550?>?8079?21?00?>?cmp?byte?ptr?ds:[ecx+21],0?>?+21結(jié)束標(biāo)志
0066D554?>?74?E1?>?je?xyclient.66D537?>
0066D556?>?5F?>?pop?edi?>
0066D557?>?5E?>?pop?esi?>
0066D558?>?C2?0400?>?ret?4?>
0066D55B?>?CC?>?int3?>
2 好了 我們就只需要找這個(gè)二叉樹根節(jié)點(diǎn)了,繼續(xù)返回找基地址就是了
006E5C20?>?A1?086B9C01?>?mov?eax,dword?ptr?ds:[19C6B08]?>?[[[[19C6B08]+88]+14+4+4]+4]?二叉樹根節(jié)點(diǎn)
006E5C25?>?85C0?>?test?eax,eax?>
006E5C27?>?74?1D?>?je?xyclient.6E5C46?>
006E5C29?>?8B80?88000000?>?mov?eax,dword?ptr?ds:[eax+88]?>?[[[eax+88]+14+4+4]+4]?二叉樹根節(jié)點(diǎn)
006E5C2F?>?85C0?>?test?eax,eax?>?有混淆?這里返回回來(lái)不要滾動(dòng)
006E5C31?>?74?13?>?je?xyclient.6E5C46?>
006E5C33?>?8B4C24?08?>?mov?ecx,dword?ptr?ss:[esp+8]?>
006E5C37?>?8B5424?04?>?mov?edx,dword?ptr?ss:[esp+4]?>
006E5C3B?>?51?>?push?ecx?>
006E5C3C?>?52?>?push?edx?>
006E5C3D?>?8D48?14?>?lea?ecx,dword?ptr?ds:[eax+14]?>?[[eax+14+4+4]+4]?二叉樹根節(jié)點(diǎn)
006E5C40?>?E8?6BF5FFFF?>?call?xyclient.6E51B0?>?來(lái)源33
006E5C45?>?C3?>?ret?>
006E5C46?>?33C0?>?xor?eax,eax?>
006E5C48?>?C3?>?ret?>
006E5C49?>?CC?>?int3?>
3 注意這里有個(gè)新知識(shí)點(diǎn)就是,代碼混淆如何處理呢?我們會(huì)在新的篇章中給大家講解
二叉樹匯編圖示

屬性來(lái)源
得到對(duì)象后 我們思考 對(duì)象下應(yīng)該會(huì)有很多屬性掛著
發(fā)現(xiàn)看到一連串近似的數(shù)字
$+8C?A59CF5B6
$+90?A59CF5B6
$+94?F4F7DBDE
$+98?A59CF583
$+9C?A59CF583
$+A0?A59CF520
$+A4?A59CF520
$+A8?A59CF5B6
$+AC?A59CF5B6
$+B0?E2C954B6
$+B4?E217ADB6
屬性加密解密

果然和一個(gè)固定值做異或得到真實(shí)的結(jié)果
最后我們經(jīng)過(guò)之前我們找冒險(xiǎn)島的數(shù)據(jù)發(fā)現(xiàn)
其實(shí)和冒險(xiǎn)島很接近的一個(gè)加密算法
好了,今天的周圍遍歷就結(jié)束了
我們下節(jié)再見!
關(guān)注迪大,你值得擁有~
