android smali代码注入 实战一

有同学在通服里面干活,最近一直忙着4g基站搭建的干活,测试设备(android)测量移动网络数据,没有自动保存记录的功能,只能手动记录各种测试参数,不知道测试软件供应商是怎样想的,竟然不提供的这样的功能! 要我帮忙把测试数据自动导入excel表格中,我硬着头皮去尝试下。网上有smali的语法和注入的介绍,但参考价值不大,分享下自己的smali注入的过程和心得(这里smali语法就不讲了)。

案例

1.需求

需要提取数据界面如下:

提取数据字段信息: 地点address 小区识别码 cellId,区位码aresId 信号强度rx

2.确定应用数据中是否有需要的数据表,导出sqlite数据。

1) 手机没有root权限,可以从smali 注入应用内部复制dada/data/xxxxx/的目录文件的功能代码。

2)  手机有root权限,adb pull /data/data/inet.GDTEL.com/ e:\不成功(没有权限),而adb shell中没有pull,cp指令,当然安装下 busybox  ,先cp到sdcard中去,在pull到      电脑上去,或者通过手机助手pull电脑中去。

有相应的表对应需求数据实体,不必从界面提取,那可以从数据库拿数据,转化为excel文档;没有,则从界面上一个个提取数据,在转excel文档。

3.打开需要提取的界面,确定界面所在的activity,方法:查看手机当前活动activity,adb指令

adb shell dumpsys activity activities | sed -En -e ‘/Running activities/,/Run #0/p‘

查询结果如下:

从查询结果可以看出 这个界面所在项目进程:inet.GDTEL.com,所在activity:com.wellcell.inet.Cust.CustTestActivity

4.apktool 反编译apk,确定所需数据的数据来源

1)进入com.wellcell.inet.Cust.CustTestActivity,搜索onCreate ,setContentView,确定layout.xml

比如:

  .line 100
   const v0, 0x7f03000f  //layoutId

  invoke-virtual {p0, v0}, Lcom/wellcell/inet/Cust/CustTestActivity;->setContentView(I)V

根据layoutId,在R(不存在的话,把反编译的文件导入eclipse中,不管有没有错,运行这个工程之后就生成R类,根据这个R类,可能有问题,我测试了,没有问题)类中搜索          layouId对应的layout.xml。

2)在eclipse中查看layout.xml界面,确定所需数据所在的控件的id name,再在R类中查询控件id的具体数值。

3)在所在activity或者fragment中根据控件id确定控件的属性名称比如

4)根据控件名称确定数据来源,搜索m_txLacGsm,setText

  可知cellId,lacId来自TelStrengthInfo实体,其他数据类推。

5.注入代码

1)注入代码实现:

方法1:直接根据smali语法写注入的代码

方法2:先按照注入的项目包名新建工程,根据注入的类名命名类,编写注入功能的模块代码,并测试,然后反编译apk,从smali文件的拷贝代码到注入点,再apktool打包即使对smali语法不行,也可以胜任.

2)常见错误:

1.类的包名不对

比如:包命名混乱的时候就容易犯错

  

2.打包时,属性忘记申明定义

3. .line 行数(方法调用在java文件所在行数) 有重复

4.引用三方jar包或者添加新类,忘记拷贝到反编译项目中去。

6.smali调试

smali调试是个蛋疼的事,即使注入的代码出问题了也不出崩溃。

调试方法:

1)通过eclipse 调试smali。过程好像比较麻烦,尝试了下,会出现各种问题,jdk版本问题,远程jvm拒绝链接等,可能跟开发环境有关系。

2)通过强大的adb 功能,解决运行时错误,常用的三种方法,VFY的信息会给出Smali代码出错的文件、函数以及错误原因,dalvikvm的信息可以给出调用栈,以及上下文执行过  程。

adb logcat > e:\log.txt | grep inet.GOTEL.com
adb logcat > e:\log.txt | grep dalvikvm
adb logcat > e:\log.txt | grep VFY

比如使用 adb logcat > e:\log.txt | grep inet.GOTEL.com

  

3)在注入点通常加入log,追踪代码路径,和方法参数,执行结果等。

7.注入建议

1)尽量在注入点,以函数调用一行代码注入,且把注入的函数实现放在走后面,避免对其他原有代码 .line 有影响。

2)把注入代码封装的成类,避免注入的时候,要手动修改很多的.line。

参考网址:

MIUI V4移植经验分享(三)—— Smali代码注入

时间: 2024-10-25 23:22:29

android smali代码注入 实战一的相关文章

Android下的挂钩(hook)和代码注入(inject)

