成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

旅行青蛙Unity游戲逆向修改--iOS篇

移動開發 游戲開發
之前寫了一篇分析Android C#腳本的文章,主要也是為了給這篇文章做鋪墊吧,因為在iOS現在都是IL2CPP模式,C#腳本已經被轉成了c代碼。所以要單獨分析iOS的話難度會大很多,如果從Android的C#腳本入手的話,因為iOS和Android腳本都是一樣的話,可以從Android分析的函數名來對應iOS的c函數然后進行hook修改。

之前寫了一篇分析Android C#腳本的文章,主要也是為了給這篇文章做鋪墊吧,因為在iOS現在都是IL2CPP模式,C#腳本已經被轉成了c代碼。所以要單獨分析iOS的話難度會大很多,如果從Android的C#腳本入手的話,因為iOS和Android腳本都是一樣的話,可以從Android分析的函數名來對應iOS的c函數然后進行hook修改。

提取ipa

首先從越獄設備上面提取旅行青蛙的ipa包,使用 frida-ios-dump 一鍵提取即可。由于是日文名字,先通過 ./dump.py -l 把名字列出來,然后復制名字或者通過bundle id去dump就可以了。

IL2CPP符號還原

由于使用IL2CPP選項編譯unity游戲,會生成cpp的代碼,直接使用IDA看是看不到函數和函數名的,而且游戲中使用的字符串都被保存在global-metadata.dat的資源文件里。首先要通過提取global-metadata.dat文件里面的字符串對對應的c函數進行符號還原。具體也有現成的文章: 還原使用IL2CPP編譯的unity游戲的symbol ,github上面也有線程的項目也做這件事情 Il2CppDumper 。下載release的工具,運行Il2CppDumper.exe并依次選擇il2cpp的可執行文件和global-metadata.dat文件,然后選擇Auto(Plus)模式,將生成dump.cs文件和script.py腳本。使用IDA打開可執行文件然后使用script.py腳本即可還原符號。

 

10344541-21e6a3aeaa283ff9.jpg

Makingmethodname...MakemethodnamedoneSettingString...SetstringdoneMakingfunction...Makefunctiondone, please waitforIDAtocomplete the analysisScriptfinish !

根據函數hook代碼

還原之后就可以根據之前分析到的函數名來hook對應的代碼了,首先是三葉草的數目通過 SuperGameMaster.CloverPointStock() 獲取的,在IDA搜索 CloverPointStock如下:

 

10344541-0f036b6ab3b6d5fe.jpg

接著就可以直接hook這個函數了,由于要inline hook目前是在越獄機器上面,后面會講到非越獄機器hook的方案。使用 MonkeyDev 新建一個 Logos Tweak 項目,清空.xm 的內容并寫入如下內容:

  1. #import#import#importint(*old_clover_point_stock)(void);intnew_clover_point_stock(void){return9999;}%ctor{ @autoreleasepool {unsignedlongclover_point_stock = _dyld_get_image_vmaddr_slide(0) +0x100093A2C; MSHookFunction((void*)clover_point_stock, (void*)&new_clover_point_stock, (void**)&old_clover_point_stock); }} 

然后在build settings里面設置端口和設備密碼然后command + b安裝就能看到效果了,其它函數的hook也是一樣的:

  1. #import#import#importint(*old_clover_point_stock)(void);intnew_clover_point_stock(void){return9999;}int(*old_ticket_stock)(void);intnew_ticket_stock(void){return9999;}void(*old_lotterycheck)(unsignedlongobj);voidnew_lotterycheck(unsignedlongobj){    *(int*)(obj +80) = rand() %4+1;}id(*old_new_clover_object)(intindex,idcloverData,idcloversObj,boolfourLeafFlag);idnew_new_clover_object(intindex,idcloverData,idcloversObj,boolfourLeafFlag){    fourLeafFlag =true;returnold_new_clover_object(index,cloverData,cloversObj,fourLeafFlag);}%ctor{@autoreleasepool{unsignedlongclover_point_stock = _dyld_get_image_vmaddr_slide(0) +0x100093A2C;        MSHookFunction((void*)clover_point_stock, (void*)&new_clover_point_stock, (void**)&old_clover_point_stock);unsignedlongticket_stock = _dyld_get_image_vmaddr_slide(0) +0x100093AA4;        MSHookFunction((void*)ticket_stock, (void*)&new_ticket_stock, (void**)&old_ticket_stock);unsignedlonglotterycheck = _dyld_get_image_vmaddr_slide(0) +0x100086CF4;        MSHookFunction((void*)lotterycheck, (void*)&new_lotterycheck, (void**)&old_lotterycheck);unsignedlongnew_clover_object = _dyld_get_image_vmaddr_slide(0) +0x100037100;        MSHookFunction((void*)new_clover_object, (void*)&new_new_clover_object, (void**)&old_new_clover_object);    }} 

