dvorah 发表于 2020-2-19 21:25

(2.21 更新链接)破解内购 xx洞窟(androidkiller 练手

本帖最后由 dvorah 于 2020-2-21 15:30 编辑

一直潜水 看了大家的破解分享帖 就拿最近玩的洞窟试了下手 居然成功了 就记录一下操作的过程

首先放上官网apk链接
https://cavedl.leiting.com/full/cave_2.4.0.apk
下载下来后拖进Androidkiller里 这里用的是下面的教程 感谢https://www.52pojie.cn/thread-726176-1-1.html
结果反编译的时候遇到了问题,提示错误:
APK 反编译失败,无法继续下一步源码反编译!
网上翻日志 报错的地方是
Exception in thread "main" org.jf.dexlib2.dexbacked.DexBackedDexFile$NotADexFile: Not a valid dex magic value: cf 77 4c c7 9b 21 01 cd
于是搜了下无法反编译的问题,网上大部分的回复是apktool的版本不够高,我下的版本是2.3.1,去官网看了下,最新的版本是2.4.1,官网见下方链接
https://ibotpeaches.github.io/Apktool/
在Androidkiller上方工具栏中 Android 选项卡里打开apktool管理器,添加最新的apktool并在下方更改默认apktool

删除项目 重新拖入apk进行反编译 依然报错,这回搜了下错误代码 NotADexFile + apktool 搜到了答案是添加参数--only-main-classe
打开apktool管理器,编辑最新的apktool,参数一栏中加入--only-main-classe重新编译就可以了

反编译成功 !

剩下的事情就比较简单了 由于它调用了支付宝接口,由于支付宝接口的返回比较特殊,9000表示支付成功。所以搜索 9000 ,找出和pay有关的结构

可以看出来 9000作为一个常量搜索结果还是比较多的 所以这里推荐搜索 “9000”   因为这里9000是一个状态码 是作为判断的一个变量 所以搜”9000“结果会好很多

由于是ali接口 显然先看第二个 AliPayserver$1.smali网上翻一下
    if-eqz v0, :cond_0
用的是条件判断 那简单了 直接删掉这句条件判断测试一下 成功!

同理可以修改UnionpayService.class 里面的支付方式看了下微信支付(微信这里返回码是0 1 2 什么的 就比较难搜了) 感觉好复杂 设计好几个smali 不确定那个管用

下一步修改游客模式
https://www.52pojie.cn/thread-1072015-1-1.html

这里采用了上面这个帖子的教程 所以简写一下
搜索 游客模式 获取string名字 搜索 ”lt_fast_login_pay_toast_msg“ 找到对应位置后 发现是在RemindGuestPay方法里 查找该方法的调用
这里补一张对应Java的代码图

所以在每个条件句下面加 goto :cond_3   
cond_3 cond_4其实一样所以这里无所谓
然后使用游客模式成功进入支付界面
结果在支付时被跳转了

哭 继续破解 拿Androidkiller抓了下日志
tag:com.leiting.sdk
{"message":"您当前为游客账号,无法使用账号充值,账号绑定后,即可提高账号的安全性,还能享用更多福利,快快绑定吧~~~","status":"20009"}
看了下是提交了userid到服务器 猜测是服务器返回了某个错误值导致打不开
尝试找了下它的包里面的信息 http://pay.leiting.com/terrace/notify_back!offlinePayNotify.action 有这么一个网址
找到了对应函数 buyIAP
然后对照Java在看的时候最后调用了pay函数 最后追了好久追到
.method public abstract pay(Landroid/app/Activity;Ljava/lang/String;Ljava/util/Map;Lcom/leiting/sdk/pay/IPayCallback;)V
.end method
就不知道该看哪里了
尝试了下搜索充值数字 16400 也就是 0x4010 找到了对象 跟下去最后是作为网络参数发送到了服务器 改本地的没有什么用

对于游客购买 如果能抓到那个支付页面的打开函数就好了 感觉目前的能力还不够 尝试了一晚上 觉得先作为一个坑待填吧 后面再练习一些新的方法再回头看看能不能搞定吧

感谢 @bp946的在70#楼提到的方法最开始也注意到了 LeitingSdkUser$7.smali ,结果直接滑到最后看的函数 漏了fail函数....   

能看JAVA就好办了,已经找到回调了;
把 LeitingSdkUser$7.smali 里 fail 函数的内容全改为 success 函数的就成功了,虽然会弹出游客提示,点确定就充值到了。


用这个方法成功实现了游客破解感谢这里放出成品百度盘链接供大家学习

感谢所有回帖的大家!
链接: https://pan.baidu.com/s/1xdWysTDczBrvqkD_MCChgA 提取码: x1g1 复制这段内容后打开百度网盘手机App,操作更方便哦

dvorah 发表于 2020-2-20 08:57

longsui48 发表于 2020-2-19 23:22
返回的参数"status":"20009" 这个会做判断?
还是直接把登陆后pay的代码复制到游客里?
没看到apk源码不好 ...

用Android killer监控日志 是apk向服务器发送支付信息 包括userid、订单号、购买信息等然后由服务器返回对应界面链接(这个我是猜得
我用注册的测试号对比 只有userid信息不一致情况下 已注册的可以正确进入支付界面所以猜测是服务器控制
现在想的是能不能修改为 进入支付界面时直接调用对应pay函数但是现在还没找到pay函数具体在哪…

dvorah 发表于 2020-2-20 15:49

longsui48 发表于 2020-2-20 12:57
跟一下注册后的回调函数 直接替换进入支付界面就行了吧?

这个已经做到了 它的流程是 现在游戏内检测是否为游客,如果不是 则向服务器发送购买信息 , 现在已经破解了前一步 进入了支付界面,不过在向服务器发送购买信息时会进行第二次检测,仍旧不能购买   

小平平qq 发表于 2020-2-19 21:38

兄弟有更完整教程吗?顶了

小平平qq 发表于 2020-2-19 21:41

能否截图截完整点.....谢谢大佬了

HighBox 发表于 2020-2-19 21:47

学习一下

HighBox 发表于 2020-2-19 21:48

有成品链接吗

天空の幻像 发表于 2020-2-19 21:50

这个游戏快更新到2.5.0了。。。

dvorah 发表于 2020-2-19 21:52

小平平qq 发表于 2020-2-19 21:41
能否截图截完整点.....谢谢大佬了

具体看哪些呢

dvorah 发表于 2020-2-19 21:53

HighBox 发表于 2020-2-19 21:48
有成品链接吗

成品只有登陆模式下的内购破解 放出来担心被封号

lai2020 发表于 2020-2-19 22:57

阔以哦·不错

qw905234 发表于 2020-2-19 23:05

可以白嫖一个成品嘛
页: [1] 2 3 4 5 6 7
查看完整版本: (2.21 更新链接)破解内购 xx洞窟(androidkiller 练手