一.文件信息

文件名称:久秒名片赞系统 
包名: android.support.v8 
大小: 1497829 bytes 
MD5: 8123AC1150B47EF53507EC2360164E3B 
SHA1: 958B1E341C72DBCF52863C570B77C71A862987B1 
程序壳:爱加密 
描述:爱加密有反调试功能,无法直接给关键函数下断点,所以只能单步跟踪到它检测反调试的地方修改比较值,从而跳过反调试。壳程序通过读取进程文件(/proc/uid/status)中的TracerPid属性来确认自己是否被调试,该属性如果不为0则说明程序是被调试状态。如果要获取该文件的值那么必然是有读写操作的,通过在读写函数地方下断点,就可以修改它的值从而骗过反调试。即只要在fopen和fgets处下断点单步跟踪就可以了(函数在libc.so)。


二.调试准备

  1. 安装IDA Pro 服务器: 
    adb push android_server /data/local/tmp 
    设置服务器运行权限: 
    cd data/local/tmp/ chmod 777 android_server 
    运行服务: 
    adb shell & cd /data/local/tmp & ./android_server 
    设置端口转发: 
    adb forward tcp:23946 tcp:23946
  2. 调试运行 
    adb shell am start -D -n android.support.v8/android.support.v7.q448870015
  3. IDA 附加进程调试 
    Debugger -> Attach 
    Ctrl+F 搜索 android.support.v8
  4. 函数下断点 
    Modules中搜索 libc.so 
    给fopen,fgets下断点 
    Modules 中搜索 libdvm.so 
    给dvmDexFileOpenPartia 下断点
  5. jdb调试 
    打开monitor 
    鼠标选中要调试的进程(android.support.v8) 
    jdb–connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

三.调试脱壳

环境准备好后按F9 开始运行程序,这时会断到我们下断点的地方。 
 
此时 R7寄存器中有值 /proc/self/cmdline.debug.atrace 
 
使用adb查看

继续F9 运行让程序再次断在fopen函数处。在运行的过程中可能出现如下错误提示,忽略它继续运行。

 
程序再次断在fopen函数处,这时 R7寄存器中的值 
 
即 /proc/11446/status ,从这里开始壳程序开始读取status文件检查自己是否被调试跟踪了。继续F9运行。程序会断在fgets函数处,这时我们在函数结束处下断点。查看函数返回值,如果是TracerPid属性则修改值为0。 
程序运行到函数末尾断点处,此时查看R0寄存器的值 
 
即 Name:roidd.support.v8 
通过查看status文件可以知道,这个值是文件内第一行的字符串 

从这里就可以知道程序还需要在运行5次才能读到 TracerPid属性 
F9运行5次,在次查看fgets函数返回值 
 
Tracerpid:11465 
这个值正是IDA 服务器进程的UID 
 
在Hex View中按F2修改这个值 
 
 
这里要注意,修改的颜色是橙黄色,但是还不能使用,必须在按F2应用才行。 
 
修改完之后,再次F9运行程序。 
 
在次断在fopen函数处,此时R0寄存器的值 
 
可以看到,壳程序再次读取 /proc/11446/status 文件。显然反调试不是只有一次的,那么继续修改它的返回值,直到不再读取这个文件。 
通过再次修改,壳程序不再读取 /proc/11446/status文件了。说明它的反调试就比较了两次,那么现在就可以去掉fgtes断点按F9让程序跑起来了。 
程序断在了这个函数处,这说明壳开始解密dex了同时证明前面已经成功欺骗了反调试,继续单步观察寄存器中的值。 
 
R0寄存器中保存着dex在内存中的地址,R1寄存器中保存着dex文件的大小。 
 
通过Hex View 查看内存 
 
内存中已经显示 0A 78 65 64 dex文件头模数了,右边字符串同样显示着dex.035。红框中 06 FD 00 和R1寄存器的值一样。已经得到了dex内存地址和大小,接着使用IDA脚本dump出这个dex文件。

static main(void){auto fp, begin, end, dexbyte;fp = fopen("F:\\dump.dex", "wb"); //打开或创建一个文件begin =  R0;                       //dex基址end = begin + R1;                  //dex基址 + dex文件大小for ( dexbyte = begin; dexbyte < end;dexbyte ++ ){fputc(Byte(dexbyte), fp);     //按字节将其dump到本地文件中
        }}

 
将dump出的文件使用工具打开: 
 
文件能正常打开,下一篇分析锁机密。


四.问题总结

调试环境中出现问题的解决: 
IDA附加程序时显示目标积极拒绝则 重新输入端口转发命令。 
IDA附加程序弹出错误则 重新运行IDA服务器命令 
IDA F9运行程序如果没有反应则 检查是否输入jdb调试命令。 
因为该程序是加壳的锁机软件,所有调试过程中难免会因为错误步骤让程序运行起来从而导致锁机,这时可以运行 adb uninstall android.support.v8 卸载锁机软件(注意:在手机被锁后切勿拔掉usb数据线)。

转载于:https://www.cnblogs.com/NigelX/p/6671485.html

