吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 53981|回复: 117
收起左侧

[Android 原创] 《教我兄弟学Android逆向05 在smali代码中插入Log 》

    [复制链接]
会飞的丑小鸭 发表于 2017-11-20 00:50
本帖最后由 会飞的丑小鸭 于 2018-3-8 16:08 编辑

上一篇 《教我兄弟学Android逆向04 动态调试smali代码 》 我带你动态调试了smali代码 课后作业你也做了三遍 基本上是对动态调试有所了解了 课下自己再找几个小例子多练习几遍 知识学到手了 以后面试官面试你的时候问你 你会动态调试smali代码吗?那个时候你就可以用这个表情看着面试官了(无奈 找QQ表情斜眼笑没找到 只能用这个相似但很贱贱的小表情替代了 但是不是我想要的效果 这里建议吾爱破解论坛可以添加个斜眼笑的表情 为什么?因为/xyx)   那么今天给你带来的这堂课是在smali代码中插入Log的教程 那么你问了以前经常听别人提及到Log那么别人口中的Log到底是什么 ?

给你个眼神
  下面开始上课 好好听课啊

要么学!要么不学!学和不学之间没有中间值 不学就放弃,学就要去认真的学!    --致选择


一 编写JAVA程序并在smali代码中插入Log


1 打开自己的AndroidStudio 在MainActivity里面写一段switch case语句


01.png

2.编译并安装程序到手机 打开Android Monitor 运行程序 就把自己添加的Log打印出来了


02.png

3.把程序用AndroidKiller反编译 switch case语句的smali代码分析我这里就不讲了 自己可以对照着自己写的java代码去分析 或者参考《
教我兄弟学Android逆向03 破解第一个Android游戏》 里面对switch case的分析

03.png


04.png

4 把复制出来的那三句代码中的会飞的丑小鸭 改成: 我是添加的smali代码并添加到smali中  Ctrl+S保存好后 卸载 编译 安装 打开打开Android Monitor看Log

const-string v0, "Hello"

const-string v1, "\u6211\u662f\u6dfb\u52a0\u7684smali\u4ee3\u7801"   

invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

05.png

06.png

07.png

08.png

5.这里就成功的把自己在smali中添加的Log打印出来了

09.png

6.通过上面的练习你学会了在smali代码中插入Log 但是通常在实战中只会插入一句话Log是远远不够的 很多情况下插入Log是为了打印出程序中某个变量的值  听完我这句话后 你不耐烦的说道 兄弟你别卖关子了 赶快讲怎么通过在smali代码中插入Log打印出变量的值 我还等着吃饭呢 好吧 为了兄弟的肚子不受饿 下面我加快点进度

二 打印变量的值

1 这里我编写了一个Demo 从下面的代码中可以出我在onCreate方法中执行了三个函数 函数名分别是fun1 fun2和fun3 并且在下面加入一条Log 目的是为了打印出函数fun1的返回值 因为Log.i的两个参数都必须是String类型  所以这里把int类型的fun1这个函数通过String.valueOf函数转换成String类型

[Java] 纯文本查看 复制代码
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fun1();
        fun2();
        fun3();
        Log.i("这个值是",String.valueOf(fun1()));

    }
    public int fun1()
    {
        int value = Test.value;
        return value;
    }
    public int fun2()
    {
        int value2 = Test.value2;
        return value2;
    }
    public String fun3()
    {
        String str = Test.str;
        String str2 = Test.str2;
        int value3 = Test.value3;
        return str2;
    }

}


2 下面我给本节课定三个要完成的任务 我将会带着你从从第一个任务开始做 由于下面的内容很重要 所以你可要认真听课了  

任务一
添加Log打印出fun2,fun3的值 (其实就是函数的返回值)
任务二
添加Log打印出fun3里面String类型str的值
任务三
添加Log打印出fun3里面int类型value3的值

任务一 添加Log打印出fun2,fun3的值

