RO自動芋的算出~舊文章參考看看吧~
聲明 :以下為轉貼文章
本人沒嘗試過..
來源網站:
http://page.freett.com/shaula/download/rohp.htm
1.抓檔案先
2.主程式:C_Rohp.zip
解到桌面上,這是主程式
3.工具軟體:Hashed Potato.lzh
(請用WINRAR解壓...)
為md5 還有 crc32 每個人的值不一樣所以得自己抓
然後因為是日文碼,怕有人看不到(看不懂)所以:
http://ms4.pccu.edu.tw/~s9120640/snap036.jpg
點選"參照" 選取你的Ragexe.exe
然後選單部分請拉到最下面最下面,選取CRC-32
按下計算,算完之後看你的16進位值
打開ROHP內附的roaddr.ini
[Ragexe]
Size=2596959
Crc32=8E92C910----------->crc32的值,看程式算出來的值 16近位大小寫沒差
Md5=A44AE8598BB6F88D72C0E9ECCC35FE6E------>這也要改選項Message Digest 5
把此roaddr.ini複製到ro目錄下面
4.打開ROHP內附的rohp.ini 修改以下兩各紅色部分
[RoAddr]
; RoAddr.dll 的所在資料夾
; 設定好的化程式會自動尋找資料夾
; 路徑的最後請加上一個 \
Path=F:\Gravity\RO\
; 測試版dll的使用許可
; 0 詢問我
; 1 直接使用
UseTestVer=1
5.roaddr資料
整個解到ro下面
之後執行rohp.exe在開遊戲(視窗模式)打怪應該就可顯示血量了.
http://rocrazy.tripod.com/doc/autoimoaddr.htm
自動芋のアドレスの算出
最新パッチに即座に対応するために自力のRagaddress.ini更新方法。
なんかうまくいったっぽいんで忘れないためにその流れをメモ。
○逆アセンブラ兼デバッガ
OllyDbg
http://home.t-online.de/home/Ollydbg/
OllyDbgの日本語解説と日本語化パッチ
http://gamereverserz.cjb.net/
まず最初にOllyDbgというソフトで逆アセンブルします。
このソフトは解析界では有名らしいです。
最初にこれからやろうとする流れをまとめると
Ragaddress.iniにあるWeight=の部分に入れるアドレスを知りたいとする。
そこでWeightの格納されてるアドレスを割り出したい。
ゲームを思い出すと、”Weight 1123/4010”のように表示されてたので、
1123の格納されてるアドレスを割り出したいのでまずいっしょに出力されるWeightという文字を検索する。
まず、RagnarokのインストールされてるフォルダにあるRagexe.exeをOllyで開く
http://photo.pchome.com.tw/s13/t/t/ttry420/book7/p130698636351s.jpg
画面が4分割されてます。
これがソフト全体を解析した結果です。
まず、このソフトにある全ての"文字列"というものを引っ張り出してからその中からWeightを検索します。
で、右上の部分で右クリック->Search for->All referenced text stringsを選択。
http://photo.pchome.com.tw/s13/t/t/ttry420/book7/p130698642388s.jpg
んでこういう画面。
新しくでたWindowのなかにある文字列を検索したいと思います。
今回はWeightを検索します。
一番上から検索したいのでバーを上まで持っていって一番上の行を選択し
右クリック->Search for textを選択
Weightの検索ですので、新しく出たWindowにそれを入力します。
こういう行が見つかりました。近くにLvやらHPもありますね。
0044BDB5 | PUSH Ragexe.0054F7BC | ASCII "Weight : %3d / %3d"
↑ ↑ ↑
メモリアドレス 0054F7BCにあるものをStackに入れろ 0054FCBCにある文字列
おそらくこういう意味だと思います。
次に実際に逆アセンブルした流れをたどっていって
ASCII "Weight : %3d / %3d"の%3dの部分に格納されるアドレスを
探っていきたいと思います。
今いるWindowは全体の中から文字列のみを引き出したWindowです。
はじめに表示されたものが全体を表示したものなのでそのWindowにもどります。
やりたいことは全体の流れの中で0044BDB5にあるアドレス付近の処理を見たいのです。
まず、全体の流れの方のWindowで0044BDB5の位置に移動したいと思います。
さっきの行の上にカーソルを持っていって右クリック->copy to clipboard->addressとします。
全体Windowに戻ってそのアドレスのところに移動したいと思います。
左上の部分で右クリック->Go to->Expressionとして出てきた枠にクリップボードにコピーしたアドレスを入れる。
今の行より少し上の部分の処理がみたいので少し上に移動します。
検索したアドレスにある少し上の部分を抜き出すと
0044BD9B . 8B0D 844B5A00 |MOV ECX,DWORD PTR DS:[5A4B84]
0044BDA1 . 83F9 01 |CMP ECX,1
0044BDA4 . 8BD9 |MOV EBX,ECX
0044BDA6 . 7F 05 |JG SHORT Ragexe.0044BDAD
0044BDA8 . BB 01000000 |MOV EBX,1
0044BDAD > 8B3D 884B5A00|MOV EDI,DWORD PTR DS:[5A4B88]
0044BDB3 . 51 |PUSH ECX
0044BDB4 . 57 |PUSH EDI
0044BDB5 . 68 BCF75400 |PUSH Ragexe.0054F7BC |ASCII "Weight : %3d / %3d"
どうやら下から4行目のMOV EDI,DWORD PTR DS:[5A4B88] の 5A4B88 が自動芋のWeightに入れる部分のようです。現在の重量
sprintf(buf, "Weight : %3d / %3d", EDI, ECX); を展開すればこうなるようです。
とりあえずこの数字を自動芋の設定ファイルに書いとけば動きます。
こんな風にして他のアドレスも求まるようです。
HPとSPは少しめんどくさいけどよく読めば分かります。
サンプルプログラムを作りましたのでそのソースの一部→○
RO....INI網址
RoAddr.ini - Upload & Maker
http://zerodrive.dip.jp/ragnarok/RoAddr/
英文版的
http://www.angelfire.com/rpg2/teartyphoon/rofiles/RoAddr_Guide.html
Every RoAddr.ini is different for each rag/sakexe. In order to create your own RoAddr.ini, you'll need some tools. Perfered tools would be a PE Explorer, a hex editor (just in case you need it :P), and a source RoAddr.ini as well as the ragexe it is for. For this tutorial we will use an RoAddr.ini for kRO 525b which was done by magusro.
[ini] [sPatch] [RoName] [Sakexe] [SakAddress] | To the left is the RoAddr file in question (minus the CharServer section).
Now, open up PE Explorer (or whatever disassembler you are using) and lets dig into it. Open your kRO 525b EXE in PE Explorer, then start the disassembler with default options. Make sure you open the kRO from a suitable RO directory so it has all the DLLs it needs. You'll be faced with a blue interface with a whole bunch of text, numbers, and hacker type stuff. It'll open at the function call EntryPoint. Now open another instance of PE Explorer and open the ragexe you would like to create an RoAddr.ini for and start the dissasembler there too. In your kRO disassembler, scroll up to the top and click on the first line, and we'll search for out first value. We'll do the WS2_32Recv entery first, as its also the easiest. |
Okay, as we can see, WS2_32Recv is at memory address 0x00644938. Click search menu, then find, then paste in 644938. You should be taken to a section of code, and if you scroll up, lo, and behold, you'll see a reference to WS32.dll.
0041815E E883BC1B00 00418163 83F8FF 00418166 7435 00418168 85C0 0041816A 7E31 0041816C 8B4E04 0041816F 6A00 00418171 8D85F4F6FFFF 00418177 6800080000 0041817C 50 0041817D 51 0041817E FF1538496400 00418184 83F8FF 00418187 741B 00418189 85C0 0041818B 7E2A 0041818D 8D95F4F6FFFF 00418193 8D4E3C 00418196 52 00418197 50 00418198 E883650000 | call cmp jz test jle mov push lea push push push call cmp jz test jle lea lea push push call | jmp_WS2_32.dll!WS2_32.18 eax,FFFFFFFFh L0041819D eax,eax L0041819D ecx,[esi+04h] 00000000h eax,[ebp-0000090Ch] 00000800h eax ecx [L00644938] eax,FFFFFFFFh L004181A4 eax,eax L004181B7 edx,[ebp-0000090Ch] ecx,[esi+3Ch] edx eax SUB_L0041E720 |
Now, you need to find a similar section of code in your target ragexe. My advice, search for the string "jmp_WS2_32.dll!WS2_32.18" in the other dissasembler window you have open. Continue until you see a section of code that looks very similar as the above. It won't be exactly the same, but the overal structure will be the same. The red address is the address for WS2_32Recv, and stick that in it's own entry in your new RoAddr.ini. Now just do this 20-some more times for each memory address and you'll be ready to go. Each time you will look for some unique string to search by. In this case, it was "jmp_WS2_32.dll!WS2_32.18", but it could also be something like "edx,[ebp-0000090Ch]".
A few extra words. The HP tables and the SP tables use very similar code. Be careful that you don't mix the two up. It may take a couple of tries to get it right. Also, some memory addresses aren't referenced in the disassembly:
SLBase
SNBase
ZoneBIPAddress
Packetlength
You'll have to either set all these to 0x00000000, or extrapilate the values. If you know assembly, you can probably dig them out, as these addresses may be dynamically allocated or mabey even volatile. If anyone knows how to find these addresses, clue me in so I can make complete RoAddr.inis.
Thats the end of this guide. I would go further into it, but this gives you the basics, and if you still don't get it, then you probably shouldn't be trying this anyways. For those of you who do understand, its be fairly simple, just time consuming. Take your time and you'll have a nicely done RoAddr.ini to use with Meron, or any other programs that use it.
ShiftFox
載點都死了
無法下載
嗚
希望能補載點
很讚的分享~~!
http://www.yyj.tw/