25授人以鱼不如授人以渔●亮剑寻路CALL的分析_第1页
25授人以鱼不如授人以渔●亮剑寻路CALL的分析_第2页
25授人以鱼不如授人以渔●亮剑寻路CALL的分析_第3页
25授人以鱼不如授人以渔●亮剑寻路CALL的分析_第4页
25授人以鱼不如授人以渔●亮剑寻路CALL的分析_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、25授人以鱼不如授人以渔亮剑寻路CALL的分析当CTRL+F9无法找到真正的CALL时我们改如何去寻找我们所要的?我觉得一可以根据相关信息的跟踪来寻找.目标:亮剑寻路CALL分析目的:跟踪相关信息寻到寻路CALL壹开挤治?首先我们断bpsend在地图上走路(在画面中走路就不是寻路了.)断下来后返回.因为前面10层是一样的所以我们开始从11层开始B089991FD089992©0089992500S99929D089992DCCCCE83B35EEFF8BC2U108B54240CC64U0861int3int3callOB77CE60mouecx,dwortfpt>esp+1t

2、tjmouedx,dworrtptrep+C第“层movbteptreax+8,100B99931仙moueax,duordptresp+1U0089993550pusheaK宽8999368R&恪SCmoueax,dwordptresp+C9089993A0089993B0089993F90899941008999420089994300899944518BWC240C6fl0»525051E8S71F0CQ0pushecxnouecx,dviordptresp+Cpush0pushedxpusheaxpushecxcall0目95B8RGecx=FFFFFFE913610

3、089994983CU18addespr18008999UC00S999S1008999550QB9Q956UUOYO*tELD0Q89C4ED0089C4F00O89CUF3B989C4F60O89C4F7(J089C4FB0089C4FDO089C4FE0Q89C4FF0Q89C5O1O089C50U00890505E80F35EEFFC649U80QC3ccf-»or8B4F0C8B57088BU710518BUF14528B1650518BCEFF52250E816D4FFIFFcall0077CE60moubyteptreax+8,0vetnint3jriiuitltiuo

4、ymovecx,liwordptredi*C(nouedx,duordptredi+8rinnigqjivrlumrhi"farilifi1|>IUVCT"八,U,UUP1-1UATHUiJpushecxmouecxfduordptredi+1*i)第】Z层pushedxnovedx,duordptresipusheaxpushecxmouecx,esicallduordptredx+2Upusheaxcall008999200089CS0A|83C41Uadd&印,G089C5OOO089C5OEBQ89C51U578D8EB4OOOOO0ESD719010

5、0pushedileaecx,duordptresi+Bi)callOBflADEFBOaSAOASfi0O8A0A&S8BCEv7U0Fg.mouJ®1ecx,esishortC胸口鼬99第1箍008A8A8AE871B7FFFFcallO089C2O00Q8A0A8F55pushebp668A0A9O8BCEnouecx,esiE809BAFFFFcallO089C4AO0O8AOA97“EB05jmpshort00eA0A9EEflF2C3FFFFcall0肥9匕四©OQ8A0A9E8B8E80020000nouecx,(Jwordptresi+280白白8A

6、DOAU3BCBcmpcxTebxSOSAOftA6v7h附jeShortOO8A0AAE008AQAA855JpushebpOlfOFFICE.'COJh1把3层白CALL断下来后,先在断点窗口禁止了(选中断点按空格).然后回到游戏等人物走完后把断点开启.我们发现13层的断点不停的断,我们先把13层的删了,剩下2个.这个时候我们在地图走路,断下来发现压入的参数并没有坐标等信息而且一直在断.我们知道,寻路CALL一般只是运行一次,然后便会执行走路的CALL来到达目的.我们可以试试把11层的CALL写出来.PUSHOPUSHOPUSHOPUSH1PUSH6PUSH0D2CALL95baO

7、ADDESPJ8在CALL内部没有发现调用了寄存器.所以这里不需要给寄存器赋值了最后加上堆栈处理就OK了,我们来调用一下.发现游戏没有出错但人物也没有走动.这个时候我们应该换一种想法来找.首先,我们先来猜猜调用寻路CALL的过程,既然是寻路CALL肯定要写入目标的值.如何找这个值呢理们用CE来找PUSHOPUSH。PUSHOPUSH1PUSH6PUSH0D2CALL95b8aOADDESP.18将鼠标放上去我们可以看到坐标我们点击我们要去的坐标(最好远一数值类型新扫描Addresslue076D5A7C57以下代码写入了选定地址内存扫描选项16拉:U.0040G000|'同样扫描只读内

8、彳快速扫描匚扫描时智停游池点),然后在CE中搜索sOQBS£&dUg2L:wii)的JEiL地CL-.j替热显示汇编添加乳代码列千更去信息叁看内存镇定描述地址咬类型数值没有描述076D5A7C4字节D蚓口RD57在这个游戏里坐标是用整数型存放的,如何知道呢?一个一个试就可以了.不断的寻路,然后搜索X坐标然后我们找到一个.用查找写入的代码,因为寻路CALL肯定要写入一个坐标点.所以我们监视这个坐标点来看看到底哪个代码写入了.Extrainfo0089ccce-cmpedx.eax0039ccd0JTLOVbyteptresp+13,01>>0Q89ccd5MOVed