Android是基于linux内核的操作系统,根据语言环境可以简单的划分为java层.native C层.linux内核层.java层通过jni与native层交互,使用linux提供的底层函数功能. 因此,类似linux系统,我们可以在Android下实现对另一个进程的挂钩和代码注入.在这简单介绍下挂钩和代码注入的方法和两个库,以及针对<刀塔传奇>实现的代码注入. 利用libinject实现so注入和API Hook 一. so注入 Linux上有一个强大的系统调用ptrace,它提供了父进

【转】Delphi+Halcon实战一:两行代码识别QR二维码

Delphi+Halcon实战一:两行代码识别QR二维码 感谢网友:绝代双椒( QQ:51536348)的支持 本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.com网站的升级,halcon没时间操作. 不过,随着国内产业升级,机器人行业的发展,Delphi+Halcon的未来,是无可限量的. 其他网友,有halcon这方面作品的,有需要,也可以交给zw转发. 另外,zw正在争取培训机构合作,开办Delphi+Halcon方面的培训的项目,有兴趣的机构可以联系QQ:3578117

Android调试系列—使用android studio调试smali代码

1.工具介绍 使用工具 android killer:用于反编译apk包,得到smali代码 android studio:调试smali代码工具,或者使用idea,android studio就是在idea的基础上修改的 smalidea-0.03.zip:  as插件,需要安装到android studio中 , 下载地址 模拟器或者或者真机:运行要调试的程序 样本:使用网络上的某apk程序,  下载地址 2.前期准备 2.1  手机或者模拟器安装应用 adb instll GGNdkTes

Android 反编译 代码注入之HelloWorld

为了向经典的"Hello, World"致敬,我们也从一个简单的程序开始HelloWorld.apk.当你把这个APK安装到手机上运行后,在屏幕上就显示一行文字"Hello, World!".现在我们想要通过注入的方式把"Hello World~!"修改为中文的"你好世界". 1.反编译 Dos命令提示行 输入 apktool.bat d HelloWorld.apk 这条命令运行完后,在当前目录下会生成一个名为HelloAc

Android下通过root实现对system_server中binder的ioctl调用拦截

Android下通过root实现对system_server中binder的ioctl调用拦截 分类: Android2013-06-19 18:09 779人阅读 评论(0) 收藏 举报 作 者: Passion时 间: 2012-10-18,13:53:53链 接: http://bbs.pediy.com/showthread.php?t=157419 Android下通过root实现对system_server中binder的ioctl调用拦截作者:passion2012-10-18关键

运用smali自动注入技术分析apk行为

现在android开发者社区里,除了app开发外,还有很多周边的工具类产品,比如安全.性能等,app产品已经出现了 巨无霸,但是工具类的产品,目前还没有出现规模比较大的公司,大部分还处于创业阶段,这可能是创业者的下一个机会. 工具类的产品相对app开发有比较高的技术门槛,从事这方面开发的技术人员需要掌握的基本功如下: 1.熟悉android app的编译过程,了解jvm的bytecode与dalvik bytecode的区别: 2.熟悉android framework,读过部分代码,比如系统启

HTML5 App的代码注入攻击

原文链接 摘要 基于HTML5的手机app(译者注:以下简称HTML5 app)越来越流行了, 在大多数情况下它比native应用更容易适配不同的移动操作系统.它开发起来很方便,可以使用标准的web技术,包括HTML5.JavaScript 和  CSS,也可以借助一些现有的开发框架(比如PhoneGap)和手机操作系统进行交互. 众所周知,JavaScript是非常容易遭受代码注入攻击的,因此我们计划对HTML5 app进行一次系统的研究以评估基于web技术开发的手机app安全性是否可靠.成果

Android下so注入和hook

总结一下这两天学习的Android注入so文件,通过遍历got表hook函数调用 1.注入so文件 2.so文件中遍历got表hook函数 一.注入so文件 分为以下几个步骤 1.每个进程都在/proc目录下,以进程id为文件夹名,所以可以通过/proc/id/cmdline文件中中读取进程名称,和我们需要注入的进程名称比较,获得进程id 2.以root身份运行注入程序,通过ptrace函数,传入PTRACE_ATIACH附加到目标进程,PTRACE_SETREGS设置进程寄存器,PTRACE_

Eclipse for android 实现代码自动提示智能提示功能

Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclipse 代码提示失效.eclipse 不能自动提示.eclipse 没有代码提示的问题. 1.设置 java 文件的代码提示功能 打开 Eclipse 依次选择Window > Preferences > Java > Editor - Content Assist > Auto acti