1. 这里分析一下程序 你看下上面贴的代码中onCreate方法中有一句Log是打印fun1的值的 如果在java代码中如果要打印出fun2的值 是不是只要把String.valueOf(fun1)中的fun1改成fun2 是不是就可以打印出来fun2的值 那么smali代码也一样 我只要找到打印fun1的这条log反编译成的smali代码 把里面的fun1改成fun2 是不是任务一就完成一半了?

这里我把打印fun1的这条log的smali代码复制了下来  然后在这条Log下面粘贴了一遍 把粘贴后smali代码中的fun1改成了fun2 修改完成后 保存->编译->卸载->安装->运行 查看Android Monitor 可以看到这里已经把fun2的值打印出来了


10.png

11.png

2 把fun2的值打印了出来 那么fun3的值怎么打印呢 可以看到fun2和fun3函数都是int类型 然后通过String.valueOf这个函数转换成的String类型 但是fun3这个函数本身就是String类型 这里如果还通过String.valueOf函数转换的话程序会报错的 那么既然上面那种在smali代码中换函数名字打印Log的方法在函数fun3中行不通了 我如何打印出fun3的值呢 ? 如果在JAVA代码中你会怎么做 是不是重新插一条Log去打印fun3函数的返回值 打开smali代码 按照这个思路去做 这样就把任务一给完成了

12.png

13.png

任务二  添加Log打印出fun3里面String类型str的值

首先从smali代码中找到fun3方法所在的位置 然后在方法里面找到str的值 一般来说程序都会把这个值储存到寄存器中 可以找到这个寄存器 然后把寄存器作为变量给打印出来 那么任务二是不是也完成了

14.png

任务三 添加Log打印出fun3里面int类型value3的值 这里上面也提到了 Log.i这个函数的两个参数必须都为String类型,而这里想把int类型value3的值通过Log打印出来 那么得把它转换为String类型 用到函数String.valueOf 这里可以把上面打印出fun1那段Log的Smali代码复制过来 稍作修改

15.png

16.png

三. 总结 本节课从简单的插入Log到从smali代码中打印变量的值 然后从中牵扯到了类型转换 最后通过完成三条任务为主线 结束了本节课的教程  这堂课中的每一个例子 每一个点都很精致并且实用 这节课的内容你可以留着当做Log方面参考文档 虽然本节课的篇幅比较长 但是本节课的所讲的所有东西 你都要跟着做一遍 最好自己能写一些心得  有时候你看着这些东西可能会比较烦 因为学习是痛苦的 痛并快乐着 当你看代码累的时候就休息一会吧 给你推荐一首音乐Summer Poem 我经常在敲代码的时候单曲循环这首歌 当你在听这堂课的时候 要记住逆向的道路上不只你一个人在奋斗!有我们 他们 以及看见这篇文章的所有人都在做这件事,所以你不孤独!


本节课所用到的AndroidStudio项目和生成的Apk:
链接:https://pan.baidu.com/s/1mjiAYe8 密码:yhfy

课后作业:
(1) 参考本节课第一个例子自己用AndroidStudio编写Switch case语句 要求Switc case的是支付成功 支付取消和支付失败 并且打印出相应的Log
(2)在 https://www.52pojie.cn/thread-632178-1-2.html 滚动的天空 这个游戏支付成功 失败 取消方法 的smali代码中分别插入三条自己的Log 点击购买时查看程序打印出的Log



下一篇:教我兄弟学Android逆向06 用AndroidStudio编写第一个so








免费评分