爱加密加固病毒分析-脱壳篇相关推荐

  1. 梆梆加固的病毒分析-破解篇

    一.文件信息 文件名:tx.qq898507339.bzy9-1.apk MD5:77603118E1B061374DDB8A4D1EA70CB2 SHA1:A85B9387DD598E64548F6 ...

  2. 【原创】简单尝试脱“爱加密”官网加固的DEX壳--二代抽取壳(dexhunter工具应用)

    0x00 序 第一次尝试脱dex壳,样本是在"爱加密"官网上免费加固的,非商业版. 本文只是做些简单的笔记,给像我一样的逆向新手们提供点思路,高手们不要见笑. 0x01 加固包和原 ...

  3. Android最新敲诈者病毒分析及解锁

    一.情况简介 从去年开始PC端的敲诈者类病毒在不断的爆发,今年年初的时候手机上也开始出现了敲诈者之类的病毒,对这类病毒很无语也是趋势,因为很多时候病毒的产生是和金钱利益相关的.前天去吾爱破解论坛病毒样 ...

  4. Android最新敲诈者病毒分析及解锁(11月版)

    一.样本信息 文件名称:久秒名片赞,(无需积分s)(2)(1)(1).apk 文件大小:1497829字节 文件类型:application/jar 病毒类型:Android.CtLocker 样本包 ...

  5. 加固加壳脱壳分析(1)_加固加壳原理和几代壳

    什么是加固加壳 对App资源代码进行保护,使其不容易被反编译工具解开. 加固的核心在于保证软件正常运行的同时又能保证源码的安全性. 为什么要加固加壳 若应用不做任何安全防护,极易被病毒植入.广告替换. ...

  6. 爱加密和梆梆的加固的破解方法

    爱加密和梆梆加固的破解方法 By Bob Pan 梆梆与爱加密都使用了将原有的dex隐藏, 在运行时解压, 并且通过修改app的类加载器的方式实现加固. 参考: AndoridAPK反逆向解决方案:梆 ...

  7. 病毒木马查杀实战第015篇:U盘病毒之脱壳研究

    前言 由于我们的最终目标是编写出针对于这次的U盘病毒的专杀工具,而通过上次的分析我们知道,病毒有可能在不同的计算机中会以不同的名称进行显示,如果真是如此,那么就有必要在此分析出病毒的命名规律等特征,然 ...

  8. 吾爱破解 - LCG - LSG|安卓破解|病毒分析|www.52pojie.cn

    吾爱破解 - LCG - LSG|安卓破解|病毒分析|www.52pojie.cn https://www.52pojie.cn/

  9. 安卓逆向之基于Xposed-ZjDroid脱壳 逆向分析(脱壳)

    安卓逆向--某力播逆向分析(脱壳) 一.环境 这一步真的头疼,环境很重要,各种测试,一下是我测试的环境,由于没有真机,就拿虚拟机做测试 1.  Xposed       2. FDex2        ...

  10. Android逆向与病毒分析

    本文由同程旅游安全团队对内移动安全培训的PPT整理而来,面向对象为对移动安全感兴趣的研发同事,所以讲的有些宽泛.介绍了入门Android逆向需要掌握的一些知识点, 通过简单的几个案例讲解Android ...

最新文章

  1. 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )
  2. MATLAB中的wavedec、wrcoef函数简析
  3. 【职场】看一位前端工程师如何上班摸鱼
  4. 深度解密Go语言之sync.pool
  5. xen虚拟机克隆命令
  6. arthas用的好好的,写个lambda表达式就跪了?该咋解决?
  7. [洛谷P2257] YY的GCD (莫比乌斯反演)
  8. 爬虫学习2----Pyquery
  9. c++ mysql 导入sql_mysql导入sql文件命令和mysql远程登陆使用详解
  10. jupyter 代码到 pycharm 的迁移
  11. 【图像隐写】基于matlab FFT数字水印嵌入【含Matlab源码 1670期】
  12. 汽车驾驶 - 道路交通标线和标志
  13. 白杨SEO:百度移动搜索上百度笔记是什么、收录规则及排名怎么做?
  14. swing 鼠标事件
  15. 倾向值匹配法的概述和应用+倾向值分析:统计方法与应用
  16. 计算机开不了机怎么用u盘解决,电脑开不了机怎么重装系统实测操作
  17. 岗位po是什么意思_通信公司中PO和PM分别是什么意思?
  18. Altium Designer——PCB绘制
  19. 土地利用覆被变化的概念_土地利用土地覆被变化研究概述
  20. 请问OCP上面有没有证书编号?

热门文章

  1. 文件无法删除 你需要计算机管理员 提供的权限才能对此文件进行更改解决办法
  2. android跑马灯监听,android跑马灯成效
  3. php excel加密,excel工作表加密怎么设置?
  4. HDU 4609 3-idiots (思维+FFT卷积)
  5. oracle_j000,DBA手记:System State转储之ROW CACHE对象
  6. 自定义进度条PictureProgressBar——从开发到开源发布全过程
  7. word文档怎么找回误删的文件_怎样找回误删除的word文件?
  8. flutter从零开发完整好客租房App(已完结)
  9. Python爬虫入门教程 89-100 定个小目标,先用Python爬个一亿B站用户
  10. 神经网络中Epoch、Iteration、Batchsize相关理解和说明