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:\Android\Sdk\tools\lib\monitor-x86_64

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

然后运行捕鱼APK

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

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

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

8: D/cocos2d‐x debug info(1319): event_id=buyMoney, label=4008: D/cocos2d‐x debug info(1319): GameJni order payCode = 2  num= 18: D/cocos2d‐x debug info(1319): order = 51253748: D/(1319): GamePay sendOrder payCode = 51253748: D/cocos2d‐x debug info(1319): context.payType = 18: D/cocos2d‐x debug info(1319): payCode = 51253748: D/TAG(1319): DX  payCode in DXSend  == 51253748: 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== 512537410‐21 08:57:37.065: D/cocos2d‐x debug info(1294): FaildCode == 121110‐21 08:57:37.069: D/cocos2d‐x debug info(1294): orderFinish code =2result= 0

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

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

经过测试,发现失败函数跟成功函数不同的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函数。

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

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

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

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

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

修改自己想输出信息

弹出效果:

Android逆向­动态调试smali代码

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

END

转载于:https://www.cnblogs.com/ltyandy/p/11584428.html

Android逆向第二天相关推荐

  1. 【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )

    文章目录 一.动态加载 二.第一代加壳技术 ( DEX 整体加固 ) 三.第二代加壳技术 ( 函数抽取 ) 四.第三代加壳技术 ( Java 函数 -> Native 函数 ) 五.so 动态库 ...

  2. android逆向分析概述_Android存储概述

    android逆向分析概述 Storage is this thing we are all aware of, but always take for granted. Not long ago, ...

  3. Android逆向--如何调试smali代码?

    最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享. 本文介绍Android逆向中smali代码的调试及环境的准备. 事先准备如下工具: Android killer:反编译 ...

  4. Android逆向之调试smali代码基础

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Android逆向中调试smali代码的方法." 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享 ...

  5. 【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )

    文章目录 一.脱壳点简介 二.修改系统源码进行脱壳 一.脱壳点简介 在上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 rewriteD ...

  6. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )

    文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...

  7. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...

  8. 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )

    文章目录 前言 一.在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader 1.创建 DexClassLoader 2.使用 DexClassL ...

  9. 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )

    文章目录 前言 一.函数拦截需要的几个参数 二.插桩前先保存实际函数入口 6 字节数据 三.在插桩的函数入口写入跳转指令 | 构造拼接桩函数 前言 [Android 逆向]函数拦截实例 ( 函数拦截流 ...

  10. 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )

    文章目录 一.创建 Capstone 反汇编解析器实例对象 二.设置 Cs 汇编解析器显示细节 一.创建 Capstone 反汇编解析器实例对象 使用 Capstone 反汇编框架 , 首先创建 Ca ...

最新文章

  1. 使用Java让android手机自动执行重复重启
  2. 使用PowerShell收集客户端MAC地址
  3. 628. Maximum Product of Three Numbers
  4. 如何安装docker-compose
  5. Android Textview控件
  6. 协议层次及其服务模型
  7. 【浏览器】event.pageX/Y页面坐标(CSS像素) event.clientX/Y视口Viewport坐标(CSS像素) event.screenX/Y屏幕坐标(屏幕像素)
  8. 微软开源软件特征源码分析工具 Application Inspector
  9. javascript中的cookie问题
  10. L2TP连接result_code_avp: avp is incorrect size. 错误
  11. Jquery的基础学习
  12. python编程100例-【python】编程语言入门经典100例--30
  13. 贪心算法的几种经典例题
  14. 嵌入式USB转RS232九针串口线驱动,及串口软件secureCRT的使用
  15. mysql注入转义绕过_SQL注入防御绕过——二次注入
  16. 向量积(叉积)和数量积(点积)的区别和联系之解析
  17. 【MATLAB笔记】对矩阵进行满秩分解
  18. Android 彻底杀死当前进程
  19. 成绩管理系统(C语言)完整代码,纯C的练手程序
  20. flex的常用用法二十条

热门文章

  1. 十八新娘八十郎,苍苍白发对红妆。鸳鸯被里成双夜,一树梨花压海棠。
  2. java pandora_Pandora FMS监视简介
  3. es 修改mapping
  4. So Far Away
  5. 计算机课第一节可以讲些什么,高职《大学计算机基础》第1节课讲点什么?
  6. 到底买苹果XS还是XR_iPhone XS和XR买哪个?10个理由告诉你XS更好,贵是有原因的!...
  7. Racket编程指南——2 Racket概要
  8. 纯css实现各种箭头图片效果
  9. 【深入理解计算机系统csapp】 attack lab实验四
  10. 定时器0练习,利用左循环函数_crol_(a,b)