参与人数 44吾爱币 +52 热心值 +44 收起 理由
NULL_zjb010203 + 1 谢谢@Thanks!
wahson + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
新人来学习 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
airsurfish + 1 + 1 鼓励转贴优秀软件安全工具和文档!
wangleishu + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
SYD缇缇丝 + 1 + 1 谢谢@Thanks!
mj2013ly + 1 + 1 热心回复!
humixiao + 1 + 1 谢谢@Thanks!
zhang53000 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
rnwoshiwo + 1 + 1 谢谢@Thanks!
吾爱Live + 1 + 1 谢谢
编草鞋的蚂蚱 + 1 + 1 谢谢@Thanks!
飞天蜗牛 + 1 + 1 谢谢@Thanks!
快乐交友 + 1 + 1 我很赞同!
shock-c + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mr_me + 1 + 1 谢谢@Thanks!
zhizhizha + 1 + 1 谢谢@Thanks!
心猿意马 + 1 + 1 已答复!
Motis + 1 谢谢@Thanks!
sunnylds7 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
都同学 + 1 + 1 谢谢@Thanks!
heazerry + 1 + 1 谢谢@Thanks!
LowerAI + 1 + 1 谢谢@Thanks!
炖锅 + 1 谢谢@Thanks!
lm180180 + 1 + 1 谢谢 @Thanks!
helloooworlddd + 1 + 1 用心讨论,共获提升!
hpsales + 1 + 1 我很赞同!
kikyoulin + 1 + 1 加入收藏夹,并已加入周末豪华套餐,先马克一波
zhiyi1120 + 1 + 1 谢谢@Thanks!
我是本饭 + 1 + 1 做成視頻就好了。
tail88 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
流星星 + 1 + 1 我很赞同!
debug_cat + 1 + 1 支持楼主,非常感谢,会一直做你的听众,小白菜路过,我之前看过一个文章,.
xiaoxi2011 + 1 + 1 谢谢@Thanks!
hlrlqy + 1 + 1 我很赞同!
夏雨微凉 + 1 + 1 真兄弟!
你说的幽默 + 1 + 1 谢谢@Thanks!
qtfreet00 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dioderen + 1 + 1 谢谢@Thanks!
wxue + 1 + 1 谢谢@Thanks!
IceWind + 1 + 1 谢谢@Thanks!
真爱贤 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
玩世不攻 + 1 + 1 热心回复!
zhu911 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

夏雨微凉 发表于 2017-11-20 18:21
我来分享一下怎么连接夜神模拟器吧,我觉得觉得这个也挺好用的,不过最近开始用夜神了。
模拟器版本:5.0.01
第一步:打开夜神模拟器的安装路径,cmd切换到该路径下的bin目录;
              在cmd中输入:adb kill-server
                                      adb start-server  
                                     1_1.jpg
                                    (这一步是有用的,亲测可以避免一些未知的麻烦)
第二步:输入 nox_adb connect 127.0.0.1:62001  (试了,不能修改)
                                    1.jpg
                                    2.jpg
第三步:(因为我的电脑上有两个SDK,一个给eclipse用的,一个给AndroidStudio用的,我先切换到AS用的SDK路径下),输入:adb connect 127.0.0.1:62001
                                  3.jpg
                 出现这个提示就可以连接成功了,测试:adb devices
                                 4.jpg
(待会再加技巧)

免费评分

参与人数 1吾爱币 +1 收起 理由
爱学习的小仙女 + 1 用心讨论,共获提升!

查看全部评分

Zbuter 发表于 2019-2-3 12:34
为什么我调试smail的时候没有logcat  但是运行软件的时候有。
苏格拉、没有底 发表于 2019-7-11 21:51
 楼主| 会飞的丑小鸭 发表于 2017-11-21 19:20
文远张辽 发表于 2017-11-21 19:14
感谢楼主,小弟继续努力!

加油 好好学习
LeiSir 发表于 2017-11-20 06:14
要么学,要么不学,不要再不学好学之间,这句好!
玩世不攻 发表于 2017-11-20 07:38
讲的真的很好,还没学到怎么使用smail先看看
真爱贤 发表于 2017-11-20 07:49
我觉得很棒,加油大兄弟,等你的教程
夏雨微凉 发表于 2017-11-20 07:53 来自手机
中午开始,感谢楼主,真兄弟!
IceWind 发表于 2017-11-20 07:59
得益于LZ的兄弟,让俺也能沾光学到东西。{:1_912:}
黑色魔方 发表于 2017-11-20 08:23
签到,学习了
麦迪就是帅 发表于 2017-11-20 08:25
谢谢,辛苦了!
anhua8888 发表于 2017-11-20 09:00 来自手机
辛苦楼主了,期待楼主更多更好的教学
天下客 发表于 2017-11-20 09:07
支持,要好好学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 03:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表