9、i,ebp0089ccd7JftOVedi+041,ebz0089ccdajne0089cce6CopymemoryThevalueofthepointerneededfindthisaddr&ssi$probably176D5A7CEAX=00000042EBX=OOOOOOASECX-OOOOOOAEEDX-00000039ESI=07SDEA60EDI-076D5A>CEBF-00000039ESP=0O12FDA0EIP-OOS9CCD7TheregkstersshownhereaieAFTERtheinstruguonhasbeenexecutedToshowtherm

10、beforetheinstructioni$executedu&eAccessE*cepticin*insteadofDebugRegistersKc>rOFFiec,'COM这个便是写入X的代码我们换成OD来看看0O89CCBSO089CCBAE82679FFFF84C0calltest和酩945E©al,al0O39CCBC*0F6147D010000KB0S9CE3F0O89CCC2SB4614ROMeax,dwordptresi+140089CCC58B4E18nouecx.duordptresi+180089CCC857pushedi6G89CCC98

11、D7E1Cleaedi,dwrdptresi+lC0D89CCCC8BD5niouedx.ebp0889CCCE3RD。cmpedx,eaxE644241301ROVbyteptresp+13,1892Fnkovdwordptreditebp895F岫IDiOUduordptredi+UTebx90S9CCDA*ISQAjnzshortO0S9CCE6O039rCDCSRC3moueax,ebx0069CCDE3BC1cmpeax,ecx0e89CCE8“0F84A4S0Q000je0989CD8A00B9CCE6&R8600020000moueax,duordptresi+2000C

12、89CCECBBdo9nocsooROMeaxrdwrdptreax+940O89CCF28B6828nouebp,duordptreax+280089CCF8BS82CUIOUebx,duordptrcax+2C0O89CCF88B4C2U34movecxfduordptresp+3400S9CCFC89828mouduordptreax+28,ecx0O89CCFF8Hg6OO02C3OOmoupdx,duordptresi+2SO0089CD058B8294QOOQOOROUeax,dwrdptredx+94OB89CD0BSR&C2438movecxr。加rdptr|>s

13、p+31,这里我们发现没有CALL,我们来找找EBP的值也就是X坐标的值是从哪里过来的.WW-VW0O89CC8FVVccinta0089CC9083EC0CsubespTOC0O8?CC9356pushesi眦89CC948BF1aduesi,ecx0089CC96888E00020000mouecxTdvrordptresi+20085c9testecx,ecx0089CC9E7IS09juzshort0Q89CCA9OO89CCA032C0xoraltalB08?CCft25Epopesi9GS9CCA383C4CCadd电孙OCaO89CCA6£21C00retn*!CB08

