android ADB命令启动手机微信聊天微信主界面怎么设置皮肤弄

最近关于微信中,朋友之间发送原图就可能暴露你的位置信息,其实这个问题不在于微信,微信是为了更好的体验效果,才有发送原图功能,而对于拍照,发送普通图片微信后台都会过滤图片的exif信息,这样就不会携带位置信息了。我们本身用手机自带的相机拍摄照片默认都是会在图片中添加位置信息的。当然我们也可以手动的关闭这个功能。这一点个人觉得不能怪微信。因为更好的逆向学习,和用户体验,本文将开发一套更加好用的插件,就是选择图片直接利用微信自带的地图功能,定位图片位置。这个过程会很麻烦。但是本文会逐一详细介绍的。在介绍这个插件之前,必须了解我之前介绍的一款插件功能:如何转发小视频到朋友圈插件,本文的插件是基于这个插件的基础之上操作的。所以必须看懂这个插件原理才能继续阅读本文。
二、添加入口菜单
下面来开始操作了,首先不多说了,先给大家看看插件的效果,这样会有一个感官认识:
我们在聊天中,点击一张图片,然后会弹出一个菜单,我们需要在这个菜单中添加一项就是定位入口,那么这里的第一个突破口,就是如何找到添加这个入口呢?这个简单。我们可以通过默认的菜单文案找到关键代码,这里通过反编译微信之后,查看他的字符串信息:
然后在用Jadx打开微信全局搜索即可:
这里有多个,但是为什么选择第二个呢?因为我们点进去会发现正是我们想要的菜单,这里搜索结果不算多,可以一个个尝试查看:
这里正好对应上了,那个弹出菜单的三个选项。所以入口就在这里了,下面看看他是如何添加菜单的:
这里定义了一个内部类,然后遍历列表开始构造菜单信息,点进去方法看看如何构造:
看到了MenuItem类就可以完全确定了,这里是构造菜单了,看到这里传入的两个参数一个是菜单索引值,一个是菜单名称,构造完之后在存入到全局变量列表ktX中,后面我们需要直接操作这个ktX列表数据:
既然找到了这里添加菜单的位置,下面我们就开始利用Xposed进行hook,添加我们自定义的菜单了,但是在操作之前,我们需要解决两个问题:
第一个问题:看到上面我们需要hook的类ImageGalleryUI的内部类,这个需要我们去反编译之后的smali文件夹中找到这个内部类名称。
第二个问题:是hook的那个b方法参数是对象类型,这里需要先加载这个类类型才能进行hook操作
我们去反编译之后的smali文件夹看看这个内部类叫啥:
这里看到有十几个内部类,这里我们需要通过上面的那个内部类的方法签名判断,所以依次打开每个内部类文件进行确认,最终确认到了是ImageGalleryUI$12.smali这个类:
找到这个内部类之后,下面就是正常的hook代码了:
不过,这里需要注意,我们需要把菜单添加到最末尾,所以还需要拿到已经添加的菜单个数,也就是上面提到的那个全局菜单列表,这里用反射获取即可。而且需要保存这个列表大小信息,后面再处理菜单点击事件还要用到。
操作完成之后,我们就开始安装这个Xposed模块,重启生效,看看是否添加成功了:
看到这里是添加成功了,所以这一步就完成了,下面开始拦截这个菜单的点击事件了。继续看代码:
看到这里有很多赋值的地方,可以猜想eCN是管理菜单的核心类,点进去查看:
这里可以确定了,就是这个类管理菜单的功能,他还实现了菜单的点击实现接口,找点击菜单的回调方法:
这里看到会通过heu中的菜单列表,找到MenuItem菜单对象,然后调用het的d方法处理菜单点击事件,看看het在哪里赋值的:
看看变量kVb的定义:
果然没错,这个又是一个内部类,回调d方法,获取菜单对象和菜单索引值,然后处理菜单的点击事件。那么这里我们依然需要找到这个内部类,然后hook即可。去smali文件夹依次通过方法的签名信息找到对应的内部类文件:
这里hook就简单了:
安装这个模块,重启生效,看看点击之后的日志信息:
OK,到这里,我们就处理了菜单的点击事件了,同时把图片获取位置信息的入口操作弄完了,下面就要开始本文的重点了,如果获取这张图片位置信息了。
三、获取图片存储地址
我们知道Android中的图片会把经纬度信息保存在图片的exif中,而读取这个信息代码非常简单:
这里的重点是,如何获取我们想要操作的图片位置呢?这个就需要借助之前提到的那个转发视频插件知识了,不了解的同学一定要去查看。这里不多解释了,直接把那个插件安装之后,通过日志查看突破口,我们在聊天界面选中一张图片,然后查看日志信息:
这是当初微信视频转发的菜单拦截功能代码,这里我们通过打印日志查看,这一次我们选中图片信息:
这时候,查看日志:
看到,这里的图片地址,信息是一个特殊字符串开头的,我们可以全局搜索这个开头前缀信息:
这里看到有很多都是这个f类:
这里看到这个方法,我们不妨先来直接hook他,看看有么有日志打印信息,把最后参数和返回值都打印一下,这样来确定这个方法是否是我们想要的。这里有点靠着尝试思维,因为本来逆向就是靠猜的,而且拦截这么一个方法也不费事:
运行模块,重启生效,看看日志信息:
尽然猜对了,看到图片地址了,返回地址就是我们想要的图片地址。那么这里就简单了,我们直接hook这个方法然后保存这个方法的返回值即可,我们也发现了,这个方法会执行多次,不多我们只要在最后一次正确的保存图片地址后面处理即可。
四、获取图片的位置信息
到这里,图片地址也拿到了,那些面就简单了,开始获取经纬度信息吧,但是拿到经纬度信息之后,如何获取具体位置信息呢?这里有几种方案:
第一种方案:借助高德或者百度地图提供的SDK,可以输入经纬度就能拿到位置信息了,而且可以利用地图View进行展示,不过这种方案不可用,因为我们知道这种地图SDK使用的话都需要在xml中配置key信息。我们现在是hook代码,如果再去反编译微信,添加key,然后在回编译就太费劲了。没这个必要了。
第二种方案:借助百度提供的网页url获取位置信息,这个是百度开发的一个url请求,只要根据经纬度信息,就能返回json或者xml格式的位置信息,然后我们在利用微信内部的地图功能进行展示具体位置。
这里第二种方案是最靠谱的,不过第二种方案需要做两件事:
第一件:通过开发的url获取位置信息
获取位置信息地址:http://api.map.baidu.com/geocoder/v2/
参数location:经纬度信息,用逗号连接
参数output:返回的数据格式,可以是json,或者xml
参数pois:这个可以忽略,直接用1即可
参数ak:这个是请求位置信息需要的key值,这个需要去百度平台申请。
好了,我们直接利用图片的经纬度信息去请求这个位置信息,返回json数据,我们解析出位置主要地址,和后面的辅助地址。然后调用微信内部地图信息即可。
第二件:利用微信内部地图功能进行展示位置
我们知道微信内部用的是自家的地图功能,我们可以利用命令找到入口,首先打开内部一个地图信息,这个可以在聊天记录中发送位置信息,然后打开即可。这时候利用:adb shell dumpsys activity top 命令获取地图界面:
然后用Jadx工具全局搜索这个类即可。不过可惜的是,这里搜索没结果的:
这时候要想到了,微信是拆包了,有多个dex文件,而之前已经说过了,微信的第二个dex是打包成jar文件,放在assets目录中的:
解压jar文件拿到classes.dex就是他的第二个dex文件,我们用Jadx打开这个dex即可:
这就搜索到了,我们点进去查看即可:
那么这里就好办了,我们可以启动这个activity,通过intent传递需要的参数信息。但是这里有两个问题需要解决:
第一个问题:启动Activity需要微信中的一个activity实例,这个我们可以hook上面提到的ImageGalleryUI这个类,拿到对象实例即可。这个hook很简单,直接hook他的onResume方法,然后获取对象实例即可:
第二个问题:如何获取启动地图页面的intent中的参数信息,这个可以通过代码分析,但是这里可能携带的参数信息很多,为了避免遗漏,我们用另外一种方法就是,hook这个地图页面启动的onResume方法,拿到对象实例,然后通过getIntent方法获取当前页面的intent数据,在拿到对应的Bundle结果,可以遍历他所有的参数key和值信息,我们hook之后,随便打开微信内部一个地图信息,看看hook的参数日志都有哪些,这里我打开的是聊天记录中发送的位置信息:
这里需要注意,因为我们已经知道这个类是在第二个dex中,所以hook操作就需要拿到正确的类加载器才能加载这个类进行hook操作。而hook多dex的应用,之前已经说过了,需要先hook应用的Application的attach方法,然后拿到正确的ClassLoader,才能继续下面的hook操作。这个方法一定要记住。非常关键。
然后安装模块,重启生效,看日志信息:
这里看到的确有很多信息,不过这里分析之后,发现只有这五个参数信息是最关键的,其他参数我么可以照着抄过来就好了,关键的五个参数信息是:
kwebmap_slat:经度
kwebmap_lng:纬度
kPoiName:地图页面中展示的主地址
Kwebmap_locaion:地图页面中展示的从地址
kwebmap_scale:地图默认缩放的大小
有了这上面的信息,下面就来启动页面代码吧:
这里需要注意,启动的地图页面Activity的类变量,一定要用多dex的hook方法加载到,这个时机也要最早的。然后保存下面即可。
然后就用之前已经hook到的ImageGalleryUI这个activity实例启动即可。
五、插件功能流程总结
到这里我们已经完成了大部分的工作了,下面来整理整个hook流程吧:
第一步:通过聊天中查看图片信息hook方法拿到图片地址进行保存。
第二步:获取图片的exif信息,获取经纬度信息。
第三步:借助百度开发api通过经纬度信息获取具体位置信息。
第四步:有了经纬度和位置信息,启动微信内部的地图页面进行展示。
而在这个过程之前,我们还需要添加一个入口,那就是在聊天记录中点击图片查看,然后长按弹出菜单中加一个展示位置信息入口。
有了这些步骤,还不算完美,因为我们在第三步是需要请求百度开发api的,这个是一个等待过程,所以这个过程中,我们还需要加一个loading样式,不然插件体验很不好的。而我做事只求完美,不求到位。这里的loading样式怎么办呢?还是拿来主义。利用微信内部资源实现即可。这里也是一个技巧了,看我怎么操作的:
首先去微信反编译之后的资源目录下查看,找到一个合适的作为loading图片资源,这里我看到这个资源:
这个资源好看,然后我们自定义一个旋转动画,就类似于loading效果了,关于旋转动画不多说了,网上一大堆资料:
这里读取资源,可以直接用上面资源的id值即可,这个值可以通过values/public.xml中获取:
然后自定义这个loading视图:
最后在借助WindowManager来进行展示loading视图,这里可以直接代码编写布局即可:
好了,下面来看一下展示效果:
好了,到这里,我们就全部介绍完了,知识点的确很多,文章也很长。因为我们做的功能太多了。哈哈,下面来总结本次操作的技术知识点:
第一、在获取hook点的时候,有时候利用Xposed进行hook尝试也是一种方案,比如本文的获取图片地址,以及获取地图启动的参数信息,都是很好的例子。不要一根筋完全去分析代码实现。hook打印参数和返回值信息也是很好的选择。
第二、多dex应用进行hook的时候,一定要记得先hook应用的Application类的attach方法,获取到正确的类加载,在进行后续的hook操作。
第三、通过经纬度信息获取具体位置信息,可以利用百度开发api获取,这个记住,以后或许还有很多地方要用到。
第四、如果在hook中想添加UI的功能,可以利用现有应用内部资源,利用代码编写布局动画即可。
好了到这里,也介绍完了插件功能了。不过可惜的是,这个不是所有的图片都能获取到位置信息的,开始的时候也说了,微信有一个发送原图功能,也就是只有原图可以获取到经纬度信息,而通过微信内部拍照,或者发送压缩图都会被微信服务器过滤exif信息。我们本地已经没办法获取到了。那么此插件就丧失了功能。最后再来看一下插件效果图:
本文用到的是微信6.3.9版本,最新版本可能有区别,不过逆向过程大同小异。有很多同学问了很多次Jadx打开微信会卡死怎么办?因为微信内部资源太多。所以直接打开apk会卡死的。主要是Jadx解析微信资源文件非常耗内存。所以可以解压apk之后直接用Jadx打开多个dex即可。希望以后不要再问我了。
阅读(...) 评论()adb shell am 的功能
adb shell am
使用此命令可以从cmd控制台启动 activity, services;发送 broadcast等等:
C:\Users\Administrator&adb shell am
usage: am [subcommand] [options]
start an Activity: am start [-D] [-W] &INTENT&
-D: enable debugging
-W: wait for launch to complete
start a Service: am startservice &INTENT&
send a broadcast Intent: am broadcast &INTENT&
start an Instrumentation: am instrument [flags] &COMPONENT&
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e &NAME& &VALUE&: set argument &NAME& to &VALUE&
-p &FILE&: write profiling data to &FILE&
-w: wait for instrumentation to finish before returning
start profiling: am profile &PROCESS& start &FILE&
stop profiling: am profile &PROCESS& stop
start monitoring: am monitor [--gdb &port&]
--gdb: start gdbserv on the given port at crash/ANR
&INTENT& specifications include these flags:
[-a &ACTION&] [-d &DATA_URI&] [-t &MIME_TYPE&]
[-c &CATEGORY& [-c &CATEGORY&] ...]
[-e|--es &EXTRA_KEY& &EXTRA_STRING_VALUE& ...]
[--esn &EXTRA_KEY& ...]
[--ez &EXTRA_KEY& &EXTRA_BOOLEAN_VALUE& ...]
[-e|--ei &EXTRA_KEY& &EXTRA_INT_VALUE& ...]
[-n &COMPONENT&] [-f &FLAGS&]
[--grant-read-uri-permission] [--grant-write-uri-permission]
[--debug-log-resolution]
[--activity-brought-to-front] [--activity-clear-top]
[--activity-clear-when-task-reset] [--activity-exclude-from-recents]
[--activity-launched-from-history] [--activity-multiple-task]
[--activity-no-animation] [--activity-no-history]
[--activity-no-user-action] [--activity-previous-is-top]
[--activity-reorder-to-front] [--activity-reset-task-if-needed]
[--activity-single-top]
[--receiver-registered-only] [--receiver-replace-pending]
使用实例:
如启动一个 Activity:
adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)。
C:\Users\Administrator&adb shell am start -n com.android.camera/.CameraStarting: Intent { cmp=com.android.camera/.Camera }
实例2:(带extra 的 intent)
C:\Users\Administrator&adb shell am start -n com.android.camera/.Camera -e abc helloStarting: Intent { cmp=com.android.camera/.Camera (has extras) }
其中 extra 的 key 为 abc ,value 为字串 "hello"
还可以发送命令模拟手机低电环境:
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei "level" 3 --ei "scale" 100
android adb shell am常用命令
转自 http://blog.csdn.net/dull_boy2/article/details/
Android测试中,经常需要kill掉应用程序。
网上有用方法...
adb、adb shell am、adb shell pm命令的详细使用说明
1.在命令行终端执行下面的命令:
adb &adb.txt 2&&1
Android Debug Bridge version 1.0.31
android 性能分析之常用adb命令adb shell am start -W
查看页面启动时间:以启动camera为例adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivityubunt...
Android adb shell am 命令介绍
详细介绍了Android Shell 中的am 命令
adb启动程序命令:adb shell am start
在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am.
启动的方法为
# am start -n {包(packa...
am broadcast -a 过滤action -e/--es.........
specifications include these flags and arguments:
众所周知,am start 可以用来启动activity的,这里就不再详述了,但如果要带参数呢,那么我们也可以通过-e key value等方式来设置,基本也不会有什么问题。而且今天发生问题的是通过u...
使用 am start -n example.com.aidl/example.com.aidl.ItemDetailActiv
ity命令启动activity时,偶尔(某些activity)会碰到报...
http://blog.csdn.net/zuolongsnail/article/details/8167501
通过命令行执行adb shell am broadcast发送广播通知。
没有更多推荐了,当前位置: &
> 手机数据恢复大师APP汉化安卓版下载
手机数据恢复大师APP汉化安卓版(免ROOT恢复已删除照片) v1.0 最新版
现在是一个属于智能手机的社会,也许因为一些特殊的原因,手机里的数据会丢失,想要恢复手机里的数据是个难题,如果你拥有了手机数据恢复大师APP汉化安卓版,这个难题解决的就是非常的简单,手机数据恢复大师APP汉化安卓版可以很好的帮助用户恢复手机数据,帮助你找回你需要的数据,支持免ROOT恢复手机已删除照片,需要的朋友可以来下载使用哦!手机数据恢复大师APP汉化安卓版介绍:全面兼容市面上几乎所有的安卓机型版本具备极速扫描模式,安全检测并恢复手机数据一键恢复手机联系人、短信、图片等数据功能简单明了,可高效恢复手机误删除数据手机数据恢复大师APP汉化安卓版说明:基础功能:无root恢复手机误删照片高级功能:已root定位恢复多种手机误删文件
微信聊天记录恢复删除软件下载专题
微信聊天记录删除了怎么恢复?很多手机微信用户都很需要如何恢复安卓/苹果手机微信记录方法,也会寻找微信记录破解版软件和恢复教程大全,这些小编都整理在了微信聊天记...
免费数据恢复软件大全下载
数据误删了不要紧,因为我们有免费数据恢复软件哦!把免费数据恢复软件大全下载专题存起来吧,相信您肯定会用的上的!很多朋友都不知道数据恢复软件哪个好用,其实有很...
手机数据恢复大师APP汉化安卓版下载
高速下载器通道
其他下载地址
下载不了?
4.05MB | 简体中文 | 4分
我们的手机中有着很多的重要的文件,如果自己的文件丢失了那么我们...
19.02MB | 简体中文 | 3分
我们的手机中都有很多的数据的,如果怕自己的数据丢失,想要获得最...
6.69MB | 简体中文 | 4分
是不是很多时候都会有手机上聊天记录或者其他数据被误删的窘境呢,...
15.41MB | 简体中文 | 4分
现在后级超级方便功能多样,我们会把很多数据都存到手机里,但是有...
11.2MB | 简体中文 | 2分
现在微信是我们日常生活中必不可少的手机工具,但是经常会有很多的...
4MB | 简体中文 | 0分
很多人都没有手机备份的习惯,特别是爸爸妈妈这个岁数的,所以经常...
5714 K | 简体中文 | 0分
17203 K | 简体中文 | 0分
639 K | 简体中文 | 0分
3791 K | 简体中文 | 0分
下载排行榜
H5游戏推荐【Android】系统微信分身解析
我的图书馆
【Android】系统微信分身解析
来源:盘石软件PANSAFE(ID:Pansafe)一、基本情况鉴定人员在鉴定过程中遇到一部华为手机,该手机中存在应用“双开助手”。打开该应用,发现该应用中存在微信应用的图标。由于微信官方的限制,正常运行的情况下,一部手机同时只能以一个账号登录微信,如果有多个微信账号就要准备多部手机,或者在不同时间内在同一部手机上分别以不同账号登录微信。但是对于一些特殊人群,比如微商,可能会需要在同一部手机上同时登录多个微信。一些软件开发商瞄准这个需求,针对官方的微信程序进行修改,使得可以同时运行多个微信,这种被称为“微信分身”或者“微信多开”。我们遇到的“双开助手”就是一个可以实现类似功能的软件。在互联网中搜索“双开助手”,发现该应用存在官方网站。该应用的官网网址为“http://multiopen.cn/”。官网中对该应用的解释为:“双开助手是一款安卓系统通用的免费双开工具;双开微信、QQ、陌陌、等几乎所有应用;支持工作/生活互不干扰;包体很小,适合大部分智能手机”。百度百科中对“双开助手”应用的解释:“双开助手”是一款通用的双开工具,能够支持几乎所有的手机上常用软件的双开,包括微信、QQ、陌陌、Facebook、Whatsapp、手机游戏。在“双开助手”中点击微信图标,发现该程序启动了微信应用程序,且账号为有锁状态。查看手机中的官方“微信”应用,发现“微信”应用登陆的账号不同于上述“双开助手”中的账号,且“微信”应用中的账号为登入状态。由上述资料可知,该检材手机中“双开助手”应用对手机中的微信进行了双开。且双开微信的登陆账号与手机中官方微信的登陆账号不一致。“微信分身”或者“微信双开”给手机取证带来了新的挑战,一方面由于“微信分身”程序或者类似“双开助手”的存在,使得调查人员可能会错过对这些微信“变种”的取证,导致证据获取不够完备;另外一方面,这些程序与原始微信应用在数据存储等方面有所不同,因此需要考虑对原有微信数据取证方式进行改进。本文就试图对“双开助手”实现的“微信分身”提出一种手工取证的方法。二、取证思路针对此种情况,可利用adb数据备份进行尝试。adb数据备份步骤如下:1.查看“双开助手”应用的包名。关闭手机上所有的应用程序,打开“双开助手”应用,连接电脑,使用命令adb shell dumpsys activity activities 查看“双开助手”应用程序包名。该应用程序的包名为“com.excelliance.dualaid”。2.进行应用程序数据备份。使用命令 “adb backup –f D:\11\fszs.ab com.excelliance.dualaid” 备份 “双开助手”应用程序的数据。备份完成后得到fszs.ab文件。该文件大小为“57,866,697“字节,说明adb命令已经备份到该应用的数据。3.将该ab文件解压成文件夹形式。使用盘石取证大黄蜂的“文件解析”界面添加上述得到的备份文件:添加完成后在“数据类型选项”界面任意勾选一个选项,在“提取选项”中勾选”保存采集文件“,可以将刚得到的ab文件转换为文件目录:点击确定后,开始解析备份文件。解析完成后界面如下图所示:查看盘石取证大黄蜂的数据库中提取到的文件:其中在“gameplugins”目录下存在com.tencent.mm目录,com.tencent.mm目录的结构如下图所示:在com.tencent.mm目录中发现存在名为“EnMicroMsg.db”的文件。微信应用程序的包名为”“com.tencent.mm”,且微信应用程序的数据目录中存在“EnMicroMsg.db”文件。因此,推测该检材手机中“双开助手”应用程序双开的微信数据目录存放在“gameplugins”目录中。4.提取微信内容。使用盘石取证大黄蜂的”文件解析“功能,添加上述的com.tencent.mm目录:在”数据类型选项”界面勾选微信选项:点击确定开始解析微信,解析完成后成功解析出微信聊天记录:通过上述步骤,成功解析出“双开助手”应用中的微信聊天记录。上述结果表明,该应用程序可通过adb备份命令备份出数据,且该应用在“gameplugins”目录下存储双开应用的数据目录。三、分析说明目前市面上针对手机和移动终端的取证工具有很多种,大部分的手机取证工具对常见应用的支持会比较好,但是小众应用或者类似“微信分身”这样的非官方应用的支持就会比较差或者根本不支持。这就需要我们具备一定的手工分析能力。在本例中,在尽量不改变检材原始性的原则下,针对此种情况,使用adb备份命令备份应用程序数据目前是获取Android系统中应用程序数据比较常规的一种思路。使用adb命令可以在免root手机的情况下完整地获取到应用程序的数据目录。另一种鉴定思路是利用检材手机系统中自带的备份功能备份应用程序的数据。不过目前市场上的手机种类繁多,情况复杂。部分机型没有自备份功能,部分机型的自备份功能无法备份到外置SD卡中,部分机型的自备份功能备份出的数据有特殊格式,需要对数据格式进行格式分析。当相关文件提取出来以后,我们可以手工使用二进制分析工具(如Winhex)或者特定的数据格式分析工具(如SQLiteManager for Firefox)来分析,也可以使用盘石手机取证大黄蜂的“文件解析”功能进行辅助分析。
推一荐:&&|&&
喜欢该文的人也喜欢you have been blocked

我要回帖

更多关于 微信主界面 的文章

 

随机推荐