问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
安卓学习思路方法总结(三)
移动安全
分享者才是学习中最大的受益者
这是第三篇 [安卓学习(一)](https://forum.butian.net/share/321) [安卓学习思路方法总结(二)](https://forum.butian.net/share/332) 我们继续 Dalvik指令集 --------- 前言 -- 基础字节码---名称后缀/字节码后缀 目的寄存器 源寄存 1、名称后缀是wide,表示数据宽度为64位 2、字节码后缀是from16,表示源寄存器为16位 3、move-wide/from16 vAA,vBBBB 分析一下:这里AA是目的寄存器没表示出来 BBBB,因为一个字母是4位,4个B就表示源寄存器为16位 ### 整体分析: ```php move为基础字节码,即 opcode。 wide为名称后缀标识指令操作的数据宽度为64位。 from16为字节码后缀,标识源为一个16位的寄存器引用变量 vAA为目的寄存器,它始终在源的前面,取值范围为v~V255。 VBBBB为源寄存器,取值范围为v0~v65535 Dalvik指令集中大多数指令用到了寄存器作为目的操作数或源操作数 ``` 其中`A/B/C/D/E/F/G/H`代表一个4位的数值, `AA/BB/CC/DD/EE/FF/GG/HH`代表8位的数值 `AAAA/BBBB/…HHH`则代表一个16位的数值 Dalvik指令使用 ---------- ### 空操作指令 空操作指令的助记符为nop 它的值为00,通常nop指令被用来作对齐代码之用,无实际操作! ### 返回指令 ```php 1、"return-void":表示函数从一个vod方法返回,返回值为空。 2、"return vAA":表示函数返回一个32位非对象类型的值返回值寄存器为8位的寄存器vAA 3、"return-wide vAA":表示函数返回一个64位非对象类型的值,返回值为8位的寄存器对vAA 4、"return-object vAA":这里面出现了 object,表示函数返回一个对象类型的值。返回值为8位的寄存器vAA ``` ### 数据定义指令 可以参考这里: ```php https://blog.csdn.net/u010164190/article/details/52089794 ``` ![image-20210731112649310](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-3063264992641e440eb0a6efad271fc30970211f.png) 数据定义指令用来定义程序中用到的常量,字符串,类等数据。 ```php 1)"const/4 vA,#+B":将数值符号扩展为32位后赋给寄存器vA。 2)"const/16 vAA,#+BBBB":将数据符号扩展为32位后赋给寄存器 3)"const vAA,#+ BBBBBBBE":将数值赋给寄存器vAA。 4)"const/high16 vAA,#+BBBB0O000":将数值右边零扩展为32位后赋给寄存器vAA。 5)"const-string vAA,string@BBBB":通过字符串索引构造一个字符串并赋给寄存器vAA。 6)"const-string/jumbo vAA,string@BBBBBBBB":通过字符串索引 (较大)构造一个字符串并赋给寄存器vAA。 7)"const-class vAA,type@BBBB":通过类型索引获取一个类引用并赋给寄存器vAA。 8)"const-class/jumbo vAAAA,type@BBBBBBBB":通过给定的类型索引获取一个类引用并赋给寄存器 VAAAA (这条指令占用两个字节值为0xoof(Android4.0中新增的指令))。 ``` ![image-20210731112701446](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f4d46427f230c19acd3c9110cacde039a72c806e.png) ![image-20210731112712349](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4343ec89ff91c0092ab331f3cb5c961ffd693613.png) ### 跳转指令 跳转指令用于从当前地址跳转到指定的偏移处。 跳转指令 ```php (1)、goto:无条件跳转 (2)、switch:分支跳转 (3)、packed-switch:有规律跳转 (4)、sparse-switch:无规律跳转 (5)、if:条件跳转 if-eq:等于/if-ne:不等于 if-lt:小于/if-le:小于等于 if-gt:大于/if-ge:大于等于 if-eqz:等于0/if-nez:不等于0 if-1tz:小于0/if-1ez:小于等于0 if-gtz:大于0/if-gez:大于等于0 ``` ### 实例操作指令 #### 1、"check-cast vAA,type@BBBB" check-cast vO将vAA寄存器中的对象引用转换成指定的类型。如果失败会报出 Class CastException异常。 如果类型B指定的是基本类型,对于非基本类型的A来说,运行时始终会失败 #### 2、"instance-of vA,vB" 判断vB寄存器中的对象引用是否可以转换成指定的类型。 如果可以vA寄存器赋值为1,否则vA寄存器赋值为0 #### 3、"new-instance vAA,type@BBBB" 构造一个指定类型对象的新实例,并将对象引用赋值给vAA寄存器。 类型符type指定的类型不能是数组类。 ### 数组操作类型 数组操作包括获取数组长度,新建数组,数组赋值,数组元素取值与赋值等操作。 #### 1、array-length vA,vB" 获取给定vB寄存器中数组的长度并将值赋给A寄存器。 数组长度指的是数组的条目个数。 #### 2、"new-array vA,vB,type@CCCC": 构造指定类型(type@CCCC)与大小(vB)的数组,并将值赋给vA寄存器 ### 异常指令 "throw vAA":抛出vAA寄存器中指定类型的异常 ### 比较指令(cmp) 比较指令用于对两个寄存器的值(浮点型或长整型)进行比较 大于(1)/等于(0)/小于(-1)-->cmpg、cmp 大于(-1)/等于(0)/小于(1)--->cmpl ### 字段操作指令 字段是成员变量 #### 普通字段 iget读 iput写 iget读是从后往前走 iput写是从前往后走 #### 静态字段 sget读 sput写 ### 方法调用指令 根据方法类型不同,共有5条方法调用指令 ```php 1、invoke-virtua|:调用实例的虚方法(普通方法) 2、invoke-super:调用实例的父类/基类方法 3、invoke-direct:调用实例的直接方法 4、invoke-static:调用实例的静态方法 5、invoke-interface:调用实例的接口方法 ``` ### 数据转换指令 数据转换指令用于将一种类型的数值转换成另一种类型。 它的格式为`opcode VA,vB` vB寄存器存放需要转换的数据,转换后的结果保存在vA寄存器中 neg---数据类型--->求补 not---数据类型--->求反 数据类型1-to-数据类型2--->将数据类型1转换为数据类型2 APK快速上手小技巧 ---------- ### 1、快速定位关键代码 #### 搜索特征字符串 比如购买、VIP、支付取消、余额不足等 #### 搜索关键api 支付宝、微信......关键字 #### 通过方法名来判断方法的功能 比如方法的名称,每个程序都有自己的规范等! #### 反编译APK程序 `AndroidMainfest.xml`-->包名/系统版本/组件 #### 程序的主 activity(程序入口界面) 每个 Android程序有且只有一个主 Activity分析程序的执行流程 #### 需重点关注的 application ```php 1.application执行时间 2.授权验证 ``` ### 2、定位关键代码的技巧 #### 1)信息反馈法(资源id/字符串) 比如支付成功,支付失败等! #### 2)特征函数法 比如api函数 #### 3)顺序查看法 进行分析程序执行流程/病毒分析 #### 4)代码注入法 动态调式/插入log查看 logcat/分析加解密 #### 5)栈跟踪法 动态调式/函数调用流程 使用IDA进行分析 #### 6)Method Profiling 方法剖析-->动态调式/热点分析/函数调用流程 ### 3、关键词 #### 方法名和游戏方法名 ```php onResult,onchinabilling,resulton,Paycenter,Callback ``` #### 爱游戏方法名 ```php paySuccess(成功)payFailed(失败)payCancel(成功) ``` #### 沃游戏方法名 ```php OnPayResult,PyaResulton,Activity,result,callback ``` #### 4399游戏方法名 ```php notifydelivergoods ``` #### 支付宝和银行卡方法名 ```php handle,message ``` #### 移动MM方法名 ```php onBillingFinish,Billing,CallBack ``` #### 360支付 ```php onfnished on Activityresult ``` #### 支付宝搜索字符串:9000 #### 咪咕游戏搜索常量:onresult #### 发送短信权 ```php android.permission.SEND_SMS ``` #### 锁定支付模式关键字符串:CHINA TELECOM #### 支付上限 ```php carrier_pay_out limit,no_propriate_pay_method ``` #### 谷歌广告 ```php Missing internet permission in AndroidManifest.xml ``` #### 运营商网络特征码备注 ```php 中国移动46000、46002、46007、46020return 0 getMobile Type中国联通46001、46006、46010return 2 getOperatorType中国电信46003、46005、46011return 1 getSimType ``` 实操一:单地斗地主 --------- 用单机斗地主来学习 ### 前言 ![image-20210731121609941](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-87cb1d9d7aef4b5c7dd76e236e5933a7d0aa9bae.png) 也是有多人对战的 ![image-20210731121650990](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-27764addac1b7f01d6841c0cfaf7970e9a35edfb.png) ![image-20210731121755310](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-53bfec85f3a08bdd74cf9cb64aa640bac970a51a.png) ![image-20210731121825636](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-35f086d6c01b9a9cf9500e0fe96e52f48d4efc87.png) ![image-20210731122025190](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7695b33e5a0561d279a47b6f7ed80e487118682c.png) ![image-20210731122035714](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8488b9d04c80229bf9618c31eb3491d7e870ea5d.png) 我们的目标是:跳过这个支付宝支付,购买该程序软件内容呢 采用Android Killer和jadx-gui两个软件的混合使用 ### jadx-gui查看Java代码 把APK丢到jadx-gui中 我们要点击这个`搜索类` ![image-20210731122650743](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b1fabc6e4a18a40bd3bddebffb5dfbc3c6ff4d93.png) APK才算反编译完成 我们知道的在支付宝中搜索的字符串:9000(支付成功) 进行搜索 ```php "9000" ``` ![image-20210731125305607](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f9b5ff74af309c16c77af0ef2aaf26030fb929a1.png) 双击搜索内容 进来之后看到了 Java代码 ![image-20210731125408567](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-eb51fedc3a7cd076be0a033ae366164d187b91a1.png) ```php public void a(String str) { String a2 = new e(str).a(); ``` 理解一下:public void方法里传入了一个 String,String a2 new了一个string 我们再去看看方法a里面写了什么 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4506ea20f0004ee31ff8c3f2992d1666c1be41bb.png) ```php public String a() { return this.f554a; } ``` 这个方法最终会返回一个方法:f554a 继续向下分析 ![image-20210731131427774](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ba94418f4a4d264ae2b6efe51557afe2e548f333.png) 几个if语句进行判断 成功的话进入UMGameAgent.pay这个 商品选择阶段 前面是天数 后面是金额 ![image-20210731131839550](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-1cd13ca4ad9e5f5baf4f3094b95ca72a50798daa.png) 那么这里的思路: 思路一:如果把30天20块钱的代码放入2天2块钱的代码替换后,是不是可以买30天的记牌器只用花2块钱 思路二:8000是支付成功和9000是支付失败,那么调换位置呢 我们继续往上看 ![image-20210731133606965](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8714d3dbbc818184c905e375490f1a0b90cdd9ac.png) 看看`w`方法的调用 选中w之后 右键查找用例 ![image-20210731133705286](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-10ccf9234f1b2462f9dfd29cf90d4a001602f9b0.png) 进行查看 ![image-20210731133855934](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-79246b4307a527c2ce0d51fae9a4085005ddb5d3.png) 同样是if判断,这里是采用了赋值操作 可以看到传入两个int参数`i`和`i2`,string也进入记牌器 然后判断`2==i`、`7==i`、`30==i` 然后赋值d2 那么思路三:可以将此处20改为0吗 ### Android Killer进行查看smali代码 把APK丢到Android Killer中 ![image-20210731124924546](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f64fa6cac824059d802e779ca208463cfd67f87b.png) 然后去搜索字符串:9000(支付成功) ![image-20210731125631487](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ab00a929927d1545b2160b03363f01fb820f1d04.png) 进行逻辑分析 ![image-20210731125817537](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-cb4f45a0739ca317eb1b037a6b4690f11482cf4e.png) 很好理解的 const-string v1:把v1定义为9000(支付成功) equals:v0和v1进行了个比较,返回结果放到v1里面 if-eqz:如果v1等于0跳到cond\_4 那么去看看cond\_4 ![image-20210731130120060](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b2a9fa20b9631c759515d69eb4e3205b1c6f0591.png) 继续进行逻辑分析 const-string v1:把v1定义为8000(支付失败) invoke-static:是方法调用指令中的:调用实例的静态方法 建议回头去看一下 equals:v0和v1进行了个比较,返回结果放到v0里面 if-eqz:如果v0等于0跳到cond\_1 那么我们继续 去看看cond\_1 ![image-20210731130523588](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b1834a5b3d6924cc2107a50bfabf26adedf10329.png) goto是跳转指令中的:无条件跳转 return-void:就是结束了 那么最简单的一个方法: `if-eqz v1, :cond_4`改为`if-nez v1, :cond_4` 支付失败 执行支付成功 ![image-20210731141550040](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5d6e336a22a48ec44fb5e386dcf5e6bb1ee9ff47.png) 保存之后 编译输出 ![image-20210731141815327](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a644c470fc2679414d97a86f7a7b92d10441182d.png) 进行查看 ![image-20210731142113524](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-011702a6bfc42ff652b64471ee576ce4de510706.png) 可以看到我们其实 是支付失败的 但是因为执行的是支付成功 所以依然可以使用 是不是蛮简单的?但是其实并不是 我感觉要多加练习,你要抓住那个点,多加练习才可以 继续加油 再来一个实操 实操二:卧龙影视 -------- 以卧龙影视进行演示 ### 前言 ![image-20210731142736299](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5ed640c4ca70b9fbbe6d3caaee65cb456f7bb4fb.png) 当我们点击之后 它会加载广告 ![image-20210731142610317](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-039a44b79bd454df27556d21ee88f7e06293207e.png) 那么我们使用之前的方法安卓(一)是不是可以删掉第一个跳转的界面 进行去广告操作呢 是可以的 小伙伴们可以去尝试一波 ![image-20210731142922092](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-71e949717ef09d34fe6da25f14565140bca0fe0d.png) 今天破解的就是它的Vip功能 如上操作 ### jadx-gui查看Java代码 要破解Vip,这里大部分所有APK的环境下都是搜索getVip 这里要注意: 1、搜索勾选代码 2、我们要破解的是用户的Vip ![image-20210731144516338](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-77b7bf2c269fdabd076b089f28cdbadc70f7a9ee.png) ![image-20210731144549975](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-1d67ba9ec5df1a5c2fbe88ba91808d3fe8eac44f.png) 往上翻 针对UserVip ![image-20210731144625436](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-fe0a622eb166c7d710c585f5c4a919e577051696.png) 右键查找用例 ![image-20210731144717459](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8afc3e88a49ba7afd61f01795ff98526db1cdafc.png) ![image-20210731144811658](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-da9d20742c76c6bd0a234c22a61b5681c0dd45dc.png) 这是一个实体类 分析一下 is vip(是否是Vip)、 End(vip结束时间)、Start(vip开始时间) 那么继续针对getIsVip进行查找用例 ![image-20210731145545602](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a20ef3a695b832e2812d2464b30e906c732bc88e.png) ![image-20210731150207512](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-59f83a91fc0fa1fbdf24c54ef4d76b8c9ae3676e.png) 那么我们这里:**让 getVip返回值不为空** ### Android Killer进行查看smali代码 根据包package 在Android Killer中找对应目录 ![image-20210731145626591](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-cc5a818d9409d0bb85d7cf94f5728a332e8f9cc8.png) 注意这里是:`smali_classes2` ![image-20210731145845850](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e88a9e114d0de3023c0dd5d817d3d3f01273db08.png) ![image-20210731150046100](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-314be0045823107d38a25c1e0808ffd8625d0600.png) 我们要改的smali代码就是`UserVip.smali` 然后找到`public getVip()` ![image-20210731150429470](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e0f9bad6cc5f6ff605bf663c77827e685f4a63c3.png) 进行分析 这个方法使用到`locals 1`—个寄存器 iget读取字段,v0是我们的寄存器,p0是从之前用户判断过来的值,这里就是用户去读取v0 如果p0是Vip那么v0就是Vip,如果p0不是Vip那么v0肯定不是Vip 最后`return v0`寄存器 我们的目标是:让getvip返回值不为空就行 ```php const v0,0x1 ``` ![image-20210731151039656](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c8e7910c10f313a4799b563309589457b2af53b0.png) 回编译成功 ![image-20210731151811587](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c4bd79210ef830ebb87490bd8e485c55327f634b.png) ### 关于回编译失败问题: #### 1、APKTOOL版本问题 ![image-20210731151903070](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-424c2f2434d23b1b67e923d8b1987612004f70e5.png) #### 2、Java环境问题 ![image-20210731152010219](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-132f3ad0c55defa257cbbf1e79298ed987b8dd22.png) ![image-20210731152028309](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d718118eac634024e1d6854ecc921e885c16f846.png) 然后我们继续 去查看一下 当我们注册登录之后 成功拿到Vip ![image-20210731152458569](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-3f1696dacb0d3e5a6efe26af5d328294964bd85b.png) 实操三:起名软件 -------- ### 前言 点开这个软件 ![image-20210731152859081](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e5d2a76f447f8ba5b509a813cd1c5b0ad748df0a.png) ![image-20210731153021196](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f81a346e05e7ceb5d6b31d3186053db50c8d5c39.png) ![image-20210731153033009](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-31dc46a322b4f18bfb3d1bd5911df37e6525c760.png) 需要Vip会员 如上操作 ### jadx-gui查看Java代码 针对关键字 ```php 可以选择五行 ``` ![image-20210731153500131](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-65284adfcfefb9af26cd076dd377fecb0898c3ea.png) ![image-20210731153532010](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-330d646485512a675f3eb2c702e5517d12c390b2.png) 只要和Vip相关 就离不开GetVip 进行分析: 达到这个switch中的`group.getCheckedRadioButtonId`这个条件 就会进行金木水火士判断执行 ### Android Killer进行查看smali代码 根据Java代码中的package找到gsname文件夹 ![image-20210731154056151](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4e86a2fafde74f10d61c005fd88e6c78507edfb2.png) ![image-20210731154205496](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7f2194442b688a8d694627c7015730b1318e4d63.png) 找到 ![image-20210731154334341](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-93a00ff08bf4c7c1a1ec146c6cc2ca16b2077f71.png) 可以看到下面有很多的`ChengYuListActivity$*.smali` ![image-20210731154433020](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4a56b36bcb93af228a6d7f7563d82349e75945f1.png) 这是因为把dex反编译成`smali`时候会把所有的内部类、抽象类、接口类等全部都提取出来,用来单独存放 然后就能看到这么多的 Activity ![image-20210731154616981](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b199e70a45edd8eb0157726061313b1f1af9066e.png) ![image-20210731154750992](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d9bc28857c7f64905865145f7299f1458c943a70.png) ```php 解码:"姓不能为空,请输入" ``` 并不是我们要修改的内容 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8f433e870afa2c96c4844835b64074b344c5d135.png) ```php VIP会员,可以选择五行。VIP会员升级请点击右下角会员专区 ``` ![image-20210731155044373](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b9bf84f17550f9edbc4dfa147f4dfc235c280a98.png) ![image-20210731155120286](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b225e86bc2cd030684ead5c329bfae8f1e0ed524.png) 我们可以看到结果是在内部类中 总共有两处 先点开第一处 我们进行分析 ![image-20210731155313531](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-51343a059d3890224b568bc0c5f760e7cb1bbc56.png) 看到了`setChecked(Z)V`传了个Z Z就是fase进去,此时是跳转下来的 继续向上看到了`cond_0`这里是从这儿跳转下来的 那么往上看看`cond_0` ![image-20210731155630458](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-278285af9f2795a32df7bab80c4b86eab5da97d3.png) 找到`cond_0` ```php if-eqz v1, :cond_0 ``` 那么我们把这里一样的`if-eqz:等于0/if-nez:不等于0` 修改为`if-nez` 就可以了 继续看第二处 第二处也是一样的 ![image-20210731155943245](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-1f0d3beccd1642743a4cd0fffc5de9b2da1f4b20.png) 向上跳转找`cond_0` ![image-20210731160018243](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4ed9f4ba4aa83c624e484719b483a04ce54aa505.png) ```php if-eqz v1, :cond_0 ``` 改成 ```php if-nez v1, :cond_0 ``` ![image-20210731160112694](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-77fdbdd56af9f035abc8498b9ac984a1f0f36743.png) 保存修改 然后回编译 ![image-20210731160253096](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c560648cc260bef5db9434f686778f0ea89dfd48.png) 进行尝试 还是不行 ![image-20210731161059720](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c7560e340db901ebce203c8d4b6fac6bc535bb14.png) 换个方式 既然是要Vip 那么就去改GetVip的方法 搜索出来挺多结果的 ![image-20210731161256604](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b6e288a1cb104af63ac9d3c20093d67044ba7c0a.png) 但是大部分都是调用的信息 我们要找的是定义的信息 ![image-20210731161349247](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d244ed73209de899bd664c0a150fb1872fc72bce.png) ![image-20210731161429895](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-99f3d776aa206de8d64642b301080b43c7ffd14d.png) 那么我们尝试注释掉这个 ![image-20210731161736654](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f4364c70524220d7de20a8a01bbfcab054540134.png) 保存之后 回编译 进行尝试 ![image-20210731161835770](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d991c79cf6f768c5bef3d8fece226d17381692f1.png) 进行尝试 ![image-20210731161958532](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-626325f5aa2633c834567aab6c4d7371cf8ec592.png) ![image-20210731162034615](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0332eea77c4ef2116c211dac65ee03ece112ed34.png) 是成功的 实操四:RE文件管理器 ----------- ### 前言 进行安装 ![image-20210802134423313](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-db14af65878740345054935934e99521f150162e.png) 然后我们打开 可以看到文件权限 ![image-20210802134513173](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4d2ecb898cae09fdb50c797fb5674c05a69136a2.png) 当我们点击退出之后 它会弹出广告 ![image-20210802134821022](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b274555e18dd7f15022f4b443a82a86fac1bb7c9.png) 然后当我们 点击一个广告之后 ![image-20210802134859955](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-6626ddc777047ba504c6b05822f642cdf978fe81.png) 它会把这应用添加到后台进行下载 那么我们的目标就是去掉APK退出时 加载的广告 首先开始adb进行抓这个APP的包 ```php adb shell dumpsys activity top ``` 然后发现这个类 ```php com.AddDouDouWall2.WebPageDownLoadMainActivity 676828b pid=2506 ``` ![image-20210802135553335](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a966233ed21bbdf708d8bb2aee7c9241e53d81c8.png) ### jadx-gui分析 将APK丢到`jadx-gui`中进行分析 进行反编译 ![image-20210802135331824](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-334c875ecbc52cc38191262d2b4c0724daf10b53.png) 进行搜索 ```php WebPageDownLoadMainActivity ``` ![image-20210802135749904](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-3ceca82029d013a588a30d093742ae5d74fd5f76.png) 点击进来 进行查看 ![image-20210802135842479](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-df77c73d5acf26c22abb7e75bfbbc2abacde94dc.png) 一些按钮 true 和 flase 然后 有一个地址 我们进行访问看一下 ![image-20210802162320896](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4a0da73823abd177fd0c0eb3741f70b0a409bf18.png) 发现 它就是我们退出时候的那个广告页面 那么 这里 是不是可以放上我们的钓鱼页面呢 继续 ![image-20210802142400816](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d1a192f77b64a8d371ac955075e314deee7e7051.png) ```php addContentView(this.webView, params); ``` 增加了一个addContentView把这些 webview,params传进去然后 ```php startService(new Intent(this, DownLoadManagerService.class)); ``` 最重要的一点还是这`startService`,我们看看逻辑 ![image-20210802142721017](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4b36280a14413ea9942ad8205fca20abc8e0c0b5.png) 可以看到`DownLoadManagerService`去继承了一个Service类, 那么我们不让它去继承 是不是就破解了 继续 查找用例 ![image-20210802144037140](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a241c17fe8daa55f7dd94077c76f0524ab44afdb.png) ![image-20210802144126412](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-edd1538fd4a77b8d15e2b5af0f0583d0d11efb75.png) ![image-20210802144154118](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-aa49a8955c96b83cf4421f9fef1b4a44426bb794.png) ```php public void onDestroy() { Intent iii; w a2; if (isNetworkAvailable(this)) { startActivity(new Intent(this, WebPageDownLoadMainActivity.class)); } ``` 看这个onDestroy isNetworkAvailable查询当前一个网络状况 如果有网络就`startActivity` 继续 ![image-20210802144609214](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2b5bc550dcbceeaa7c241f6269f0bc9b7f549353.png) ### Android Killer分析 将APK丢进来 首先搜索 ```php WebPageDownLoadMainActivity ``` ![image-20210802140923149](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-3c956144b4777d4a0c2bcfb643a3f534697aaddc.png) 进入`AndroidMainfest.xml` 它是APK的配置文件 ![image-20210802141124572](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-be9276e839cf88e46e0c14c955d5f00787684dc4.png) 然后搜索这个网址 ![image-20210802140648390](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-bf258b5f24c6bea7cab6ab74d21621860522c5cd.png) 然后我们删掉这个URL 根据第一节 去广告的知识 [安卓学习(一)](https://www.freebuf.com/articles/mobile/280471.html) **我们知道 删掉这个页面 它就不会加载了 但是依然会有那个白屏的界面** 那么我们如果放上自己的钓鱼页面呢 拿百度进行举例 ![image-20210802141717879](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2a79c7dc642ffae0c2a06fb04a759ac247d3f728.png) 保存 回编译 ![image-20210802141805474](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-381a27861b67b95929d48b8a104b7c03ae2fb1d5.png) 进行查看 当我们继续退出的时候 ![image-20210802141940561](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b095b6abb813a139b4cfc6d4d331b549e046b200.png) 成功跳转到百度 说明是可以的 然后继续 搜索`DownLoadManagerService` 我们是要找Web层的 ![image-20210802143619723](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-fd6d1001e7a1a778213f7c8d57500ec9ee1297ce.png) 定位`startService`这个方法 v4集合到p0里面 然后就`return-void`退出了 ![image-20210802143518451](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a2310ff791ec101e358e59fad8c9005645365e30.png) 然后我们去搜索这个onDestroy方法 根据package ```php package com.speedsoftware.rootexplorer; ``` ![image-20210802144919291](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-120abb9d42bb9f532d8f411141cde2dee87d283b.png) ![image-20210802144951025](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7ae251d3d33044c803e287456cea0567c4d2829e.png) 成功找到 ![image-20210802145043288](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2aeb107daa244a23a2506a6ba1a3099941be90e4.png) 进行分析 找到 onDestroy isNetworkAvailable进行一个判断 ```php if-eqz v0, :cond_0 ``` 然后返回一个v0有没有网络,如果v0等于0就跳转到`cond_0` ![image-20210802145416843](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-64b4fc8d88a52f7127c1bb911c187ba766f8a3cf.png) 继续向下执行 就跳转到 ![image-20210802145525856](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-1bf75369e009fa61279d69ee506e914497df77b0.png) 那么我们进行修改就可以了 ```php if-nez v0, :cond_0 ``` ![image-20210802145613444](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a1443880714be149c255106a89b2d05507dc456d.png) 进行回编译 ![image-20210802145711922](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5b266f48f6a7c2105264da58da09bae8ac21892c.png) 进行查看 当我们点击的时候 成功退出了 ![image-20210802145854092](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-673e2bef175e3cc177bf121a8508a3ff0119757c.png) 实操五:车来了 ------- ### 前言 进行安装 ![image-20210802150137291](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-274a277cb2fb7bebb7b6b487850141afd9bc5234.png) 打开 可以看到 广告 ![image-20210802151113781](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-56a734bf12dfac6ef34aa88b8ca85bab76531811.png) 那么我们的目标就是:去掉这些中间的广告 今天这里运用`ddms` ### ddms 进行启动 ![image-20210802151423267](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-72ee2c9c71da374365640f2c2df273752963e86d.png) ![image-20210802151715778](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b150b22bdcf88a847e23eba90e56d744b46cd216.png) ![image-20210802151511432](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b7eb85e3bee3a04b1568a1b184204ba71a193757.png) 它可以对栈和堆进行跟踪 ddms基本界面 ![image-20210802153027309](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c22f7be333bd8cef6207845c5d8b2025f6b32360.png) 它给我们的一个设备 这个就是 读取目前存活的设备 ```php adb devices ``` 而 ```php dumpsys activity top ``` 它是抓取当前顶层的页面信息 ![image-20210802153142469](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c36544a511485b57102055f9ce179c34c9bc32d3.png) 这都是相对应的 继续 ![image-20210802153347455](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b93c3f36dbdaa2b8bd62022fd24c1fb186f659c9.png) 分别对应package、端口、PID 继续 ![image-20210802153520380](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ad1d91d003c424095bde88747934aea7d8c3624d.png) 这是一个过滤寄存器 ![image-20210802153542402](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-28adbb2d6ea9f68b056032e76934a9d2ed9a0f0b.png) ![image-20210802155229239](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-da4486490525df730cf7ca23b909547d0f888be9.png) 一般只用填这两个 继续 存活机器 运行应用之后 会有信息 这里是毫秒输出 ![image-20210802154113922](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7dcf018dbf8c6f24a184e957726f54617d8f5738.png) 然后向右走 ![image-20210802155343122](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b80e819c5e748d1af7a27a031356317d76fe8544.png) 这是6个级别 然后我们进行分析 ![image-20210802155558255](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a0920a89eccda9afbe025ce092667ed0b01cc93c.png) 这里提示成功发送第三方埋点 还附带了链接 这就是APK中途的一些信息 [http://atrace.chelaile.net.cn/thirdPartyResponse?&amp;traceid=3820bc36-9623-4776-bbfd-fcb593f59c7d\_1627890977521&amp;pid=00&amp;s=android&amp;adid=&amp;jsid=1023075&amp;aid=sdk\_baidu&amp;adStyle=2&amp;req\_time=315&amp;code=200&amp;is\_backup=0&amp;ad\_order=0&amp;ad\_status=1&amp;v=3.68.0&amp;s=android&amp;imei=010305023634174&amp;cityId=027](http://atrace.chelaile.net.cn/thirdPartyResponse?&traceid=3820bc36-9623-4776-bbfd-fcb593f59c7d_1627890977521&pid=00&s=android&adid=&jsid=1023075&aid=sdk_baidu&adStyle=2&req_time=315&code=200&is_backup=0&ad_order=0&ad_status=1&v=3.68.0&s=android&imei=010305023634174&cityId=027) 然后我们右键 选择这个 ![image-20210802155821957](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2dab4fb38df756c1f8100985c948a6a84bd0a16a.png) 找到他的包名 ```php com.ygkj.chelaile.standard ``` ![image-20210802155906053](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e8efb6844dbb4c231d85609f6ceb5ebfbb894870.png) 添加过滤寄存器 ![image-20210802160032864](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b77e9b057c1a7dbf1b77b1bdb534946d0eb793c7.png) 添加之后 就只会有这个包的信息 ![image-20210802160128691](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d714ee1c5937b3aba42fe7f7c43a2f1a77b22596.png) 我们继续右键 进行分析 ![image-20210802160302994](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d814f6600b16a73b2a5d2a917d6ffb382b20fee1.png) 发现这些广告 都是基于 ![image-20210802160337612](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-cd143d05df1ab1cec1874c64d2a708ae6aff10e8.png) 这个域名 ```php atrace.chelaile.net.cn ``` 那么第一个思路 就是 我们把这个域名替换成 ```php 127.0.0.1 ``` ### Android Killer分析 进行搜索 ![image-20210802161324954](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-226f40d6536a64107cd5914c3801e6770d4542c6.png) 进行替换 ![image-20210802161412676](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-32a1bec0ee209616c0da64ab152dee688051f5b7.png) 进行回编译 ![image-20210802161603583](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e0ebfd9bb976cb345c5c46744fcbe465a647a211.png) 进行查看 因为一些原因 换了 模拟器 现在是雷电 ![image-20210802161704212](https://gitee.com/work-hard-every-day/test/raw/master/img/202108031653673.png) 可以看到 中间的广告没有了 ![image-20210802161839194](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-cec8a07443adee367e4ca09e6332f4209a32f09b.png) 实操六:好搜小说大全 ---------- ### 添加injectcode 这里要给Android Killer添加injectcode 原目录 ![image-20210802202811744](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0dcfb2f2cc2eb74d721570c5359b053d5b7591d4.png) 添加后的目录 ![image-20210802202849297](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b545bdb8661bf68edf352426254590302b501542.png) 重启AndroidKiller 把好搜小说的APK丢到AndroidKiller中 随意找一个smali代码看看效果 ![image-20210802203225801](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-3962d645041453f275cbe58f0db993e59f87c2e2.png) 这里要注意一下 ![image-20210802203348297](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a32d14f035ac635166465d2862d95a703cd86547.png) **一个app程序的入口点比入口界面执行得更早** ![image-20210802203530709](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-dd2d172bcda44643f08c164748843609863c8255.png) 这点一定要记住 ### Log信息输出插桩 进入入口点smali代码 进行分析 我们前面在学习Actvity知道 `onCreate()`是最开始的建立的地方 这个可以看在[安卓学习思路方法总结(二)](https://www.freebuf.com/articles/mobile/281426.html)中的图解 我们开始分析`onCreate()` ![image-20210802203809905](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e21c00cd325ef83c11616940d63592633824a6d3.png) 所以插桩就是在代码开始处进行实现 在下面空白处 右键插入-->代码-->Log信息输出 ![image-20210802203852784](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-51f3c28e732238c8b7d2b25bdfbfcf918188d0ef.png) 这里是要输入的文字unicode码 ![image-20210802204023527](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-203de3d1fd1b5e6fcc85e9ea69760d00d5ceec99.png) 进行Unicode 转换 ![image-20210802204101796](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-575840314aa91a53b49234000ded7d9dc46342e9.png) ```php 嘻嘻\u563b\u563b\u563b ``` ![image-20210802204141937](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ba42bfb9ce9213cf2324cff7ebee87cfbbfb1fbb.png) 进行分析 ![image-20210802204547619](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-15869dedf2a6d69adb215a5d2eaa68f8aa7108e6.png) `const-string`在[安卓学习思路方法总结(三)](https://www.freebuf.com/articles/mobile/282950.html)中讲过 它是数据定义指令 ![image-20210802204326473](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-06c4bdaabc48ace1a4bded0d0a6085b6dbc3d65d.png) 同样`invoke-stati`也在[安卓学习思路方法总结(三)](https://www.freebuf.com/articles/mobile/282950.html)中讲过 它是方法调用指令,用来调用实例的静态方法 继续 还需要在程序的入口点插入Log信息 查找清单文件:`Application.xml` ![image-20210802205844361](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-df859ba92a3b8506f881984ba786fbbaf936c4e1.png) 进行分析 ![image-20210802205938373](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-00411f41fe448af146555629c52e81421b09527b.png) ```php android:name="com.reader.ReaderApplication" ``` 后面有路径 那么在工程管理器中 继续查找`com.reader.ReaderApplication` ![image-20210802210307802](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-657678e5c068195d731f7cd72af6cb648829ef00.png) ![image-20210802210337092](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-1547543edd4908ed0a5b6b65353e027e9faebadd.png) 进入之后 继续锁定`onCreate()`方法 ![image-20210802210428627](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b54c3ce95025fa31a06a33273f7f59e3704b357c.png) 继续在`.prologue`下进行插桩 这次我们插入一个 ```php 哈哈哈\u54c8\u54c8\u54c8 ``` ![image-20210802211327532](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b80bf5226e0e484bd745bb2f87f01bdd49c97d65.png) 保存 进行回编译 ![image-20210802211503628](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a6d1021486e17fd8dced1ac87e4b8c9b47085544.png) 进行查看 ![image-20210802205417666](https://gitee.com/work-hard-every-day/test/raw/master/img/202108031653695.png) ### ddms 这个时候我们进行 ddms抓包 成功连接到设备 并且有信息输出 ![image-20210802210944741](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2252dce6e9b40a6ef08cbd5f58ee9cc165b4f4d5.png) 哈哈哈是入口点 ![image-20210802211814654](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-9ab264323f29c2d307e5f3c9333a436d8612004b.png) 嘻嘻嘻是入口界面 ![image-20210802211836747](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b0e1d59f52386b919650a6023b0dcecd1b82d647.png) 两者只有几毫秒的差别 **但是入口点永远比入口界面执行的更早** ### 一些问题解决 #### 一、程序崩溃 中间出现的问题 当我们成功插桩 APK回编译成功 但是在模拟器中 ```php 打开失败 程序崩溃 点击没反应 ``` 因为插桩导致寄存器不够用,需要加一些寄存器 进行全局搜索 ```php locals 0 ``` 随意修改 ![image-20210802212526851](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-fc4453d3e0f14eca1fa02a9e2bcf1e49c3d1f4a8.png) 修改为 加一些寄存器 ```php locals 1或locals 2 ``` 进行回编译 #### 二、init() 我们也喜欢在`init()`这个方法这里进行插桩 因为init表示这个方法在初始化,在初始化状态下是不会去调用任何寄存器状态,没加载入口点 ![image-20210802213127464](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-46078e4dfb979b3a9076484866afa2cce16eab2d.png) 栈跟踪:好搜小说大全 ---------- 继续就上一个实操的 APK:好搜小说大全 ### 获取当前界面进程 ```php adb shell dumpsys activity top ``` ```php com.qihoo.haosou.subscribe.vertical.book ``` ![image-20210802213440616](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ebe19260ea50f959f5f26be7c02a12e86f1f9692.png) ### ddms 进入该界面调取程序栈 ![image-20210802213606310](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-bbf57ca4cbcf8fc1d0aaa2db4f0cc9a11e343d02.png) 然后进行过滤寄存器的添加 ![image-20210802213759196](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0a579cb44b8c0c8247e715d0c5173027b0e1f2d1.png) 进行查看输出的信息 开始第一个关注点:`System.err` ![image-20210802213942688](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8cba410c3e5ab2563a9352a34c55ad92790fb973.png) 这里要理解一下中间的关系 上层是调用者 下层是被调用者 我们看的时候 应该是**从下往上看** ![image-20210802214248899](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8f563ce9e5c111ebc55770062a769fb4d44b699a.png) ### StackTrace栈跟踪 然后`StackTrace栈跟踪`的插桩 同样是找到入口点的`smali`代码 然后锁定`loadData()`方法 ![image-20210802214535724](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-fd7d49c765b1f20545cb248a7b6589ff768c0e44.png) ![image-20210802214626309](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7be5f428f511ddf6f3f20f05a4485243d8dc1e54.png) 简单分析一下 我们加入了两个局部变量寄存器v0和v1 程序本身locals也存在两个局部变量寄存器,所以就不需要修改了 然后`print trace`是打印栈 ```php new-instance v0, Ljava/lang/Exception; const-string v1, "print trace" invoke-direct {v0, v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V ``` ![image-20210802214911349](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d6b43c607395c0d01309c3734dd7d7db5e0b435c.png) 然后保存 进行回编译 ![image-20210802215142716](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-1690d078dac9eb686d09674bf754589d59c03ee5.png) 模拟器重新安装 进行打开 ### ddms2 继续上ddms 进行分析 依然 进行 过滤寄存器的锁定 ![image-20210802215938816](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-eb961937de1c657a4acf3344e5c1ecb8a978d9bb.png) 这里没有这个信息的话 可以重启 一下ddms 看到System.err 同时打印了`print.trace` 是从那里开始的 同样是从下往上看 ![image-20210802220134887](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4f88a3fcaf50970faec84787e986767c6a118600.png) 然后我们呢 是从`loadData`下插入 `StackTrace栈跟踪` 也续上了 请记住:从下网上看! ![image-20210802221958144](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-9f62b7741fdb76d4a949bc8bdbb3e672c29b584b.png) 然后进行 登录界面的栈跟踪 ![image-20210802221910477](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4fe7f929caa5bb2365a75a1b18b87b67f55bc934.png) ![image-20210802221937695](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0d018558c26b89adc59de92dde8284a490f42e69.png) 然后取ddms中进行:暂停分析栈 当我们随意的选择一个类的时候 ![image-20210802220640554](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f8dbd2ddff7f8b114fad71f6e6c1f555f318768b.png) 菜单栏中的 按钮就可以用了 我圈注的这个是:暂停分析栈 当我们点击它之后 ![image-20210802220745795](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5517a2c954faf823bd1f2d23bd24aefaa6e4b02c.png) 第一个选择是自定过滤 第二个选择是打印所有的 选择第一个 1000就可以 ![image-20210802221736166](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-29f5e3b82545502a9668d51ea2eca28163a137be.png) 然后OK 之后 点击进行启动 ![image-20210803153954500](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-593259b07335462f581f12f96fb0836d99a131f9.png) ![image-20210803154016503](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c72e75e31b38e197e1ba83420204e948497eb912.png) ![image-20210803154151321](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-aaab4fab692eeec78619a08e12a5564d747b54ee.png) 然后等待 一会 就会弹出一个窗口 ![image-20210803154224104](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4b4643a4a1b51d80d6bdb18c3c3719ce7a064f60.png) 总共有246个方法 这个取决于点击`立即登录`的速度 进行分析一下节点 ![image-20210803154429175](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-41a720a9eda90ea9d0582d4edb70394d27f70e40.png) Parents:父节点 当前方法的上层调用 **如果父节点下面没有节点,就是系统自启动的** Children:子节点 当前方法的下层调用 可以理解 Children以下的都是 Parents子节点 调用的是一个循环体 这里就是:1分支--->0分支--->26分支--->循环体--->0分支--->1分支 然后1分支 又会开始另外的循环 然后参数解读 ![image-20210803155515151](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a6ee015b3b207cf2e206ab49a9ae9c28f0d2fb2b.png) ![image-20210803155534353](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d84dd3585f6c8739d21dcaa22bbfa693363f5cce.png) ![image-20210803155545288](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a9261536c9018f5083e727ad3420767b7c1cc743.png) 分析:onclick ![image-20210803155809469](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-75fc39dca7f7c9da85c78a3160968055a6c690fe.png) 那么就是 85分支--->84分支--->83分支 这是一个登录逻辑 OK 这篇就到这里 栈跟踪一定要会 **请注意:这里使用的技术仅用于学习知识目的,如果列出的技术用于其他任何目标,我概不负责。** 转载于:<https://www.freebuf.com/articles/mobile/282950.html>
发表于 2021-08-20 09:48:48
阅读 ( 6624 )
分类:
WEB安全
1 推荐
收藏
0 条评论
请先
登录
后评论
略略略
36 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!