没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。
没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 @) S" E, g8 [' }7 n4 m' M, m
使用软件IDA,FlexHEX。参考工具AsmFun(汇编指令查询器)Fun_1.2,asm2Shellcode等。
& v, Y: y8 z* m6 k. j—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート妖城在线论坛6 |; C, c( E5 |1 u7 ~# s
用IDA载入gmsv,分析完成后进入Exports选项卡。
" \) r& A1 G0 C1 x4 b. _魔力私服,最新魔力宝贝私服技术交流搜索levelexp找到一个名为CHAR_GetLevelExp的子程序。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート, `, S/ R7 ~3 \. {8 ~6 d
.text:08074098 public CHAR_GetLevelExp
2 h6 \* y$ [' R. U5 U4 lbbs.mocwww.com.text:08074098 CHAR_GetLevelExp:
$ o3 N9 w5 R% I, b, s* h魔力私服,最新魔力宝贝私服技术交流.text:08074098 push ebp bbs.mocwww.com# g' c x" E) N+ N7 d! X
.text:08074099 mov ebp, esp
& F6 A" e! d, T: L6 g妖城在线论坛.text:0807409B mov edx, [ebp+8] ' O" v; K0 Z2 ~# n5 W, |
.text:0807409E cmp edx, 7Eh
# D2 t) A- Z2 A4 {$ u妖城在线论坛.text:080740A1 jbe short loc_80740C0
6 X# N# e2 Y( x8 ~9 \8 lbbs.mocwww.com.text:080740A3 push ecx
4 O3 }1 N: @5 H' h6 s9 Q- J妖城在线论坛.text:080740A4 mov ecx, 7 魔力私服,最新魔力宝贝私服技术交流. d& p! b. b6 V1 f# L
.text:080740A9 push edx 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表# T* Z' c, ^5 e3 C7 w3 C) l
.text:080740AA mov eax, edx bbs.mocwww.com& _- @2 { ^1 F) ] _/ F- t
.text:080740AC imul eax, edx
& R0 @ F! q* Lbbs.mocwww.com.text:080740AF imul eax, edx
$ P& Q1 G) k# i& T妖城在线论坛.text:080740B2 imul eax, ecx 妖城在线论坛4 ~$ v) B% V1 F* h% j/ J g
.text:080740B6 loc_80740B6:
/ ?1 }' [- \# D8 |魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740BE leave + ?- J" D1 V0 w3 G. W9 `' O1 x
.text:080740BF retn 4 n% Z4 b" h1 S" h5 L0 B4 P
.text:080740C0 loc_80740C0: 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表( y4 W1 N {1 L8 _8 }; q
.text:080740C0 mov eax, dword ptr LevelUpTbl[edx*4] , q. h! e( @ F9 H; }4 C7 n
.text:080740C7 jmp short loc_80740B6
( x1 \1 J& n9 W! o
6 B. R- K8 n2 G5 B8 r粗糙的解释下这段代码的意思 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表/ p6 v& [8 o1 c6 G+ k
+ S7 f4 j5 V/ l, A妖城在线论坛Push edp bbs.mocwww.com$ t: \3 @" e: w% c; t/ @# I
Mov ebp,esp 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表$ W. ^& w+ k6 y% E4 W. n6 Z
Mov edx,[ebp+8] —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート* c2 E$ n( @9 ]0 D! R3 ~
获取当前等级的下一级存到edx bbs.mocwww.com$ ^& T: d! A8 n6 m
$ y" l1 A# q0 o& x1 QCmp edx,7eh 妖城在线论坛% K5 p+ z3 l( a
将edx与7eh也就是10进制数130比较 妖城在线论坛5 P) B; u4 r [0 N" V
9 R4 B$ C+ R4 t# Z+ C9 |4 abbs.mocwww.comJbe shortloc_80740C0 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート: E9 o* \+ u1 S( \
如果edx小于7eh则进行跳转到80740C0 bbs.mocwww.com9 T/ c' H) K6 G& {
妖城在线论坛% L7 A% g( o. `0 E/ W/ O
Push ecx 妖城在线论坛( P! G2 b+ |, Z2 g2 Y ?+ l+ q
Mov ecx,7 2 L" x& S M, w- W! {) G4 [1 I
给ecx赋值7 bbs.mocwww.com, O4 q3 w3 p }" S+ _- B2 ?
魔力私服,最新魔力宝贝私服技术交流6 h! E% V3 M5 @) }, w
Push edx
! s/ ~2 {( {3 v5 t$ _+ l—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートMov eax,edx 魔力私服,最新魔力宝贝私服技术交流3 L4 V# Y: ]4 b
把当前等级+1的值给eax
" W* \* _2 v( [2 t# y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート. C- w8 m0 n9 F* R! q" }1 n: Q
Imul eax,edx
( N! J. V3 |% g% s- L' k5 n/ a' Bbbs.mocwww.com把eax与edx相乘,结果存在eax
$ a; R+ E# y" R6 ]魔力私服,最新魔力宝贝私服技术交流
# x) V* M) H: G1 n" k, l魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Imul eax,ecx
5 X8 m: `& U( q妖城在线论坛把eax与ecx相乘,结果存在eax bbs.mocwww.com9 x3 R$ P8 h( E# k# V. G z% ?
* |3 j0 `1 C' ^" j
Leave - E6 p, Z7 Y7 U0 g/ a Z1 }8 w
Retn bbs.mocwww.com- C$ E# c7 o- X7 X4 s' r _
退出这个过程吧,大概
: A6 i" b2 q, s) {0 z—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート妖城在线论坛/ Y3 U& ?. E* H) u# Y3 f6 i" Z) ~
Mov eax,dwordptrLevelUPtbl[edx*4]
/ k* M7 q( b( ^% b; d# b妖城在线论坛这里是读取经验表的内容给eax,也就是查表读经验 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 A7 o1 |2 b: S
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 N3 l; _6 r0 F6 C
jmp short loc_80740B6 妖城在线论坛( b) ?' _4 E- a6 ?# T" C& p
强制跳转到80740B6 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート9 h+ H! P! m1 S& P" Q& i0 C
2 r# k% h1 V1 O5 H魔力私服,最新魔力宝贝私服技术交流好了,这段代码就这点意思,逻辑上不难理解。 bbs.mocwww.com0 ^ Y1 }: t, f
虽然刚开始的时候我也是一头雾水,但是不要紧,随着一步步地摸索自然就会理解了。
a; r+ V* ~; R! W- N" J—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
' h2 x# d+ Q! o$ q' V3 F$ n' ?bbs.mocwww.com分析完了之后开始修改了,上面的代码具体作用如下: bbs.mocwww.com0 h0 v5 m& _3 e" q; ~
判断等级下一级是否小于7eh,是则跳转到查表。 魔力私服,最新魔力宝贝私服技术交流% E0 Y; G5 z* {& t* s+ R" H0 l
否的话也就是大于7eh时,按照下面算法运算
0 ]0 s' F- s9 I. ]) R( xbbs.mocwww.com.text:080740A3 push ecx —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 g, V" x. f# W8 ^. c
.text:080740A4 mov ecx, 7 魔力私服,最新魔力宝贝私服技术交流- s* q4 F$ L/ J0 F
.text:080740A9 push edx 3 H8 V4 j# t, l4 H) l
.text:080740AA mov eax, edx
$ Y6 I& L3 v; @$ f—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740AC imul eax, edx
7 J6 V# ]. }0 V! Q. w# b* Y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740AF imul eax, edx
' A) v8 Z: m4 f& u, h- w, t—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740B2 imul eax, ecx
& d w- H) Q0 I) q6 O' _—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート也就是eax的三次方乘以ecx,这里可以改成我想要的。
& c k4 j, d! z2 y: S c W/ D; ?—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート0 K) k2 p3 l' x) L
我的目标是改称等级的四次方除以50,但是问题来了。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート2 N) k: h" ]+ J( E# ?
怎么做除法,怎么写代码到反汇编里,一步步来,先列出想要的代码。 妖城在线论坛, B0 s0 ^7 A! L) u/ Y
9 q3 A0 Z! ?+ K% m. Y2 Q6 ~# u# _8 S妖城在线论坛.text:08074098 public CHAR_GetLevelExp
! j- R) j7 L/ Q8 S妖城在线论坛.text:08074098 CHAR_GetLevelExp: 妖城在线论坛# {3 M# A: O, m& g
.text:08074098 bbs.mocwww.com$ ~* j- C# }1 Z7 t' X1 H, b4 |/ B
.text:08074098 push ebp
$ ^" y1 I: ]9 p5 O( h.text:08074099 mov ebp, esp
' I7 ~$ I+ Y, i5 K( n* O/ k妖城在线论坛.text:0807409B mov edx, [ebp+8] 魔力私服,最新魔力宝贝私服技术交流" U$ `4 a7 {6 c* b
.text:0807409E cmp edx, 0FFh
; s: s: a( j: j- @妖城在线论坛.text:080740A4 jg short loc_80740C0
" J z$ A; X' o6 V.text:080740A6 push ecx
! N( Y* g5 j; V! ]! G7 p魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740A7 mov ecx, 32h
9 Z3 l1 y+ K0 ~8 y. d$ i, fbbs.mocwww.com.text:080740AC push edx 妖城在线论坛3 ?2 M* }4 X0 a
.text:080740AD mov eax, edx
0 T8 @6 t: o; G7 C—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740AF imul eax, edx
+ O" i) S) }9 S3 u: O7 l妖城在线论坛.text:080740B2 imul eax, edx 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表" W3 i+ ]7 y( M/ D; U6 p% Q
.text:080740B5 cdq 2 P* l# l, Z# H/ t7 _' O- H7 }1 G- H" G
.text:080740B6 idiv ecx 3 S7 G# s. i; _% a3 i$ i6 z
.text:080740B8 mov edx, [ebp+8]
; Q& W6 }5 J4 y; k7 [! G( @) r—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740BB imul eax, edx
+ m+ ~3 e& X) e/ y0 ?—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740BE 妖城在线论坛) o/ l$ A6 E# m2 e o
.text:080740BE locret_80740BE:
4 ~; D, ^+ F- S0 T4 @; W& a魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740BE leave 妖城在线论坛2 @+ m$ [$ v" [3 H! W
.text:080740BF retn 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表, z- l# [* E @4 L. W! E3 ?, t. Y
.text:080740C0 loc_80740C0:
k7 e: |- A8 D2 n妖城在线论坛.text:080740C0 mov eax, 0FFFFFFFFh bbs.mocwww.com5 k) R6 U: ^6 k' V: T8 Y
.text:080740C5 jmp short locret_80740BE
( ?( s" l. S* G% A魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表& x+ ^. @, u; n* m( H% S) q
方便起见这里直接把我改好的代码贴出来,与原来不同的地方: —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート& F3 {. v" ^" H: w, y9 j% y5 D
Cmp edx,0FFh bbs.mocwww.com+ `1 X( H5 a4 r ?; J3 F6 b; }
Jg shortloc_8074C0 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表) P, u) ^. o" f1 W5 Q
判断等级是否大于255是的话跳转80740C0 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート+ {: O: Q z3 M6 C
否的话进入我们的等级公式: ; p6 \) r$ d% K/ p1 R& m
(等级*等级*等级除以50)*等级 妖城在线论坛* j9 M1 g( L% Y
也就是等级三次方除以50再乘以等级 魔力私服,最新魔力宝贝私服技术交流! Z" n9 f Q/ z. y& ?
为什么要这么做而不是直接四次方乘以50是因为防止溢出数据。 魔力私服,最新魔力宝贝私服技术交流/ `9 |& R2 W( W4 H% i
216的四次方是2176782336,这个数字正好可以让下级经验变负,呵呵。 bbs.mocwww.com: |. `# d3 o* D; W# `" e
所以先除50再乘到第四次方的时候就不会变负了,这是我摸索了很久突然领悟的真理。 魔力私服,最新魔力宝贝私服技术交流: w f5 Q1 V/ w M E( D) K
: q J( ^* \6 f% x, mbbs.mocwww.com接下去做公式: 魔力私服,最新魔力宝贝私服技术交流) k9 o' C, C4 y( u% b
Push ecx,32h 这里是经验倍率,就是公服经验除以ecx等于你的经验
/ X- G* _" a6 l5 e6 h妖城在线论坛Mov eax,edx 将下一等级的值赋值给eax 妖城在线论坛0 u+ r2 I( V( P- p4 ~
Imul eax,edx 将eax,edx相乘,结果存到eax
" ] M3 O5 T3 _7 g0 ~妖城在线论坛Imul eax,edx 同上 bbs.mocwww.com: Z: e& D5 w8 e
Cdq 这个做除法不加就会出错,用户登录后服务器当机 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 w4 }0 [8 c' |0 v
Idiv ecx eax除以32h算到50倍经验 bbs.mocwww.com( K8 z9 _: r, I1 j$ O2 {; c/ h
Mov edx,[ebp+8] 从新获取下一等级的值
# g" V) ]- Y; J& t9 D4 J- h魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Imul eax,edx 将eax,edx相乘,结果存到eax 妖城在线论坛) m. \9 L b' }( B5 u( M
bbs.mocwww.com3 U0 d% x, k' `, x7 c4 k5 C
好了,这样就完成了运算过程。
# \' g2 C% k: y3 S—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート妖城在线论坛, h1 A: q% L" ?0 H: S' v- J: o
.text:080740C0 loc_80740C0:
: o1 Q/ G- p# U, v—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートmov eax, 0FFFFFFFFh 魔力私服,最新魔力宝贝私服技术交流! t6 a8 H& `$ j8 ^" y) V! W
jmp short locret_80740BE
- e- Q, F" f. e4 ^bbs.mocwww.com这一段代码就是等级超过你设置的上限之后返回-1。 妖城在线论坛3 X" y% `8 J* Q4 e9 Z1 p6 I
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート0 y) n8 |2 s/ ?2 _: B) s) e
bbs.mocwww.com; l. d# T5 X Y4 M- i, q
下面有个很严重的问题,新手比较难适应的就是如何写入你的代码。 妖城在线论坛1 ]) j/ {$ R1 b* H
这里就要用到FlexHex了。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表, s. ], X6 Y4 k: i- m& q
5 |. }& N# `1 u+ e魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表首先将我们的汇编代码转成机器码,这一步需要非常的耐心细致。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表; X) ~# R+ c @) ?5 w
如下对应: & u1 y, u! j' Y
Cmp edx,0ffh 81 FA FF 00 00 00 bbs.mocwww.com- E7 T) t1 P s* J
jg short loc_80740C0 71 FA
. u! L% H( P. u' S$ \- F—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートmov ecx, 32h B9 32 00 00 00 bbs.mocwww.com) S& {; S3 x! P0 [7 u
* u5 b$ M6 L" _3 ?( T, o9 r4 L魔力私服,最新魔力宝贝私服技术交流依次类推,都可以在IDA中搜索到你要的代码然后做相应修改。
- V C! e- q1 _/ I) L3 L# M魔力私服,最新魔力宝贝私服技术交流这个挺有乐趣可以自己慢慢享受摸索。
8 y P0 Y2 l1 l1 m; F" H魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
& {& Z5 ?4 c: n6 K以上是我通宵玩了20多小时的个人心得体会,谢谢网上一些老人们的教程给了我很多指引和启示。