吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2400|回复: 16
收起左侧

[Android 原创] 小白的第一次逆向笔记《女X与海》

  [复制链接]
zhufengwan 发表于 2022-11-29 01:22
本帖最后由 zhufengwan 于 2022-11-30 00:08 编辑

前言

作为刚刚免费注册的小白,无意间看到了丁宝振大佬的这篇文章:MT管理器破解某诗词类APP会员保姆级教程,因为手机刚好有MT管理器,就试了一下,原来安卓逆向这么简单(当然说的是签名打包,并不是说思路简单,毕竟如果文中没有关键字,自己不知道找到什么时候了),原来的时候只是知道,反编译改了以后还需要重新签名打包。
然后想着自己就是搞JAVA的如果反编译了看代码不是更爽,结果MT管理器这个功能收费!!所以在论坛找到了昨夜星辰2012大佬的PC端工具打造教程:AndroidKiller安装、设置及使用教程4月15日网盘文件有更新(2019.6.21更新下载地址),还是有趁手的工具事半功倍啊,工具打造好了当然要练练手学习学习了,小白的第一篇交流贴,如有不足,希望大佬们指正哈!

环境工具

AndroidKiller V1.3.1.0 内置 jd-gui 反编译工具
https://hexed.it/ 16进制编辑器
jsc解加密工具-Orange

正文开始

刚好最近媳妇在玩一款微信小游戏,尝试了使用gg修改器直接修改内存,结果一直找不到数据,然后下载了游戏客户端,结果直接提示数据异常,将游戏内金币、蓝钻都重置了,本来已经放弃修改,结果看到了安卓逆向又有了思路,既然强行修改不行,那就按照程序自己的逻辑来修改!

目标一:先跳过广告领取奖励吧

这中间各种辛酸,先是自己找,找不到然后搜各种类似的帖子大概范围缩小到下图这个类看着比较像。
20221128233236.png

但是即使反编译了看,也还是没有找到关键点,最后无奈祭出大杀器InjectLog,操作了一次就找到了关键点如下图,真是查了十万八千里。
20221128233711.png

反编译看一下,只列一下关键代码逻辑

public void onADClose()
{
        Log.i("YouXuanVedio", "onADClose");
        if (YouXuanVedio.canGiveReward)
        {
                YouXuanVedio.sendFunc(YouXuanVedio.LocalMsg_SDK_ChuanShanJiaPlayVedioSuccess, "");
                YouXuanVedio.canGiveReward = false;
        }
        YouXuanVedio.sendFunc(YouXuanVedio.LocalMsg_SDK_ChuanShanJiaPlayVedioClose, "");
}

public static void playVedio()
{
        AppActivity localAppActivity = AppActivity.sGameClient;
        Log.v("CZXZ", "playVedio---");
        AppActivity.sGameClient.runOnUiThread(new Runnable()
        {
                public void run()
                {
                        if ((YouXuanVedio.mIsLoadSuccess) && (YouXuanVedio.mRewardVideoAD != null) && (YouXuanVedio.mRewardVideoAD.isValid()))
                        {
                                YouXuanVedio.mRewardVideoAD.showAD();
                                return;
                        }
                        YouXuanVedio.loadAd();
                }
        });
}

看这两个方法,直接 playVedio 时走 onADClose 不就可以了,说干就干!
因为看过点 JAVA 虚拟机,所以这些虽然跟 JAVA 字节码不一样,但是也比较类似,如图直接改,注释掉多余代码,粘贴需要的代码,目测 .locals 2 应该是局部变量吧,因为变量数没变这块应该不用动。
20221129003612.png

编译 -> 签名 -> 打包 -> 装机实测(由于单位配的surface laptop go,没装上安卓虚拟机) -> 完美,再也不用看广告了!

目标二:当然是刷钻石、金币和体力

因为还是学习为主嘛,先是自己找关键点,思路是购买免付款,在付款失败或者付款取消位置调用付款成功逻辑,找到好多个 onCancel、onComplete、onFail 等函数感觉都不太对,没办法还是上 InjectLog,找到了付款调用逻辑。