14、?CCft953pushebx0OS9CCAABR5C241Caouebx,dwordptresp+1C00a9CCAEI55piihehp8B89CCAF8B6C241Cmouebp,duordptresp+1C0D89CCB353pusn-'Efii"0(J89CCB455pushebp0B89CCB5E82679FFFFcallB0894SEO90S9CCBA84C0testal#al0089CCBCv0FS147D01089I3je60S9CE3F0B89CCC28B4614moueax,dwordptresi+m0089CCC58B4E18mouecx,dordpt

15、resi+180089CCC857pushediQS89CCC9BD7E1Cleaedi,dwordptresi+lC0O89CCCC8BD5aduedxfebp0D89CCCE38D0cmpedx,eax盹89CCDB0644241301moubyteptresp+13,16二,,亏892Fmoudwordptredi,ebp00S9CCD7895F仙mouduordptredi+(tebx0089CCI>A775QAjmshortO089CCES.008?CCDC8BC3roueax,ebxon.m二onninrhrm.recfi-n-我们可以发现从ESP+1C这里传给EBP值.之前

16、说过ESP+1C是前面参数的值.我们往上一层找.CCint3rT_7183EC0Csubesp,56pusheslQ089CC94BBF1mouesiFecx0OS9CC96BR8EQCO2Q0OQmouecxvdwordptresi+20000S9CC9CB5E9testecKvbcm0089CC9E77509jnzshort0089CCA99089CCA032C0xoral.alAD012FDBC0089OQ12FDC000000Q12FDC40000O012FDC0OOQ99912FDCC0000在头部下段,我们在地图里走路断下来后到堆栈窗口右键单击栈顶的地址然后反汇编窗口跟随然后我们来

17、到了这里。蚓9CE5辟53pushebx0089CE518B5C21114mouebxtduordptresp+140089CE5556pushesi0O89CE5I58B7424OCmouesirdworrtptresp+C)D089CE5A57pushedi»GS9CE5B8B7C2411»mouedirduordptresp+1UJ0H89CE5F53pushebx0089CE608B5c241Cn)ovebx,dworrtptresp+1C53pushebx00S9CE658BD7movedx,edi0089CE676A08push0C1E205shledx.500

18、89CE6C8BC6moveax,esi0089CE6EC1E0Q6shleax_6V0O89CE7183c210addedx,1O0089CE7452pushedx3089CE7583C020addeax,20BftB9CE785。pusheax0089CE7957pushedi7fl56pushesiE810FEFFFFcall00S9CC908089CE805Fpopedi80S9CE81EEPOPesi0O89CE825Bpopebx0089CE83C21090retnOH10一一我们来断断看Ul>53±llLJpushebx0fl89CE51885c2U14noveb

