卖3-4级普通装备得1个果子、卖5级装备得2个果子
这个改起来麻烦还是很多的
1、首先0040DA45这个方法是将第一个参数所指示的物品数量加1。
本身不太好修改,要完成加二的目标的话,我们重新写了个函数(这个返回值似乎还有问题),
00406B83 PUSH EBP
00406B84 MOV EBP,ESP
00406B86 MOV EAX,DWORD PTR SS:[EBP+C]
00406B89 PUSH EAX
00406B8A MOV ECX,004B0770
00406B8F CALL 0040DA45
00406B94 MOV ECX,DWORD PTR SS:[EBP+8]
00406B97 CMP ECX,2
00406B9A JL SHORT 00406BAB
00406B9C MOV EAX,DWORD PTR SS:[EBP+C]
00406B9F PUSH EAX
00406BA0 MOV ECX,004B0770
00406BA5 CALL 0040DA45
00406BAA DEC EAX ;-1以保持返回值,便于判断
00406BAB MOV ESP,EBP
00406BAD POP EBP
00406BAE RETN 8
;调用此函数的地方
0046B28A PUSH DWORD PTR SS:[EBP-8C] ;物品
0046B290 PUSH DWORD PTR SS:[EBP-94] ;数量
0046B296 CALL 00406B83
2、买出装备获得果子数量的计算
;计算获得何种果子及果子数量的函数0040D51B中
0040D595 JL SHORT 0040D5E2
0040D5BF MOV AL,67
0040D5C1 JMP SHORT 0040D5D5
0040D5C3 MOV AL,62
0040D5C5 JMP SHORT 0040D5D5
0040D5C7 MOV AL,66
0040D5C9 JMP SHORT 0040D5D5
0040D5CB MOV AL,63
0040D5CD JMP SHORT 0040D5D5
0040D5CF MOV AL,64
0040D5D1 JMP SHORT 0040D5D5
0040D5D3 MOV AL,65
0040D5D5 MOV ECX,1
0040D5DA CMP EDX,5
0040D5DD JL SHORT 0040D5E4
0040D5DF INC ECX
0040D5E0 JMP SHORT 0040D5E4
0040D5E2 OR AL,0FF
;上面对应的跳转表
0040D5EA 0040D5BF
0040D5EE 0040D5C3
0040D5F2 0040D5C7
0040D5F6 0040D5C7
0040D5FA 0040D5C3
0040D5FE 0040D5CB
0040D602 0040D5CB
0040D606 0040D5CF
0040D60A 0040D5D3
0040D60E 0040D5E2
调用此函数之后的修改
0046B1E7 MOV BYTE PTR SS:[EBP-8C],AL
0046B1ED MOV DWORD PTR SS:[EBP-94],ECX
3、提示话语的修改
就是商人很满意Lv几的装备,送给几个果子这句话。
首先要修改虚拟地址00486E40,exe中物理地址0x86040位置的字符串
商人好像对Lv.%2d的
%s非常中意,所以
又给了我们一个%s。
改为
商人好像对Lv.%2d的
%s非常中意,所以
又给了我们%d个%s。
0046B203 MOV ECX,EAX
0046B205 IMUL ECX,ECX,19
0046B208 ADD ECX,004A1140
0046B20E CALL 0045F710
0046B213 PUSH EAX ;压入果子名称串地址
0046B214 MOV EAX,DWORD PTR SS:[EBP-94]
0046B21A PUSH EAX ;压入果子数量
0046B21B NOP
0046B21C NOP
0046B21D NOP
4、其他相关修改
调用以上函数的函数0046B043的其他修改
0046B046 SUB ESP,94
0046B1ED MOV DWORD PTR SS:[EBP-94],ECX ;将果子的数量存入栈内
或许遗漏了部分的修改,因为修改中OllyDbg因为剪切板错误崩溃了几次,修改位置都没有留下
|