public static void Recharge(String paramString)
        throws JSONException
{
        Object localObject = AppActivity.sGameClient;
        Log.d("CZXZ", "domayiSdkPay!!!!!!!!!");
        paramString = new JSONObject(paramString);
        localObject = new HashMap();
        ((HashMap)localObject).put("playerId", sdkLoginData.playerId);
        ((HashMap)localObject).put("mchOrderNo", paramString.getString("orderid"));
        ((HashMap)localObject).put("pay_product_des", paramString.getString("goodsDes"));
        ((HashMap)localObject).put("subject", paramString.getString("subject"));
        ((HashMap)localObject).put("pay_price", "0.01");
        ((HashMap)localObject).put("attach", paramString.getString("attach"));
        ((HashMap)localObject).put("playerExtend", paramString.getString("exInfo"));
        MSLDSDK.action(AppActivity.sGameClient, "PluginPay/showChargePage", (HashMap)localObject, new MSLDPayCallback()
        {
                public void onCancel()
                {
                        System.out.println("支付取消");
                }

                public void onComplete()
                {
                        System.out.println("支付完成");
                }

                public void onFail(int paramAnonymousInt, String paramAnonymousString)
                {
                        PrintStream localPrintStream = System.out;
                        StringBuilder localStringBuilder = new StringBuilder();
                        localStringBuilder.append("支付");
                        localStringBuilder.append(paramAnonymousString);
                        localPrintStream.println(localStringBuilder.toString());
                }
        });
}

金额换成 0 ,直接测试,失败,虽然支付时金额是 0,但是并没有后续逻辑,猜测程序有校验金额为 0,直接返回,因为找了好久没有找到支付回调的逻辑,只能退而求其次,支付 0.01 测试,成功!
下面是修改金额的代码,上次忘记贴了
20221129235737.png

进阶,尝试跳过支付

目前怀疑是安卓客户端调用了第三方库,然后又执行了 js 代码继续处理,看页面的表现形式以及传参包含:NativeToJs 字样,又调用了底层 native 方法。

public static void sendFunc(String paramString1, String paramString2)
{
        StringBuilder localStringBuilder = new StringBuilder();
        localStringBuilder.append("NativeToJs(\"");
        localStringBuilder.append(paramString1);
        localStringBuilder.append("\", \"");
        localStringBuilder.append(paramString2);
        localStringBuilder.append("\")");
        paramString1 = localStringBuilder.toString();
        AppActivity.sGameClient.runOnGLThread(new Runnable()
        {
                public void run()
                {
                        Cocos2dxJavascriptJavaBridge.evalString(this.val$tempStr);
                }
        });
        paramString2 = System.out;
        localStringBuilder = new StringBuilder();
        localStringBuilder.append("sendFunc:");
        localStringBuilder.append(paramString1);
        paramString2.println(localStringBuilder.toString());
        System.out.println("sendFunc end");
}

package org.cocos2dx.lib;

public class Cocos2dxJavascriptJavaBridge
{
  public static native int evalString(String paramString);
}

正发愁无路可走的时候,看到NPC2000大佬的文章小游戏免广告获得奖励的思路与实现,这不跟我这游戏很类似么,同样的 cocos2dx 的库,跟着步骤找密钥,解密 js ,还真找到了关键点,如下,将所有支付失败位置修改为成功的逻辑
20221129010355.png

修改为如下代码,目测没有变量找不到,js 应该不会报错。
20221129010914.png

但是并没有效果,中间找到了观看广告领奖励次数的位置也进行了修改,也没有效果,不禁怀疑是不是找的文件不对,由于整个流程APP相关弹出信息在代码以及 js 中都搜索不到,并且 js 输出也不知道在什么地方查看,目前也只能到此为止了,有大佬路过能指点一二,感激不尽!不过目前已经不影响刷体力,然后退游了。

写在最后

论坛小白还有很多的不懂,文章如有不合适的地方也请大佬们指点,都会虚心接受!

疑问

这里说一下自己的几个疑问:

  1. 只是逆向破解了APP并发文互相学习交流,会有什么问题么?
  2. 如果涉及到里面的收费内容,因为没有找到支付的关键点,通过修改付款金额实现低价购买单机游戏内容会有什么问题么?

注:若转载请注明来源(本贴地址)与作者信息。
注:本文仅供研究学习使用,请勿用于非法用途。如有侵权,请联系管理员删除!

免费评分

参与人数 5威望 +1 吾爱币 +30 热心值 +4 收起 理由
Fxizenta + 1 我很赞同!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
axin0529 + 1 + 1 热心回复!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
kuiur0810 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

quize01 发表于 2022-11-29 17:44
学习了。
shy20070509 发表于 2022-11-29 17:45
debug_cat 发表于 2022-11-29 17:51
longbt 发表于 2022-11-29 18:58
本着学习的态度来看帖子
YDDDD 发表于 2022-11-29 20:26
学习学习看看
正己 发表于 2022-11-29 22:16
来看看我这套教程
chtc315 发表于 2022-11-29 22:26
学习学习了
axin0529 发表于 2022-11-29 23:19
感谢分享
qq610939324 发表于 2022-11-29 23:41
先收藏。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 05:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表