19、xtdwordptresp+1ii堆栈SS:(O012FDF80B89CE5556pushesiesi=172EC1780B89CE568B7424OCmouesi,duordptresp+C性栈SS:O012FDEC0089CE5A57pushediedi=0D681EA800B9CESBBB7C2Umouedi,duordptresp+1U堆栈ss:(0012FDF0;0O89CE5F53pushebxebx=fffffF卜f肥89CE6电8B5c2U1CROUebx,dwordptresp+1C堆栈SS:(0012FDF2|QH89CE6453pushebxebx=FFFFFFFF0O8

20、9CE658BD7mouedKrediedl>=O00QOBnD0089CE676。0»push0QU89CE69C1E205shledx,50DB9CE6C8BC6nougax.esi0089CE6EC1E006shleax*60OB9CE7183c210addedx,100DS9CE7452pushedKed000O15DO0O39CE7583C020addeaxt20QU89CE785。pusheaxeax=OO001068OOS9CE7957pushediedi-OOOOOQAD卜56pushesiL_(E810FEFFFFcall0Q89CC9G,一料三好了我们发现这

21、里的坐标也是从上面压入的.我继续用刚刚的方法返回到上一层.008ACF62v7428筌short008ACF8C0D8ACF61I&附6mFItOVezm,dwordptresi+1UO08ACF678BS610move(Jm,duordptresi+10日目8ACF6R6AFFpush-1098ACF6C6口FFpush-10O8ACF6E5Bpusheax眄8MF6F52pushedKE8DBFEFEFFcall9089CE5OAMfiCFTS84C0testaltal098ftCF77&附E08fhovecx>duordptresi+8008ACF7A742Cjes

22、hort0O8ACFA8后dGLfGnn,j31c_J_.-J-l.F07B33F60这里又有一个CALL,我们断下来发现压入的2个值就是我们的目标坐标的值,看来这里应该就是真正的寻路CALL了我们按照写CALL篇中的流程来写他的CALL贰:CALL的分析:首先处理堆栈这里有4个堆栈push-1push-1pushypushxcall89ce50push中没有寄存器所以这里可以略过然后处理CALL需要的寄存器0G89CE50push0089CE518B5C2J414ntouebx,dviordptresp+140089CE5&56pushesi0D89CE56887424OCnouRS

23、"duordptresp+C0O89CESA57pushedi0099CE5B687C2414ntouedi,dviordptrpsp+140OS9CESF53pushebK9089CE60885c241Cniauebx,duordptre钟TC0C89CE653pushebx0989CE658BD7nouedx.ediO089CE676A00push00089CE69£1E2M5shletfx,50089CE6C80C6noveax.esi0089CE6EC1E0Q6shleax,60089CE7183c210adaeCx,100OS9CE7452pushedx0&

24、;89CE7583C020add200O89CE785。pusheax0089CE7957pushedi0009CE7A56pushesi0O89CE7BE810FEFFFFcall00S9CE805FpopediO089CE81SEPOPesi0O89CE825Bpoprttnebx0D89CE83C2109010O£!-OFFICK-<>OM-J-"从这里我们没有发现CALL调用了寄存器.最后是堆栈平衡处理我们发现CALL最后有RETN10这里子程序已经帮我们处理了堆栈平衡所以可以略过好了我们来测试下.叫DBFpushOAAcalf89CE5Oclientg

25、ui_r,eze-应用程序错误“拆口比金图父指令引用的*OK0dH01bQ"内存.谡内存不能为一百葭.要终止程序,请单击“确定”要调试程序,请单击“取消”OOMOFFId发现出错了.我们来调试下哪里错了这里只要不点确定就可以继续调试在CALL内部断点.l#Ul>7«jiLf1UUVj£WOUUITU人.Iu0Q8nE7U52pushedx观丽酶©ri"©0089CE7583C02。addeax,200G89CE7850pusheaxeax=QQD01Oit0Q89CE7957pushediedi-=OODQOMD眦ggcEmpi

26、i<;h.esi=0nq0fl03C0O89CErB|E81OFEFFFFCdll破89cC9电|整案春到这里5Fpopeai0O89CEB1BEpopesi我们重新调用一次来到这里后按FT进入CALL内部QO89CC3ECClots0089CC8Fccint30089CC9O83EC0Csubesp,9CA089CC9356pushesiS089CC94BBF1ROMesi,ecx_10089CC968B8E0O82D8OOmooecx,dwordptresi+200i卖取+200出错而ES工是由ECX9089CC9Cr85cgtestecx,ecx咽值的尸所以这里我们需要给ECIC®OOS9CC9EL75G9jnzshort0089CCA9国O989CCA032cgxoraltalQ089CCA25EP«Pesi皿89CCR383Ci|OCaddesp,ocD089CCA6C21C90retn1C8089CCA953pushebx口几口ftr*ncQDCP-11H-fjpmmJi,nhmrliritfi,."rlnj".,11仁门.11d5=0F8201B这里用指针读的地址是无法读取的,所以在这里

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论