本文内容仅供学习。
可以百度下载阿拉德之怒手游app。
- 解开apk,可以看出该手游是IL2CPP框架的游戏,那么在apk中肯定还有一个global-metadata.dat文件(除非加密)。
- 将global-metadata.dat和libil2cpp.so文件拷贝到同一个文件夹下。
- 使用Il2CppDumper将global-metadata.dat和libil2cpp.so进行解析,下载网站:https://github.com/Perfare/Il2CppDumper/
- 解析完成。
- 生成几个文件,现在分析DummyDll文件夹下的文件
- 将Assembly-CSharp.dll脱到dnSpy(可以百度下载)中后就可以正常分析了,修改GetHP函数猜测可能可以实现无敌。
- 一些常用游戏关键词。
游戏搜索方发名:
onResult,onchinabilling,resulton,Paycenter,Callback
联通游戏搜索方发名:
OnPayResult,PyaResulton,Activity,result,callback
电信爱游戏搜索方发名:
paySuccess成功,payCancel取消,payFailed失败
移动mm搜索方发名:
onBillingFinish,Billing,CallBack
支付宝和银行卡方法名:handlemessage
支付宝搜索字符串9000 360
支付
onfinishedon,Activityresult
发送短信限:android.permission.SEND_SMS
发送短信锁定支付式关建字符串:CHINA_TELECOM
中国电信46003,46005,46011
CHINA_MOBILE
中国移动
46020,46000,46002,46007
CHINA_UNICOM
中国联通46001,46006,NOT_DEFINE未定义
英雄、玩家(Hero、player)
怪物、敌人( monster、Enemies、enemy)
初始化(init)
力量( power、str、strength)
智力( int、Intelligence)
运气(luk、luck)
敏捷(AGI、agile)
魔法 ( magic、mag)
金币(gold、coin)
钱,钞票 (Money)
现金(cash)
钻石、宝石 (Gem、diamond)
血量( health、life、HP、Max hp、blood )
蓝(mp、sp、Power)
攻击(attack(atk)、fight、hit、damage)
防御 (defence、def、defense)
护甲 ( Armor)
物理( physic、phy)
暴击(Crit、cri、crt)
闪避 (Dodge)
范围( range)
速度、频率(speed)
改路(Rate)
恢复( Recover)
取(get)
置(set)
支付 (bill、billing、pay、purchase)
成功 (success)
失败 (fail)
取消(cancel)
分数 (Score)
死亡(Dead)
伤害(hurt)
体质(vital、vit、stamina)
技能伤害 (skilldamage)
换弹速度(initalize)
- 用IDA打开libil2cpp.so,要花费不少时间,挺大的程序,IDA解析完成后,里面的函数名都是不太友好的,伪C代码也很难看明白,所以下一步就是把符号表(函数名)恢复。
- 使用Il2CppDumper下生成了一个dump.cs文件,该文件里面有很多符号表和地址,大概思路是将符号表和对应的地址,通过IDA自己编写的插件进行恢复(做IOT漏洞挖掘时的思路)。由于同名很多,所以最好将类名加上,主要防止重名。
- 用python将GetHashCode和RVA 一一对应导出。
- IDA恢复符号表(本人使用的是IDA7.0,IDA7.5貌似不能正常使用以下恢复函数)。
# 主要恢复函数
idc.MakeName(func_addr, func_name)
idc.MakeCode(func_addr)
idc.MakeFunction(func_addr)
10. 恢复完成后,看起来就舒服多了(有的函数没有正常恢复,应该是dump.cs文件中没有对应的符号表,不过问题不大,主要的函数已经恢复正常)。
11. 开始使用frida进行hook对应的函数地址。