(图+源码+详细分析)全面分析购买药品NPC
全面分析购买药品NPC分析如下:一.首先打开购买药品对话框,需要载入游戏,下BP SEND,然后返回游戏点NPC,此时出现购买药品对话框,然后查看堆栈,找到如下几个地址: 0059880A 0059872E 005986F0 00510F08 0050FC85第一二个下断,返回游戏走一下,发现会断下来,直接排除第三个下断,太复杂,不像。先找后面的,如果不行再来详细分析第四个下断有点像,注入如下代码:push 0push 0push 0push 0mov eax,mov eax,mov ecx,05ea9f40mov edx,3f2call 005986c0测试通不过。第五个下断,原型如下:所以,写入注入代码,如下:经分析:前面两行为无用的代码,所以省掉mov edx,05ea9f40//mov eax,esi//测试时发现这句也可以省掉call 00510eb4二.然后追踪edx值的来源1.看清楚上面的原型,其中edx=,所以我们要追踪ebx的来源,所以往上看,你会发现在0050FC09 /E9 AF030000 JMP BMir.0050FFBD这个地方有个跳转,如果在这儿下断,当返回游戏中点购药NPC时,OD不会断下来。所以如果我们用od追踪,将会十分困难。所以我这里采用OD+CE的方法。2.下断,查明ebx的值,当然每次重新打开游戏时此值不一样。我这里,ebx=06778A80,于是在ce中搜索067787A0,然后查找访问该地址的代码,出现:00473a63 mov ebx,00473a66 cmp edx,此时,ebx=067469d8,进一步发现:Ebx=,其中eax=0115cef0,再搜索0115cef0的来源:00566510:mov eax,,其中ebx=7ff30010,继续搜ebx的来源,发殃: =7ff30010,综上所述:ebx=[[[+5fb5c]+04]+4],所以edx=3.使用dd [[[+5fb5c]+4]+4]+4查看,会发现里面的值就是edx. 三.用dephi写打开买药NPC的call,代码如下:procedure TForm1.Button34Click(Sender: TObject);begin{mov edx,05fef2d0//其中EDX=,所以追踪EBX的来源call 00510eb4 //dd edx=[[[+5fb5c]+4]+4]+4}asm mov edx,$63e7c4 mov edx, add edx,$5fb5c mov edx, add edx,4 mov edx, add edx,4 mov edx, add edx,4 mov edx, mov ebx, $00510eb4 call ebxend;end; 好了,现在测试成功,可以打开药品npc了。然后呢,现在我要找点击买药中的买字后出现的窗口。 四.首先用bp send下断,跟踪到点击买后的CALL,原型如下:买药NPC原型CALL:0048E2A8 0059880A 0059871F 0055BE7F 004EDD04004EDCED 8B15 20665F00 MOV EDX,DWORD PTR DS: ; BMir.00641D24004EDCF3 8B12 MOV EDX,DWORD PTR DS:004EDCF5 A1 906A5F00 MOV EAX,DWORD PTR DS:004EDCFA 8B00 MOV EAX,DWORD PTR DS:004EDCFC 8B4D FC MOV ECX,DWORD PTR SS: ; ecx=004EDCFF E8 ACD90600 CALL BMir.0055B6B0 ; 买药NPC CALL 命令的来源://db [[[[+010]+4]+4+4*4]+0d8],其中数组下标4代表第四项,买药 注入测试一下:asmmov edx,$ 5F6620mov edx,mov edx,mov eax,$5F6A90mov eax,mov eax,mov ecx,command //字符串指针 @buy 打开卖对话框@sell 打开买对话框@main 主对话框(返回)mov ebx,$0055B6B0 // @repair 打开修理对话框@doexit退出call ebxend; 五.找选取物品CALL原型如下:005E7A65 57 PUSH EDI005E7A66 8B45 08 MOV EAX,DWORD PTR SS:005E7A69 50 PUSH EAX005E7A6A 8BCE MOV ECX,ESI005E7A6C 8BD3 MOV EDX,EBX005E7A6E 8B83 DC000000 MOV EAX,DWORD PTR DS:005E7A74 FF93 D8000000 CALL DWORD PTR DS:写如下源代码测试:push 0push 0012faccmov ecx,0mov ebx,0681cdb0mov edx,ebxmov eax,call 跟踪一下ebx的来源:dd [[+10]+4]+1c里面放的值就是ebx的值 六.购买药品CALL0055C65B 004D9300 005DB248 005B59E7原型如下:005DB237 57 PUSH EDI005DB238 8BCE MOV ECX,ESI005DB23A 8BD3 MOV EDX,EBX ; 005DB23C 8B83 94000000 MOV EAX,DWORD PTR DS:005DB242 FF93 90000000 CALL DWORD PTR DS: ; 分析EBX的来源:其中EBX=0681ca80,此时:mov eax,mov eax,,所以: eax=[+4],此时ebx=01162470,然后追踪其来源,此时 mov eax,,此时ebx=06832440,发现=6832440 综合一下:eax=[[[+10]+4]+4] 以下测试成功,可以成功购买物品: asm push 4 //固定 mov esi,$b //固定 mov ecx,esi mov ebx,$63e834 mov ebx, mov ebx, mov ebx, mov ebx, mov edx,ebx mov eax, mov ebx, call ebxend; 本文章根据手把手项目开发 - 一站式开发项目培训平台中的视频教程整理而成,指导大师:QQ:1026165915,转载请注明出处。?哥,搬运麻烦搬得有点水平,
页:
[1]