吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 53809|回复: 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语句




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




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






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









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



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的值打印出来了






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





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

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



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





三. 总结 本节课从简单的插入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  
                                    
                                    (这一步是有用的,亲测可以避免一些未知的麻烦)
第二步:输入 nox_adb connect 127.0.0.1:62001  (试了,不能修改)
                                   
                                   
第三步:(因为我的电脑上有两个SDK,一个给eclipse用的,一个给AndroidStudio用的,我先切换到AS用的SDK路径下),输入:adb connect 127.0.0.1:62001
                                 
                 出现这个提示就可以连接成功了,测试:adb devices
                                
(待会再加技巧)

免费评分

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

本版积分规则

返回列表

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

GMT+8, 2024-11-21 14:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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