宝贝芽芽 发表于 2025-7-7 21:15

(图+源码+详细分析)全面分析购买药品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,转载请注明出处。

一身旧雪 发表于 2025-7-7 23:04

?哥,搬运麻烦搬得有点水平,
页: [1]
查看完整版本: (图+源码+详细分析)全面分析购买药品NPC