问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
安卓学习思路方法总结(七)
移动安全
分享者才是学习中最大的受益者!
前言 -- [安卓学习思路方法总结(一)](https://forum.butian.net/share/321) [安卓学习思路方法总结(二)](https://forum.butian.net/share/332) [安卓学习思路方法总结(三)](https://forum.butian.net/share/505) [安卓学习思路方法总结(四)](https://forum.butian.net/share/510) [安卓学习思路方法总结(五)](https://forum.butian.net/share/511) [安卓学习思路方法总结(六)](https://forum.butian.net/share/662) 这是系列文章的第七篇 我们继续 我们继续 ARM指令集 ------ ![image-20210830012805240](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-840fac97492451d1d0ad12dc95da94651b8f9dba.png) ![image-20210830012812273](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-286b05490dde0f7bcd4bad40f61b4e59f3a1ce17.png) 条件码表 ---- ![image-20210830012920554](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-655dba8d10467ff8b7457cf74714b1b687ac6eea.png) 三级流水线 ----- ![image-20210830013054315](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-fde8abd52a22c28958be44d94a106e39bb248646.png) 环境搭建 ---- ### 连接真机 ![image-20210830104202329](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e24cd333aae399cdb58d554e7647cf3bc8e55940.png) 上传IDA中的android\_server 我之前上传过了 就不上传了 ![image-20210830104407667](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-137db02c714eb1bb8107127f674db6da7ec25579.png) ### 切换root权限 ![image-20210830111442020](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-bb28e0482b80ec4e1ef85c7cb63384bf47dcacd2.png) ### 运行程序 ![image-20210830111504988](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-10c0a768c463337683fda7c0d6ff86c93bd59301.png) ![image-20210830111519365](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-956da483bd32dc087902c1bd85fcaf69dbb7eb00.png) ### 端口转发 ```php adb forward tcp:23946 tcp:23946 ``` ![image-20210830104441311](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2a1ef3889573dd30c9dc792ab27c1b20005b7b19.png) 安装APK到安卓机上 这次使用的是install 之前安装过了 就不搞了 ```php adb install C:\javandk1.apk ``` ### 打开ddms 挂起程序 ```php adb shell am start -D -n com.example.javandk1/.MainActivity ``` ![image-20210830110441741](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ae168db18de3a4a3f5ff1d9b57abfc4a979220a6.png) ddms查看 变红色的了 ![image-20210830110413817](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c714768cfee5a394a209786be326aad246f5bfc6.png) ### IDA Debugger连接 ![image-20210830104540423](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a270c6cf52ba17fe14164c0be11516fb54f0bb1e.png) ![image-20210830104558268](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-370870ff3bb20b1a3da2eb2cee2330557327e0da.png) ![image-20210830111609246](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-13cc8e68e05213fa1c362aebf7f9139f07437cc2.png) 搜索我们的android程序 双击进入即可 ![image-20210830111658309](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b5a56c0ee2ac8b81ed396c85cb24a6e7dd4a75a0.png) 熟悉的页面 就来了 ![image-20210830111724988](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-70796301d656bbbb3acd84a46e15ab2d643aed13.png) ### 增加设置 ![image-20210830120307445](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-6e8c83601ecd12dd2ffe157baa4a1c1d1f310192.png) ![image-20210830120252220](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8a31f32ae714906d7afd7a69d728420c652e649f.png) **F9运行一下** ### 动态调试 ```php jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8600 ``` ![image-20210830112104995](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5cea3130bd2f2d68c0ff52d445361d1341f79bf6.png) ![image-20210830112118266](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-90b60548ef922f96be411e721e298feda1caa6c2.png) ### 加载so库 ![image-20210830153457345](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d24c427e6549d7a64f9c9f3cf8e183578f5cae9d.png) 然后运行一下 重新搜索 出现so库 ![image-20210830153607505](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a3f4efc44f4ca832a26769235a90e9e4ddcdd8a3.png) 双击进入 即可 继续搜索 ![image-20210830153631743](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-86a87feebdecd2f15af7575987ad5d8b934bfd05.png) IDA窗口了解 ------- ![image-20210830153728349](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4c511a97786368fd538e76e3548910f03071797d.png) ### 寄存器窗口 ![image-20210830153747909](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d1fd53e1cf11cd57e673d9dc97b45e386b99230e.png) ### 栈顶 ![image-20210830153806770](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-920ff57ac6e5078e748730462e397d13665d2958.png) ### 栈底 ![image-20210830153823811](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4b20b8aa3df7ddcdda87e7b151b251b7a526fd90.png) ### hex 一个字节八位,四个字节是32位 一个十六进制数表示四位,两个十六进制数表示一个字节 这里的数据都是三十二位的,三十二位系统意思是可以处理2的32次方就是4G内存! ![image-20210830153838876](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-467bcfac86e81c1c552aa0f39970022084716252.png) ### 关闭的窗口 在这里打开 ![image-20210830114946527](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7f8fb7bc0efc5aea2b3f89a05ff99baed31fcc4c.png) ndk动态调试实操 --------- ### 下断点 下断点 ![image-20210914214844992](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-890f7ce3b11932cc4abb1fcbe6cd4166e9b198a2.png) Yes即可 PC就是往下走 分析每一条指令 ### 第一条指令解析 第一条指令是LDR指令 R0:F54BC000,R3:00000001 ![image-20210914214947196](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0dd71b7ef5bbc8245ebd3144d26adeb346beb293.png) ![image-20210914215011048](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5d77d1ded8cb4388c0cb34d7cc3a8813f8f378e6.png) 小箭头进来 ![image-20210914215137139](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2b9fb5868c43ca3c04237adeca228963ade2691f.png) ![image-20210914215222330](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d9ad2f47a8902fab6aea1f191f51c367e3285ba4.png) ESC返回 ![image-20210914215315408](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-cacde7d1c97e481eed9a907b80de71249d458f1d.png) F7单步步入 ### 第二条指令解析 R2的值变成 `00000004` 进行了覆盖写入 ![image-20210914215445035](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f302e390f5edab01b8cd65f362a9431b1dba028d.png) F7单步步入 ### 第三条指令解析 ![image-20210914215542040](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0ed53213c7f4e74fd191338540ddd2ce09eb90e2.png) STR是栈顶指针 将寄存器的数据存储到存储器 SP 的值是`FFEE2B60` ![image-20210914215806773](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d6c70870b38ce0b01f44ed1d4e67eb451047df57.png) 点击箭头进来 ![image-20210914215715164](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-259e7f284396170fa4be1de5531ac9fdd6a1d0ce.png) 内存里从右往左读就是小端,左往右读就是大端 小端存放 在前面 可以看到var\_4 是被定义的`-4`的意思 ![image-20210914215854094](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-be78cb2cf294063ece5b5dd213f6a8efb4feef65.png) 是把LR的值给SP 继续单步步入 ![image-20210914215952043](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-548d1352b46fb89b5d849847f7e54d71d13d4f9c.png) 之前的栈顶是`FFEE2B60` 现在的栈顶是`FFEE2B5C` 60是十六进制的计算=6×16+0=96 然后在通过var\_4就是-4=92 然后92在/16=5余12 商为5对应十六进制5 余数12对应十六进制C 所以这里就是`FFEE2B60`转换为`FFEE2B5C` 查看hex dump ![image-20210914220330384](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-10b412b9e4ab0ba41e45029eeab32893e1d85313.png) ![image-20210914220519324](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4f90fc496347a23b30138c241fdca1f1439ff31f.png) 从右往左存储 ### 第四条指令解析 可看到第四条指令中,SP的值是`FFEE2B5C`,EC指向栈顶值`F5240BA9` ![image-20210914220648121](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-9873552c4c0a63eaf78b5dc4ae03eb991031c457.png) SUB 是减 SP减去0C,C是12 SP=5C=5×16+12-12=48/16=5余0->50 继续F7步入 栈顶 就变成了50 ![image-20210914220902809](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4bafbe046ff59cdaa93503357e96e8884be090e4.png) ### 第五条指令解析 R1:`00000000` SP:`FFEE2B50` R2:`00000004` ADD是加的意思 R1=SP+R2=5×16+0+0×16+4=84/16=5余4->54 ![image-20210914221001842](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0f9783005a84dd3eaa4204b58a51c99250ee34ab.png) 继续步入 可以看到R1变成34(FFEE2B54) ![image-20210914221153686](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f3382f6a308b171043815dd2307297fda81fa585.png) ### 第六条指令解析 R3:`F5433D20` LDR 把右边中括号里面的值,放到R3中 中括号里面的值=R3+0×18=2×16+0+18=50/16=3余2->32 ![image-20210914221248068](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-8f17d22a373f48b7f0d0637ff1831da2c5cfc722.png) 小箭头查看 ![image-20210914221517194](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-9bc6598726f8dd8277d11d146f0d9b4e9f416a09.png) 20的值是:`F50F0111` 一样还是倒着看两位 没有就补0 继续步入 ![image-20210914221949127](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-848bfaccc225d9f7ffcdab8d48bfdda2805ae609.png) ### 第七条指令解析 R2:`00000004` MOVT指令 这里的T是高16位,进行进1 ![image-20210914222043694](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5d495cf77dc6df0842b799126ffde7e1e6116c16.png) 单步F7步入查看 ![image-20210914222201657](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-bede5a51bf09a39404f6509b2b9a069c25a9b6da.png) ### 第八条指令解析 R3:`F50F0111` BLX,B是跳转,L是link链接,Ⅹ是状态 ```php BLX:LR和T,PC会变 BL:LR和PC会变 BX:T和PC会变 ``` 理解一下:就是带链接又带状态的跳转!带链接就是会返回! 会跳到下一条指令的地址:F42B4058 ![image-20210914222239948](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c86330d0a61ec6f202da1541779240f6ea959d0d.png) F7单步步入观察T标志位: 请注意:这里我卡死了 重启了一下IDA 所以栈地址发生了改变。。 ![image-20210916145854292](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7d41a7b443dbd57d4f0ef148e5ad6344e717c617.png) 点击小箭头进来 ![image-20210916145915728](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-63a1abb88cc173317189e6d4b0749c7b6fe2bd2c.png) ![image-20210916145951176](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0a60b44b073f0348022648cd235ac32bed2ee3ff.png) ESC返回 往下看 最后 它是走到了这里 ![image-20210916150138337](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c5de4229506c4e591054fdf0ea0b3f8c78861f94.png) F4 选中 ![image-20210916150223736](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-515faca55776293e0c3638ae04084405cafb5f28.png) F7 单步步入 进行返回 ![image-20210916150304579](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-cb64a6a8fe550a28c9401681f35ab9924495c644.png) 成功返回 注:要想跳转分析指令 只需要重新在此处下断点,然后F9进去即可 静态so库分析 ------- 直接把so文件拖入IDA即可 ![image-20210916151450724](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-72f2a0ea698f92aaad50c3cf07808b703457a243.png) ![image-20210916151517005](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-791db6b24ba5fdfe46630138ae5304b92a3bb8c7.png) ### Test2分析 ![image-20210916152804089](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c3e99130641d0f4653d08970b13016a0cdcd2737.png) 注:流程图和文本图 空格切换 ![image-20210916152821033](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0b9b9d66576e9ea92df75e72a63da88ffa494135.png) #### 第一条指令解析 ![image-20210916152835496](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a1feb9a608027b7333abd44eb2cb8a34cb158ec9.png) 就是将\[括号内的RO的值取出放入R12中 #### 第二条指令解析 ![image-20210916152851356](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-5844f2d9e054ac86689df3e587b3853ff338e090.png) 将R3~R5,LR入栈,满递减堆栈 满减递归 STMFD这个放在后面还会详解 #### 第三、四条指令解析 ![image-20210916152905406](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-878c4f9165b1a2db735f6b3dfaa0177992e7dab7.png) MOV把R0的值给R4 然后直接把`(aAge-0×1288)`的偏移值给R2 双击`aAge`进来 ![image-20210916152918661](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-29f02b74313a558117f45268fdf199c69bd46f97.png) ![image-20210916152557392](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-620de0efb42aca1fae82a57524f4d055c91274ca.png) 这里自定义的成员变量 aAge表示这个`00002C34`地址 就是`00002C34`这个地址-0x1288数据产生的偏移值 然后把这个偏移值放入R2 ESC 返回 #### 第五、六条指令解析 ![image-20210916153002199](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-81a6c28760b42c2aa9a867d3ba8293e02d3a700a.png) 和上面很像 MOV把R1的值给R5 然后直接把`(aLjavaLangStrin - 0×128C`的偏移值给R3 双击`aLjavaLangStrin`进来 ![image-20210916153205000](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2da9fd75c5b2e99a928fe647769d3aa592e32eb6.png) aLjavaLangStrin表示这个`00002C20`地址 就是`00002C20`这个地址·-0×128C·数据产生的偏移值 然后把这个偏移值放入R3 ESC 返回 #### 第七、八条指令解析 ![image-20210916153402443](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-dabffe8b372cdc9eba04cd2a5ed4bd595c569680.png) ADD加,PC当前要执行的地址 +R2里面的值 的和 放入R2 这时候地址里面的数据就是`age` PC当前要执行的地址 +R2里面的值 的和 放入R3 这时候地址里面的数据就是`Ljava/lang/String` 注:后面动态调试 还会继续说明 #### 第九~十五指令解析 ![image-20210916153631476](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a4fd8c29577a6511e2ddcd825465929efd3706f7.png) ```php 1、BLX执行后,R2存放的地址是下一跳的地址值,0000128C,这里T:0->1 2、R4的值取出放入R3 3、MOV把R5的值给R1赋值 4、把[R3,#0×24]地址里面的数据放入R3寄存器 5、MOV把R0的值给R2赋值 6、一样是BLX 7、MOV把R0的值给R4赋值 ``` #### 第十六~十八指令解析 ![image-20210916153737216](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b80bed7db4727b056532004e45bd2858eff89f14.png) ```php 1、BL:不带状态 只有B带上X才表示即将执行的指令会发生一个指令集的变化即ARM变成tumb或者是thumb变成ARM 那么这里只是BL不带X,所以T是不会变动的,就是单纯的把地址放入LR 2、MOV把R0的值给R2赋值 3、LDMED和 STMFD是对应存在的,会在后面的动态调试进行解释 ``` OK 这次就到这里
发表于 2021-10-12 12:09:27
阅读 ( 4553 )
分类:
漏洞分析
1 推荐
收藏
0 条评论
请先
登录
后评论
略略略
36 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!