zoukankan      html  css  js  c++  java
  • Android逆向第二天

    Android逆向第二天

    smali基础语法

    1. 寄存器 p0 this p1,p2... 参数 v0,v1,... 局部变量

    2. 数据类型 在smali代码中数据类型以类型描述符来表示 ① 基本类型 int ­> I float ­> F boolean ­> Z void ­>V

    ② 引用类型 String ­> Ljava/lang/String; int[] ­> [I int ­> [[I

    1. 字段和方法表示

    MainActivity类中的num(类型为int)字段 表示方法:所在类­>字段名:字段的类型 Lcom/bluelesson/MainActivity;­>num:I String类中equals方法 表示方法:所在类­>方法名(参数类型)返回类型 Ljava/lang/String;­>equals(Ljava/lang/Object;)Z

    Android逆向工具­AndroidKiller介绍

    AndroidKiller是一个集成了多个工具的逆向集合。包括: ①Adb,用于连接Android设备,安装重打包之后的apk ②Apktool,用于反编译apk,生成smali代码和解码后的xml文件,还要带有签名工具 其内部可以增加多个ApkTool版本,有一个修改版比较不错,ShakaApktool.jar ③Dex2jar,用于将dex文件转为jar文件,方便java反编译工具反编译源码。除此之 外,其还提供了很多Android文件格式相关转换的批处理。 ④jd­gui,Java反编译工具界面版,可以反编译Jar文件生成Java源码

    AndroidKiller中反编译出现问题的解决方法

    一般反编译出错都是AndroidKiller中的apktool出的问题,所以解决方法有4:

    1. 更新apktool到最新版本

    2. 分析apktool的错误提示信息,进一步排错

    3. 如果没有明确的提示,就只能对照apktool源码进一步分析问题 或者 分步解决,就是修改完smali之后,先使用smali.jar汇编成dex文件 再把dex替换到apk中,重新签名

    4. 如果还是无法反编译,就单独将apk中的dex文件拷贝出来,使用baksmali.jar反 编译。

    Android逆向­日志分析法­破解收费金币

    一定要!!先打开工具Monitor,F:AndroidSdk oolslibmonitor-x86_64

    然后再打开夜神模拟器,这样Monitor才能找到模拟器。

    然后运行捕鱼APK

    Monitor就会开始自己捕获消息了

    我们的目的就是想要获得更多的金币,所以在游戏中金币商城中点击购买金币,查看 日志信息

    1569309504375

    当点击4元购买40000金币时,弹出对话框的日志信息如下

    8: D/cocos2d‐x debug info(1319): event_id=buyMoney, label=400
    8: D/cocos2d‐x debug info(1319): GameJni order payCode = 2  num= 1
    8: D/cocos2d‐x debug info(1319): order = 5125374
    8: D/(1319): GamePay sendOrder payCode = 5125374
    8: D/cocos2d‐x debug info(1319): context.payType = 1
    8: D/cocos2d‐x debug info(1319): payCode = 5125374
    8: D/TAG(1319): DX  payCode in DXSend  == 5125374
    8: D/dalvikvm(1319): GC_FOR_ALLOC freed 547K, 83% free 3877K/21612K,
    paused 3ms, total 17ms

    当点击确认按钮时,日志信息

    10‐21 08:57:37.065: D/cocos2d‐x debug info(1294): Failed DX_payCode2
    == 5125374
    10‐21 08:57:37.065: D/cocos2d‐x debug info(1294): FaildCode == 1211
    10‐21 08:57:37.069: D/cocos2d‐x debug info(1294): orderFinish code =
    2result= 0

    根据日志,用Android Killer用搜索字符串找到了支付错误(payFaild)的函数,查看源码

    1569312109406

    会发现:在支付错误函数附近有支付成功,支付 取消等函数,我们通过将支付成功的代码完全复制到支付失败函数中,来查看是否能 成功,发现成功获得了金币!想要跟进一步,我们选择了分析支付错误(payFaild)函数 和支付成功(paySuccess)函数的代码

    1569312131339

    1569312139240

    经过测试,发现失败函数跟成功函数不同的0和1,决定了是否购买金币成功,更改const/4 v1 0x0位置上的0为1.随后的函数调用了这个参数invoke­static {v0, v1}, Lcom/payCom/org/GameJni;­>OderFinish(II)V, 这个函数就是 关键函数。

    更改完,Android skiller记得按下CRTL+S保存再反编译。连接设备记得把夜神模拟器里面的adb那3个文件(nod_adb.exe(原本是adb.exe,夜神模拟器名字改成nod_adb.exe了)AdbWinApi.dll,AdbWinUsbApi.dll)替换成跟系统的adb相同的。否则会找不到设备。

    Android逆向­去掉游戏的对话框

    捕鱼游戏中关键的函数OderFinish的调用可以获取金币。那我们只需要在调用弹出对 话框的代码之前,调用OderFinish函数即可。 根据日志,可以找一些比较靠前的日志输出,一般这个时候还没有弹出对话框。 8: D/cocos2d­x debug info(1319): order = 5125374 我们有”order = ”日志输出的函数中有OderFinish函数调用。假设,order函数前面弹出 对话框,我们可以将order函数的无用代码直接跳过,执行OderFinish函数。

    1569313161828

    经过测试,成功购买金币,并且没有弹出对话框。所以order函数中跳过的代码应该有 弹出对话框的代码。

    1569313174677

    可以查看消息处理函数,增加更多的功能。

    Android逆向­增加了自己购买金币的提示信息 由于在order函数中有发送消息的代码,我们可以修改发送消息的ID,然后在修改过休 息处理函数中对应的消息ID处理代码,将我们自己的提示信息写入其中。 我们将发送的消息ID改成10005,即0x2715。消息发送,执行的是弹出购买失败的信 息,现在我们将购买失败的信息,改成自己的信息即可。 在order函数中先发送消息,然后再执行OderFinish函数。

    1569313199667

    Android逆向­增加游戏启动的提示信息

    在入口类LogoActivity中的onCreate函数的末尾,插入Toast调用代码即可。 使用AndroidKiller中的模板插入即可。

    1569313223844

    修改自己想输出信息

    弹出效果:

    1569313252289

    Android逆向­动态调试smali代码

    使用AndroidStudio可以动态调试Smali代码,需要用到一个插件smalidea­0.05.zip

    1569321752298

    1.安装插件: 选择从硬盘安装

    1569321770726

    2.将smali代码所在的目录导入AndroidStudio中,并在入口类中下断点 ,记得选择导入

    1569321912555

    一直ok下一步。有个地方要记得选择导入而不是创建

    1569321941117

    1569321949530

    3.安装apk (可能会找不到设备的时候,试着把模拟器高级设置选择手机模式) Adb install xxx.apk 以调试方式启动apk adb shell am start ­D ­n com.bufish.org/.LogoActivity

    1569322003435

    4.在AndroidMonitor中现在调试进程,设置调试端口为8700

    1569322019093

    5.在AndroidStudio增加一个新的调试配置

    1569322031912

    1569322043636

    修改调试配置中的连接端口为8700,以及修改调试配置的名称

    1569322058799

    6.使用工具栏中的debug按钮,进行连接调试。

    1569322071724

    连接成功之后,控制台有显示,断点也会断下

    1569322083031

    调试过程中,可以查看寄存器的值

    1569322096852

    Android逆向­动态附加调试smali代码

    前提条件:apk中的清单文件中application标签中有debug属性 android:debuggable="true" 需要关闭Android Monitor,需要首先运行一下apk,然后调试方式启动apk adb shell am start ­D ­n com.bluelesson.apkcrackme/.MainActivity 在AndroidStudio中直接附加进程

    1569322150034

    连接成功之后,可以看到控制台显示的端口是随机端口

    1569322167329

    调试的过程中可以在变量窗口中增加当前函数中使用到的寄存器,查看其值

    1569322180916

    END

  • 相关阅读:
    FEniCS 1.1.0 发布,计算算术模型
    Piwik 1.10 发布,增加社交网站统计
    淘宝褚霸谈做技术的心态
    CyanogenMod 10.1 M1 发布
    Druid 发布 0.2.11 版本,数据库连接池
    GNU Gatekeeper 3.2 发布
    Phalcon 0.9.0 BETA版本发布,新增大量功能
    EUGene 2.6.1 发布,UML 模型操作工具
    CVSps 3.10 发布,CVS 资料库更改收集
    Opera 移动版将采用 WebKit 引擎
  • 原文地址:https://www.cnblogs.com/ltyandy/p/11584428.html
Copyright © 2011-2022 走看看