【车联网安全系列】安卓漏挖之在smali代码中插入log打印变量值

admin 2022年12月6日23:50:00评论31 views字数 3071阅读10分14秒阅读模式
【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


 摘要

安卓漏挖第三步,学会smali代码中插入log打印变量值。本文跟着师傅文章(https://www.52pojie.cn/thread-665362-1-1.html)走。


 简单尝试 

01

 编写JAVA程序

打开AndroidStudio,新建一个项目,在MainActivity里面写一段switch case语句。


package com.example.myapplication2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;import android.util.Log;
public class MainActivity extends AppCompatActivity { String name;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); name = "zjj";
switch (name) { case "zjj": Log.i("hello", "zjj"); break; case "zjj1": Log.i("hello", "zjj1"); break;
case "zjj2": Log.i("hello", "zjj2"); break;
default: Log.i("hello", "no match name"); break; } }}


还是那个建议,不需要自己写import,像下图的情况,Log出现下划线后,按alt+enter来自动生成。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


打开雷电模拟器,在AS中连接到模拟器


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


编译后,打开雷电模拟器安装并运行程序,log有点多,可以搜索一下,就把自己添加的Log打印出来了。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


02

反编译后分析smali代码

把程序用AndroidKiller反编译,并对switch case语句的smali代码进行分析。

【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


找到高亮,可以看到执行的是显示log的函数。并且打印的值是v4,v2,对应hello,zjj2,所以pswicth0是我们编写的源码的第三个分支。(PS:鼠标悬停在字符串上会自动显示出汉字)


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


我把原来要打印的“zjj",改成了"zjj我是添加的smali代码"


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


Ctrl+S保存好后,卸载-->编译-->安装打开Android Monitor看Log


03

解决AK报错

更改完smali代码后,发现AK编译报错,NO RESOURCE IDENTIFIER FOUND FOR ATTRIBUTE 。于是找到了这篇文章(https://www.freesion.com/article/3978416384/),首先去ApkTool官网(https://ibotpeaches.github.io/Apktool/),下载最新版本的ApkTool,这里我下载的是最新的2.6.1,添加后设为默认。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


打开命令行cmd进入刚才 apktool_2.6.1.jar 所在的目录,接着执行以下命令:


java -jar apktool_2.6.1.jar empty-framework-dir


执行完上面的命令后,再次回编译就ok了.编译后在雷电模拟器上安装,在AS中查看打印的log,这里把原本的输出改变了,大家可以自己随意的尝试改变smali代码。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”



2 打印变量的值

通常在实战中插入一句话Log是为了打印出程序中某个变量的值。

01

 创建一个demo

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


MainActivity.java如下:


package com.example.a03;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;import android.util.Log;

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; }
}


创建个新文件,Test.java,内容如下:


package com.example.a03;

public class Test { public static int value = 888; public static int value2 = 777; public static int value3 = 666; public static String str = "zjj"; public static String str2 = "码完代码去看东方明珠";
}


编译完运行后,应该会把888打印出来。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


02

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

思路:原函数中有个Log是打印fun1的值的,我只要找到打印fun1的这条log反编译成的smali代码,把里面的fun1改成fun2,复制一份。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


把fun2的值打印了出来,那么fun3的值怎么打印呢?可以看到fun2和fun3函数都是int类型,然后通过String.valueOf这个函数转换成的String类型。但是fun3这个函数本身就是String类型,这里如果还通过String.valueOf函数转换的话程序会报错的。


分析下smali代码,重新插一条Log去打印fun3函数的返回值


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


03

 完成任务2一添加Log打印出fun3里面String类型str的值

首先从smali代码中找到fun3方法所在的位置,然后在方法里面找到str的值,一般来说程序都会把这个值储存到寄存器中,可以找到这个寄存器,然后把寄存器作为变量给打印出来。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”








04

完成任务3一添加Log打印出fun3里面int类型value3的值

思路:找到int类型value3的值,用到函数String.valueOf,通过Log打印出来。


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


参考链接

https://www.52pojie.cn/thread-665362-1-1.html 

https://www.freesion.com/article/3978416384/

https://ibotpeaches.github.io/Apktool/



【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”


【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”



原文始发于微信公众号(华云安):【车联网安全系列】安卓漏挖之“在smali代码中插入log打印变量值”

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月6日23:50:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【车联网安全系列】安卓漏挖之在smali代码中插入log打印变量值http://cn-sec.com/archives/1449022.html

发表评论

匿名网友 填写信息