這里有一個函數 RaffelPanel$$LotteryCheck 要修改里面的result的值,就要根據匯編或者偽代碼來看result的賦值是在什么位置了,該函數通過F5獲得的偽代碼如下:

 

  1. __int64 __fastcall RaffelPanel__LotteryCheck(__int64 a1){ 
  2.   __int64 v1; // x19 
  3.   __int64 v2; // x0 
  4.   __int64 v3; // x0 
  5.   int v4; // w20 
  6.   int v5; // w23 
  7.   signed int v6; // w24 
  8.   __int64 v7; // x0 
  9.   __int64 result; // x0 
  10.   v1 = a1; 
  11.   if ( !(byte_10137EDBB & 1) ) 
  12.   { 
  13.     sub_100DEAD34(6810LL); 
  14.     byte_10137EDBB = 1; 
  15.   }v2 = qword_101439198;if( *(_BYTE *)(qword_101439198 +266) &1&& !*(_DWORD *)(qword_101439198 +188) ){ 
  16.     sub_100DFF71C(); 
  17.     v2 = qword_101439198; 
  18.   }if( !*(_QWORD *)(*(_QWORD *)(v2 +160) +192LL) )LABEL_17:    sub_100DE28B4();  v3 = sub_1000FB954();  v4 = Random__Range_71094(0LL,0LL, v3,0LL);  v5 =0;  *(_DWORD *)(v1 +80) =0;  this.result = Rank.White;//默認都是白色的球v6 = -1;while(1){ 
  19.     v7 = qword_101439198; 
  20.     if ( *(_BYTE *)(qword_101439198 + 266) & 1 ) 
  21.     { 
  22.       if ( !*(_DWORD *)(qword_101439198 + 188) ) 
  23.       { 
  24.         sub_100DFF71C(); 
  25.         v7 = qword_101439198; 
  26.       }}if( !*(_QWORD *)(*(_QWORD *)(v7 +160) +192LL) )gotoLABEL_17;    result = sub_1000FB954();    v5 += result;if( v4 < v5 )//if (num < num2)break;if( ++v6 >=4)      return result;  }  *(_DWORD *)(v1 +80) = v6 +1;//this.result = (Rank)i;return result;} 

這里的 *(_DWORD *)(v1 + 80) 的位置其實就是 this.result 所以直接修改 80 偏移位置的值就可以了。

總結

總結來說的話,要分析iOS里面轉換后的腳本C代碼還是不容易的,如果能夠根據Android C#腳本分析的結果然后對iOS的符號進行恢復一下的話,就可以直接根據Android分析到的函數直接來Hook iOS對應的函數來修改參數或者值了。不過這里還是在越獄設備上面進行的hook,然后會講到非越獄設備同樣也可以進行靜態的hook操作。

責任編輯:未麗燕 來源: 酷愛丸子頭
相關推薦

2018-01-24 11:19:26

2018-05-11 09:55:44

2018-01-29 22:26:25

旅行青蛙蘋果APP Store

2018-02-09 15:40:55

旅行青蛙程序員游戲

2018-01-25 09:59:56

佛系程序員游戲

2018-02-05 10:43:16

旅行青蛙

2018-01-25 12:23:21

旅行青蛙研發游戲

2021-08-23 11:03:54

鴻蒙HarmonyOS應用

2022-07-03 10:43:23

JS逆向破解

2018-08-09 15:49:36

高德地圖

2012-12-24 08:40:12

2012-12-24 08:57:35

iOSUnity3D

2014-09-01 10:36:35

個推推送

2015-08-27 16:35:10

Unity游戲引擎Linux

2012-12-24 08:59:13

iOSUnity3D

2012-12-24 08:56:15

iOSUnity3D

2023-02-08 08:12:15

2016-09-21 09:37:57

2012-12-24 09:06:14

iOSUnity3D

2012-12-24 08:46:50

iOSUnity3D
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级网站 | 国产精品一二区 | 日韩国产在线 | 黄色三级在线播放 | 亚洲精品第一 | 国产成人a亚洲精品 | 天天综合网91 | 欧美在线一区二区三区 | 国产九九av | 亚洲一区精品在线 | 国产视频1区 | 亚洲综合无码一区二区 | 在线免费观看a级片 | 精品亚洲一区二区 | 日韩欧美在线不卡 | 特黄色一级毛片 | 一区二区三区四区不卡 | 国产99在线 | 欧美 | 亚洲成人自拍 | 一区二区三区小视频 | 天天干夜夜拍 | 手机av在线| 亚洲精品乱码久久久久久蜜桃91 | 中文日韩在线 | www.亚洲精品 | 欧美国产精品久久久 | 亚洲 欧美 日韩在线 | 亚洲成人精品 | 亚洲国产精品一区在线观看 | 国产99久久 | 一区二区三区四区国产 | 97免费在线视频 | 国产成人精品a视频一区www | 日韩欧美一区二区三区免费观看 | 日韩在线免费视频 | 999久久久久久久久6666 | 欧美a∨ | 91国在线观看 | 国产精品久久久久一区二区三区 | 国产福利资源在线 | 一区二区三区中文字幕 |