游戏APP内购思路
当我们拿到一个游戏之后第一步,我个人习惯是先去除签名校验,这么做有两个好处
1.如果游戏存在签名校验,直接就去掉了
2.即使Java层签名校验,也可以试试是不是jni层有签名校验
反正去除了不亏,这里值得注意的是,某些unity游戏,用mt的去除签名会导致黑屏,不去除签名校验即可(mt的bug)
第二步,0x2328大法。 如果没有支付宝就搜微信的支付。如果是简单点的,到这一步就已经逆向完成了。
第三步,如果显示支付成功,但不到账,拿出小黄鸟抓包。找订单验证,简单点的,就如同特工使命教程,直接修改,难一点的,返回数据加了密,先丢base64看看能不能解密,不能解密就翻包找apk里的解密,自己写解密器和加密器来伪造数据
第四步,如果小黄鸟抓包抓不到。这个时候就考虑本地修改流程(这就需要你对安卓有一定了解),从开始支付,顺着流程一直走,找到支付成功的逻辑,修改即可,参照 镜界内购教程。
第五步,如果还是找不到,或者发现逻辑进入了NDK层,这个时候就需要去lib文件夹找出so文件,用ida进行修改了,这一步就要求你对于汇编代码有较好的基础,能看懂,能修改代码,一般到了这一步,就别去纠结内购了,强行改内购会很自闭的(毕竟改16进制很麻烦,而且字节长度不对整个包直接报废)。推荐的修改方法是,1.解锁类,直接修改返回的bool值,false改成true,参考 流言侦探内购教程
2.数值类,直接锁定一个值就行了,参考元气骑士so修改 (还没写,先咕咕咕一会)
如果到了这一步还没成功,建议放弃,难度过大,等以后技术提高了再来肝。(比如某Hprotect,ida根本加载不了)
接下来是unity系列思路
很多游戏都是使用的unity编写,这类逆向分为两种
1. 有libil2cpp.so
2.没有libil2cpp.so
我个人比较喜欢没有libil2cpp.so的类型,因为用dnspy反编译后就是c#代码具体方法参照地球计划逆向教程
如果是有libil2cpp.so 那么就参照 流言侦探教程。这种修改十六进制会麻烦点,也有较大限制
那么除了unity编写的游戏,剩下的还有用coco2d-js打包的游戏。
这类游戏主要代码不在so文件也不在dex,而是asset文件夹里面的script。这类游戏的逆向关键就在于如何解密jsc文件或者是luac文件,解密出来,能还原基本就没什么难度,即使不能还原,能找到网络数据传输包的解密方法也是极好的(比如荒野日记)
(如果有dl知道如何解密jsc文件请带带我这个five)
关于订单校验
订单校验分为两种,第一种是网络校验,第二种是本地校验
先说网络校验,一般思路都是抓包,详细方法可以见 探灵,特工使命等教程,这些都是简单的网络校验。难一点的就是像比特小队(暂时我还没逆向出来)这种网络校验就是服务器判断成功才会发送多余的校验数据包,失败是不会发送正确的校验包,这就很烦
第二种本地校验,参照某屋内购通用教程和地球计划,我个人推荐是改订单价格,因为这是最简单的方法,成本也很低,如果非要去修改逻辑也不是不可以,但过于麻烦了
说到底,逆向就是看脑洞的时候,订单验证搜索的东西很繁琐,什么checkorder,ordercheck,orderverify,verifyorder,反正只要你觉得可能靠边的都去搜一搜,总有惊喜
剩下的一些就是查阅相关资料了,比如调用so就可以去找load或者loadsystem。
小黄鸟抓包被断网就可以去搜一下APP如何防止抓包,根据代码去搜相应的逻辑(比如搜https.proxyport什么的)。
这些都是很灵活的,有什么问题,就去想开发是如何让你失败的,根据这个方向寻求突破口就行
剩下的有什么想起来再补充,大佬勿喷
感谢楼主 谢谢!看起来就比较高大上 大牛厉害!感谢分享! 这个不错谢谢,看一下 谢谢分享 谢谢分享 感谢楼主 太好了,我看看,谢谢! 必火 正好需要谢谢分享啊