00002 貪婪洞窟.005:存檔修改器
00002 貪婪洞窟.005:存檔修改器
個人精力有限,又急著進入下一個需要重點研究的遊戲《不思議迷宮》,因此,存檔修改器能夠修改的內容不會很多,有:鑽石、金幣、部分人物屬性、裝備和物品。
在上一篇中講解了如何解密存檔檔案,即sqlite資料庫檔案“CaveMaster.db”。本章的存檔修改器會跳過這一環節,直接基於解密後的資料庫檔案進行操作。
首先下載SQLite Database Browser,開啟解密後的“CaveMaster.db”(以下就直接簡稱為“CaveMaster2.db”),可以先觀察一番。我們發現它有很多表。為了將這些表展示給大家,我需要將它們匯出。切換到“Execute
SQL
然後,我就在選單上找找匯出、另存之類的選項,結果發現根本就不能匯出查詢結果,只能匯出某張表。sqlite_master是一張特殊的表,在SQLite
Database Browser中並非直接可見。那就把查詢結果儲存到自定義的新表中吧。於是,執行“SELECT * INTO myTempTables
FROM sqlite_master where type='table'”,然後,軟體就失去響應了。網上查了一下,才知道自己的無知,原來在sqlite中,是另一種語法
表名 |
cave_pay |
table_root_table |
sqlite_sequence |
lamp_Task |
equip_wear_dl |
equip_wear_dl_temp |
table_GameController |
table_GameController_temp |
table_Monsters |
table_Achievement |
table_Achievement_temp |
equip_base2 |
equip_add2 |
equip_base2_temp |
equip_add2_temp |
equip_base8 |
equip_add8 |
equip_base8_temp |
equip_add8_temp |
equip_base1 |
equip_add1 |
equip_base1_temp |
equip_add1_temp |
equip_base4 |
equip_add4 |
equip_base4_temp |
equip_add4_temp |
equip_base3 |
equip_add3 |
equip_base3_temp |
equip_add3_temp |
equip_base7 |
equip_add7 |
equip_base7_temp |
equip_add7_temp |
equip_base6 |
equip_add6 |
equip_base6_temp |
equip_add6_temp |
equip_base5 |
equip_add5 |
equip_base5_temp |
equip_add5_temp |
item_base2 |
item_base2_temp |
item_base8 |
item_base8_temp |
item_base1 |
item_base1_temp |
item_base4 |
item_base4_temp |
item_base3 |
item_base3_temp |
item_base6 |
item_base6_temp |
item_base7 |
item_base7_temp |
item_base5 |
item_base5_temp |
item_choice |
item_choice_temp |
item_choice_dl |
item_choice_dl_temp |
equip_wear |
equip_wear_temp |
item_plus_temp |
hero_plus |
hero_plus_temp |
hero_plus_dl |
hero_plus_dl_temp |
hero_attr |
hero_attr_temp |
hero_model |
hero_attr_dl |
hero_attr_dl_temp |
hero_skill |
hero_skill_dl |
game_incave_status_temp |
skill |
skill_temp |
skill_dl_temp |
skill_dl |
drama |
drama_temp |
levelReward |
table_Task |
table_Task_temp |
table_treasure |
camp_shop |
map |
tile_data |
open_shadow |
map_config |
建表語句太長,此處就不貼上了。
好,那麼現在我們來找找,鑽石儲存在哪張表。倒不是不難找,根據表的名稱就可以排除很多張表,然後開啟剩下的幾個看看資料,就知道了。還有另外一種方法——還記得上一章中的函式嗎?裡面有一句:sub_8355FC只要跟蹤跟蹤,就能準確地知道COL_NAME_GEMS的值為"_gems",在表table_root_table中。通過同樣的方法,可以找出“金幣”所在的表和欄位名稱。人物屬性、裝備和物品,它們所對應的表都是一目瞭然的,唯一的問題是,裝備和物品為什麼有8個表?至於那些_temp表,可能是用來臨時儲存角色在地牢中的資訊的,當角色通關或者回城時,再更新到正式表中。說起這個,我想起還有一個_temp資料庫檔案,難道這個才是臨時儲存角色在地牢中的資訊的?管它呢,反正怎麼著都不影響存檔的修改。
準備工作到此就結束了。下面我們先作一下規劃。
修改器需要一個輸入框,或者一個檔案瀏覽按鈕,以讓使用者指定CaveMaster2.db的完整路徑。然後,還需要一個“讀取”或者“載入”按鈕,點選後就立即取得存檔內容。為了顯示和修改存檔內容,還需要一些輸入框,和“修改”按鈕。裝備和物品是列表,需要用列表框顯示,並且要能夠新增、修改、刪除列表項。最後,需要一個“儲存”按鈕,點選後就將當前的內容持久化到CaveMaster2.db。
這項工作用VC做很合適。但我選擇了Swift,哈哈,就這麼任性。主要是因為我對Swift不熟,用它練練手。由於Swift的圖形化UI編輯讓人不爽,我就用一個列表框來顯示裝備和物品了。
開啟Xcode,新建Cocoa應用,脫脫拽拽搗鼓UI,Outlet繫結,新增libsqlite3.tbd、sqlite3橋接檔案,這些我就統統略過了。下面先給出Swift中操作sqlite3資料庫的簡易封裝類(功能太少,不忍直視,但已夠用):
publicclassMySQLite3: NSObject
{
privatevar db : COpaquePointer = nil
publicinit?(file:String)
{
super.init()
ifsqlite3_open(file,&self.db) != SQLITE_OK
{
returnnil
}
}
deinit
{
ifself.db != nil
{
sqlite3_close(db)
}
}
//執行無錯返回nil;否則返回錯誤資訊。好程式碼應當是自我說明的,此處卻有註釋,說明了作者——也就是我——的命名水平的低下
publicfuncexecute(sqlsSeparatedBySemicolon:String)->String?
{
let sqlsOfUtf8 = sqlsSeparatedBySemicolon.cStringUsingEncoding(NSStringEncoding.init(NSUTF8StringEncoding))
var error : UnsafeMutablePointer<CChar> = nil
ifsqlite3_exec(self.db, sqlsOfUtf8!, nil, nil, &error) == SQLITE_OK
{
returnnil
}
else
{
let errorString = String.fromCString(error)
sqlite3_free(error)
return errorString
}
}
publicfuncqueryScaler(sql:String)->(scaler:String?, error:String?)
{
let result = self.query(sql)
if result.recordset == nil
{
return (scaler:nil,error:result.error)
}
else
{
return (scaler:result.recordset!.rows[0][0],error:result.error)
}
}
publicfuncquery(sql:String)->(
recordset:(
columns:[String],
rows:[[String]])?,
error:String?)
{
let sqlOfUtf8 = sql.cStringUsingEncoding(NSStringEncoding.init(NSUTF8StringEncoding))
var recordset : UnsafeMutablePointer<UnsafeMutablePointer<CChar>> =nil
var recordsetRows : Int32 = 0;
var recordsetColumns : Int32 = 0;
var error : UnsafeMutablePointer<CChar> = nil
if (sqlite3_get_table(self.db, sqlOfUtf8!, &recordset, &recordsetRows, &recordsetColumns,&error) != SQLITE_OK) || (recordsetColumns < 1)
{
let errorString = String.fromCString(error)
sqlite3_free(error)
return (nil, errorString);
00002
貪婪洞窟.005:存檔修改器
個人精力有限,又急著進入下一個需要重點研究的遊戲《不思議迷宮》,因此,存檔修改器能夠修改的內容不會很多,有:鑽石、金幣、部分人物屬性、裝備和物品。
在上一篇中講解了如何解密存檔檔案,即sqlite資料庫檔 fff after oss all send outer png col 查看 一、實驗拓撲:Note:1、R1、R2、R3兩邊路由器計時器一般部署要相同,不然會發生網絡動蕩。2、RIP協議默認為版本1,查看方法:show ip protocal!二、命令部署:1、基本部署
最近比較懷舊,在玩一個比較老的PC遊戲。由於遊戲難度太高了,於是就打算自己寫一個修改器。
通過查閱資料,在 Windows 下的修改器主要需要用到四個函式:OpenProcess, CloseHandle, WriteProcessMemory, ReadProcessMemory。
這幾個 感覺好長時間沒寫東西了,一方面主要是自己的角色發生了變化,每天要面對各種各樣的事情和突發事件,不能再有一個完整的長時間讓自己靜下來寫程式碼,或者寫文章。
另一方面現在公司技術棧不再停留在只有 Laravel + VUE 了,我們還有小程式、APP 等開發,所以我關注的東西也就多了。
接下來我還是會繼續持續
本教程面向有C\C++基礎的人,最好還要懂一些Windows程式設計知識
程式碼一律用Visual Studio 2013編譯,如果你還在用VC6請趁早丟掉它...
寫這個教程只是為了讓玩家更好地體驗所愛的單機遊戲,順便學到些逆向知識,我不會用網路遊戲做示範,請自重
先從最
教程面向有C\C++基礎的人,最好還要懂一些Windows程式設計知識
程式碼一律用Visual Studio 2013編譯,如果你還在用VC6請趁早丟掉它...
寫這個教程只是為了讓玩家更好地體驗所愛的單機遊戲,順便學到些逆向知識,我不會用網路遊戲做示範,請自重
(_(
本教程面向有C\C++基礎的人,最好還要懂一些Windows程式設計知識
程式碼一律用Visual Studio 2013編譯,如果你還在用VC6請趁早丟掉它...
寫這個教程只是為了讓玩家更好地體驗所愛的單機遊戲,順便學到些逆向知識,我不會用網路遊戲做示範,請自重
本章介
jQuery選擇器是jQuery庫的一大特色,用這些選擇器不但可以省去繁瑣的JavaScript 書寫方式,還可以節省時間和效率,正是有這些jQuery選擇器,才讓我們更容易的操作JavaScript的dom。
1. 基本選擇器
·#id 根據 提交 -c sce fse edi scrip 偶數 http n)
jQuery選擇器是jQuery庫的一大特色,用這些選擇器不但可以省去繁瑣的JavaScript 書寫方式,還可以節省時間和效率,正是有這些jQuery選擇器,才讓我們更容易的操作JavaScript的 comm roi getname 默認 error: textview 變種 nbsp 訪問 App開發:模擬服務器數據接口 - MockApi
為了方便app開發過程中,不受服務器接口的限制,便於客戶端功能的快速測試,可以在客戶端實現一個模擬服務器數據接口的Moc 服務器 更多 stars 文件中 alt nic data bar nts 當抓取網頁時,常見的任務是從HTML源碼中提取數據。現有的一些庫可以達到這個目的:
BeautifulSoup
lxml
Scrapy 提取數據有自己的一套機制。它們被稱作選擇器(seletor exchange skype forbusiness 持久聊天服務器部署註意事項:1.監控和存檔數據庫,不能使用中央管理存儲實例(RTC),必須單獨安裝SQL實例,此處的原因是方式存檔和監控數據太多導致中央管理存儲故障。2.監控功能所需的SQL後端數據庫必須支持sql代理功能(Express版本不 四種 內存回收 第一次 不可達 append test 方法 static hot
堆裏面存放著Java世界差點兒全部的對象實例,垃圾收集器在對堆進行回收前。第一件事情就是要確定這些對象之中哪些還存活,哪些已經死去。推斷對象的生命周期是否結束有下面幾種方 5.4 編碼方式 是否播放 都對 enum 其中 mat 源碼 開始 https://www.qcloud.com/community/article/535574001486630869
視頻播放器原理其實大抵相同,都是對音視頻幀序列的控制。只是一些播放器在音視頻同步上可 獲取 qstring bsp tor 界面布局 而已 star word 綠色 聲明:本文只是為了初學C++的,能夠做出一些實用的東西,跳出管理系統的束縛,提升學習的興趣,在這裏選取了單機遊戲,請不要嘗試在線遊戲,違發而已未必可行。序:首先我們需要一個Qt+VS環境Qt從h 服務器 通過 負責 為什麽 from cnblogs sha stat ron 一 【現象】
1、7點到9點IO監控指標util特別高,如下:
2 、查看讀寫情況:讀產生很高的物理IO,如下
【分析】:對比其他服務器,buffer pool都是80G,正常情況下熱點數 oncreate ted show imageview bce min date 教程 運行程序 在實際開發中,經常會遇見一些時間選擇器、日期選擇器、數字選擇器等需求,那麽從本期開始來學習Android中常用選擇器,今天學習的是DatePicker和TimePicke bundle 介紹 ets ebe db4 是不是 列表 com lin 上一期學習了日期選擇器DatePicker和時間選擇器TimePicker,是不是感覺非常簡單,本期繼續來學習數值選擇器NumberPicker 。
一、NumberPicker概述
signed 默認 gfs proc idl clas 兩種方法 .... gpg
Https系列會在下面幾篇文章中分別作介紹:
一:https的簡單介紹及SSL證書的生成二:https的SSL證書在服務器端的部署,基於tomcat,spring boot三:讓服務器同時 nic mis str link eba encoding type 配置 tails Mybatis批量更新數據
mybatis批量更新兩種方式:1.修改值全部一樣 2.修改每條記錄值不一樣
mybatis批量更新兩種方式: 相關推薦
00002 貪婪洞窟.005:存檔修改器
7-高級路由:RIP計時器修改
利用python編寫遊戲修改器!俗稱:外掛!
Eloquent: 修改器
遊戲修改器製作教程一:鍵盤滑鼠模擬
遊戲修改器製作教程八:D3D函式hook
遊戲修改器製作教程三:記憶體與Cheat Engine
分針網——IT教育:jquery選擇器的用法
分針網——每日分享: jquery選擇器的用法
App開發:模擬服務器數據接口 - MockApi
爬蟲:Scrapy5 - 選擇器Selectors
8.監控存檔服務器
深入理解JVM:垃圾收集器與內存分配策略
零基礎讀懂視頻播放器控制原理: ffplay 播放器源代碼分析
只需要一點點C++基礎,新手也可以制作單機遊戲內存修改器
【FAQ系列】:DB服務器產生大量物理讀問題優化思路
Android零基礎入門第57節:日期選擇器DatePicker和時間選擇器TimePicker
Android零基礎入門第58節:數值選擇器NumberPicker
Https系列之三:讓服務器同時支持http、https,基於spring boot
mybatis批量更新兩種方式:1.修改值全部一樣 2.修改每條記錄值不一樣