Android逆向第二天
Android逆向第二天
smali基础语法
寄存器 p0 this p1,p2... 参数 v0,v1,... 局部变量
数据类型 在smali代码中数据类型以类型描述符来表示 ① 基本类型 int > I float > F boolean > Z void >V
② 引用类型 String > Ljava/lang/String; int[] > [I int > [[I
字段和方法表示
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文件格式相关转换的批处理。 ④jdgui,Java反编译工具界面版,可以反编译Jar文件生成Java源码
AndroidKiller中反编译出现问题的解决方法
一般反编译出错都是AndroidKiller中的apktool出的问题,所以解决方法有4:
更新apktool到最新版本
分析apktool的错误提示信息,进一步排错
如果没有明确的提示,就只能对照apktool源码进一步分析问题 或者 分步解决,就是修改完smali之后,先使用smali.jar汇编成dex文件 再把dex替换到apk中,重新签名
如果还是无法反编译,就单独将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.随后的函数调用了这个参数invokestatic {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/cocos2dx 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代码,需要用到一个插件smalidea0.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逆向第二天相关推荐
- 【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )
文章目录 一.动态加载 二.第一代加壳技术 ( DEX 整体加固 ) 三.第二代加壳技术 ( 函数抽取 ) 四.第三代加壳技术 ( Java 函数 -> Native 函数 ) 五.so 动态库 ...
- android逆向分析概述_Android存储概述
android逆向分析概述 Storage is this thing we are all aware of, but always take for granted. Not long ago, ...
- Android逆向--如何调试smali代码?
最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享. 本文介绍Android逆向中smali代码的调试及环境的准备. 事先准备如下工具: Android killer:反编译 ...
- Android逆向之调试smali代码基础
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Android逆向中调试smali代码的方法." 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享 ...
- 【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )
文章目录 一.脱壳点简介 二.修改系统源码进行脱壳 一.脱壳点简介 在上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 rewriteD ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )
文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )
文章目录 前言 一.在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader 1.创建 DexClassLoader 2.使用 DexClassL ...
- 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
文章目录 前言 一.函数拦截需要的几个参数 二.插桩前先保存实际函数入口 6 字节数据 三.在插桩的函数入口写入跳转指令 | 构造拼接桩函数 前言 [Android 逆向]函数拦截实例 ( 函数拦截流 ...
- 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
文章目录 一.创建 Capstone 反汇编解析器实例对象 二.设置 Cs 汇编解析器显示细节 一.创建 Capstone 反汇编解析器实例对象 使用 Capstone 反汇编框架 , 首先创建 Ca ...
最新文章
- 使用Java让android手机自动执行重复重启
- 使用PowerShell收集客户端MAC地址
- 628. Maximum Product of Three Numbers
- 如何安装docker-compose
- Android Textview控件
- 协议层次及其服务模型
- 【浏览器】event.pageX/Y页面坐标(CSS像素) event.clientX/Y视口Viewport坐标(CSS像素) event.screenX/Y屏幕坐标(屏幕像素)
- 微软开源软件特征源码分析工具 Application Inspector
- javascript中的cookie问题
- L2TP连接result_code_avp: avp is incorrect size. 错误
- Jquery的基础学习
- python编程100例-【python】编程语言入门经典100例--30
- 贪心算法的几种经典例题
- 嵌入式USB转RS232九针串口线驱动,及串口软件secureCRT的使用
- mysql注入转义绕过_SQL注入防御绕过——二次注入
- 向量积(叉积)和数量积(点积)的区别和联系之解析
- 【MATLAB笔记】对矩阵进行满秩分解
- Android 彻底杀死当前进程
- 成绩管理系统(C语言)完整代码,纯C的练手程序
- flex的常用用法二十条
热门文章
- 十八新娘八十郎,苍苍白发对红妆。鸳鸯被里成双夜,一树梨花压海棠。
- java pandora_Pandora FMS监视简介
- es 修改mapping
- So Far Away
- 计算机课第一节可以讲些什么,高职《大学计算机基础》第1节课讲点什么?
- 到底买苹果XS还是XR_iPhone XS和XR买哪个?10个理由告诉你XS更好,贵是有原因的!...
- Racket编程指南——2 Racket概要
- 纯css实现各种箭头图片效果
- 【深入理解计算机系统csapp】 attack lab实验四
- 定时器0练习,利用左循环函数_crol_(a,b)